CMS 3D CMS Logo

FittedEntriesManager.cc

Go to the documentation of this file.
00001 //   COCOA class implementation file
00002 //Id:  FittedEntriesManager.cc
00003 //CAT: Model
00004 //
00005 //   History: v1.0 
00006 //   Pedro Arce
00007 #include <map>
00008 #include <fstream>
00009 
00010 #include "Alignment/CocoaAnalysis/interface/FittedEntriesManager.h"
00011 #include "Alignment/CocoaAnalysis/interface/FittedEntriesSet.h"
00012 #include <iostream>
00013 #include <iomanip>
00014 #include "Alignment/CocoaModel/interface/Model.h"
00015 #include "Alignment/CocoaUtilities/interface/ALIUtils.h"
00016 #include "Alignment/CocoaUtilities/interface/GlobalOptionMgr.h"
00017 
00018 FittedEntriesManager* FittedEntriesManager::instance = 0;
00019 
00020 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00021 //@@  Gets the only instance of Model
00022 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00023 FittedEntriesManager* FittedEntriesManager::getInstance()
00024 {
00025   if(!instance) {
00026     instance = new FittedEntriesManager;
00027   }
00028   return instance;
00029 }
00030 
00031 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00032 //@@ add a new set of fitted entries
00033 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00034 void FittedEntriesManager::AddFittedEntriesSet( FittedEntriesSet* fents) 
00035 {
00036   theFittedEntriesSets.push_back( fents );
00037 
00038 }
00039 
00040 
00041 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00042 //@@ dump data to histograms
00043 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00044 //tvoid FittedEntriesManager::WriteHeader()
00045 void FittedEntriesManager::MakeHistos()
00046 {
00047 
00048   //----------- Get 
00049   //----------- Loop entries
00050   //-  vfescite = theFittedEntriesSets.begin(); 
00051   //  std::vector< FittedEntry* > vfe = theFittedEntriesSets.begin()->FittedEntries();
00052   //  std::vector< FittedEntry* >::const_iterator vfecite2;
00053   //-- Number of fitted entries (equal for all Fitted Entries Sets )
00054   if( ALIUtils::debug >= 5) std::cout << "No sets2 " << theFittedEntriesSets.size() << " No ent " << ( ( *(theFittedEntriesSets.begin()) )->FittedEntries() ).size() << std::endl;
00055   std::ofstream fout;
00056   std::ofstream fout2;
00057   fout.open( "fittedEntries.out" );
00058   fout2.open( "longFittedEntries.out" );
00059   //---------- Dump dimensions 
00060   ALIUtils::dumpDimensions( fout );
00061   ALIUtils::dumpDimensions( fout2 );
00062 
00063   AddFittedEntriesSet( new FittedEntriesSet( theFittedEntriesSets ) ); //add a new set that averages all the others
00064 
00065   //---------- Loop sets of entries
00066   std::vector< FittedEntriesSet* >::const_iterator vfescite;
00067   std::vector< FittedEntry* >::const_iterator vfecite;
00068   ALIint jj = 1;
00069   for( vfescite = theFittedEntriesSets.begin(); vfescite != theFittedEntriesSets.end(); vfescite++) {
00070     //---------- Loop entries
00071     if( vfescite == theFittedEntriesSets.begin() ) {
00072     //----- dump entries names if first set 
00073       fout << "  ";
00074       ALIint ii = 0;
00075       for( vfecite = ((*vfescite)->FittedEntries()).begin(); vfecite != ((*vfescite)->FittedEntries()).end(); vfecite++) {
00076         ALIstring filename = createFileName( (*vfecite)->getOptOName(), (*vfecite)->getEntryName() );  
00077         fout << ii << ": " << std::setw(13) << filename << " ";; 
00078         if(ALIUtils::debug >= 3) std::cout << ii << ": " << std::setw(13) << filename << " = " << (*vfecite)->getName() << std::endl; 
00079         if( ALIUtils::debug >= 3) std::cout << filename << " ";
00080         if( ALIUtils::debug >= 3) std::cout << "OPENING FITTED ENTRIES file " << filename << std::endl;
00081         ii++;
00082       }
00083       //      fout << std::setw(17) << "2:-4:";
00084       fout << std::endl;
00085       if( ALIUtils::debug >= 3) std::cout << std::endl;
00086     }
00087 //----- Dump entry set number
00088     fout << jj << " ";
00089     fout2 << jj << " ";
00090 //----- Dump measurements date
00091     GlobalOptionMgr* gomgr = GlobalOptionMgr::getInstance();
00092     if( gomgr->GlobalOptions()["DumpDateInFittedEntries"] >= 1 ) {
00093       fout << (*vfescite)->getDate()  << " " << (*vfescite)->getTime() << " ";
00094       fout2 << (*vfescite)->getDate()  << " " << (*vfescite)->getTime() << " ";
00095     }
00096 
00097     ALIint ii = 0;
00098     for( vfecite = ((*vfescite)->FittedEntries()).begin(); vfecite != ((*vfescite)->FittedEntries()).end(); vfecite++) {
00099       //      std::cout << ii << *vfescite << " FITTEDENTRY: "   << vfecite << " " <<*vfecite << " " << (*vfecite)->Value() << std::endl;
00100       //      if( ii == 2 || ii == 4 ) {
00101       fout << std::setprecision(8) << std::setw(10) << (*vfecite)->getValue() << " " << (*vfecite)->getSigma() << "  ";  
00102       //- fout << std::setw(9) << std::setprecision(6) << (*vfecite)->getValue()  << " +- " << (*vfecite)->getSigma() << "  ";  
00103       //      }
00104       if( ALIUtils::debug >= 3) std::cout << " FITTEDENTRY:" << std::setprecision(5) << std::setw(8) << (*vfecite)->getValue() << " +- " << (*vfecite)->getSigma() << std::endl;  
00105 
00106         ALIstring filename = createFileName( (*vfecite)->getOptOName(), (*vfecite)->getEntryName() );  
00107         fout2 << std::setprecision(8) << std::setw(10) <<  filename<< " " << (*vfecite)->getValue() << " " << (*vfecite)->getSigma() << "  ";  
00108       ii++;
00109     }
00110     //    dumpEntriesSubstraction( fout, *(*vfescite), 2, 4);
00111     fout << std::endl;
00112     fout2 << std::endl;
00113     if( ALIUtils::debug >= 3) std::cout << std::endl;
00114     jj++;
00115   }
00116   fout.close();
00117   fout2.close();
00118 
00119   GetDifferentBetweenLasers();
00120 
00121 }
00122 
00123 #include "Alignment/CocoaModel/interface/LightRay.h"
00124 #include "Alignment/CocoaModel/interface/OpticalObject.h"
00125 
00126 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00127 void FittedEntriesManager::GetDifferentBetweenLasers()
00128 {
00129 
00130   std::vector< OpticalObject* > optoList = Model::OptOList();
00131   std::vector< OpticalObject* >::const_iterator ite;
00132   std::map< ALIstring, LightRay* > lrays;
00133 
00134   for( ite = optoList.begin(); ite != optoList.end(); ite++ ){
00135     if( (*ite)->type() == "laser" ){
00136       LightRay* lightray = new LightRay;  
00137       lightray->startLightRay( *ite );
00138       lrays[(*ite)->parent()->name()] = lightray;
00139     }
00140   }
00141   
00142   std::map< ALIstring, LightRay* >::const_iterator lite1, lite2;
00143   for( lite1 = lrays.begin(); lite1 != lrays.end(); lite1++ ){
00144     lite2 = lite1; lite2++;
00145     for( ; lite2 != lrays.end(); lite2++ ){
00146       if( lite1 == lite2 ) continue;
00147       Hep3Vector dirdiff = ((*lite1).second->direction() - (*lite2).second->direction());
00148       if(ALIUtils::debug >= 0) {
00149         std::cout << "LASER DIFF " << (*lite1).first << " & " << (*lite2).first << " " << dirdiff.mag()*180./M_PI << "o " << dirdiff.mag() << " rad " << dirdiff << std::endl;
00150       
00151         (*lite1).second->dumpData(ALIstring(" laser ") + (*lite1).first );
00152         (*lite2).second->dumpData(ALIstring(" laser ") + (*lite2).first );
00153       }
00154     }
00155    
00156   }
00157 
00158 }
00159 
00160 
00161 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00162 //@@ create file name to dump fitted entries values taking the last name of optoName and the full entryName with space converted to '.'
00163 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00164 ALIstring FittedEntriesManager::createFileName( const ALIstring& optoName, const ALIstring& entryName) 
00165 {
00166   //  std::cout << "in createFileName " << optoName << " " << entryName << std::endl;
00167   ALIstring filename;
00168   //-  std::cout << "o" << optoName << " e " << entryName << std::endl;
00169   /*  ALIint last_slash =  optoName.rfind('/');
00170   ALIint size = optoName.length();
00171   //-   std::cout << last_slash << " " << size << "optoname " << optoName << std::endl;
00172 
00173   filename = optoName.substr( last_slash+1, size );
00174   */
00175   //----- substitute '/' by '.' in opto name
00176   filename = optoName.substr( 2, optoName.size() );  // skip the first 's/'
00177   ALIint slash = -1;
00178   for(;;){
00179     slash =  filename.find('/', slash+1);
00180     if( slash == -1 ) break;
00181     filename[slash] = '.';
00182   }
00183 
00184   //----- Check if there is a ' ' in entry (should not happen now)
00185   ALIint space = entryName.rfind(' ');
00186   filename.append(".");
00187   ALIstring en = entryName;
00188   if( space != -1) en[space] = '_';
00189 
00190   //----- Merge opto and entry names
00191   // now it is not used as filename   filename.append( en + ".out");
00192   filename.append( en);
00193   if( ALIUtils::debug >= 3) std::cout << "filename " << filename << std::endl;
00194 
00195   return filename;
00196 
00197 }
00198 
00199 
00200 
00201 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00202 //@@ create file name to dump fitted entries values taking the last name of optoName and the full entryName with space converted to '-'
00203 // entry1/2 are the entries name including OptO name 
00204 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00205 void FittedEntriesManager::dumpEntriesSubstraction( std::ofstream& fout, FittedEntriesSet& fes, ALIint order1, ALIint order2 )
00206 {
00207   
00208   //---------- Found order of entry1 and entry2 in FittedEntriesSet fes
00209   // (the order will be the same for every FittedEntriesSet
00210   //std::vector< FittedEntriesSet* >::const_iterator vfescite = theFittedEntriesSets.begin();
00211   /* std::vector< FittedEntry* >::const_iterator vfecite;
00212   ALIint order1, order2;
00213   ALIint jj=0;
00214   for( vfecite = (fes.FittedEntries()).begin(); vfecite != (fes.FittedEntries()).end(); vfecite++) {
00215     ALIstring entryTemp = (*vfecite)->OptOName() + "/" + (*vfecite)->EntryName();
00216     if(entryTemp == entry1) order1 = jj;
00217     if(entryTemp == entry2) order2 = jj;
00218     jj++;
00219   }
00220   */
00221 
00222   FittedEntry* fe1 = *((fes.FittedEntries()).begin() + order1);
00223   FittedEntry* fe2 = *((fes.FittedEntries()).begin() + order2);
00224   //-------- Substract values of entry1 and entry2 (with errors)
00225   ALIdouble val1 = fe1->getValue();
00226   ALIdouble val2 = fe2->getValue();
00227   ALIdouble sig1 = fe1->getSigma();
00228   ALIdouble sig2 = fe2->getSigma();
00229   ALIdouble val = val1 - val2;
00230   ALIdouble sig = sqrt( sig1*sig1 + sig2*sig2);
00231   //-  std::cout << "CHECK " << val1 << " "<< val2 << " "<< sig1 << " "<< sig2 << std::endl;
00232   fout << std::setprecision(6) <<std::setw(8) << val << " +- " << sig << "  ";  
00233   if( ALIUtils::debug >= 3) std::cout << " FITTEDENTRY:" << std::setprecision(5) << std::setw(8) << val << " +- " << sig << std::endl;  
00234 
00235   
00236 }
00237 
00238 
00239 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00240 /*void FittedEntriesManager::MakeHistos1()
00241 {
00242 
00243   std::vector< FittedEntriesSet* >::const_iterator vfescite;
00244   std::vector< FittedEntry* >::const_iterator vfecite;
00245   //----------- Get 
00246   //----------- Loop entries
00247   vfescite = theFittedEntriesSets.begin(); 
00248   //  std::vector< FittedEntry* > vfe = theFittedEntriesSets.begin()->FittedEntries();
00249   //  std::vector< FittedEntry* >::const_iterator vfecite2;
00250   ALIint ii;
00251   //-- Number of fitted entries (equal for all Fitted Entries Sets 
00252   ALIint NoFitEnt = ( ( *(theFittedEntriesSets.begin()) )->FittedEntries() ).size();
00253   if( ALIUtils::debug >= 3) std::cout << "No sets1 " << theFittedEntriesSets.size() << " No ent " << NoFitEnt << std::endl;
00254   std::ofstream fout;
00255   ALIint jj;
00256   for( ii = 0; ii < NoFitEnt; ii++) {    
00257     jj = 1;
00258 
00259     for( vfescite = theFittedEntriesSets.begin(); vfescite != theFittedEntriesSets.end(); vfescite++) {
00260       vfecite = ((*vfescite)->FittedEntries()).begin() + ii;
00261       //----- create file name
00262       if( vfescite == theFittedEntriesSets.begin() ) {
00263         if( ALIUtils::debug >= 3) std::cout << " create filename " << (*vfecite)->OptOName() <<  (*vfecite)->EntryName() << std::endl;
00264         ALIstring filename = createFileName( (*vfecite)->OptOName(), (*vfecite)->EntryName() );  
00265         fout.open( filename.c_str() );
00266         if( ALIUtils::debug >= 3) std::cout << "OPENING FITTED ENTRIES file " << filename << std::endl;
00267       }
00268       //      std::cout << ii << *vfescite << " FITTEDENTRY: "   << vfecite << " " <<*vfecite << " " << (*vfecite)->Value() << std::endl;
00269       fout << jj << " " << (*vfecite)->Value()  << (*vfecite)->Sigma() << std::endl;   
00270       if( ALIUtils::debug >= 3) std::cout << ii << " FITTEDENTRY: " << (*vfecite)->OptOName() << " / " << (*vfecite)->EntryName() << " " << (*vfecite)->Value() << " " << (*vfecite)->Sigma() << std::endl;
00271       jj++;
00272     }
00273     fout.close();
00274   }
00275 
00276 }
00277 */
00278 

Generated on Tue Jun 9 17:23:26 2009 for CMSSW by  doxygen 1.5.4