CMS 3D CMS Logo

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