CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/CalibCalorimetry/EcalTrivialCondModules/src/EcalTrivialObjectAnalyzer.cc

Go to the documentation of this file.
00001 //
00002 // $Id: EcalTrivialObjectAnalyzer.cc,v 1.22 2009/05/27 11:20:56 fabiocos Exp $
00003 // Created: 2 Mar 2006
00004 //          Shahram Rahatlou, University of Rome & INFN
00005 //
00006 #include "CalibCalorimetry/EcalTrivialCondModules/interface/EcalTrivialObjectAnalyzer.h"
00007 
00008 #include <stdexcept>
00009 #include <string>
00010 #include <iostream>
00011 #include <iomanip>
00012 #include <map>
00013 #include <vector>
00014 #include "FWCore/Framework/interface/ESHandle.h"
00015 
00016 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00017 
00018 #include "CondFormats/EcalObjects/interface/EcalPedestals.h"
00019 #include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h"
00020 
00021 #include "CondFormats/EcalObjects/interface/EcalXtalGroupId.h"
00022 #include "CondFormats/EcalObjects/interface/EcalWeightXtalGroups.h"
00023 #include "CondFormats/DataRecord/interface/EcalWeightXtalGroupsRcd.h"
00024 
00025 #include "CondFormats/EcalObjects/interface/EcalWeightSet.h"
00026 #include "CondFormats/EcalObjects/interface/EcalTBWeights.h"
00027 #include "CondFormats/DataRecord/interface/EcalTBWeightsRcd.h"
00028 
00029 #include "CondFormats/EcalObjects/interface/EcalIntercalibConstants.h"
00030 #include "CondFormats/DataRecord/interface/EcalIntercalibConstantsRcd.h"
00031 
00032 #include "CondFormats/EcalObjects/interface/EcalIntercalibErrors.h"
00033 #include "CondFormats/DataRecord/interface/EcalIntercalibErrorsRcd.h"
00034 
00035 #include "CondFormats/EcalObjects/interface/EcalTimeCalibConstants.h"
00036 #include "CondFormats/DataRecord/interface/EcalTimeCalibConstantsRcd.h"
00037 
00038 #include "CondFormats/EcalObjects/interface/EcalTimeCalibErrors.h"
00039 #include "CondFormats/DataRecord/interface/EcalTimeCalibErrorsRcd.h"
00040 
00041 #include "CondFormats/EcalObjects/interface/EcalMGPAGainRatio.h"
00042 #include "CondFormats/EcalObjects/interface/EcalGainRatios.h"
00043 #include "CondFormats/DataRecord/interface/EcalGainRatiosRcd.h"
00044 
00045 #include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h"
00046 #include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h"
00047 
00048 #include "CondFormats/EcalObjects/interface/EcalLaserAlphas.h"
00049 #include "CondFormats/DataRecord/interface/EcalLaserAlphasRcd.h"
00050  
00051 #include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatiosRef.h"
00052 #include "CondFormats/DataRecord/interface/EcalLaserAPDPNRatiosRefRcd.h"
00053  
00054 #include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatios.h"
00055 #include "CondFormats/DataRecord/interface/EcalLaserAPDPNRatiosRcd.h"
00056 
00057 #include "CondFormats/EcalObjects/interface/EcalClusterLocalContCorrParameters.h"
00058 #include "CondFormats/DataRecord/interface/EcalClusterLocalContCorrParametersRcd.h"
00059 #include "CondFormats/EcalObjects/interface/EcalClusterCrackCorrParameters.h"
00060 #include "CondFormats/DataRecord/interface/EcalClusterCrackCorrParametersRcd.h"
00061 #include "CondFormats/EcalObjects/interface/EcalClusterEnergyCorrectionParameters.h"
00062 #include "CondFormats/DataRecord/interface/EcalClusterEnergyCorrectionParametersRcd.h"
00063 #include "CondFormats/EcalObjects/interface/EcalClusterEnergyUncertaintyParameters.h"
00064 #include "CondFormats/DataRecord/interface/EcalClusterEnergyUncertaintyParametersRcd.h"
00065 
00066 #include "CondFormats/EcalObjects/interface/EcalChannelStatus.h"
00067 #include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h"
00068 
00069 #include "CLHEP/Matrix/Matrix.h"
00070 
00071 using namespace std;
00072 
00073 void EcalTrivialObjectAnalyzer::analyze(const edm::Event& e, const edm::EventSetup& context)
00074 {
00075     using namespace edm::eventsetup;
00076     // Context is not used.
00077     std::cout <<">>> EcalTrivialObjectAnalyzer: processing run "<<e.id().run() << " event: " << e.id().event() << std::endl;
00078 
00079     edm::ESHandle<EcalPedestals> pPeds;
00080     context.get<EcalPedestalsRcd>().get(pPeds);
00081 
00082     // ADC -> GeV Scale
00083     edm::ESHandle<EcalADCToGeVConstant> pAgc;
00084     context.get<EcalADCToGeVConstantRcd>().get(pAgc);
00085     const EcalADCToGeVConstant* agc = pAgc.product();
00086     std::cout << "Global ADC->GeV scale: EB " << std::setprecision(6) << agc->getEBValue() << " GeV/ADC count" 
00087               " EE " << std::setprecision(6) << agc->getEEValue() << " GeV/ADC count" << std::endl;
00088 
00089     // use a channel to fetch values from DB
00090     double r1 = (double)std::rand()/( double(RAND_MAX)+double(1) );
00091     int ieta =  int( 1 + r1*85 );
00092     r1 = (double)std::rand()/( double(RAND_MAX)+double(1) );
00093     int iphi =  int( 1 + r1*20 );
00094 
00095     EBDetId ebid(ieta,iphi); //eta,phi
00096     std::cout << "EcalTrivialObjectAnalyzer: using EBDetId: " << ebid << std::endl;
00097 
00098     const EcalPedestals* myped=pPeds.product();
00099     EcalPedestals::const_iterator it = myped->find(ebid.rawId());
00100     if( it!=myped->end() ){
00101       std::cout << "EcalPedestal: "
00102                 << "  mean_x1:  " << std::setprecision(8) << (*it).mean_x1 << " rms_x1: " << (*it).rms_x1
00103                 << "  mean_x6:  " <<(*it).mean_x6 << " rms_x6: " << (*it).rms_x6
00104                 << "  mean_x12: " <<(*it).mean_x12 << " rms_x12: " << (*it).rms_x12
00105                 << std::endl;
00106     } else {
00107      std::cout << "No pedestal found for this xtal! something wrong with EcalPedestals in your DB? "
00108                << std::endl;
00109     }
00110 
00111     // fetch map of groups of xtals
00112     edm::ESHandle<EcalWeightXtalGroups> pGrp;
00113     context.get<EcalWeightXtalGroupsRcd>().get(pGrp);
00114     const EcalWeightXtalGroups* grp = pGrp.product();
00115 
00116     EcalXtalGroupsMap::const_iterator git = grp->getMap().find( ebid.rawId() );
00117     EcalXtalGroupId gid;
00118     if( git != grp->getMap().end() ) {
00119       std::cout << "XtalGroupId.id() = " << std::setprecision(3) << (*git).id() << std:: endl;
00120       gid = (*git);
00121     } else {
00122       std::cout << "No group id found for this crystal. something wrong with EcalWeightXtalGroups in your DB?"
00123                 << std::endl;
00124    }
00125 
00126     // Gain Ratios
00127     edm::ESHandle<EcalGainRatios> pRatio;
00128     context.get<EcalGainRatiosRcd>().get(pRatio);
00129     const EcalGainRatios* gr = pRatio.product();
00130 
00131     EcalGainRatioMap::const_iterator grit=gr->getMap().find(ebid.rawId());
00132     EcalMGPAGainRatio mgpa;
00133     if( grit!=gr->getMap().end() ){
00134       mgpa = (*grit);
00135 
00136       std::cout << "EcalMGPAGainRatio: "
00137                 << "gain 12/6 :  " << std::setprecision(4) << mgpa.gain12Over6() << " gain 6/1: " << mgpa.gain6Over1()
00138                 << std::endl;
00139     } else {
00140      std::cout << "No MGPA Gain Ratio found for this xtal! something wrong with EcalGainRatios in your DB? "
00141                << std::endl;
00142     }
00143 
00144     // Intercalib constants
00145     edm::ESHandle<EcalIntercalibConstants> pIcal;
00146     context.get<EcalIntercalibConstantsRcd>().get(pIcal);
00147     const EcalIntercalibConstants* ical = pIcal.product();
00148 
00149     EcalIntercalibConstantMap::const_iterator icalit=ical->getMap().find(ebid.rawId());
00150     EcalIntercalibConstant icalconst;
00151     if( icalit!=ical->getMap().end() ){
00152       icalconst = (*icalit);
00153 
00154       std::cout << "EcalIntercalibConstant: "
00155                 <<std::setprecision(6)
00156                 << icalconst
00157                 << std::endl;
00158     } else {
00159      std::cout << "No intercalib const found for this xtal! something wrong with EcalIntercalibConstants in your DB? "
00160                << std::endl;
00161     }
00162 
00163     // Intercalib errors
00164     edm::ESHandle<EcalIntercalibErrors> pIcalErr;
00165     context.get<EcalIntercalibErrorsRcd>().get(pIcalErr);
00166     const EcalIntercalibErrors* icalErr = pIcalErr.product();
00167 
00168     EcalIntercalibErrorMap::const_iterator icalitErr=icalErr->getMap().find(ebid.rawId());
00169     EcalIntercalibError icalconstErr;
00170     if( icalitErr!=icalErr->getMap().end() ){
00171       icalconstErr = (*icalitErr);
00172 
00173       std::cout << "EcalIntercalibError: "
00174                 <<std::setprecision(6)
00175                 << icalconstErr
00176                 << std::endl;
00177     } else {
00178      std::cout << "No intercalib const found for this xtal! something wrong with EcalIntercalibErrors in your DB? "
00179                << std::endl;
00180     }
00181 
00182 
00183 
00184     { // quick and dirty for cut and paste ;) it is a test program...
00185             // TimeCalib constants
00186             edm::ESHandle<EcalTimeCalibConstants> pIcal;
00187             context.get<EcalTimeCalibConstantsRcd>().get(pIcal);
00188             const EcalTimeCalibConstants* ical = pIcal.product();
00189 
00190             EcalTimeCalibConstantMap::const_iterator icalit=ical->getMap().find(ebid.rawId());
00191             EcalTimeCalibConstant icalconst;
00192             if( icalit!=ical->getMap().end() ){
00193                     icalconst = (*icalit);
00194 
00195                     std::cout << "EcalTimeCalibConstant: "
00196                             <<std::setprecision(6)
00197                             << icalconst
00198                             << std::endl;
00199             } else {
00200                     std::cout << "No intercalib const found for this xtal! something wrong with EcalTimeCalibConstants in your DB? "
00201                             << std::endl;
00202             }
00203 
00204             // TimeCalib errors
00205             edm::ESHandle<EcalTimeCalibErrors> pIcalErr;
00206             context.get<EcalTimeCalibErrorsRcd>().get(pIcalErr);
00207             const EcalTimeCalibErrors* icalErr = pIcalErr.product();
00208 
00209             EcalTimeCalibErrorMap::const_iterator icalitErr=icalErr->getMap().find(ebid.rawId());
00210             EcalTimeCalibError icalconstErr;
00211             if( icalitErr!=icalErr->getMap().end() ){
00212                     icalconstErr = (*icalitErr);
00213 
00214                     std::cout << "EcalTimeCalibError: "
00215                             <<std::setprecision(6)
00216                             << icalconstErr
00217                             << std::endl;
00218             } else {
00219                     std::cout << "No intercalib const found for this xtal! something wrong with EcalTimeCalibErrors in your DB? "
00220                             << std::endl;
00221             }
00222     }
00223 
00224 
00225 
00226    // fetch TB weights
00227    std::cout <<"Fetching EcalTBWeights from DB " << std::endl;
00228    edm::ESHandle<EcalTBWeights> pWgts;
00229    context.get<EcalTBWeightsRcd>().get(pWgts);
00230    const EcalTBWeights* wgts = pWgts.product();
00231    std::cout << "EcalTBWeightMap.size(): " << std::setprecision(3) << wgts->getMap().size() << std::endl;
00232 
00233 
00234    // look up the correct weights for this  xtal
00235    //EcalXtalGroupId gid( (*git) );
00236    EcalTBWeights::EcalTDCId tdcid(1);
00237 
00238    std::cout << "Lookup EcalWeightSet for groupid: " << std::setprecision(3) 
00239              << gid.id() << " and TDC id " << tdcid << std::endl;
00240    EcalTBWeights::EcalTBWeightMap::const_iterator wit = wgts->getMap().find( std::make_pair(gid,tdcid) );
00241    EcalWeightSet  wset;
00242    if( wit != wgts->getMap().end() ) {
00243       wset = wit->second;
00244       std::cout << "check size of data members in EcalWeightSet" << std::endl;
00245       //wit->second.print(std::cout);
00246 
00247 
00248       //typedef std::vector< std::vector<EcalWeight> > EcalWeightMatrix;
00249       const EcalWeightSet::EcalWeightMatrix& mat1 = wit->second.getWeightsBeforeGainSwitch();
00250       const EcalWeightSet::EcalWeightMatrix& mat2 = wit->second.getWeightsAfterGainSwitch();
00251 
00252 //       std::cout << "WeightsBeforeGainSwitch.size: " << mat1.size()
00253 //                 << ", WeightsAfterGainSwitch.size: " << mat2.size() << std::endl;
00254 
00255 
00256       CLHEP::HepMatrix clmat1(3,10,0);
00257       CLHEP::HepMatrix clmat2(3,10,0);
00258       for(int irow=0; irow<3; irow++) {
00259        for(int icol=0; icol<10; icol++) {
00260          clmat1[irow][icol] = mat1(irow,icol);
00261          clmat2[irow][icol] = mat2(irow,icol);
00262        }
00263      }
00264      std::cout << "weight matrix before gain switch:" << std::endl;
00265      std::cout << clmat1 << std::endl;
00266      std::cout << "weight matrix after gain switch:" << std::endl;
00267      std::cout << clmat2 << std::endl;
00268 
00269    } else {
00270      std::cout << "No weights found for EcalGroupId: " << gid.id() << " and  EcalTDCId: " << tdcid << std::endl;
00271   }
00272 
00273    // cluster functions/corrections
00274    edm::ESHandle<EcalClusterLocalContCorrParameters> pLocalCont;
00275    context.get<EcalClusterLocalContCorrParametersRcd>().get(pLocalCont);
00276    const EcalClusterLocalContCorrParameters* paramLocalCont = pLocalCont.product();
00277    std::cout << "LocalContCorrParameters:";
00278    for ( EcalFunctionParameters::const_iterator it = paramLocalCont->params().begin(); it != paramLocalCont->params().end(); ++it ) {
00279            std::cout << " " << *it;
00280    }
00281    std::cout << "\n";
00282    edm::ESHandle<EcalClusterCrackCorrParameters> pCrack;
00283    context.get<EcalClusterCrackCorrParametersRcd>().get(pCrack);
00284    const EcalClusterCrackCorrParameters* paramCrack = pCrack.product();
00285    std::cout << "CrackCorrParameters:";
00286    for ( EcalFunctionParameters::const_iterator it = paramCrack->params().begin(); it != paramCrack->params().end(); ++it ) {
00287            std::cout << " " << *it;
00288    }
00289    std::cout << "\n";
00290    edm::ESHandle<EcalClusterEnergyCorrectionParameters> pEnergyCorrection;
00291    context.get<EcalClusterEnergyCorrectionParametersRcd>().get(pEnergyCorrection);
00292    const EcalClusterEnergyCorrectionParameters* paramEnergyCorrection = pEnergyCorrection.product();
00293    std::cout << "EnergyCorrectionParameters:";
00294    for ( EcalFunctionParameters::const_iterator it = paramEnergyCorrection->params().begin(); it != paramEnergyCorrection->params().end(); ++it ) {
00295            std::cout << " " << *it;
00296    }
00297    std::cout << "\n";
00298    edm::ESHandle<EcalClusterEnergyUncertaintyParameters> pEnergyUncertainty;
00299    context.get<EcalClusterEnergyUncertaintyParametersRcd>().get(pEnergyUncertainty);
00300    const EcalClusterEnergyUncertaintyParameters* paramEnergyUncertainty = pEnergyUncertainty.product();
00301    std::cout << "EnergyCorrectionParameters:";
00302    for ( EcalFunctionParameters::const_iterator it = paramEnergyUncertainty->params().begin(); it != paramEnergyUncertainty->params().end(); ++it ) {
00303            std::cout << " " << *it;
00304    }
00305    std::cout << "\n";
00306 
00307 
00308    // laser correction
00309    
00310    // laser alphas
00311    edm::ESHandle<EcalLaserAlphas> pAlpha; 
00312    context.get<EcalLaserAlphasRcd>().get(pAlpha);
00313    const EcalLaserAlphas* lalpha = pAlpha.product();
00314    
00315    EcalLaserAlphaMap::const_iterator lalphait;
00316    lalphait = lalpha->getMap().find(ebid.rawId());
00317    if( lalphait!=lalpha->getMap().end() ){
00318      std::cout << "EcalLaserAlpha: "
00319                <<std::setprecision(6)
00320                << (*lalphait)
00321                << std::endl;
00322    } else {
00323      std::cout << "No laser alpha found for this xtal! something wrong with EcalLaserAlphas in your DB? "
00324                << std::endl;
00325    }
00326 
00327    // laser apdpnref
00328    edm::ESHandle<EcalLaserAPDPNRatiosRef> pAPDPNRatiosRef;          
00329    context.get<EcalLaserAPDPNRatiosRefRcd>().get(pAPDPNRatiosRef);  
00330    const EcalLaserAPDPNRatiosRef* lref = pAPDPNRatiosRef.product(); 
00331    
00332    EcalLaserAPDPNRatiosRef::const_iterator lrefit;
00333    lrefit = lref->getMap().find(ebid.rawId());
00334    if( lrefit!=lref->getMap().end() ){
00335      std::cout << "EcalLaserAPDPNRatiosRef: "
00336                <<std::setprecision(6)
00337                << (*lrefit)
00338                << std::endl;
00339    } else {
00340      std::cout << "No laser apd/pn ref found for this xtal! something wrong with EcalLaserAPDPNRatiosRef in your DB? "
00341                << std::endl;
00342    }
00343 
00344    // laser apdpn ratios 
00345    edm::ESHandle<EcalLaserAPDPNRatios> pAPDPNRatios;          
00346    context.get<EcalLaserAPDPNRatiosRcd>().get(pAPDPNRatios);  
00347    const EcalLaserAPDPNRatios* lratio = pAPDPNRatios.product();
00348 
00349    EcalLaserAPDPNRatios::EcalLaserAPDPNRatiosMap::const_iterator lratioit; 
00350    lratioit = lratio->getLaserMap().find(ebid.rawId());
00351    EcalLaserAPDPNRatios::EcalLaserAPDPNpair lratioconst;
00352    
00353    if( lratioit!=lratio->getLaserMap().end() ){
00354      lratioconst = (*lratioit);
00355      
00356      std::cout << "EcalLaserAPDPNRatios: "
00357        //              <<e.id().run() << " " << e.id().event() << " " 
00358                << std::setprecision(6)
00359                << lratioconst.p1 << " " << lratioconst.p2
00360                << std::endl;
00361    } else {
00362      std::cout << "No laser apd/pn ratio found for this xtal! something wrong with EcalLaserAPDPNRatios in your DB? "
00363                << std::endl;
00364    }
00365 
00366    // laser timestamps
00367    EcalLaserAPDPNRatios::EcalLaserTimeStamp ltimestamp;
00368    EcalLaserAPDPNRatios::EcalLaserTimeStampMap::const_iterator ltimeit;
00369    for (int i=1; i<=92; i++) {     
00370      ltimestamp = lratio->getTimeMap()[i];
00371      std::cout << "i = " << std::setprecision(6) << i
00372              << ltimestamp.t1.value() << " " << ltimestamp.t2.value() << " : " ;
00373    }
00374    std::cout << "Tests finihed." << std::endl;
00375 
00376    // channel status
00377    edm::ESHandle<EcalChannelStatus> pChannelStatus;
00378    context.get<EcalChannelStatusRcd>().get(pChannelStatus);
00379    const EcalChannelStatus *ch_status = pChannelStatus.product();
00380 
00381    EcalChannelStatusMap::const_iterator chit;
00382    chit = ch_status->getMap().find(ebid.rawId());
00383    if( chit != ch_status->getMap().end() ){
00384            EcalChannelStatusCode ch_code = (*chit);
00385            std::cout << "EcalChannelStatus: "
00386                    <<std::setprecision(6)
00387                    << ch_code.getStatusCode()
00388                    << std::endl;
00389    } else {
00390            std::cout << "No channel status found for this xtal! something wrong with EcalChannelStatus in your DB? "
00391                    << std::endl;
00392    }
00393 
00394 
00395    // laser transparency correction
00396    
00397 
00398 /*
00399     std::cout << "make CLHEP matrices from vector<vector<Ecalweight>>" << std::endl;
00400     CLHEP::HepMatrix clmat1(3,8,0);
00401     CLHEP::HepMatrix clmat2(3,8,0);
00402     for(int irow=0; irow<3; irow++) {
00403      for(int icol=0; icol<8; icol++) {
00404        clmat1[irow][icol] = (mat1[irow])[icol]();
00405        clmat2[irow][icol] = (mat2[irow])[icol]();
00406      }
00407    }
00408    std::cout << clmat1 << std::endl;
00409    std::cout << clmat2 << std::endl;
00410 */
00411 
00412 } //end of ::Analyze()
00413   //DEFINE_FWK_MODULE(EcalTrivialObjectAnalyzer);