CMS 3D CMS Logo

EcalAnalFitUncalibRecHitProducer.cc

Go to the documentation of this file.
00001 
00010 #include "RecoLocalCalo/EcalRecProducers/interface/EcalAnalFitUncalibRecHitProducer.h"
00011 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00012 #include "DataFormats/EcalDigi/interface/EBDataFrame.h"
00013 #include "DataFormats/EcalDigi/interface/EEDataFrame.h"
00014 #include "DataFormats/EcalDigi/interface/EcalMGPASample.h"
00015 #include "DataFormats/Common/interface/Handle.h"
00016 
00017 #include <iostream>
00018 #include <cmath>
00019 
00020 #include "FWCore/Framework/interface/ESHandle.h"
00021 
00022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00023 
00024 //#include "CondFormats/EcalObjects/interface/EcalPedestals.h"
00025 //#include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h"
00026 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
00027 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00028 
00029 //#include "CLHEP/Matrix/Matrix.h"
00030 //#include "CLHEP/Matrix/SymMatrix.h"
00031 #include <vector>
00032 
00033 #include "CondFormats/EcalObjects/interface/EcalPedestals.h"
00034 #include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h"
00035 
00036 #include "CondFormats/EcalObjects/interface/EcalMGPAGainRatio.h"
00037 #include "CondFormats/EcalObjects/interface/EcalGainRatios.h"
00038 #include "CondFormats/DataRecord/interface/EcalGainRatiosRcd.h"
00039 
00040 EcalAnalFitUncalibRecHitProducer::EcalAnalFitUncalibRecHitProducer(const edm::ParameterSet& ps) {
00041 
00042    EBdigiCollection_ = ps.getParameter<edm::InputTag>("EBdigiCollection");
00043    EEdigiCollection_ = ps.getParameter<edm::InputTag>("EEdigiCollection");
00044    EBhitCollection_  = ps.getParameter<std::string>("EBhitCollection");
00045    EEhitCollection_  = ps.getParameter<std::string>("EEhitCollection");
00046    //   nMaxPrintout_   = ps.getUntrackedParameter<int>("nMaxPrintout",10);
00047    produces< EBUncalibratedRecHitCollection >(EBhitCollection_);
00048    produces< EEUncalibratedRecHitCollection >(EEhitCollection_);
00049    //   nEvt_ = 0; // reset local event counter
00050 }
00051 
00052 EcalAnalFitUncalibRecHitProducer::~EcalAnalFitUncalibRecHitProducer() {
00053 }
00054 
00055 void
00056 EcalAnalFitUncalibRecHitProducer::produce(edm::Event& evt, const edm::EventSetup& es) {
00057 
00058    using namespace edm;
00059 
00060    //   nEvt_++;
00061 
00062    Handle< EBDigiCollection > pEBDigis;
00063    Handle< EEDigiCollection > pEEDigis;
00064 
00065    const EBDigiCollection* EBdigis =0;
00066    const EEDigiCollection* EEdigis =0;
00067    
00068    if ( EBdigiCollection_.label() != "" && EBdigiCollection_.instance() != "" ) {
00069      evt.getByLabel( EBdigiCollection_, pEBDigis);
00070      //evt.getByLabel( digiProducer_, pEBDigis);
00071      if (pEBDigis.isValid()) {
00072              EBdigis = pEBDigis.product(); // get a ptr to the produc
00073              edm::LogInfo("EcalUncalibRecHitInfo") << "EcalAnalFitUncalibRecHitProducer: total # EBdigis: " << EBdigis->size() ;
00074      } else {
00075              edm::LogError("EcalUncalibRecHitError") << "Error! can't get the product " << EBdigiCollection_;
00076      }
00077    }
00078 
00079    if ( EEdigiCollection_.label() != "" && EEdigiCollection_.instance() != "" ) {
00080            evt.getByLabel( EEdigiCollection_, pEEDigis);
00081            //evt.getByLabel( digiProducer_, pEEDigis);
00082            if (pEEDigis.isValid()) {
00083                    EEdigis = pEEDigis.product(); // get a ptr to the product
00084                    edm::LogInfo("EcalUncalibRecHitInfo") << "EcalAnalFitUncalibRecHitProducer: total # EEdigis: " << EEdigis->size() ;
00085            } else {
00086                    edm::LogError("EcalUncalibRecHitError") << "Error! can't get the product " << EEdigiCollection_;
00087            }
00088    }
00089 
00090    // Gain Ratios
00091    LogDebug("EcalUncalibRecHitDebug") << "fetching gainRatios....";
00092    edm::ESHandle<EcalGainRatios> pRatio;
00093    es.get<EcalGainRatiosRcd>().get(pRatio);
00094    //const EcalGainRatios::EcalGainRatioMap& gainMap = pRatio.product()->getMap(); // map of gain ratios
00095    const EcalGainRatioMap & gainMap = pRatio.product()->getMap(); // map of gain ratios
00096 
00097 
00098    // fetch the pedestals from the cond DB via EventSetup
00099    LogDebug("EcalUncalibRecHitDebug") << "fetching pedestals....";
00100    edm::ESHandle<EcalPedestals> pedHandle;
00101    es.get<EcalPedestalsRcd>().get( pedHandle );
00102    //const EcalPedestalsMap & pedMap = pedHandle.product()->m_pedestals; // map of pedestals
00103    const EcalPedestalsMap & pedMap = pedHandle.product()->getMap(); // map of pedestals
00104    LogDebug("EcalUncalibRecHitDebug") << "done." ;
00105 
00106 //    if(!counterExceeded()) 
00107 //      {
00108 
00109 
00110 //      }
00111 
00112 
00113    // collection of reco'ed ampltudes to put in the event
00114 
00115    std::auto_ptr< EBUncalibratedRecHitCollection > EBuncalibRechits( new EBUncalibratedRecHitCollection );
00116    std::auto_ptr< EEUncalibratedRecHitCollection > EEuncalibRechits( new EEUncalibratedRecHitCollection );
00117 
00118    EcalPedestalsMapIterator pedIter; // pedestal iterator
00119    EcalPedestals::Item aped; // pedestal object for a single xtal
00120 
00121    EcalGainRatioMap::const_iterator gainIter; // gain iterator
00122    EcalMGPAGainRatio aGain; // gain object for a single xtal
00123 
00124    if (EBdigis)
00125      {
00126        for(EBDigiCollection::const_iterator itdg = EBdigis->begin(); itdg != EBdigis->end(); ++itdg) {
00127 
00128          // find pedestals for this channel
00129          LogDebug("EcalUncalibRecHitDebug") << "looking up pedestal for crystal: " << EBDetId(itdg->id()) ;
00130          pedIter = pedMap.find(itdg->id());
00131          if( pedIter != pedMap.end() ) {
00132            aped = (*pedIter);
00133          } else {
00134            edm::LogError("EcalUncalibRecHitError") << "error!! could not find pedestals for channel: " << EBDetId(itdg->id()) 
00135                                                    << "\n  no uncalib rechit will be made for this digi!"
00136              ;
00137            continue;
00138          }
00139          double pedVec[3];
00140          pedVec[0]=aped.mean_x12;pedVec[1]=aped.mean_x6;pedVec[2]=aped.mean_x1;
00141 
00142 
00143          // find gain ratios
00144          LogDebug("EcalUncalibRecHitDebug") << "looking up gainRatios for crystal: " << EBDetId(itdg->id()) ;
00145          gainIter = gainMap.find(itdg->id());
00146          if( gainIter != gainMap.end() ) {
00147            aGain = (*gainIter);
00148          } else {
00149            edm::LogError("EcalUncalibRecHitError") << "error!! could not find gain ratios for channel: " << EBDetId(itdg->id()) 
00150                                                    << "\n  no uncalib rechit will be made for this digi!"
00151              ;
00152            continue;
00153          }
00154          double gainRatios[3];
00155          gainRatios[0]=1.;gainRatios[1]=aGain.gain12Over6();gainRatios[2]=aGain.gain6Over1()*aGain.gain12Over6();
00156 
00157          EcalUncalibratedRecHit aHit =
00158            EBalgo_.makeRecHit(*itdg, pedVec, gainRatios, 0 ,0);
00159 
00160          EBuncalibRechits->push_back( aHit );
00161          
00162          if(aHit.amplitude()>0.) {
00163            LogDebug("EcalUncalibRecHitInfo") << "EcalAnalFitUncalibRecHitProducer: processed EBDataFrame with id: "
00164                                              << EBDetId(itdg->id()) << "\n"
00165                                              << "uncalib rechit amplitude: " << aHit.amplitude()
00166              ;
00167          }
00168          
00169        }
00170      }
00171 
00172    if (EEdigis)
00173      {
00174        for(EEDigiCollection::const_iterator itdg = EEdigis->begin(); itdg != EEdigis->end(); ++itdg) {
00175 
00176          // find pedestals for this channel
00177          LogDebug("EcalUncalibRecHitDebug") << "looking up pedestal for crystal: " << EEDetId(itdg->id()) ;
00178          pedIter = pedMap.find(itdg->id());
00179          if( pedIter != pedMap.end() ) {
00180            aped = (*pedIter);
00181          } else {
00182            edm::LogError("EcalUncalibRecHitError") << "error!! could not find pedestals for channel: " << EEDetId(itdg->id())
00183                                                    << "\n  no uncalib rechit will be made for this digi!"
00184              ;
00185            continue;
00186          }
00187          double pedVec[3];
00188          pedVec[0]=aped.mean_x12;pedVec[1]=aped.mean_x6;pedVec[2]=aped.mean_x1;
00189 
00190          // find gain ratios
00191          LogDebug("EcalUncalibRecHitDebug") << "looking up gainRatios for crystal: " << EEDetId(itdg->id()) ;
00192          gainIter = gainMap.find(itdg->id());
00193          if( gainIter != gainMap.end() ) {
00194            aGain = (*gainIter);
00195          } else {
00196            edm::LogError("EcalUncalibRecHitError") << "error!! could not find gain ratios for channel: " << EEDetId(itdg->id())
00197                                                    << "\n  no uncalib rechit will be made for this digi!"
00198              ;
00199            continue;
00200          }
00201          double gainRatios[3];
00202          gainRatios[0]=1.;gainRatios[1]=aGain.gain12Over6();gainRatios[2]=aGain.gain6Over1()*aGain.gain12Over6();
00203          
00204          EcalUncalibratedRecHit aHit =
00205            EEalgo_.makeRecHit(*itdg, pedVec, gainRatios, 0, 0);
00206          EEuncalibRechits->push_back( aHit );
00207          
00208          if(aHit.amplitude()>0.) {
00209            LogDebug("EcalUncalibRecHitInfo") << "EcalAnalFitUncalibRecHitProducer: processed EEDataFrame with id: "
00210                                              << EEDetId(itdg->id()) << "\n"
00211                                              << "uncalib rechit amplitude: " << aHit.amplitude()
00212              ;
00213          }
00214          
00215        }
00216      }
00217 
00218    // put the collection of recunstructed hits in the event
00219    evt.put( EBuncalibRechits, EBhitCollection_ );
00220    evt.put( EEuncalibRechits, EEhitCollection_ );
00221 }

Generated on Tue Jun 9 17:43:47 2009 for CMSSW by  doxygen 1.5.4