CMS 3D CMS Logo

HcalIsoTrackAnalyzer.cc
Go to the documentation of this file.
1 // system include files
2 #include <atomic>
3 #include <cmath>
4 #include <memory>
5 #include <string>
6 #include <vector>
7 
8 // Root objects
9 #include "TROOT.h"
10 #include "TSystem.h"
11 #include "TFile.h"
12 #include "TProfile.h"
13 #include "TDirectory.h"
14 #include "TTree.h"
15 #include "TLorentzVector.h"
16 #include "TInterpreter.h"
17 
20 
23 
29 
30 //#define EDM_ML_DEBUG
31 
32 class HcalIsoTrackAnalyzer : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> {
33 public:
34  explicit HcalIsoTrackAnalyzer(edm::ParameterSet const&);
35  ~HcalIsoTrackAnalyzer() override {}
36 
37  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
38 
39 private:
40  void analyze(edm::Event const&, edm::EventSetup const&) override;
41  void beginJob() override;
42  void beginRun(edm::Run const&, edm::EventSetup const&) override {}
43  void endRun(edm::Run const&, edm::EventSetup const&) override;
44 
45  const double pTrackLow_, pTrackHigh_;
46  const int useRaw_, dataType_;
48  const std::vector<int> debEvents_;
51  unsigned int nRun_, nRange_, nLow_, nHigh_;
52 
53  TTree *tree, *tree2;
59  double t_mindR1, t_mindR2;
65  std::vector<unsigned int> t_DetIds, t_DetIds1, t_DetIds3;
67  std::vector<bool> t_trgbits;
68 
69  unsigned int t_RunNo, t_EventNo;
73  std::vector<int> t_ietaAll, t_ietaGood, t_trackType;
74  std::vector<bool> t_hltbits;
75 };
76 
78  : pTrackLow_(iConfig.getParameter<double>("momentumLow")),
79  pTrackHigh_(iConfig.getParameter<double>("momentumHigh")),
80  useRaw_(iConfig.getUntrackedParameter<int>("useRaw", 0)),
81  dataType_(iConfig.getUntrackedParameter<int>("dataType", 0)),
82  labelIsoTkVar_(iConfig.getParameter<edm::InputTag>("isoTrackVarLabel")),
83  labelIsoTkEvt_(iConfig.getParameter<edm::InputTag>("isoTrackEvtLabel")),
84  debEvents_(iConfig.getParameter<std::vector<int>>("debugEvents")),
85  tokIsoTrkVar_(consumes<HcalIsoTrkCalibVariablesCollection>(labelIsoTkVar_)),
86  tokIsoTrkEvt_(consumes<HcalIsoTrkEventVariablesCollection>(labelIsoTkEvt_)),
87  nRun_(0),
88  nRange_(0),
89  nLow_(0),
90  nHigh_(0) {
91  usesResource(TFileService::kSharedResource);
92 
93  //now do whatever initialization is needed
94  edm::LogVerbatim("HcalIsoTrack") << "Labels used " << labelIsoTkVar_ << " " << labelIsoTkEvt_;
95 
96  edm::LogVerbatim("HcalIsoTrack") << "Parameters read from config file \n\t momentumLow_ " << pTrackLow_
97  << "\t momentumHigh_ " << pTrackHigh_ << "\t useRaw_ " << useRaw_
98  << "\t dataType_ " << dataType_ << " and " << debEvents_.size()
99  << " events to be debugged";
100 }
101 
103  t_Run = iEvent.id().run();
104  t_Event = iEvent.id().event();
106 #ifdef EDM_ML_DEBUG
107  bool debug = (debEvents_.empty())
108  ? true
109  : (std::find(debEvents_.begin(), debEvents_.end(), iEvent.id().event()) != debEvents_.end());
110  if (debug)
111  edm::LogVerbatim("HcalIsoTrack") << "Run " << t_Run << " Event " << t_Event << " type " << t_DataType
112  << " Luminosity " << iEvent.luminosityBlock() << " Bunch "
113  << iEvent.bunchCrossing();
114 #endif
115 
116  // Fill from IsoTrkCalibVariables collection
117  auto const& isotrkCalibColl = iEvent.getHandle(tokIsoTrkVar_);
118  if (isotrkCalibColl.isValid()) {
119  auto isotrkCalib = *isotrkCalibColl.product();
120 #ifdef EDM_ML_DEBUG
121  if (debug)
122  edm::LogVerbatim("HcalIsoTrack") << "Finds HcalIsoTrkCalibVariablesCollection with " << isotrkCalib.size()
123  << " entries";
124  int k(0);
125 #endif
126  for (const auto& itr : isotrkCalib) {
127  t_ieta = itr.ieta_;
128  t_iphi = itr.iphi_;
129  t_goodPV = itr.goodPV_;
130  t_nVtx = itr.nVtx_;
131  t_nTrk = itr.nTrk_;
132  t_EventWeight = itr.eventWeight_;
133  t_p = itr.p_;
134  t_pt = itr.pt_;
135  t_phi = itr.phi_;
136 #ifdef EDM_ML_DEBUG
137  ++k;
138  if (debug)
139  edm::LogVerbatim("HcalIsoTrack") << "Track " << k << " p:pt:phi " << t_p << ":" << t_pt << ":" << t_phi
140  << " nvtx:ntrk:goodPV:wt " << t_nVtx << ":" << t_nTrk << ":" << t_goodPV << ":"
141  << t_EventWeight << " ieta:iphi " << t_ieta << ":" << t_iphi;
142 #endif
143  t_l1pt = itr.l1pt_;
144  t_l1eta = itr.l1eta_;
145  t_l1phi = itr.l1phi_;
146  t_l3pt = itr.l3pt_;
147  t_l3eta = itr.l3eta_;
148  t_l3phi = itr.l3phi_;
149  t_mindR1 = itr.mindR1_;
150  t_mindR2 = itr.mindR2_;
151 #ifdef EDM_ML_DEBUG
152  if (debug)
153  edm::LogVerbatim("HcalIsoTrack") << "L1 pt:eta:phi " << t_l1pt << ":" << t_l1eta << ":" << t_l1phi
154  << " L3 pt:eta:phi " << t_l3pt << ":" << t_l3eta << ":" << t_l3phi << " R1:R2 "
155  << t_mindR1 << ":" << t_mindR2;
156 #endif
157  t_eMipDR = itr.eMipDR_[0];
158  t_eMipDR2 = itr.eMipDR_[1];
159  t_eMipDR3 = itr.eMipDR_[2];
160  t_eMipDR4 = itr.eMipDR_[3];
161  t_eMipDR5 = itr.eMipDR_[4];
162 #ifdef EDM_ML_DEBUG
163  if (debug)
164  edm::LogVerbatim("HcalIsoTrack") << "eMIPDR 1:2:3:4:5 " << t_eMipDR << ":" << t_eMipDR2 << ":" << t_eMipDR3
165  << ":" << t_eMipDR4 << ":" << t_eMipDR5;
166 #endif
167  t_hmaxNearP = itr.hmaxNearP_;
168  t_emaxNearP = itr.emaxNearP_;
169  t_eAnnular = itr.eAnnular_;
170  t_hAnnular = itr.hAnnular_;
171 #ifdef EDM_ML_DEBUG
172  if (debug)
173  edm::LogVerbatim("HcalIsoTrack") << "emaxNearP:hmaxNearP " << t_emaxNearP << ":" << t_hmaxNearP
174  << " eAnnlar:hAnnular" << t_eAnnular << ":" << t_hAnnular;
175 #endif
176  t_gentrackP = itr.gentrackP_;
177  t_rhoh = itr.rhoh_;
178  t_selectTk = itr.selectTk_;
179  t_qltyFlag = itr.qltyFlag_;
180  t_qltyMissFlag = itr.qltyMissFlag_;
181  t_qltyPVFlag = itr.qltyPVFlag_;
182 #ifdef EDM_ML_DEBUG
183  if (debug)
184  edm::LogVerbatim("HcalIsoTrack") << "gentrackP " << t_gentrackP << " rhoh " << t_rhoh
185  << " qltyFlag:qltyMissFlag:qltyPVFlag:selectTk " << t_qltyFlag << ":"
186  << t_qltyMissFlag << ":" << t_qltyPVFlag << ":" << t_selectTk;
187 #endif
188  t_trgbits = itr.trgbits_;
189  t_DetIds = itr.detIds_;
190  t_DetIds1 = itr.detIds1_;
191  t_DetIds3 = itr.detIds3_;
192  if (useRaw_ == 1) {
193  t_eHcal = itr.eHcalAux_;
194  t_eHcal10 = itr.eHcal10Aux_;
195  t_eHcal30 = itr.eHcal30Aux_;
196  t_HitEnergies = itr.hitEnergiesAux_;
197  t_HitEnergies1 = itr.hitEnergies1Aux_;
198  t_HitEnergies3 = itr.hitEnergies3Aux_;
199  } else if (useRaw_ == 2) {
200  t_eHcal = itr.eHcalRaw_;
201  t_eHcal10 = itr.eHcal10Raw_;
202  t_eHcal30 = itr.eHcal30Raw_;
203  t_HitEnergies = itr.hitEnergiesRaw_;
204  t_HitEnergies1 = itr.hitEnergies1Raw_;
205  t_HitEnergies3 = itr.hitEnergies3Raw_;
206  } else {
207  t_eHcal = itr.eHcal_;
208  t_eHcal10 = itr.eHcal10_;
209  t_eHcal30 = itr.eHcal30_;
210  t_HitEnergies = itr.hitEnergies_;
211  t_HitEnergies1 = itr.hitEnergies1_;
212  t_HitEnergies3 = itr.hitEnergies3_;
213  }
214 #ifdef EDM_ML_DEBUG
215  if (debug)
216  edm::LogVerbatim("HcalIsoTrack") << "eHcal:eHcal10:eHCal30 " << t_eHcal << ":" << t_eHcal10 << t_eHcal30;
217 #endif
218  tree->Fill();
219  edm::LogVerbatim("HcalIsoTrackX") << "Run " << t_Run << " Event " << t_Event << " p " << t_p;
220 
221  if (t_p < pTrackLow_) {
222  ++nLow_;
223  } else if (t_p < pTrackHigh_) {
224  ++nHigh_;
225  } else {
226  ++nRange_;
227  }
228  }
229  } else {
230  edm::LogVerbatim("HcalIsoTrack") << "Cannot find HcalIsoTrkCalibVariablesCollection";
231  }
232 
233  // Fill from IsoTrkEventVariables collection
234  auto const& isotrkEventColl = iEvent.getHandle(tokIsoTrkEvt_);
235  if (isotrkEventColl.isValid()) {
236  auto isotrkEvent = isotrkEventColl.product();
237 #ifdef EDM_ML_DEBUG
238  if (debug)
239  edm::LogVerbatim("HcalIsoTrack") << "Finds HcalIsoTrkEventVariablesCollection with " << isotrkEvent->size()
240  << " entries";
241 #endif
242  auto itr = isotrkEvent->begin();
243  if (itr != isotrkEvent->end()) {
244  t_RunNo = iEvent.id().run();
245  t_EventNo = iEvent.id().event();
246  t_TrigPass = itr->trigPass_;
247  t_TrigPassSel = itr->trigPassSel_;
248  t_L1Bit = itr->l1Bit_;
249  t_Tracks = itr->tracks_;
250  t_TracksProp = itr->tracksProp_;
251  t_TracksSaved = itr->tracksSaved_;
252  t_TracksLoose = itr->tracksLoose_;
253  t_TracksTight = itr->tracksTight_;
254  t_allvertex = itr->allvertex_;
255  t_ietaAll = itr->ietaAll_;
256  t_ietaGood = itr->ietaGood_;
257  t_trackType = itr->trackType_;
258  t_hltbits = itr->hltbits_;
259  tree2->Fill();
260  }
261  } else {
262  edm::LogVerbatim("HcalIsoTrack") << "Cannot find HcalIsoTrkEventVariablesCollections";
263  }
264 }
265 
268  tree = fs->make<TTree>("CalibTree", "CalibTree");
269 
270  tree->Branch("t_Run", &t_Run, "t_Run/I");
271  tree->Branch("t_Event", &t_Event, "t_Event/I");
272  tree->Branch("t_DataType", &t_DataType, "t_DataType/I");
273  tree->Branch("t_ieta", &t_ieta, "t_ieta/I");
274  tree->Branch("t_iphi", &t_iphi, "t_iphi/I");
275  tree->Branch("t_EventWeight", &t_EventWeight, "t_EventWeight/D");
276  tree->Branch("t_nVtx", &t_nVtx, "t_nVtx/I");
277  tree->Branch("t_nTrk", &t_nTrk, "t_nTrk/I");
278  tree->Branch("t_goodPV", &t_goodPV, "t_goodPV/I");
279  tree->Branch("t_l1pt", &t_l1pt, "t_l1pt/D");
280  tree->Branch("t_l1eta", &t_l1eta, "t_l1eta/D");
281  tree->Branch("t_l1phi", &t_l1phi, "t_l1phi/D");
282  tree->Branch("t_l3pt", &t_l3pt, "t_l3pt/D");
283  tree->Branch("t_l3eta", &t_l3eta, "t_l3eta/D");
284  tree->Branch("t_l3phi", &t_l3phi, "t_l3phi/D");
285  tree->Branch("t_p", &t_p, "t_p/D");
286  tree->Branch("t_pt", &t_pt, "t_pt/D");
287  tree->Branch("t_phi", &t_phi, "t_phi/D");
288  tree->Branch("t_mindR1", &t_mindR1, "t_mindR1/D");
289  tree->Branch("t_mindR2", &t_mindR2, "t_mindR2/D");
290  tree->Branch("t_eMipDR", &t_eMipDR, "t_eMipDR/D");
291  tree->Branch("t_eMipDR2", &t_eMipDR2, "t_eMipDR2/D");
292  tree->Branch("t_eMipDR3", &t_eMipDR3, "t_eMipDR3/D");
293  tree->Branch("t_eMipDR4", &t_eMipDR4, "t_eMipDR4/D");
294  tree->Branch("t_eMipDR5", &t_eMipDR5, "t_eMipDR5/D");
295  tree->Branch("t_eHcal", &t_eHcal, "t_eHcal/D");
296  tree->Branch("t_eHcal10", &t_eHcal10, "t_eHcal10/D");
297  tree->Branch("t_eHcal30", &t_eHcal30, "t_eHcal30/D");
298  tree->Branch("t_hmaxNearP", &t_hmaxNearP, "t_hmaxNearP/D");
299  tree->Branch("t_emaxNearP", &t_emaxNearP, "t_emaxNearP/D");
300  tree->Branch("t_eAnnular", &t_eAnnular, "t_eAnnular/D");
301  tree->Branch("t_hAnnular", &t_hAnnular, "t_hAnnular/D");
302  tree->Branch("t_rhoh", &t_rhoh, "t_rhoh/D");
303  tree->Branch("t_selectTk", &t_selectTk, "t_selectTk/O");
304  tree->Branch("t_qltyFlag", &t_qltyFlag, "t_qltyFlag/O");
305  tree->Branch("t_qltyMissFlag", &t_qltyMissFlag, "t_qltyMissFlag/O");
306  tree->Branch("t_qltyPVFlag", &t_qltyPVFlag, "t_qltyPVFlag/O");
307  tree->Branch("t_gentrackP", &t_gentrackP, "t_gentrackP/D");
308 
309  tree->Branch("t_DetIds", &t_DetIds);
310  tree->Branch("t_HitEnergies", &t_HitEnergies);
311  tree->Branch("t_trgbits", &t_trgbits);
312  tree->Branch("t_DetIds1", &t_DetIds1);
313  tree->Branch("t_DetIds3", &t_DetIds3);
314  tree->Branch("t_HitEnergies1", &t_HitEnergies1);
315  tree->Branch("t_HitEnergies3", &t_HitEnergies3);
316 
317  tree2 = fs->make<TTree>("EventInfo", "Event Information");
318 
319  tree2->Branch("t_RunNo", &t_RunNo, "t_RunNo/i");
320  tree2->Branch("t_EventNo", &t_EventNo, "t_EventNo/i");
321  tree2->Branch("t_Tracks", &t_Tracks, "t_Tracks/I");
322  tree2->Branch("t_TracksProp", &t_TracksProp, "t_TracksProp/I");
323  tree2->Branch("t_TracksSaved", &t_TracksSaved, "t_TracksSaved/I");
324  tree2->Branch("t_TracksLoose", &t_TracksLoose, "t_TracksLoose/I");
325  tree2->Branch("t_TracksTight", &t_TracksTight, "t_TracksTight/I");
326  tree2->Branch("t_TrigPass", &t_TrigPass, "t_TrigPass/O");
327  tree2->Branch("t_TrigPassSel", &t_TrigPassSel, "t_TrigPassSel/O");
328  tree2->Branch("t_L1Bit", &t_L1Bit, "t_L1Bit/O");
329  tree2->Branch("t_allvertex", &t_allvertex, "t_allvertex/I");
330  tree2->Branch("t_ietaAll", &t_ietaAll);
331  tree2->Branch("t_ietaGood", &t_ietaGood);
332  tree2->Branch("t_trackType", &t_trackType);
333  tree2->Branch("t_hltbits", &t_hltbits);
334 }
335 
336 // ------------ method called when starting to processes a run ------------
337 
338 // ------------ method called when ending the processing of a run ------------
340  nRun_++;
341  edm::LogVerbatim("HcalIsoTrack") << "endRun[" << nRun_ << "] " << iRun.run() << " with " << nLow_
342  << " events with p < " << pTrackLow_ << ", " << nHigh_ << " events with p > "
343  << pTrackHigh_ << ", and " << nRange_ << " events in the right momentum range";
344 }
345 
348  desc.add<double>("momentumLow", 40.0);
349  desc.add<double>("momentumHigh", 60.0);
350  desc.addUntracked<int>("useRaw", 0);
351  desc.addUntracked<int>("dataType", 0);
352  desc.add<edm::InputTag>("isoTrackVarLabel", edm::InputTag("alcaHcalIsotrkProducer", "HcalIsoTrack"));
353  desc.add<edm::InputTag>("isoTrackEvtLabel", edm::InputTag("alcaHcalIsotrkProducer", "HcalIsoTrackEvent"));
354  std::vector<int> events;
355  desc.add<std::vector<int>>("debugEvents", events);
356  descriptions.add("hcalIsoTrackAnalyzer", desc);
357 }
358 
359 //define this as a plug-in
static const std::string kSharedResource
Definition: TFileService.h:76
Log< level::Info, true > LogVerbatim
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< double > t_HitEnergies1
const std::vector< int > debEvents_
void beginRun(edm::Run const &, edm::EventSetup const &) override
std::vector< double > t_HitEnergies3
edm::EDGetTokenT< HcalIsoTrkEventVariablesCollection > tokIsoTrkEvt_
std::vector< int > t_ietaGood
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void endRun(edm::Run const &, edm::EventSetup const &) override
std::vector< unsigned int > t_DetIds3
std::vector< unsigned int > t_DetIds
std::vector< double > t_HitEnergies
const edm::InputTag labelIsoTkEvt_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
std::vector< HcalIsoTrkEventVariables > HcalIsoTrkEventVariablesCollection
HcalIsoTrackAnalyzer(edm::ParameterSet const &)
int iEvent
Definition: GenABIO.cc:224
RunNumber_t run() const
Definition: RunBase.h:40
std::vector< bool > t_trgbits
edm::EDGetTokenT< HcalIsoTrkCalibVariablesCollection > tokIsoTrkVar_
std::vector< int > t_ietaAll
#define debug
Definition: HDRShower.cc:19
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const edm::InputTag labelIsoTkVar_
std::vector< HcalIsoTrkCalibVariables > HcalIsoTrkCalibVariablesCollection
void analyze(edm::Event const &, edm::EventSetup const &) override
HLT enums.
std::vector< int > t_trackType
std::vector< bool > t_hltbits
Definition: tree.py:1
std::vector< unsigned int > t_DetIds1
int events
Definition: Run.h:45