Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-20 01:52:48

0001 // system include files
0002 #include <string>
0003 #include <vector>
0004 
0005 // Root objects
0006 #include "TTree.h"
0007 
0008 #include "CalibFormats/HcalObjects/interface/HcalCalibrations.h"
0009 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
0010 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
0011 
0012 #include "CondFormats/HcalObjects/interface/HcalRespCorrs.h"
0013 #include "CondFormats/DataRecord/interface/HcalRespCorrsRcd.h"
0014 
0015 #include "DataFormats/HcalCalibObjects/interface/HcalIsoTrkCalibVariables.h"
0016 #include "DataFormats/HcalCalibObjects/interface/HcalIsoTrkEventVariables.h"
0017 
0018 #include "FWCore/Framework/interface/Frameworkfwd.h"
0019 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0020 
0021 #include "FWCore/Framework/interface/Event.h"
0022 #include "FWCore/Framework/interface/MakerMacros.h"
0023 #include "FWCore/ServiceRegistry/interface/Service.h"
0024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0025 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0026 
0027 #include "Geometry/CaloTopology/interface/HcalTopology.h"
0028 #include "Geometry/Records/interface/HcalRecNumberingRecord.h"
0029 
0030 //#define EDM_ML_DEBUG
0031 
0032 class HcalIsoTrackAnalyzer : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> {
0033 public:
0034   explicit HcalIsoTrackAnalyzer(edm::ParameterSet const&);
0035   ~HcalIsoTrackAnalyzer() override;
0036 
0037   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0038 
0039 private:
0040   void analyze(edm::Event const&, edm::EventSetup const&) override;
0041   void beginJob() override;
0042   void beginRun(edm::Run const&, edm::EventSetup const&) override;
0043   void endRun(edm::Run const&, edm::EventSetup const&) override;
0044   double respCorr(const DetId& id);
0045   double gainFactor(const HcalDbService* dbserv, const HcalDetId& id);
0046 
0047   const double pTrackLow_, pTrackHigh_;
0048   const int useRaw_, dataType_, unCorrect_, runLow_, runHigh_;
0049   const bool fillInRange_, fillRunRange_;
0050   const edm::InputTag labelIsoTkVar_, labelIsoTkEvt_;
0051   const std::vector<int> debEvents_;
0052   const edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> tok_htopo_;
0053   const edm::ESGetToken<HcalRespCorrs, HcalRespCorrsRcd> tok_respcorr_;
0054   const edm::ESGetToken<HcalDbService, HcalDbRecord> tok_dbservice_;
0055   edm::EDGetTokenT<HcalIsoTrkCalibVariablesCollection> tokIsoTrkVar_;
0056   edm::EDGetTokenT<HcalIsoTrkEventVariablesCollection> tokIsoTrkEvt_;
0057   const HcalTopology* theHBHETopology_;
0058   HcalRespCorrs* respCorrs_;
0059 
0060   unsigned int nRun_, nRange_, nLow_, nHigh_;
0061 
0062   TTree *tree, *tree2;
0063   int t_Run, t_Event, t_DataType, t_ieta, t_iphi;
0064   int t_goodPV, t_nVtx, t_nTrk;
0065   double t_EventWeight, t_p, t_pt, t_phi;
0066   double t_l1pt, t_l1eta, t_l1phi;
0067   double t_l3pt, t_l3eta, t_l3phi;
0068   double t_mindR1, t_mindR2;
0069   double t_eMipDR, t_eMipDR2, t_eMipDR3, t_eMipDR4;
0070   double t_eMipDR5, t_hmaxNearP, t_gentrackP;
0071   double t_emaxNearP, t_eAnnular, t_hAnnular;
0072   double t_eHcal, t_eHcal10, t_eHcal30, t_rhoh;
0073   bool t_selectTk, t_qltyFlag, t_qltyMissFlag, t_qltyPVFlag;
0074   std::vector<unsigned int> t_DetIds, t_DetIds1, t_DetIds3;
0075   std::vector<double> t_HitEnergies, t_HitEnergies1, t_HitEnergies3;
0076   std::vector<bool> t_trgbits;
0077 
0078   unsigned int t_RunNo, t_EventNo;
0079   bool t_TrigPass, t_TrigPassSel, t_L1Bit;
0080   int t_Tracks, t_TracksProp, t_TracksSaved;
0081   int t_TracksLoose, t_TracksTight, t_allvertex;
0082   std::vector<int> t_ietaAll, t_ietaGood, t_trackType;
0083   std::vector<bool> t_hltbits;
0084 };
0085 
0086 HcalIsoTrackAnalyzer::HcalIsoTrackAnalyzer(const edm::ParameterSet& iConfig)
0087     : pTrackLow_(iConfig.getParameter<double>("momentumLow")),
0088       pTrackHigh_(iConfig.getParameter<double>("momentumHigh")),
0089       useRaw_(iConfig.getUntrackedParameter<int>("useRaw", 0)),
0090       dataType_(iConfig.getUntrackedParameter<int>("dataType", 0)),
0091       unCorrect_(iConfig.getUntrackedParameter<int>("unCorrect", 0)),
0092       runLow_(iConfig.getUntrackedParameter<int>("runLow", 0)),
0093       runHigh_(iConfig.getUntrackedParameter<int>("runHigh", -1)),
0094       fillInRange_(iConfig.getUntrackedParameter<bool>("fillInRange", false)),
0095       fillRunRange_((runLow_ < runHigh_) && (runLow_ > 0)),
0096       labelIsoTkVar_(iConfig.getParameter<edm::InputTag>("isoTrackVarLabel")),
0097       labelIsoTkEvt_(iConfig.getParameter<edm::InputTag>("isoTrackEvtLabel")),
0098       debEvents_(iConfig.getParameter<std::vector<int>>("debugEvents")),
0099       tok_htopo_(esConsumes<HcalTopology, HcalRecNumberingRecord, edm::Transition::BeginRun>()),
0100       tok_respcorr_(esConsumes<HcalRespCorrs, HcalRespCorrsRcd, edm::Transition::BeginRun>()),
0101       tok_dbservice_(esConsumes<HcalDbService, HcalDbRecord>()),
0102       tokIsoTrkVar_(consumes<HcalIsoTrkCalibVariablesCollection>(labelIsoTkVar_)),
0103       tokIsoTrkEvt_(consumes<HcalIsoTrkEventVariablesCollection>(labelIsoTkEvt_)),
0104       theHBHETopology_(nullptr),
0105       respCorrs_(nullptr),
0106       nRun_(0),
0107       nRange_(0),
0108       nLow_(0),
0109       nHigh_(0) {
0110   usesResource(TFileService::kSharedResource);
0111 
0112   //now do whatever initialization is needed
0113   edm::LogVerbatim("HcalIsoTrack") << "Labels used " << labelIsoTkVar_ << " " << labelIsoTkEvt_;
0114 
0115   edm::LogVerbatim("HcalIsoTrack") << "Parameters read from config file \n\t momentumLow_ " << pTrackLow_
0116                                    << "\t momentumHigh_ " << pTrackHigh_ << "\t useRaw_ " << useRaw_
0117                                    << "\t dataType_      " << dataType_ << "\t unCorrect " << unCorrect_
0118                                    << "\t fillInRange " << fillInRange_ << "\t fillRunRange " << fillRunRange_
0119                                    << " for " << runLow_ << ":" << runHigh_ << "\t and " << debEvents_.size()
0120                                    << " events to be debugged";
0121 }
0122 
0123 HcalIsoTrackAnalyzer::~HcalIsoTrackAnalyzer() {
0124   if (respCorrs_)
0125     delete respCorrs_;
0126 }
0127 
0128 void HcalIsoTrackAnalyzer::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) {
0129   const HcalDbService* conditions = &iSetup.getData(tok_dbservice_);
0130   t_Run = iEvent.id().run();
0131   t_Event = iEvent.id().event();
0132   t_DataType = dataType_;
0133 #ifdef EDM_ML_DEBUG
0134   bool debug = (debEvents_.empty())
0135                    ? true
0136                    : (std::find(debEvents_.begin(), debEvents_.end(), iEvent.id().event()) != debEvents_.end());
0137   if (debug)
0138     edm::LogVerbatim("HcalIsoTrack") << "Run " << t_Run << " Event " << t_Event << " type " << t_DataType
0139                                      << " Luminosity " << iEvent.luminosityBlock() << " Bunch "
0140                                      << iEvent.bunchCrossing();
0141 #endif
0142 
0143   // Fill from IsoTrkCalibVariables collection
0144   auto const& isotrkCalibColl = iEvent.getHandle(tokIsoTrkVar_);
0145   if (isotrkCalibColl.isValid()) {
0146     auto isotrkCalib = *isotrkCalibColl.product();
0147 #ifdef EDM_ML_DEBUG
0148     if (debug)
0149       edm::LogVerbatim("HcalIsoTrack") << "Finds HcalIsoTrkCalibVariablesCollection with " << isotrkCalib.size()
0150                                        << " entries";
0151     int k(0);
0152 #endif
0153     for (const auto& itr : isotrkCalib) {
0154       t_ieta = itr.ieta_;
0155       t_iphi = itr.iphi_;
0156       t_goodPV = itr.goodPV_;
0157       t_nVtx = itr.nVtx_;
0158       t_nTrk = itr.nTrk_;
0159       t_EventWeight = itr.eventWeight_;
0160       t_p = itr.p_;
0161       t_pt = itr.pt_;
0162       t_phi = itr.phi_;
0163 #ifdef EDM_ML_DEBUG
0164       ++k;
0165       if (debug)
0166         edm::LogVerbatim("HcalIsoTrack") << "Track " << k << " p:pt:phi " << t_p << ":" << t_pt << ":" << t_phi
0167                                          << " nvtx:ntrk:goodPV:wt " << t_nVtx << ":" << t_nTrk << ":" << t_goodPV << ":"
0168                                          << t_EventWeight << " ieta:iphi " << t_ieta << ":" << t_iphi;
0169 #endif
0170       t_l1pt = itr.l1pt_;
0171       t_l1eta = itr.l1eta_;
0172       t_l1phi = itr.l1phi_;
0173       t_l3pt = itr.l3pt_;
0174       t_l3eta = itr.l3eta_;
0175       t_l3phi = itr.l3phi_;
0176       t_mindR1 = itr.mindR1_;
0177       t_mindR2 = itr.mindR2_;
0178 #ifdef EDM_ML_DEBUG
0179       if (debug)
0180         edm::LogVerbatim("HcalIsoTrack") << "L1 pt:eta:phi " << t_l1pt << ":" << t_l1eta << ":" << t_l1phi
0181                                          << " L3 pt:eta:phi " << t_l3pt << ":" << t_l3eta << ":" << t_l3phi << " R1:R2 "
0182                                          << t_mindR1 << ":" << t_mindR2;
0183 #endif
0184       t_eMipDR = itr.eMipDR_[0];
0185       t_eMipDR2 = itr.eMipDR_[1];
0186       t_eMipDR3 = itr.eMipDR_[2];
0187       t_eMipDR4 = itr.eMipDR_[3];
0188       t_eMipDR5 = itr.eMipDR_[4];
0189 #ifdef EDM_ML_DEBUG
0190       if (debug)
0191         edm::LogVerbatim("HcalIsoTrack") << "eMIPDR 1:2:3:4:5 " << t_eMipDR << ":" << t_eMipDR2 << ":" << t_eMipDR3
0192                                          << ":" << t_eMipDR4 << ":" << t_eMipDR5;
0193 #endif
0194       t_hmaxNearP = itr.hmaxNearP_;
0195       t_emaxNearP = itr.emaxNearP_;
0196       t_eAnnular = itr.eAnnular_;
0197       t_hAnnular = itr.hAnnular_;
0198 #ifdef EDM_ML_DEBUG
0199       if (debug)
0200         edm::LogVerbatim("HcalIsoTrack") << "emaxNearP:hmaxNearP " << t_emaxNearP << ":" << t_hmaxNearP
0201                                          << " eAnnlar:hAnnular" << t_eAnnular << ":" << t_hAnnular;
0202 #endif
0203       t_gentrackP = itr.gentrackP_;
0204       t_rhoh = itr.rhoh_;
0205       t_selectTk = itr.selectTk_;
0206       t_qltyFlag = itr.qltyFlag_;
0207       t_qltyMissFlag = itr.qltyMissFlag_;
0208       t_qltyPVFlag = itr.qltyPVFlag_;
0209 #ifdef EDM_ML_DEBUG
0210       if (debug)
0211         edm::LogVerbatim("HcalIsoTrack") << "gentrackP " << t_gentrackP << " rhoh " << t_rhoh
0212                                          << " qltyFlag:qltyMissFlag:qltyPVFlag:selectTk " << t_qltyFlag << ":"
0213                                          << t_qltyMissFlag << ":" << t_qltyPVFlag << ":" << t_selectTk;
0214 #endif
0215       t_trgbits = itr.trgbits_;
0216       t_DetIds = itr.detIds_;
0217       t_DetIds1 = itr.detIds1_;
0218       t_DetIds3 = itr.detIds3_;
0219       if (useRaw_ == 1) {
0220         t_eHcal = itr.eHcalAux_;
0221         t_eHcal10 = itr.eHcal10Aux_;
0222         t_eHcal30 = itr.eHcal30Aux_;
0223         t_HitEnergies = itr.hitEnergiesAux_;
0224         t_HitEnergies1 = itr.hitEnergies1Aux_;
0225         t_HitEnergies3 = itr.hitEnergies3Aux_;
0226       } else if (useRaw_ == 2) {
0227         t_eHcal = itr.eHcalRaw_;
0228         t_eHcal10 = itr.eHcal10Raw_;
0229         t_eHcal30 = itr.eHcal30Raw_;
0230         t_HitEnergies = itr.hitEnergiesRaw_;
0231         t_HitEnergies1 = itr.hitEnergies1Raw_;
0232         t_HitEnergies3 = itr.hitEnergies3Raw_;
0233       } else {
0234         t_eHcal = itr.eHcal_;
0235         t_eHcal10 = itr.eHcal10_;
0236         t_eHcal30 = itr.eHcal30_;
0237         t_HitEnergies = itr.hitEnergies_;
0238         t_HitEnergies1 = itr.hitEnergies1_;
0239         t_HitEnergies3 = itr.hitEnergies3_;
0240         if (unCorrect_ > 0) {
0241           t_eHcal = t_eHcal10 = t_eHcal30 = 0;
0242           for (unsigned int k = 0; k < t_DetIds.size(); ++k) {
0243             double corr = (unCorrect_ == 2) ? gainFactor(conditions, HcalDetId(t_DetIds[k])) : respCorr(t_DetIds[k]);
0244             if (corr != 0)
0245               t_HitEnergies[k] /= corr;
0246             t_eHcal += t_HitEnergies[k];
0247           }
0248           for (unsigned int k = 0; k < t_DetIds1.size(); ++k) {
0249             double corr = (unCorrect_ == 2) ? gainFactor(conditions, HcalDetId(t_DetIds1[k])) : respCorr(t_DetIds1[k]);
0250             if (corr != 0)
0251               t_HitEnergies1[k] /= corr;
0252             t_eHcal10 += t_HitEnergies1[k];
0253           }
0254           for (unsigned int k = 0; k < t_DetIds3.size(); ++k) {
0255             double corr = (unCorrect_ == 2) ? gainFactor(conditions, HcalDetId(t_DetIds3[k])) : respCorr(t_DetIds3[k]);
0256             if (corr != 0)
0257               t_HitEnergies3[k] /= corr;
0258             t_eHcal30 += t_HitEnergies3[k];
0259           }
0260         }
0261       }
0262 #ifdef EDM_ML_DEBUG
0263       if (debug)
0264         edm::LogVerbatim("HcalIsoTrack") << "eHcal:eHcal10:eHCal30 " << t_eHcal << ":" << t_eHcal10 << t_eHcal30;
0265 #endif
0266       bool select(true);
0267       if (fillInRange_) {
0268         if ((t_p < pTrackLow_) || (t_p > pTrackHigh_))
0269           select = false;
0270       }
0271       if (select && fillRunRange_) {
0272         if ((t_Run < runLow_) || (t_Run > runHigh_))
0273           select = false;
0274       }
0275       if (select) {
0276         tree->Fill();
0277         edm::LogVerbatim("HcalIsoTrackX") << "Run " << t_Run << " Event " << t_Event << " p " << t_p;
0278       }
0279       if (t_p < pTrackLow_) {
0280         ++nLow_;
0281       } else if (t_p > pTrackHigh_) {
0282         ++nHigh_;
0283       } else {
0284         ++nRange_;
0285       }
0286     }
0287   } else {
0288     edm::LogVerbatim("HcalIsoTrack") << "Cannot find HcalIsoTrkCalibVariablesCollection";
0289   }
0290 
0291   // Fill from IsoTrkEventVariables collection
0292   auto const& isotrkEventColl = iEvent.getHandle(tokIsoTrkEvt_);
0293   if (isotrkEventColl.isValid()) {
0294     auto isotrkEvent = isotrkEventColl.product();
0295 #ifdef EDM_ML_DEBUG
0296     if (debug)
0297       edm::LogVerbatim("HcalIsoTrack") << "Finds HcalIsoTrkEventVariablesCollection with " << isotrkEvent->size()
0298                                        << " entries";
0299 #endif
0300     auto itr = isotrkEvent->begin();
0301     if (itr != isotrkEvent->end()) {
0302       t_RunNo = iEvent.id().run();
0303       t_EventNo = iEvent.id().event();
0304       t_TrigPass = itr->trigPass_;
0305       t_TrigPassSel = itr->trigPassSel_;
0306       t_L1Bit = itr->l1Bit_;
0307       t_Tracks = itr->tracks_;
0308       t_TracksProp = itr->tracksProp_;
0309       t_TracksSaved = itr->tracksSaved_;
0310       t_TracksLoose = itr->tracksLoose_;
0311       t_TracksTight = itr->tracksTight_;
0312       t_allvertex = itr->allvertex_;
0313       t_ietaAll = itr->ietaAll_;
0314       t_ietaGood = itr->ietaGood_;
0315       t_trackType = itr->trackType_;
0316       t_hltbits = itr->hltbits_;
0317       bool select(true);
0318       if (fillRunRange_) {
0319         if ((t_RunNo < static_cast<unsigned int>(runLow_)) || (t_RunNo > static_cast<unsigned int>(runHigh_)))
0320           select = false;
0321       }
0322       if (select)
0323         tree2->Fill();
0324     }
0325   } else {
0326     edm::LogVerbatim("HcalIsoTrack") << "Cannot find HcalIsoTrkEventVariablesCollections";
0327   }
0328 }
0329 
0330 void HcalIsoTrackAnalyzer::beginJob() {
0331   edm::Service<TFileService> fs;
0332   tree = fs->make<TTree>("CalibTree", "CalibTree");
0333 
0334   tree->Branch("t_Run", &t_Run, "t_Run/I");
0335   tree->Branch("t_Event", &t_Event, "t_Event/I");
0336   tree->Branch("t_DataType", &t_DataType, "t_DataType/I");
0337   tree->Branch("t_ieta", &t_ieta, "t_ieta/I");
0338   tree->Branch("t_iphi", &t_iphi, "t_iphi/I");
0339   tree->Branch("t_EventWeight", &t_EventWeight, "t_EventWeight/D");
0340   tree->Branch("t_nVtx", &t_nVtx, "t_nVtx/I");
0341   tree->Branch("t_nTrk", &t_nTrk, "t_nTrk/I");
0342   tree->Branch("t_goodPV", &t_goodPV, "t_goodPV/I");
0343   tree->Branch("t_l1pt", &t_l1pt, "t_l1pt/D");
0344   tree->Branch("t_l1eta", &t_l1eta, "t_l1eta/D");
0345   tree->Branch("t_l1phi", &t_l1phi, "t_l1phi/D");
0346   tree->Branch("t_l3pt", &t_l3pt, "t_l3pt/D");
0347   tree->Branch("t_l3eta", &t_l3eta, "t_l3eta/D");
0348   tree->Branch("t_l3phi", &t_l3phi, "t_l3phi/D");
0349   tree->Branch("t_p", &t_p, "t_p/D");
0350   tree->Branch("t_pt", &t_pt, "t_pt/D");
0351   tree->Branch("t_phi", &t_phi, "t_phi/D");
0352   tree->Branch("t_mindR1", &t_mindR1, "t_mindR1/D");
0353   tree->Branch("t_mindR2", &t_mindR2, "t_mindR2/D");
0354   tree->Branch("t_eMipDR", &t_eMipDR, "t_eMipDR/D");
0355   tree->Branch("t_eMipDR2", &t_eMipDR2, "t_eMipDR2/D");
0356   tree->Branch("t_eMipDR3", &t_eMipDR3, "t_eMipDR3/D");
0357   tree->Branch("t_eMipDR4", &t_eMipDR4, "t_eMipDR4/D");
0358   tree->Branch("t_eMipDR5", &t_eMipDR5, "t_eMipDR5/D");
0359   tree->Branch("t_eHcal", &t_eHcal, "t_eHcal/D");
0360   tree->Branch("t_eHcal10", &t_eHcal10, "t_eHcal10/D");
0361   tree->Branch("t_eHcal30", &t_eHcal30, "t_eHcal30/D");
0362   tree->Branch("t_hmaxNearP", &t_hmaxNearP, "t_hmaxNearP/D");
0363   tree->Branch("t_emaxNearP", &t_emaxNearP, "t_emaxNearP/D");
0364   tree->Branch("t_eAnnular", &t_eAnnular, "t_eAnnular/D");
0365   tree->Branch("t_hAnnular", &t_hAnnular, "t_hAnnular/D");
0366   tree->Branch("t_rhoh", &t_rhoh, "t_rhoh/D");
0367   tree->Branch("t_selectTk", &t_selectTk, "t_selectTk/O");
0368   tree->Branch("t_qltyFlag", &t_qltyFlag, "t_qltyFlag/O");
0369   tree->Branch("t_qltyMissFlag", &t_qltyMissFlag, "t_qltyMissFlag/O");
0370   tree->Branch("t_qltyPVFlag", &t_qltyPVFlag, "t_qltyPVFlag/O");
0371   tree->Branch("t_gentrackP", &t_gentrackP, "t_gentrackP/D");
0372 
0373   tree->Branch("t_DetIds", &t_DetIds);
0374   tree->Branch("t_HitEnergies", &t_HitEnergies);
0375   tree->Branch("t_trgbits", &t_trgbits);
0376   tree->Branch("t_DetIds1", &t_DetIds1);
0377   tree->Branch("t_DetIds3", &t_DetIds3);
0378   tree->Branch("t_HitEnergies1", &t_HitEnergies1);
0379   tree->Branch("t_HitEnergies3", &t_HitEnergies3);
0380 
0381   tree2 = fs->make<TTree>("EventInfo", "Event Information");
0382 
0383   tree2->Branch("t_RunNo", &t_RunNo, "t_RunNo/i");
0384   tree2->Branch("t_EventNo", &t_EventNo, "t_EventNo/i");
0385   tree2->Branch("t_Tracks", &t_Tracks, "t_Tracks/I");
0386   tree2->Branch("t_TracksProp", &t_TracksProp, "t_TracksProp/I");
0387   tree2->Branch("t_TracksSaved", &t_TracksSaved, "t_TracksSaved/I");
0388   tree2->Branch("t_TracksLoose", &t_TracksLoose, "t_TracksLoose/I");
0389   tree2->Branch("t_TracksTight", &t_TracksTight, "t_TracksTight/I");
0390   tree2->Branch("t_TrigPass", &t_TrigPass, "t_TrigPass/O");
0391   tree2->Branch("t_TrigPassSel", &t_TrigPassSel, "t_TrigPassSel/O");
0392   tree2->Branch("t_L1Bit", &t_L1Bit, "t_L1Bit/O");
0393   tree2->Branch("t_allvertex", &t_allvertex, "t_allvertex/I");
0394   tree2->Branch("t_ietaAll", &t_ietaAll);
0395   tree2->Branch("t_ietaGood", &t_ietaGood);
0396   tree2->Branch("t_trackType", &t_trackType);
0397   tree2->Branch("t_hltbits", &t_hltbits);
0398 }
0399 
0400 // ------------ method called when starting to processes a run  ------------
0401 void HcalIsoTrackAnalyzer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
0402   theHBHETopology_ = &iSetup.getData(tok_htopo_);
0403   const HcalRespCorrs* resp = &iSetup.getData(tok_respcorr_);
0404   respCorrs_ = new HcalRespCorrs(*resp);
0405   respCorrs_->setTopo(theHBHETopology_);
0406   edm::LogVerbatim("HcalIsoTrack") << "beginRun " << iRun.run() << " get responseCoorection " << respCorrs_;
0407 }
0408 
0409 // ------------ method called when ending the processing of a run  ------------
0410 void HcalIsoTrackAnalyzer::endRun(edm::Run const& iRun, edm::EventSetup const&) {
0411   nRun_++;
0412   edm::LogVerbatim("HcalIsoTrack") << "endRun[" << nRun_ << "] " << iRun.run() << " with " << nLow_
0413                                    << " events with p < " << pTrackLow_ << ", " << nHigh_ << " events with p > "
0414                                    << pTrackHigh_ << ", and " << nRange_ << " events in the right momentum range";
0415   if (respCorrs_) {
0416     delete respCorrs_;
0417     respCorrs_ = nullptr;
0418   }
0419 }
0420 
0421 void HcalIsoTrackAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0422   edm::ParameterSetDescription desc;
0423   desc.add<double>("momentumLow", 40.0);
0424   desc.add<double>("momentumHigh", 60.0);
0425   desc.addUntracked<int>("useRaw", 0);
0426   desc.addUntracked<int>("dataType", 0);
0427   desc.addUntracked<int>("unCorrect", 0);
0428   desc.addUntracked<bool>("fillInRange", false);
0429   desc.addUntracked<int>("runLow", 0);
0430   desc.addUntracked<int>("runHigh", -1);
0431   desc.add<edm::InputTag>("isoTrackVarLabel", edm::InputTag("alcaHcalIsotrkProducer", "HcalIsoTrack"));
0432   desc.add<edm::InputTag>("isoTrackEvtLabel", edm::InputTag("alcaHcalIsotrkProducer", "HcalIsoTrackEvent"));
0433   std::vector<int> events;
0434   desc.add<std::vector<int>>("debugEvents", events);
0435   descriptions.add("hcalIsoTrackAnalyzer", desc);
0436 }
0437 
0438 double HcalIsoTrackAnalyzer::respCorr(const DetId& id) {
0439   double cfac(1.0);
0440   if (respCorrs_ != nullptr)
0441     cfac = (respCorrs_->getValues(id))->getValue();
0442   return cfac;
0443 }
0444 
0445 double HcalIsoTrackAnalyzer::gainFactor(const HcalDbService* conditions, const HcalDetId& id) {
0446   double gain(0.0);
0447   const HcalCalibrations& calibs = conditions->getHcalCalibrations(id);
0448   for (int capid = 0; capid < 4; ++capid)
0449     gain += (0.25 * calibs.respcorrgain(capid));
0450   return gain;
0451 }
0452 
0453 //define this as a plug-in
0454 DEFINE_FWK_MODULE(HcalIsoTrackAnalyzer);