CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/Alignment/CocoaAnalysis/src/FittedEntriesSet.cc

Go to the documentation of this file.
00001 //   COCOA class implementation file
00002 //Id:  FittedEntriesSet.cc
00003 //CAT: Model
00004 //
00005 //   History: v1.0 
00006 //   Pedro Arce
00007 
00008 #include <fstream>
00009 #include <map>
00010 #include "Alignment/CocoaAnalysis/interface/FittedEntriesSet.h"
00011 #include "Alignment/CocoaModel/interface/Model.h"
00012 #include "Alignment/CocoaModel/interface/Measurement.h"
00013 #include "Alignment/CocoaModel/interface/OpticalObject.h"
00014 #include "Alignment/CocoaModel/interface/Entry.h"
00015 
00016 #ifdef MAT_MESCHACH
00017 #include "Alignment/CocoaFit/interface/MatrixMeschach.h"
00018 #endif
00019 //
00020 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00021 FittedEntriesSet::FittedEntriesSet( MatrixMeschach* AtWAMatrix )
00022 {
00023   //- theTime = Model::MeasurementsTime();
00024   theDate = Measurement::getCurrentDate();
00025   theTime = Measurement::getCurrentTime();
00026   
00027   theMinEntryQuality = 2;
00028   theEntriesErrorMatrix = AtWAMatrix;
00029   
00030   Fill();
00031 
00032 }
00033 
00034 
00035 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00036 FittedEntriesSet::FittedEntriesSet( std::vector<ALIstring> wl )
00037 {
00038   //- theTime = Model::MeasurementsTime();
00039   theDate = wl[0];
00040   theTime = "99:99";
00041   
00042   theMinEntryQuality = 2;
00043   theEntriesErrorMatrix = (MatrixMeschach*)0;
00044   
00045   FillEntriesFromFile( wl );
00046 
00047 }
00048 
00049 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00050 FittedEntriesSet::FittedEntriesSet( std::vector<FittedEntriesSet*> vSets )
00051 {
00052   theDate = "99/99/99";
00053   theTime = "99:99";
00054   
00055   theMinEntryQuality = 2;
00056   theEntriesErrorMatrix = (MatrixMeschach*)0;
00057   
00058   FillEntriesAveragingSets( vSets );
00059 
00060 }
00061 
00062 
00063 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00064 void FittedEntriesSet::Fill( )
00065 {
00066 
00067   FillEntries( );
00068   FillCorrelations( );
00069 
00070 }
00071 
00072 
00073 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00074 void FittedEntriesSet::FillEntries()
00075 {
00076   //---------- Store Fitted Entries 
00077   //----- Iterate over entry list
00078   std::vector<Entry*>::const_iterator vecite; 
00079   for ( vecite = Model::EntryList().begin();
00080     vecite != Model::EntryList().end(); vecite++ ) {
00081     //--- Only for good quality parameters (='unk')
00082     if ( (*vecite)->quality() >= theMinEntryQuality ) {
00083       //      ALIdouble dimv =  (*vecite)->ValueDimensionFactor();
00084       //  ALIdouble dims =  (*vecite)->SigmaDimensionFactor();
00085       ALIint ipos = (*vecite)->fitPos();
00086       FittedEntry* fe = new FittedEntry( (*vecite), ipos, sqrt(theEntriesErrorMatrix->Mat()->me[ipos][ipos]));
00087       //-      std::cout << fe << "IN fit FE " << fe->theValue<< " " << fe->Sigma()<< " "  << sqrt(theEntriesErrorMatrix->Mat()->me[NoEnt][NoEnt]) / dims<< std::endl;
00088       theFittedEntries.push_back( fe );
00089     }
00090   }
00091 
00092 }
00093 
00094 
00095 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00096 void FittedEntriesSet::FillCorrelations()
00097 {
00098   //------ Count the number of entries that will be in the set
00099   ALIuint nent = 0;
00100   std::vector<Entry*>::const_iterator vecite;
00101   for ( vecite = Model::EntryList().begin();
00102                  vecite != Model::EntryList().end(); vecite++ ) {
00103     if((*vecite)->quality() > theMinEntryQuality ) {
00104       nent++;
00105     }
00106   }
00107       
00108   CreateCorrelationMatrix( nent );
00109   //---------- Store correlations
00110   ALIuint ii;
00111   for( ii = 0; ii < nent; ii++) {
00112     for(ALIuint jj = ii+1; jj < nent; jj++) {
00113       ALIdouble corr = theEntriesErrorMatrix->Mat()->me[ii][jj];
00114       if (corr != 0) {
00115         corr /= ( sqrt(theEntriesErrorMatrix->Mat()->me[ii][ii])
00116           / sqrt(theEntriesErrorMatrix->Mat()->me[jj][jj]) );
00117         theCorrelationMatrix[ii][jj] = corr;
00118       }
00119     }
00120   }
00121 
00122 }
00123 
00124 
00125 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00126 void FittedEntriesSet::CreateCorrelationMatrix( const ALIuint nent )
00127 {
00128 
00129   std::vector<ALIdouble> vd( nent, 0.);
00130   std::vector< std::vector<ALIdouble> > vvd( nent, vd);
00131   theCorrelationMatrix = vvd;
00132 
00133 }
00134 
00135 
00136 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00137 void FittedEntriesSet::FillEntriesFromFile( std::vector<ALIstring> wl)
00138 {
00139 
00140   ALIuint siz = wl.size();
00141   for( ALIuint ii = 1; ii< siz; ii+=3 ) {
00142     FittedEntry* fe = new FittedEntry( wl[ii], ALIUtils::getFloat(wl[ii+1]), ALIUtils::getFloat(wl[ii+2]));
00143     theFittedEntries.push_back( fe );
00144   }
00145 
00146 }
00147 
00148 
00149 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00150 void FittedEntriesSet::FillEntriesAveragingSets( std::vector<FittedEntriesSet*> vSets )
00151 {
00152 
00153   std::vector<FittedEntry*> vFEntry;
00154   ALIuint nEntry = vSets[0]->FittedEntries().size();
00155   //  ALIuint setssiz = vSets.size();
00156   for( ALIuint ii = 0; ii < nEntry; ii++ ){  // loop to FittedEntry's
00157     if(ALIUtils::debug >= 5) std::cout << "FillEntriesAveragingSets entry " << ii << std::endl;
00158     vFEntry.clear();
00159     for( ALIuint jj = 0; jj < vSets.size(); jj++ ){  // look for FittedEntry ii in each Sets
00160      if(ALIUtils::debug >= 5) std::cout << "FillEntriesAveragingSets set " << jj << std::endl;
00161       //----- Check all have the same number of entries
00162       if( vSets[jj]->FittedEntries().size() != nEntry ){
00163         std::cerr << "!!! FATAL ERROR FittedEntriesSet::FillEntriesAveragingSets  set number " << jj 
00164                   << " has different number of entries = " 
00165                   << vSets[jj]->FittedEntries().size() 
00166                   << " than first set = " << nEntry << std::endl;
00167         exit(1);
00168       }
00169       
00170       vFEntry.push_back( vSets[jj]->FittedEntries()[ii] );
00171     }
00172    FittedEntry* fe = new FittedEntry( vFEntry );
00173    if(ALIUtils::debug >= 5) std::cout << "FillEntriesAveragingSets new fentry " << fe->getValue() << " " << fe->getSigma() << std::endl;
00174    theFittedEntries.push_back( fe );
00175   }
00176 
00177 
00178 }
00179 
00180 
00181 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
00182 void FittedEntriesSet::SetOptOEntries()
00183 {
00184   if(ALIUtils::debug >= 5) std::cout << "  FittedEntriesSet::SetOptOEntries " << theFittedEntries.size() << std::endl;
00185 
00186   std::vector< FittedEntry* >::const_iterator ite;
00187   for( ite = theFittedEntries.begin();ite != theFittedEntries.end();ite++){
00188     FittedEntry* fe = (*ite);
00189     OpticalObject * opto = Model::getOptOByName( fe->getOptOName() );
00190     Entry* entry = Model::getEntryByName( fe->getOptOName(), fe->getEntryName() );
00191     entry->setValue( fe->getValue() );
00192     entry->setSigma( fe->getSigma() );
00193 
00194    if(ALIUtils::debug >= 5) std::cout << "  FittedEntriesSet::SetOptOEntries() " << opto->name() << " " << entry->name() << std::endl;
00195     opto->setGlobalCoordinates();
00196     opto->setOriginalEntryValues();
00197  }
00198 }