CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
IsoTrackCalib.cc
Go to the documentation of this file.
1 #include "IsoTrackCalib.h"
6 
8  changed(false),
9  hltPrescaleProvider_(iConfig, consumesCollector(), *this),
10  nRun(0), t_trackP(0), t_trackPx(0), t_trackPy(0),
11  t_trackPz(0), t_trackEta(0), t_trackPhi(0), t_trackPt(0), t_neu_iso(0),
12  t_charge_iso(0), t_emip(0), t_ehcal(0), t_trkL3mindr(0), t_ieta(0),
13  t_disthotcell(0), t_ietahotcell(0), t_eventweight(0), t_l1pt(0), t_l1eta(0),
14  t_l1phi(0), t_l3pt(0), t_l3eta(0), t_l3phi(0), t_leadingpt(0),
15  t_leadingeta(0), t_leadingphi(0) {
16  //now do whatever initialization is needed
17  verbosity = iConfig.getUntrackedParameter<int>("Verbosity",0);
18  trigNames = iConfig.getUntrackedParameter<std::vector<std::string> >("Triggers");
19  theTrackQuality = iConfig.getUntrackedParameter<std::string>("TrackQuality","highPurity");
21  selectionParameters.minPt = iConfig.getUntrackedParameter<double>("MinTrackPt", 10.0);
22  selectionParameters.minQuality = trackQuality_;
23  selectionParameters.maxDxyPV = iConfig.getUntrackedParameter<double>("MaxDxyPV", 0.2);
24  selectionParameters.maxDzPV = iConfig.getUntrackedParameter<double>("MaxDzPV", 5.0);
25  selectionParameters.maxChi2 = iConfig.getUntrackedParameter<double>("MaxChi2", 5.0);
26  selectionParameters.maxDpOverP = iConfig.getUntrackedParameter<double>("MaxDpOverP", 0.1);
27  selectionParameters.minOuterHit = iConfig.getUntrackedParameter<int>("MinOuterHit", 4);
28  selectionParameters.minLayerCrossed = iConfig.getUntrackedParameter<int>("MinLayerCrossed", 8);
29  selectionParameters.maxInMiss = iConfig.getUntrackedParameter<int>("MaxInMiss", 0);
30  selectionParameters.maxOutMiss = iConfig.getUntrackedParameter<int>("MaxOutMiss", 0);
31  dr_L1 = iConfig.getUntrackedParameter<double>("IsolationL1",1.0);
32  a_coneR = iConfig.getUntrackedParameter<double>("ConeRadius",34.98);
33  a_charIsoR = a_coneR + 28.9;
34  a_neutIsoR = a_charIsoR*0.726;
35  a_mipR = iConfig.getUntrackedParameter<double>("ConeRadiusMIP",14.0);
36  a_neutR1 = iConfig.getUntrackedParameter<double>("ConeRadiusNeut1",21.0);
37  a_neutR2 = iConfig.getUntrackedParameter<double>("ConeRadiusNeut2",29.0);
38  cutMip = iConfig.getUntrackedParameter<double>("MIPCut", 1.0);
39  cutCharge = iConfig.getUntrackedParameter<double>("ChargeIsolation", 2.0);
40  cutNeutral = iConfig.getUntrackedParameter<double>("NeutralIsolation", 2.0);
41  minRunNo = iConfig.getUntrackedParameter<int>("minRun");
42  maxRunNo = iConfig.getUntrackedParameter<int>("maxRun");
43  drCuts = iConfig.getUntrackedParameter<std::vector<double> >("DRCuts");
44  bool isItAOD = iConfig.getUntrackedParameter<bool>("IsItAOD", true);
45  triggerEvent_ = edm::InputTag("hltTriggerSummaryAOD","","HLT");
46  theTriggerResultsLabel = edm::InputTag("TriggerResults","","HLT");
47 
48  // define tokens for access
49  tok_lumi = consumes<LumiDetails, edm::InLumi>(edm::InputTag("lumiProducer"));
50  tok_trigEvt = consumes<trigger::TriggerEvent>(triggerEvent_);
51  tok_trigRes = consumes<edm::TriggerResults>(theTriggerResultsLabel);
52  tok_genTrack_ = consumes<reco::TrackCollection>(edm::InputTag("generalTracks"));
53  tok_recVtx_ = consumes<reco::VertexCollection>(edm::InputTag("offlinePrimaryVertices"));
54  tok_bs_ = consumes<reco::BeamSpot>(edm::InputTag("offlineBeamSpot"));
55  tok_ew_ = consumes<GenEventInfoProduct>(edm::InputTag("generator"));
56  tok_pf_ = consumes<reco::PFJetCollection>(edm::InputTag("ak5PFJets"));
57 
58  if (isItAOD) {
59  tok_EB_ = consumes<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEB"));
60  tok_EE_ = consumes<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEE"));
61  tok_hbhe_ = consumes<HBHERecHitCollection>(edm::InputTag("reducedHcalRecHits", "hbhereco"));
62  } else {
63  tok_EB_ = consumes<EcalRecHitCollection>(edm::InputTag("ecalRecHit","EcalRecHitsEB"));
64  tok_EE_ = consumes<EcalRecHitCollection>(edm::InputTag("ecalRecHit","EcalRecHitsEE"));
65  tok_hbhe_ = consumes<HBHERecHitCollection>(edm::InputTag("hbhereco"));
66  }
67 
68  if (verbosity>=0) {
69  edm::LogInfo("IsoTrack") <<"Parameters read from config file \n"
70  <<"\t minPt " << selectionParameters.minPt
71  <<"\t theTrackQuality " << theTrackQuality
72  <<"\t minQuality " << selectionParameters.minQuality
73  <<"\t maxDxyPV " << selectionParameters.maxDxyPV
74  <<"\t maxDzPV " << selectionParameters.maxDzPV
75  <<"\t maxChi2 " << selectionParameters.maxChi2
76  <<"\t maxDpOverP " << selectionParameters.maxDpOverP
77  <<"\t minOuterHit " << selectionParameters.minOuterHit
78  <<"\t minLayerCrossed " << selectionParameters.minLayerCrossed
79  <<"\t maxInMiss " << selectionParameters.maxInMiss
80  <<"\t maxOutMiss " << selectionParameters.maxOutMiss
81  <<"\t a_coneR " << a_coneR
82  <<"\t a_charIsoR " << a_charIsoR
83  <<"\t a_neutIsoR " << a_neutIsoR
84  <<"\t a_mipR " << a_mipR
85  <<"\t a_neutR " << a_neutR1 << ":" << a_neutR2
86  <<"\t cuts (MIP " << cutMip << " : Charge " << cutCharge
87  <<" : Neutral " << cutNeutral << ")";
88  edm::LogInfo("IsoTrack") << trigNames.size() << " triggers to be studied";
89  for (unsigned int k=0; k<trigNames.size(); ++k)
90  edm::LogInfo("IsoTrack") << "Trigger[" << k << "] : " << trigNames[k];
91  edm::LogInfo("IsoTrack") << drCuts.size() << " Delta R zones wrt trigger objects";
92  for (unsigned int k=0; k<drCuts.size(); ++k)
93  edm::LogInfo("IsoTrack") << "Cut[" << k << "]: " << drCuts[k];
94  }
95 }
96 
98  // do anything here that needs to be done at desctruction time
99  // (e.g. close files, deallocate resources etc.)
100 
101  if (t_trackP) delete t_trackP;
102  if (t_trackPx) delete t_trackPx;
103  if (t_trackPy) delete t_trackPy;
104  if (t_trackPz) delete t_trackPz;
105  if (t_trackEta) delete t_trackEta;
106  if (t_trackPhi) delete t_trackPhi;
107  if (t_trackPt) delete t_trackPt;
108  if (t_neu_iso) delete t_neu_iso;
109  if (t_charge_iso) delete t_charge_iso;
110  if (t_emip) delete t_emip;
111  if (t_ehcal) delete t_ehcal;
112  if (t_trkL3mindr) delete t_trkL3mindr;
113  if (t_ieta) delete t_ieta;
114  if (t_disthotcell)delete t_disthotcell;
115  if (t_ietahotcell)delete t_ietahotcell;
116  if (t_eventweight)delete t_eventweight;
117  if (t_l1pt) delete t_l1pt;
118  if (t_l1eta) delete t_l1eta;
119  if (t_l1phi) delete t_l1phi;
120  if (t_l3pt) delete t_l3pt;
121  if (t_l3eta) delete t_l3eta;
122  if (t_l3phi) delete t_l3phi;
123  if (t_leadingpt) delete t_leadingpt;
124  if (t_leadingeta) delete t_leadingeta;
125  if (t_leadingphi) delete t_leadingphi;
126  }
127 
129 
130  Run = iEvent.id().run();
131  Event = iEvent.id().event();
132  if (verbosity%10 > 0)
133  edm::LogInfo("IsoTrack") << "Run " << Run << " Event " << Event
134  << " Luminosity " << iEvent.luminosityBlock()
135  << " Bunch " << iEvent.bunchCrossing() << " start";
137 
139 
140  //Get magnetic field and ECAL channel status
142  iSetup.get<IdealMagneticFieldRecord>().get(bFieldH);
143  const MagneticField *bField = bFieldH.product();
144 
146  iSetup.get<EcalSeverityLevelAlgoRcd>().get(sevlv);
147 
148  // get handles to calogeometry and calotopology
150  iSetup.get<CaloGeometryRecord>().get(pG);
151  const CaloGeometry* geo = pG.product();
152 
153  //Get track collection
155  iEvent.getByToken(tok_genTrack_, trkCollection);
156  reco::TrackCollection::const_iterator trkItr;
157 
158  double flatPtWeight = 0.0;
159  //event weight for FLAT sample
161  iEvent.getByToken(tok_ew_, genEventInfo);
162  flatPtWeight = genEventInfo->weight();
163 
164  //jets info
166  iEvent.getByToken(tok_pf_, pfJetsHandle);
167  reco::PFJetCollection::const_iterator pfItr;
168 
169  //Define the best vertex and the beamspot
171  iEvent.getByToken(tok_recVtx_, recVtxs);
172  edm::Handle<reco::BeamSpot> beamSpotH;
173  iEvent.getByToken(tok_bs_, beamSpotH);
174  math::XYZPoint leadPV(0,0,0);
175  if (recVtxs->size()>0 && !((*recVtxs)[0].isFake())) {
176  leadPV = math::XYZPoint( (*recVtxs)[0].x(),(*recVtxs)[0].y(), (*recVtxs)[0].z() );
177  } else if (beamSpotH.isValid()) {
178  leadPV = beamSpotH->position();
179  }
180  if ((verbosity/100)%10>0) {
181  edm::LogInfo("IsoTrack") << "Primary Vertex " << leadPV;
182  if (beamSpotH.isValid()) edm::LogInfo("IsoTrack") << "Beam Spot "
183  << beamSpotH->position();
184  }
185 
186  // RecHits
187  edm::Handle<EcalRecHitCollection> barrelRecHitsHandle;
188  edm::Handle<EcalRecHitCollection> endcapRecHitsHandle;
189  iEvent.getByToken(tok_EB_, barrelRecHitsHandle);
190  iEvent.getByToken(tok_EE_, endcapRecHitsHandle);
192  iEvent.getByToken(tok_hbhe_, hbhe);
193 
195  iEvent.getLuminosityBlock().getByToken(tok_lumi, Lumid);
196  float mybxlumi=-1;
197  if (Lumid.isValid())
198  mybxlumi=Lumid->lumiValue(LumiDetails::kOCC1,iEvent.bunchCrossing())*6.37;
199  if (verbosity%10 > 0) edm::LogInfo("IsoTrack") << "Luminosity " << mybxlumi;
200 
201  trigger::TriggerEvent triggerEvent;
202  edm::Handle<trigger::TriggerEvent> triggerEventHandle;
203  iEvent.getByToken(tok_trigEvt, triggerEventHandle);
204  if (!triggerEventHandle.isValid()) {
205  edm::LogWarning("IsoTrack") << "Error! Can't get the product "
206  << triggerEvent_.label();
207  } else {
208  triggerEvent = *(triggerEventHandle.product());
209 
210  const trigger::TriggerObjectCollection& TOC(triggerEvent.getObjects());
213  iEvent.getByToken(tok_trigRes, triggerResults);
214  if (triggerResults.isValid()) {
215  std::vector<std::string> modules;
216  h_nHLT->Fill(triggerResults->size());
217  const edm::TriggerNames & triggerNames = iEvent.triggerNames(*triggerResults);
218 
219  const std::vector<std::string> & triggerNames_ = triggerNames.triggerNames();
220  for (unsigned int iHLT=0; iHLT<triggerResults->size(); iHLT++) {
221  bool ok(false);
222  unsigned int triggerindx = hltConfig.triggerIndex(triggerNames_[iHLT]);
223  const std::vector<std::string>& moduleLabels(hltConfig.moduleLabels(triggerindx));
224  edm::LogInfo("IsoTrack") << iHLT << " " <<triggerNames_[iHLT];
225  int ipos = -1;
226  for (unsigned int i=0; i<HLTNames.size(); ++i) {
227  if (triggerNames_[iHLT] == HLTNames[i]) {
228  ipos = i;
229  break;
230  }
231  }
232  if (ipos < 0) {
233  ipos = (int)(HLTNames.size()+1);
234  HLTNames.push_back(triggerNames_[iHLT]);
235  h_HLTAccept->GetXaxis()->SetBinLabel(ipos+1,triggerNames_[iHLT].c_str());
236  }
237  if (firstEvent) h_HLTAccepts[nRun]->GetXaxis()->SetBinLabel(iHLT+1, triggerNames_[iHLT].c_str());
238  int hlt = triggerResults->accept(iHLT);
239  if (hlt) {
240  h_HLTAccepts[nRun]->Fill(iHLT+1);
241  h_HLTAccept->Fill(ipos+1);
242  }
243  if (iHLT >= 645) edm::LogInfo("IsoTrack") << "Wrong trigger " << Run
244  << " Event " << Event
245  << " Hlt " << iHLT;
246  for (unsigned int i=0; i<trigNames.size(); ++i) {
247  if (triggerNames_[iHLT].find(trigNames[i].c_str())!=std::string::npos) {
248  if (verbosity)
249  edm::LogInfo("IsoTrack") << "This is the trigger we are looking for " << triggerNames_[iHLT];
250  if (hlt > 0) ok = true;
251  }
252  }
253  if (verbosity%10 > 2)
254  edm::LogInfo("IsoTrack") << "Trigger fired? : " << ok;
255  if (ok) {
256  std::vector<math::XYZTLorentzVector> vec[3];
257  const std::pair<int,int> prescales(hltPrescaleProvider_.prescaleValues(iEvent,iSetup,triggerNames_[iHLT]));
258  int preL1 = prescales.first;
259  int preHLT = prescales.second;
260  int prescale = preL1*preHLT;
261  if (verbosity%10 > 0)
262  edm::LogInfo("IsoTrack") << triggerNames_[iHLT] << " accept "
263  << hlt << " preL1 " << preL1 << " preHLT "
264  << preHLT << " preScale " << prescale;
265  std::pair<unsigned int, std::string> iRunTrig =
266  std::pair<unsigned int, std::string>(Run,triggerNames_[iHLT]);
267  if (TrigList.find(iRunTrig) != TrigList.end() ) {
268  TrigList[iRunTrig] += 1;
269  } else {
270  TrigList.insert(std::pair<std::pair<unsigned int, std::string>, unsigned int>(iRunTrig,1));
271  TrigPreList.insert(std::pair<std::pair<unsigned int, std::string>, std::pair<int, int>>(iRunTrig,prescales));
272  }
273  //loop over all trigger filters in event (i.e. filters passed)
274  for (unsigned int ifilter=0; ifilter<triggerEvent.sizeFilters(); ++ifilter) {
275  std::vector<int> Keys;
276  std::string label = triggerEvent.filterTag(ifilter).label();
277  //loop over keys to objects passing this filter
278  for (unsigned int imodule=0; imodule<moduleLabels.size(); imodule++) {
279  if (label.find(moduleLabels[imodule]) != std::string::npos) {
280  if (verbosity%10 > 0)
281  edm::LogInfo("IsoTrack") << "FilterName " << label;
282  for (unsigned int ifiltrKey=0; ifiltrKey<triggerEvent.filterKeys(ifilter).size(); ++ifiltrKey) {
283  Keys.push_back(triggerEvent.filterKeys(ifilter)[ifiltrKey]);
284  const trigger::TriggerObject& TO(TOC[Keys[ifiltrKey]]);
285  math::XYZTLorentzVector v4(TO.px(), TO.py(), TO.pz(), TO.energy());
286  if(label.find("hltSingleJet") != std::string::npos) {
287  vec[1].push_back(v4);
288  } else if (label.find("hlt1PFJet") != std::string::npos) {
289  vec[2].push_back(v4);
290  } else {
291  vec[0].push_back(v4);
292  }
293  if (verbosity%10 > 2)
294  edm::LogInfo("IsoTrack") << "key " << ifiltrKey << " : pt "
295  << TO.pt() << " eta " << TO.eta()
296  << " phi " << TO.phi() << " mass "
297  << TO.mass() << " Id " << TO.id();
298  }
299  }
300  }
301  }
303  if (verbosity%10 > 0) {
304  for (int j=0; j<3; j++) {
305  for (unsigned int k=0; k<vec[j].size(); k++) {
306  edm::LogInfo("IsoTrack") << "vec[" << j << "][" << k << "] pt "
307  << vec[j][k].pt() << " eta "
308  << vec[j][k].eta() << " phi "
309  << vec[j][k].phi();
310  }
311  }
312  }
313  double deta, dphi, dr;
315  math::XYZTLorentzVector mindRvec1;
316  double mindR1(999);
317  for (int lvl=1; lvl<3; lvl++) {
318  for (unsigned int i=0; i<vec[lvl].size(); i++) {
319  deta = dEta(vec[0][0],vec[lvl][i]);
320  dphi = dPhi(vec[0][0],vec[lvl][i]);
321  dr = dR(vec[0][0],vec[lvl][i]);
322  if (verbosity%10 > 2)
323  edm::LogInfo("IsoTrack") << "lvl " << lvl << " i " << i
324  << " deta " << deta << " dphi "
325  << dphi << " dR " << dr;
326  if (dr<mindR1) {
327  mindR1 = dr;
328  mindRvec1 = vec[lvl][i];
329  }
330  }
331  }
332  //leading jet loop
333  for(pfItr=pfJetsHandle->begin();pfItr!=pfJetsHandle->end(); pfItr++){
334  t_leadingpt->push_back(pfItr->pt());
335  t_leadingeta->push_back(pfItr->eta());
336  t_leadingphi->push_back(pfItr->phi());
337  if (verbosity%10 > 0)
338  edm::LogInfo("IsoTrack") << "Leading jet : pt/eta/phi "
339  << pfItr->pt() << "/" << pfItr->eta()
340  << "/" << pfItr->phi();
341  break;
342  }
343  //tracks loop
344  std::vector<spr::propagatedTrackDirection> trkCaloDirections;
345  spr::propagateCALO(trkCollection, geo, bField, theTrackQuality, trkCaloDirections, ((verbosity/100)%10>2));
346  std::vector<spr::propagatedTrackDirection>::const_iterator trkDetItr;
347  unsigned int nTracks=0,nselTracks=0;
348  for (trkDetItr = trkCaloDirections.begin(),nTracks=0;
349  trkDetItr != trkCaloDirections.end(); trkDetItr++,nTracks++) {
350  const reco::Track* pTrack = &(*(trkDetItr->trkItr));
351  math::XYZTLorentzVector v4(pTrack->px(), pTrack->py(), pTrack->pz(), pTrack->p());
352  TLorentzVector trackinfo;
353  trackinfo.SetPxPyPzE(pTrack->px(), pTrack->py(), pTrack->pz(), pTrack->p());
354  if (verbosity%10 > 0)
355  edm::LogInfo("IsoTrack") << "This track : " << nTracks
356  << " (pt/eta/phi/p) :" << pTrack->pt()
357  << "/" << pTrack->eta() << "/"
358  << pTrack->phi() << "/" << pTrack->p();
359  math::XYZTLorentzVector mindRvec2;
360  double mindR2(999);
361  if(pTrack->pt()>10){
362  for (unsigned int k=0; k<vec[2].size(); ++k) {
363  dr = dR(vec[2][k],v4); //changed 1 to 2
364  if (dr<mindR2) {
365  mindR2 = dr;
366  mindRvec2 = vec[2][k];
367  }
368  }
369  if (verbosity%10 > 2)
370  edm::LogInfo("IsoTrack") << "Closest L3 object at mindr :"
371  << mindR2 << " is " << mindRvec2;
372  double mindR = dR(mindRvec1,v4);
373 
374  unsigned int i1 = drCuts.size();
375  for (unsigned int ik=0; ik<drCuts.size(); ++ik) {
376  if (mindR < drCuts[ik]) {
377  i1 = ik; break;
378  }
379  }
380  unsigned int i2 = drCuts.size();
381  for (unsigned int ik=0; ik<drCuts.size(); ++ik) {
382  if (mindR2 < drCuts[ik]) {
383  i2 = ik; break;
384  }
385  }
386 
387  //Selection of good track
388  bool selectTk = spr::goodTrack(pTrack,leadPV,selectionParameters,((verbosity/100)%10>2));
389  int ieta(0);
390  if (trkDetItr->okHCAL) {
391  HcalDetId detId = (HcalDetId)(trkDetItr->detIdHCAL);
392  ieta = detId.ieta();
393  }
394  if (verbosity%10 > 0)
395  edm::LogInfo("IsoTrack") << "seltlk/okECAL/okHCAL : "<< selectTk
396  << "/" << trkDetItr->okECAL << "/"
397  << trkDetItr->okHCAL << " iEta "
398  << ieta << " Classify " << i1 << ":"
399  << i2;
400  if (selectTk && trkDetItr->okECAL && trkDetItr->okHCAL) {
401  nselTracks++;
402  int nRH_eMipDR=0, nNearTRKs=0;
403  double e1 = spr::eCone_ecal(geo, barrelRecHitsHandle, endcapRecHitsHandle,
404  trkDetItr->pointHCAL, trkDetItr->pointECAL,
405  a_neutR1, trkDetItr->directionECAL, nRH_eMipDR);
406  double e2 = spr::eCone_ecal(geo, barrelRecHitsHandle, endcapRecHitsHandle,
407  trkDetItr->pointHCAL, trkDetItr->pointECAL,
408  a_neutR2, trkDetItr->directionECAL, nRH_eMipDR);
409  double eMipDR = spr::eCone_ecal(geo, barrelRecHitsHandle, endcapRecHitsHandle,
410  trkDetItr->pointHCAL, trkDetItr->pointECAL,
411  a_mipR, trkDetItr->directionECAL, nRH_eMipDR);
412  int ietaHotCell(-99), iphiHotCell(-99), nRecHitsCone(-999);
413  double distFromHotCell(-99.0);
414  std::vector<DetId> coneRecHitDetIds;
415  GlobalPoint gposHotCell(0.,0.,0.);
416  double eHcal = spr::eCone_hcal(geo, hbhe, trkDetItr->pointHCAL, trkDetItr->pointECAL,
417  a_coneR, trkDetItr->directionHCAL, nRecHitsCone,
418  coneRecHitDetIds, distFromHotCell,
419  ietaHotCell, iphiHotCell, gposHotCell);
420 
421  double conehmaxNearP = spr::chargeIsolationCone(nTracks, trkCaloDirections, a_charIsoR, nNearTRKs, ((verbosity/100)%10>2));
422  double e_inCone = e2 - e1;
423 
424  if (verbosity%10 > 0) {
425  edm::LogInfo("IsoTrack") << "This track : " << nTracks
426  <<" (pt/eta/phi/p) :" << pTrack->pt()
427  << "/" << pTrack->eta() << "/"
428  << pTrack->phi() << "/"
429  << pTrack->p() << "\n"
430  << " (MIP/neu_isol/charge_iso/HCAL_energy/iEta/distfromHcell/iEtaHcell) = "
431  << eMipDR << "/"<< e_inCone << "/"
432  << conehmaxNearP << "/" << eHcal
433  << "/" << ieta << "/" << distFromHotCell
434  << "/" <<ietaHotCell;
435  }
436  t_trackP->push_back(pTrack->p());
437  t_trackPx->push_back(pTrack->px());
438  t_trackPy->push_back(pTrack->py());
439  t_trackPz->push_back(pTrack->pz());
440  t_trackPt->push_back(pTrack->pt());;
441  t_trackEta->push_back(pTrack->eta());
442  t_trackPhi->push_back(pTrack->phi());
443  t_emip->push_back(eMipDR);
444  t_neu_iso->push_back(e_inCone);;
445  t_charge_iso->push_back(conehmaxNearP);
446  t_ehcal->push_back(eHcal);
447  t_trkL3mindr->push_back(mindR2);
448  t_ieta->push_back(ieta);
449  t_disthotcell->push_back(distFromHotCell);
450  t_ietahotcell->push_back(ietaHotCell);
451  }
452  }
453  }
454  if (verbosity%10 > 0) {
455  edm::LogInfo("IsoTrack") << "selected tracks = " << nselTracks
456  << "\nevent weight is = " << flatPtWeight
457  << "\n L1 trigger object : pt/eta/phi "
458  << vec[0][0].pt() << "/" << vec[0][0].eta()
459  << "/" << vec[0][0].phi()
460  << "\n L3 trigger object : pt/eta/phi "
461  << vec[2][0].pt() << "/" << vec[2][0].eta()
462  << "/"<< vec[2][0].phi();
463  }
464  t_l1pt->push_back(vec[0][0].pt());
465  t_l1eta->push_back(vec[0][0].eta());
466  t_l1phi->push_back(vec[0][0].phi());
467  t_l3pt->push_back(vec[2][0].pt());
468  t_l3eta->push_back(vec[2][0].eta());
469  t_l3phi->push_back(vec[2][0].phi());
470  t_eventweight->push_back(flatPtWeight);
471  // break;
472  }
473  }
474  // check if trigger names in (new) config
475  if (changed) {
476  changed = false;
477  if ((verbosity/10)%10 > 1) {
478  edm::LogInfo("IsoTrack") <<"New trigger menu found !!!";
479  const unsigned int n(hltConfig.size());
480  for (unsigned itrig=0; itrig<triggerNames_.size(); itrig++) {
481  unsigned int triggerindx = hltConfig.triggerIndex(triggerNames_[itrig]);
482  if (triggerindx >= n)
483  edm::LogInfo("IsoTrack") << triggerNames_[itrig] << " "
484  << triggerindx << " does not exist";
485  else
486  edm::LogInfo("IsoTrack") << triggerNames_[itrig] << " "
487  << triggerindx << " exists";
488  }
489  }
490  }
491  }
492  }
493  tree->Fill();
494 }
495 
497  h_nHLT = fs->make<TH1I>("h_nHLT" , "size of trigger Names", 1000, 0, 1000);
498  h_HLTAccept = fs->make<TH1I>("h_HLTAccept", "HLT Accepts for all runs", 1000, 0, 1000);
499  tree = fs->make<TTree>("tree", "tree");
500 
501  tree->Branch("Run",&Run,"Run/I");
502  tree->Branch("Event",&Event,"Event/I");
503  t_trackP = new std::vector<double>();
504  t_trackPx = new std::vector<double>();
505  t_trackPy = new std::vector<double>();
506  t_trackPz = new std::vector<double>();
507  t_trackEta = new std::vector<double>();
508  t_trackPhi = new std::vector<double>();
509  t_trackPt = new std::vector<double>();
510  t_neu_iso = new std::vector<double>();
511  t_charge_iso = new std::vector<double>();
512  t_emip = new std::vector<double>();
513  t_ehcal = new std::vector<double>();
514  t_trkL3mindr = new std::vector<double>();
515  t_ieta = new std::vector<int>();
516  t_disthotcell = new std::vector<double>();
517  t_ietahotcell = new std::vector<double>();
518  t_eventweight = new std::vector<double>();
519  t_l1pt = new std::vector<double>();
520  t_l1eta = new std::vector<double>();
521  t_l1phi = new std::vector<double>();
522  t_l3pt = new std::vector<double>();
523  t_l3eta = new std::vector<double>();
524  t_l3phi = new std::vector<double>();
525  t_leadingpt = new std::vector<double>();
526  t_leadingeta = new std::vector<double>();
527  t_leadingphi = new std::vector<double>();
528 
529  tree->Branch("t_trackP","std::vector<double>",&t_trackP);
530  tree->Branch("t_trackPx","std::vector<double>",&t_trackPx);
531  tree->Branch("t_trackPy","std::vector<double>",&t_trackPy);
532  tree->Branch("t_trackPz","std::vector<double>",&t_trackPz);
533  tree->Branch("t_trackEta","std::vector<double>",&t_trackEta);
534  tree->Branch("t_trackPhi","vector<double>",&t_trackPhi);
535  tree->Branch("t_trackPt","std::vector<double>",&t_trackPt);
536  tree->Branch("t_neu_iso","std::vector<double>",&t_neu_iso);
537  tree->Branch("t_charge_iso","std::vector<double>",&t_charge_iso);
538  tree->Branch("t_emip","std::vector<double>",&t_emip);
539  tree->Branch("t_ehcal","std::vector<double>",&t_ehcal);
540  tree->Branch("t_trkL3mindr","std::vector<double>",&t_trkL3mindr);
541  tree->Branch("t_ieta","std::vector<int>",&t_ieta);
542  tree->Branch("t_disthotcell","std::vector<double>",&t_disthotcell);
543  tree->Branch("t_ietahotcell","std::vector<double>",&t_ietahotcell);
544  tree->Branch("t_eventweight","std::vector<double>",&t_eventweight);
545  tree->Branch("t_l1pt","std::vector<double>",&t_l1pt);
546  tree->Branch("t_l1eta","std::vector<double>",&t_l1eta);
547  tree->Branch("t_l1phi","std::vector<double>",&t_l1phi);
548  tree->Branch("t_l3pt","std::vector<double>",&t_l3pt);
549  tree->Branch("t_l3eta","std::vector<double>",&t_l3eta);
550  tree->Branch("t_l3phi","std::vector<double>",&t_l3phi);
551  tree->Branch("t_leadingpt","std::vector<double>",&t_leadingpt);
552  tree->Branch("t_leadingeta","std::vector<double>",&t_leadingeta);
553  tree->Branch("t_leadingphi","std::vector<double>",&t_leadingphi);
554 }
555 
556 // ------------ method called once each job just after ending the event loop ------------
558  unsigned int preL1, preHLT;
559  std::map<std::pair<unsigned int, std::string>, unsigned int>::iterator itr;
560  std::map<std::pair<unsigned int, std::string>, const std::pair<int, int>>::iterator itrPre;
561  edm::LogInfo("IsoTrack") << "RunNo vs HLT accepts";
562  unsigned int n = maxRunNo - minRunNo +1;
563  g_Pre = fs->make<TH1I>("h_PrevsRN", "PreScale Vs Run Number", n, minRunNo, maxRunNo);
564  g_PreL1 = fs->make<TH1I>("h_PreL1vsRN", "L1 PreScale Vs Run Number", n, minRunNo, maxRunNo);
565  g_PreHLT = fs->make<TH1I>("h_PreHLTvsRN", "HLT PreScale Vs Run Number", n, minRunNo, maxRunNo);
566  g_Accepts = fs->make<TH1I>("h_HLTAcceptsvsRN", "HLT Accepts Vs Run Number", n, minRunNo, maxRunNo);
567 
568  for (itr=TrigList.begin(), itrPre=TrigPreList.begin(); itr!=TrigList.end(); itr++, itrPre++) {
569  preL1 = (itrPre->second).first;
570  preHLT = (itrPre->second).second;
571  g_Accepts->Fill((itr->first).first, itr->second);
572  g_PreL1->Fill((itr->first).first, preL1);
573  g_PreHLT->Fill((itr->first).first, preHLT);
574  g_Pre->Fill((itr->first).first, preL1*preHLT);
575  }
576 }
577 
578 // ------------ method called when starting to processes a run ------------
579 void IsoTrackCalib::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
580  edm::LogInfo("IsoTrack") << "Run[" << nRun <<"] " << iRun.run()
581  << " hltconfig.init " << hltPrescaleProvider_.init(iRun,iSetup,"HLT",changed);
582  char hname[100], htit[100];
583  sprintf(hname, "h_HLTAccepts_%i", iRun.run());
584  sprintf(htit, "HLT Accepts for Run No %i", iRun.run());
585  TH1I *hnew = fs->make<TH1I>(hname, htit, 1000, 0, 1000);
586  h_HLTAccepts.push_back(hnew);
587  firstEvent = true;
588 }
589 
590 // ------------ method called when ending the processing of a run ------------
591 void IsoTrackCalib::endRun(edm::Run const& iRun, edm::EventSetup const&) {
592  nRun++;
593  edm::LogInfo("IsoTrack") << "endRun[" << nRun << "] " << iRun.run();
594 }
595 
596 // ------------ method called when starting to processes a luminosity block ------------
598 // ------------ method called when ending the processing of a luminosity block ------------
600 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
602  //The following says we do not know what parameters are allowed so do no validation
603  // Please change this to state exactly what you do use, even if it is no parameters
605  desc.setUnknown();
606  descriptions.addDefault(desc);
607 }
608 
610  return (vec1.eta()-vec2.eta());
611 }
612 
614  return reco::deltaPhi(vec1.phi(),vec2.phi());
615 }
616 
618  return reco::deltaR(vec1.eta(),vec1.phi(),vec2.eta(),vec2.phi());
619 }
620 
622  return (vec1.pt()-vec2.pt());
623 }
624 
626  return (std::abs(vec1.r()-vec2.r()));
627 }
628 
630  return ((1/vec1.pt())-(1/vec2.pt()));
631 }
632 
634  t_trackP->clear();
635  t_trackPx->clear();
636  t_trackPy->clear();
637  t_trackPz->clear();
638  t_trackPt->clear();
639  t_trackEta->clear();
640  t_trackPhi->clear();
641  t_emip->clear();
642  t_neu_iso->clear();;
643  t_charge_iso->clear();
644  t_ehcal->clear();
645  t_trkL3mindr->clear();
646  t_ieta->clear();
647  t_disthotcell->clear();
648  t_ietahotcell->clear();
649  t_eventweight->clear();
650  t_l1pt->clear();
651  t_l1eta->clear();
652  t_l1phi->clear();
653  t_l3pt->clear();
654  t_l3eta->clear();
655  t_l3phi->clear();
656  t_leadingpt->clear();
657  t_leadingeta->clear();
658  t_leadingphi->clear();
659 }
660 
661 //define this as a plug-in
RunNumber_t run() const
Definition: EventID.h:39
unsigned int size() const
number of trigger paths in trigger table
double p() const
momentum vector magnitude
Definition: TrackBase.h:602
EventNumber_t event() const
Definition: EventID.h:41
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:220
std::vector< double > * t_trackP
std::vector< spr::propagatedTrackID > propagateCALO(edm::Handle< reco::TrackCollection > &trkCollection, const CaloGeometry *geo, const MagneticField *bField, std::string &theTrackQuality, bool debug=false)
edm::EDGetTokenT< EcalRecHitCollection > tok_EE_
int id() const
getters
Definition: TriggerObject.h:55
RunNumber_t run() const
Definition: RunBase.h:42
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:25
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:135
std::vector< double > * t_trackEta
std::vector< double > * t_l3pt
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
float phi() const
Definition: TriggerObject.h:58
bool getByToken(EDGetToken token, Handle< PROD > &result) const
virtual void endRun(edm::Run const &, edm::EventSetup const &)
edm::InputTag triggerEvent_
TrackQuality
track quality
Definition: TrackBase.h:149
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
const Keys & filterKeys(trigger::size_type index) const
Definition: TriggerEvent.h:111
edm::EDGetTokenT< reco::VertexCollection > tok_recVtx_
int bunchCrossing() const
Definition: EventBase.h:66
std::vector< double > * t_eventweight
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:63
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:632
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
float energy() const
Definition: TriggerObject.h:65
std::vector< double > * t_trackPhi
edm::EDGetTokenT< reco::TrackCollection > tok_genTrack_
double chargeIsolationCone(unsigned int trkIndex, std::vector< spr::propagatedTrackDirection > &trkDirs, double dR, int &nNearTRKs, bool debug=false)
double deltaR(const T1 &t1, const T2 &t2)
Definition: deltaR.h:48
float eta() const
Definition: TriggerObject.h:57
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:614
std::vector< double > * t_leadingeta
std::vector< double > * t_disthotcell
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_
edm::EDGetTokenT< edm::TriggerResults > tok_trigRes
Strings const & triggerNames() const
Definition: TriggerNames.cc:24
virtual void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &)
std::vector< double > * t_leadingphi
std::vector< TH1I * > h_HLTAccepts
unsigned int triggerIndex(const std::string &triggerName) const
slot position of trigger path in trigger table (0 to size-1)
std::vector< int > * t_ieta
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:22
U second(std::pair< T, U > const &p)
std::string theTrackQuality
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
std::vector< double > * t_l1pt
edm::EDGetTokenT< trigger::TriggerEvent > tok_trigEvt
std::vector< double > * t_trackPt
std::vector< double > * t_trackPy
double dR(double eta1, double eta2, double phi1, double phi2)
std::vector< double > drCuts
std::vector< std::string > HLTNames
Definition: IsoTrackCalib.h:99
std::vector< double > * t_ehcal
double dinvPt(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
std::vector< double > * t_trackPx
int iEvent
Definition: GenABIO.cc:230
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:638
void addDefault(ParameterSetDescription const &psetDescription)
std::vector< double > * t_ietahotcell
edm::Service< TFileService > fs
Definition: IsoTrackCalib.h:97
edm::EDGetTokenT< reco::BeamSpot > tok_bs_
bool goodTrack(const reco::Track *pTrack, math::XYZPoint leadPV, trackSelectionParameters parameters, bool debug=false)
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:98
std::vector< double > vec1
Definition: HCALResponse.h:15
double pt() const
track transverse momentum
Definition: TrackBase.h:608
int ieta() const
get the cell ieta
Definition: HcalDetId.h:51
edm::EDGetTokenT< EcalRecHitCollection > tok_EB_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
HLTPrescaleProvider hltPrescaleProvider_
Definition: IsoTrackCalib.h:98
int j
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< reco::PFJetCollection > tok_pf_
double eCone_ecal(const CaloGeometry *geo, edm::Handle< T > &barrelhits, edm::Handle< T > &endcaphits, const GlobalPoint &hpoint1, const GlobalPoint &point1, double dR, const GlobalVector &trackMom, int &nRecHits, double ebThr=-100, double eeThr=-100, double tMin=-500, double tMax=500, bool debug=false)
edm::EDGetTokenT< LumiDetails > tok_lumi
LuminosityBlock const & getLuminosityBlock() const
Definition: Event.h:84
static std::string const triggerResults
Definition: EdmProvDump.cc:40
bool isValid() const
Definition: HandleBase.h:75
std::vector< double > * t_l1phi
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:626
std::vector< double > * t_emip
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
double dP(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:81
double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:12
const edm::InputTag filterTag(trigger::size_type index) const
Definition: TriggerEvent.h:103
std::vector< double > * t_charge_iso
double dEta(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
std::vector< double > * t_l3phi
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:123
virtual void beginRun(edm::Run const &, edm::EventSetup const &)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
T const * product() const
Definition: Handle.h:81
double eCone_hcal(const CaloGeometry *geo, edm::Handle< T > &hits, const GlobalPoint &hpoint1, const GlobalPoint &point1, double dR, const GlobalVector &trackMom, int &nRecHits, double hbThr=-100, double heThr=-100, double hfThr=-100, double hoThr=-100, double tMin=-500, double tMax=500, int detOnly=-1, bool debug=false)
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
TH1I * h_HLTAccept
std::vector< size_type > Keys
virtual void beginJob()
edm::EDGetTokenT< GenEventInfoProduct > tok_ew_
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
std::pair< int, int > prescaleValues(const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
Combined L1T (pair.first) and HLT (pair.second) prescales per HLT path.
std::vector< double > * t_trackPz
std::map< std::pair< unsigned int, std::string >, unsigned int > TrigList
HLTConfigProvider const & hltConfigProvider() const
std::string const & label() const
Definition: InputTag.h:43
edm::EventID id() const
Definition: EventBase.h:60
spr::trackSelectionParameters selectionParameters
std::vector< double > * t_l3eta
reco::TrackBase::TrackQuality minQuality
edm::InputTag theTriggerResultsLabel
double dPhi(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
volatile std::atomic< bool > shutdown_flag false
float mass() const
Definition: TriggerObject.h:59
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< vec1 > vec2
Definition: HCALResponse.h:16
double dPt(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
std::vector< double > * t_l1eta
std::map< std::pair< unsigned int, std::string >, const std::pair< int, int > > TrigPreList
virtual void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &)
std::vector< double > * t_leadingpt
virtual void endJob()
std::vector< double > * t_trkL3mindr
std::vector< double > * t_neu_iso
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:620
Definition: Run.h:43
std::vector< std::string > trigNames
Definition: IsoTrackCalib.h:99
void clearTreeVectors()
IsoTrackCalib(const edm::ParameterSet &)
Definition: IsoTrackCalib.cc:7