CMS 3D CMS Logo

ValidIsoTrkCalib.cc
Go to the documentation of this file.
1 //
2 // Package: ValidIsoTrkCalib
3 // Class: ValidIsoTrkCalib
4 //
5 
6 /*
7  Description: Validation for Isolated tracks Calibration
8 
9  Implementation:
10 See the twiki page for details:
11 https://twiki.cern.ch/twiki/bin/view/CMS/ValidIsoTrkCalib
12 
13 */
14 
15 //
16 // Original Author: Andrey Pozdnyakov
17 // Created: Tue Nov 4 01:16:05 CET 2008
18 //
19 
20 // system include files
21 
22 #include <memory>
23 
24 // user include files
28 
29 //#include "FWCore/Framework/interface/Event.h"
30 //#include "FWCore/Framework/interface/MakerMacros.h"
31 //#include "FWCore/ParameterSet/interface/ParameterSet.h"
32 
41 
51 
53 
54 #include "TROOT.h"
55 #include "TFile.h"
56 #include "TTree.h"
57 #include "TH1F.h"
58 
59 #include <fstream>
60 #include <map>
61 
62 using namespace edm;
63 using namespace std;
64 using namespace reco;
65 
67 public:
68  explicit ValidIsoTrkCalib(const edm::ParameterSet&);
69  ~ValidIsoTrkCalib() override;
70 
71  // double getDistInPlaneSimple(const GlobalPoint caloPoint, const GlobalPoint rechitPoint);
72 
73 private:
74  void beginJob() override;
75  void analyze(const edm::Event&, const edm::EventSetup&) override;
76  void endJob() override;
77 
78  // ----------member data ---------------------------
79 
80  //Variables from HcalIsotrackAnalyzer
81 
84  double taECALCone_;
85  double taHCALCone_;
86 
87  const CaloGeometry* geo;
88  // nothing is done with these tags, so I leave it - cowden
91  std::vector<edm::InputTag> genecalLabel_;
92 
98 
99  //std::string m_inputTrackLabel;
100  //std::string m_hcalLabel;
101 
103  string AxB_;
105 
108  //string calibFactorsFileName_;
109  // string corrfile;
110 
112  //bool takeAllRecHits_, takeGenTracks_;
113  int gen, iso, pix;
114  float genPt[500], genPhi[500], genEta[500];
115  float isoPt[500], isoPhi[500], isoEta[500];
116  float pixPt[500], pixPhi[500], pixEta[500];
117  //int hbheiEta[5000],hbheiPhi[5000],hbheDepth[5000];
118  //float hbheEnergy[5000];
119 
120  int NisoTrk;
121  float trackPt, trackE, trackEta, trackPhi;
122  float ptNear;
123  float ptrack, rvert;
124  //float eecal, ehcal;
125 
126  int MinNTrackHitsBarrel, MinNTECHitsEndcap;
127  double energyECALmip, maxPNear;
128  double energyMinIso, energyMaxIso;
129 
130  Float_t emEnergy;
131  Float_t targetE;
132 
133  //TFile* rootFile;
134  // TTree* tree;
135  TTree *tTree, *fTree;
136 
137  Float_t xTrkEcal;
138  Float_t yTrkEcal;
139  Float_t zTrkEcal;
140 
141  Float_t xTrkHcal;
142  Float_t yTrkHcal;
143  Float_t zTrkHcal;
144 
145  int Nhits;
146  float eClustBefore; //Calo energy before calibration
147  float eClustAfter; //After calibration
148  float eTrack; //Track energy
149  float etaTrack;
150  float phiTrack;
151  float eECAL; // Energy deposited in ECAL
152  int numHits; //number of rechits
153  //float e3x3;
154 
162  int iEta;
163  int iPhi;
164  int iEtaTr;
165  int iPhiTr;
166  float iDr, delR;
167  int dietatr;
168  int diphitr;
169 
170  float iTime;
171  float HTime[100];
172  float e3x3Before;
173  float e3x3After;
174  float e5x5Before;
175  float e5x5After;
178  float PtNearBy;
179  float numVH, numVS, numValidTrkHits, numValidTrkStrips;
180 
182  // map<UInt_t, Float_t> CalibFactors;
183  // Bool_t ReadCalibFactors(string);
184 
185  TH1F* nTracks;
186 
188  // int Lumi_n;
189 };
190 
192 
193 {
194  //takeAllRecHits_=iConfig.getUntrackedParameter<bool>("takeAllRecHits");
195  takeGenTracks_ = iConfig.getUntrackedParameter<bool>("takeGenTracks");
196 
197  tok_genTrack_ = consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("genTracksLabel"));
198  genhbheLabel_ = iConfig.getParameter<edm::InputTag>("genHBHE");
199  //genhoLabel_=iConfig.getParameter<edm::InputTag>("genHO");
200  //genecalLabel_=iConfig.getParameter<std::vector<edm::InputTag> >("genECAL");
201 
202  // m_hcalLabel = iConfig.getUntrackedParameter<std::string> ("hcalRecHitsLabel","hbhereco");
203 
204  tok_hbhe_ = consumes<HBHERecHitCollection>(iConfig.getParameter<edm::InputTag>("hbheInput"));
205  tok_ho_ = consumes<HORecHitCollection>(iConfig.getParameter<edm::InputTag>("hoInput"));
206  //eLabel_=iConfig.getParameter<edm::InputTag>("eInput");
207  tok_track_ =
208  consumes<reco::IsolatedPixelTrackCandidateCollection>(iConfig.getParameter<edm::InputTag>("HcalIsolTrackInput"));
209  tok_track1_ = consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("trackInput"));
210 
211  associationConeSize_ = iConfig.getParameter<double>("associationConeSize");
212  allowMissingInputs_ = iConfig.getUntrackedParameter<bool>("allowMissingInputs", true);
213  // outputFileName_=iConfig.getParameter<std::string>("outputFileName");
214  // calibFactorsFileName_=iConfig.getParameter<std::string>("calibFactorsFileName");
215 
216  AxB_ = iConfig.getParameter<std::string>("AxB");
217  calibrationConeSize_ = iConfig.getParameter<double>("calibrationConeSize");
218 
219  MinNTrackHitsBarrel = iConfig.getParameter<int>("MinNTrackHitsBarrel");
220  MinNTECHitsEndcap = iConfig.getParameter<int>("MinNTECHitsEndcap");
221  energyECALmip = iConfig.getParameter<double>("energyECALmip");
222  energyMinIso = iConfig.getParameter<double>("energyMinIso");
223  energyMaxIso = iConfig.getParameter<double>("energyMaxIso");
224  maxPNear = iConfig.getParameter<double>("maxPNear");
225 
226  edm::ParameterSet parameters = iConfig.getParameter<edm::ParameterSet>("TrackAssociatorParameters");
227  edm::ConsumesCollector iC = consumesCollector();
228  parameters_.loadParameters(parameters, iC);
229  trackAssociator_.useDefaultPropagator();
230 
231  // taECALCone_=iConfig.getUntrackedParameter<double>("TrackAssociatorECALCone",0.5);
232  //taHCALCone_=iConfig.getUntrackedParameter<double>("TrackAssociatorHCALCone",0.6);
233 }
234 
236  // do anything here that needs to be done at desctruction time
237  // (e.g. close files, deallocate resources etc.)
238 }
239 
240 // ------------ method called to for each event ------------
242  using namespace edm;
243 
244  try {
245  edm::ESHandle<HcalRespCorrs> recalibCorrs;
246  iSetup.get<HcalRespCorrsRcd>().get("recalibrate", recalibCorrs);
247  respRecalib = recalibCorrs.product();
248 
249  LogInfo("CalibConstants") << " Loaded: OK ";
250 
251  } catch (const cms::Exception& e) {
252  LogWarning("CalibConstants") << " Not Found!! ";
253  }
254 
256  iEvent.getByToken(tok_genTrack_, generalTracks);
257 
259  iEvent.getByToken(tok_track1_, isoProdTracks);
260 
262  //edm::Handle<reco::TrackCollection> isoPixelTracks;
263  iEvent.getByToken(tok_track_, isoPixelTracks);
264 
265  /*
266  edm::Handle<EcalRecHitCollection> ecal;
267  iEvent.getByLabel(eLabel_,ecal);
268  const EcalRecHitCollection Hitecal = *(ecal.product());
269  */
270 
272  iEvent.getByToken(tok_hbhe_, hbhe);
273  const HBHERecHitCollection Hithbhe = *(hbhe.product());
274 
276  iSetup.get<CaloGeometryRecord>().get(pG);
277  geo = pG.product();
278 
279  const HcalGeometry* gHcal = static_cast<const HcalGeometry*>(geo->getSubdetectorGeometry(DetId::Hcal, HcalBarrel));
280  //Note: even though it says HcalBarrel, we actually get the whole Hcal detector geometry!
281 
282  // Lumi_n=iEvent.luminosityBlock();
283  parameters_.useEcal = true;
284  parameters_.useHcal = true;
285  parameters_.useCalo = false;
286  parameters_.useMuon = false;
287  //parameters_.dREcal = taECALCone_;
288  //parameters_.dRHcal = taHCALCone_;
289 
290  //cout<<"Hello World. TrackCollectionSize: "<< isoPixelTracks->size()<<endl;
291 
292  if (isoPixelTracks->empty())
293  return;
294 
295  for (reco::TrackCollection::const_iterator trit = isoProdTracks->begin(); trit != isoProdTracks->end(); trit++) {
296  reco::IsolatedPixelTrackCandidateCollection::const_iterator isoMatched = isoPixelTracks->begin();
297  //reco::TrackCollection::const_iterator isoMatched=isoPixelTracks->begin();
298  bool matched = false;
299 
300  //for (reco::IsolatedPixelTrackCandidateCollection::const_iterator trit = isoPixelTracks->begin(); trit!=isoPixelTracks->end(); trit++)
301  for (reco::IsolatedPixelTrackCandidateCollection::const_iterator it = isoPixelTracks->begin();
302  it != isoPixelTracks->end();
303  it++)
304  //for (reco::TrackCollection::const_iterator it = isoPixelTracks->begin(); it!=isoPixelTracks->end(); it++)
305  {
306  if (abs((trit->pt() - it->pt()) / it->pt()) < 0.005 && abs(trit->eta() - it->eta()) < 0.01) {
307  isoMatched = it;
308  matched = true;
309  break;
310  }
311  }
312  // CUT
313 
314  if (!matched)
315  continue;
316  if (isoMatched->maxPtPxl() > maxPNear)
317  continue;
318 
319  ptNear = isoMatched->maxPtPxl();
320  //cout<<"Point 0.1 isoMatch. ptnear: "<<ptNear<<endl;
321 
322  // CUT
323  if (trit->hitPattern().numberOfValidHits() < MinNTrackHitsBarrel)
324  continue;
325  if (fabs(trit->eta()) > 1.47 && trit->hitPattern().numberOfValidStripTECHits() < MinNTECHitsEndcap)
326  continue;
327 
328  //cout<<"Point 0.2.1 after numofvalidhits HB: "<<trit->hitPattern().numberOfValidHits()<<endl;
329  //cout<<"Point 0.2.2 after numofvalidstrips HE: "<<trit->hitPattern().numberOfValidStripTECHits()<<endl;
330 
331  numVH = trit->hitPattern().numberOfValidHits();
332  numVS = trit->hitPattern().numberOfValidStripTECHits();
333 
334  trackE = sqrt(trit->px() * trit->px() + trit->py() * trit->py() + trit->pz() * trit->pz() + 0.14 * 0.14);
335  trackPt = trit->pt();
336  trackEta = trit->eta();
337  trackPhi = trit->phi();
338 
339  emEnergy = isoMatched->energyIn();
340 
341  //cout<<"Point 0.3. Matched :: pt: "<<trit->pt()<<" wholeEnergy: "<<trackE<<" emEnergy: "<<emEnergy<<" eta: "<<etahcal<<" phi: "<<phihcal<<endl;
342  //cout<<"Point 0.4. EM energy in cone: "<<emEnergy<<" EtaHcal: "<<etahcal<<" PhiHcal: "<<phihcal<<endl;
343 
345  trackAssociator_.associate(iEvent, iSetup, trackAssociator_.getFreeTrajectoryState(iSetup, *trit), parameters_);
346 
347  //float etaecal=info.trkGlobPosAtEcal.eta();
348  //float phiecal=info.trkGlobPosAtEcal.phi();
349  // float etahcal=info.trkGlobPosAtHcal.eta();
350  // float phihcal=info.trkGlobPosAtHcal.phi();
351 
352  xTrkEcal = info.trkGlobPosAtEcal.x();
353  yTrkEcal = info.trkGlobPosAtEcal.y();
354  zTrkEcal = info.trkGlobPosAtEcal.z();
355 
356  xTrkHcal = info.trkGlobPosAtHcal.x();
357  yTrkHcal = info.trkGlobPosAtHcal.y();
358  zTrkHcal = info.trkGlobPosAtHcal.z();
359 
360  if (xTrkEcal == 0 && yTrkEcal == 0 && zTrkEcal == 0) {
361  cout << "zero point at Ecal" << endl;
362  continue;
363  }
364  if (xTrkHcal == 0 && yTrkHcal == 0 && zTrkHcal == 0) {
365  cout << "zero point at Hcal" << endl;
366  continue;
367  }
368 
369  /*GlobalVector trackMomAtEcal = info.trkMomAtEcal;
370  GlobalVector trackMomAtHcal = info.trkMomAtHcal;
371 
372  PxTrkHcal = trackMomAtHcal.x();
373  PyTrkHcal = trackMomAtHcal.y();
374  PzTrkHcal = trackMomAtHcal.z();
375  */
376 
377  GlobalPoint gPointEcal(xTrkEcal, yTrkEcal, zTrkEcal);
378  GlobalPoint gPointHcal(xTrkHcal, yTrkHcal, zTrkHcal);
379 
380  int iphitrue = -10;
381  int ietatrue = 100;
382  const HcalDetId tempId = gHcal->getClosestCell(gPointHcal);
383  ietatrue = tempId.ieta();
384  iphitrue = tempId.iphi();
385 
386  MaxHit_struct MaxHit;
387 
388  MaxHit.hitenergy = -100.;
389 
390  //container for used recHits
391  std::vector<DetId> usedHits;
392  //
393  usedHits.clear();
394  //cout <<"Point 1. Entrance to HBHECollection"<<endl;
395 
396  //float dddeta = 1000.;
397  //float dddphi = 1000.;
398  //int iphitrue = 1234;
399  //int ietatrue = 1234;
400 
401  GlobalPoint gPhot;
402 
403  for (HBHERecHitCollection::const_iterator hhit = Hithbhe.begin(); hhit != Hithbhe.end(); hhit++) {
404  //check that this hit was not considered before and push it into usedHits
405  bool hitIsUsed = false;
406  for (uint32_t i = 0; i < usedHits.size(); i++) {
407  if (usedHits[i] == hhit->id())
408  hitIsUsed = true;
409  }
410  if (hitIsUsed)
411  continue;
412  usedHits.push_back(hhit->id());
413  //
414 
415  // rof 16.05.2008 start: include the possibility for recalibration
416  float recal = 1;
417  // rof end
418 
419  GlobalPoint pos = geo->getPosition(hhit->detid());
420  //float phihit = pos.phi();
421  //float etahit = pos.eta();
422 
423  int iphihitm = (hhit->id()).iphi();
424  int ietahitm = (hhit->id()).ieta();
425  int depthhit = (hhit->id()).depth();
426  float enehit = hhit->energy() * recal;
427 
428  if (depthhit != 1)
429  continue;
430 
431  /*
432  float dphi = fabs(phihcal - phihit);
433  if(dphi > 4.*atan(1.)) dphi = 8.*atan(1.) - dphi;
434  float deta = fabs(etahcal - etahit);
435  float dr = sqrt(dphi*dphi + deta*deta);
436  */
437 
438  //double distAtHcal = getDistInPlaneTrackDir(gPointHcal, trackMomAtHcal, pos);
439  double distAtHcal = getDistInPlaneSimple(gPointHcal, pos);
440 
441  if (distAtHcal < associationConeSize_) {
442  for (HBHERecHitCollection::const_iterator hhit2 = Hithbhe.begin(); hhit2 != Hithbhe.end(); hhit2++) {
443  int iphihitm2 = (hhit2->id()).iphi();
444  int ietahitm2 = (hhit2->id()).ieta();
445  int depthhit2 = (hhit2->id()).depth();
446  float enehit2 = hhit2->energy() * recal;
447 
448  if (iphihitm == iphihitm2 && ietahitm == ietahitm2 && depthhit != depthhit2)
449  enehit = enehit + enehit2;
450  }
451 
452  //cout<<"IN CONE ieta: "<<ietahitm<<" iphi: "<<iphihitm<<" depthhit: "<<depthhit<<" dr: "<<dr<<" energy: "<<enehit<<endl;
453 
454  //Find a Hit with Maximum Energy
455 
456  if (enehit > MaxHit.hitenergy) {
457  MaxHit.hitenergy = enehit;
458  MaxHit.ietahitm = (hhit->id()).ieta();
459  MaxHit.iphihitm = (hhit->id()).iphi();
460  MaxHit.dr = distAtHcal;
461  //MaxHit.depthhit = (hhit->id()).depth();
462  MaxHit.depthhit = 1;
463 
464  //gPhot = geo->getPosition(hhit->detid());
465  }
466  }
467  } //end of all HBHE hits cycle
468 
469  usedHits.clear();
470 
471  //cout<<"Hottest ieta: "<<MaxHit.ietahitm<<" iphi: "<<MaxHit.iphihitm<<" dr: "<<MaxHit.dr<<endl;
472  //cout<<"Track ieta: "<<ietatrue<<" iphi: "<<iphitrue<<endl;
473 
474  //cout<<"Point 3. MaxHit :::En "<<MaxHit.hitenergy<<" ieta: "<<MaxHit.ietahitm<<" iphi: "<<MaxHit.iphihitm<<endl;
475 
476  Bool_t passCuts = kFALSE;
477  if (trackE > energyMinIso && trackE < energyMaxIso && emEnergy < energyECALmip && MaxHit.hitenergy > 0. &&
478  abs(MaxHit.ietahitm) < 29)
479  passCuts = kTRUE;
480 
481  //cout<<"Pont 0.1.1. trackE:"<<trackE<<" emEn: "<<emEnergy<<endl;
482 
483  numHits = 0;
484 
485  eClustBefore = 0.0;
486  eClustAfter = 0.0;
487  eBeforeDepth1 = 0.0;
488  eAfterDepth1 = 0.0;
489  eBeforeDepth2 = 0.0;
490  eAfterDepth2 = 0.0;
491  CentHitFactor = 0.0;
492  e3x3After = 0.0;
493  e3x3Before = 0.0;
494  e5x5After = 0.0;
495  e5x5Before = 0.0;
496 
497  for (HBHERecHitCollection::const_iterator hhit = Hithbhe.begin(); hhit != Hithbhe.end(); hhit++) {
498  //check that this hit was not considered before and push it into usedHits
499  bool hitIsUsed = false;
500  for (uint32_t i = 0; i < usedHits.size(); i++) {
501  if (usedHits[i] == hhit->id())
502  hitIsUsed = true;
503  }
504  if (hitIsUsed)
505  continue;
506  usedHits.push_back(hhit->id());
507 
508  int DIETA = 100;
509  if (MaxHit.ietahitm * (hhit->id()).ieta() > 0) {
510  DIETA = MaxHit.ietahitm - (hhit->id()).ieta();
511  }
512  if (MaxHit.ietahitm * (hhit->id()).ieta() < 0) {
513  DIETA = MaxHit.ietahitm - (hhit->id()).ieta();
514  DIETA = DIETA > 0 ? DIETA - 1 : DIETA + 1;
515  }
516 
517  int DIPHI = abs(MaxHit.iphihitm - (hhit->id()).iphi());
518  DIPHI = DIPHI > 36 ? 72 - DIPHI : DIPHI;
519 
520  int numbercell = 100; //always collect Wide clastor!
521 
522  //if(AxB_=="5x5" || AxB_=="3x3" || AxB_=="7x7"|| AxB_=="Cone")
523 
524  //if(AxB_=="3x3") numbercell = 1;
525  //if(AxB_=="5x5") numbercell = 2;
526  //if(AxB_=="Cone") numbercell = 1000;
527 
528  if (abs(DIETA) <= numbercell &&
529  (abs(DIPHI) <= numbercell || (abs(MaxHit.ietahitm) >= 20 && abs(DIPHI) <= numbercell + 1))) {
530  const GlobalPoint pos2 = geo->getPosition(hhit->detid());
531 
532  if (passCuts && hhit->energy() > 0) {
533  float factor = 0.0;
534  // factor = CalibFactors[hhit->id()];
535  factor = respRecalib->getValues(hhit->id())->getValue();
536 
537  //if(i<5){cout<<" calib factors: "<<factor<<" ij "<<100*i+j<<endl;}
538 
539  if (hhit->id().ieta() == MaxHit.ietahitm && hhit->id().iphi() == MaxHit.iphihitm)
540  CentHitFactor = factor;
541 
542  if (hhit->id().ieta() == MaxHit.ietahitm && hhit->id().iphi() == MaxHit.iphihitm)
543  iTime = hhit->time();
544 
545  if (AxB_ != "3x3" && AxB_ != "5x5" && AxB_ != "Cone")
546  LogWarning(" AxB ") << " Not supported: " << AxB_;
547 
548  if (abs(DIETA) <= 2 && (abs(DIPHI) <= 2 || ((abs(MaxHit.ietahitm) > 20 && abs(DIPHI) <= 4) &&
549  !((abs(MaxHit.ietahitm) == 21 || abs(MaxHit.ietahitm) == 22) &&
550  abs((hhit->id()).ieta()) <= 20 && abs(DIPHI) > 2)))) {
551  e5x5Before += hhit->energy();
552  e5x5After += hhit->energy() * factor;
553  }
554 
555  if (abs(DIETA) <= 1 && (abs(DIPHI) <= 1 || ((abs(MaxHit.ietahitm) > 20 && abs(DIPHI) <= 2) &&
556  !(abs(MaxHit.ietahitm) == 21 && abs((hhit->id()).ieta()) <= 20 &&
557  abs(DIPHI) > 1)))) {
558  e3x3Before += hhit->energy();
559  e3x3After += hhit->energy() * factor;
560  }
561 
562  if (AxB_ == "5x5") {
563  if (abs(DIETA) <= 2 && (abs(DIPHI) <= 2 || (abs(MaxHit.ietahitm) > 20 && abs(DIPHI) <= 4))) {
564  if (abs(MaxHit.ietahitm) == 21 && abs((hhit->id()).ieta()) <= 20 && abs(DIPHI) > 3)
565  continue;
566 
567  HTime[numHits] = hhit->time();
568  numHits++;
569 
570  eClustBefore += hhit->energy();
571  eClustAfter += hhit->energy() * factor;
572 
573  if ((hhit->id().depth() == 1) && (abs(hhit->id().ieta()) > 17) && (abs(hhit->id().ieta()) < 29)) {
574  eBeforeDepth1 += hhit->energy();
575  eAfterDepth1 += hhit->energy() * factor;
576  } else if ((hhit->id().depth() == 2) && (abs(hhit->id().ieta()) > 17) && (abs(hhit->id().ieta()) < 29)) {
577  eBeforeDepth2 += hhit->energy();
578  eAfterDepth2 += hhit->energy() * factor;
579  }
580  }
581  } //end of 5x5
582 
583  if (AxB_ == "3x3") {
584  if (abs(DIETA) <= 1 && (abs(DIPHI) <= 1 || (abs(MaxHit.ietahitm) > 20 && abs(DIPHI) <= 2))) {
585  if (abs(MaxHit.ietahitm) == 21 && abs((hhit->id()).ieta()) <= 20 && abs(DIPHI) > 2)
586  continue;
587 
588  HTime[numHits] = hhit->time();
589  numHits++;
590 
591  eClustBefore += hhit->energy();
592  eClustAfter += hhit->energy() * factor;
593 
594  if ((hhit->id().depth() == 1) && (abs(hhit->id().ieta()) > 17) && (abs(hhit->id().ieta()) < 29)) {
595  eBeforeDepth1 += hhit->energy();
596  eAfterDepth1 += hhit->energy() * factor;
597  } else if ((hhit->id().depth() == 2) && (abs(hhit->id().ieta()) > 17) && (abs(hhit->id().ieta()) < 29)) {
598  eBeforeDepth2 += hhit->energy();
599  eAfterDepth2 += hhit->energy() * factor;
600  }
601  }
602  } //end of 3x3
603 
604  if (AxB_ == "Cone" && getDistInPlaneSimple(gPointHcal, pos2) < calibrationConeSize_) {
605  HTime[numHits] = hhit->time();
606  numHits++;
607 
608  eClustBefore += hhit->energy();
609  eClustAfter += hhit->energy() * factor;
610 
611  if ((hhit->id().depth() == 1) && (abs(hhit->id().ieta()) > 17) && (abs(hhit->id().ieta()) < 29)) {
612  eBeforeDepth1 += hhit->energy();
613  eAfterDepth1 += hhit->energy() * factor;
614  } else if ((hhit->id().depth() == 2) && (abs(hhit->id().ieta()) > 17) && (abs(hhit->id().ieta()) < 29)) {
615  eBeforeDepth2 += hhit->energy();
616  eAfterDepth2 += hhit->energy() * factor;
617  }
618 
619  } //end of Cone
620 
621  } //end of passCuts
622 
623  } //end of DIETA DIPHI
624 
625  } //end of associatedcone HBHE hits cycle
626 
627  int dieta_M_P = 100;
628  int diphi_M_P = 100;
629  if (MaxHit.ietahitm * ietatrue > 0) {
630  dieta_M_P = abs(MaxHit.ietahitm - ietatrue);
631  }
632  if (MaxHit.ietahitm * ietatrue < 0) {
633  dieta_M_P = abs(MaxHit.ietahitm - ietatrue) - 1;
634  }
635  diphi_M_P = abs(MaxHit.iphihitm - iphitrue);
636  diphi_M_P = diphi_M_P > 36 ? 72 - diphi_M_P : diphi_M_P;
637 
638  if (passCuts)
639 
640  {
641  eventNumber = iEvent.id().event();
642  runNumber = iEvent.id().run();
643 
644  eCentHitBefore = MaxHit.hitenergy;
645  eCentHitAfter = MaxHit.hitenergy * CentHitFactor;
646  eECAL = emEnergy;
647  numValidTrkHits = numVH;
648  numValidTrkStrips = numVS;
649  PtNearBy = ptNear;
650 
651  eTrack = trackE;
652  phiTrack = trackPhi;
653  etaTrack = trackEta;
654 
655  iEta = MaxHit.ietahitm;
656  iPhi = MaxHit.iphihitm;
657 
658  iEtaTr = ietatrue;
659  iPhiTr = iphitrue;
660  iDr = sqrt(diphi_M_P * diphi_M_P + dieta_M_P * dieta_M_P);
661  delR = MaxHit.dr;
662  dietatr = dieta_M_P;
663  diphitr = diphi_M_P;
664 
665  fTree->Fill();
666  }
667 
668  } //end of isoProdTracks cycle
669 
670  /* ------------------ Some stuff for general tracks ---------- ----*/
671  //cout<<" generalTracks Size: "<< generalTracks->size()<<endl;
672  int n = generalTracks->size();
673  nTracks->Fill(n);
674 
675  if (takeGenTracks_ && iEvent.id().event() % 10 == 1) {
676  gen = generalTracks->size();
677  iso = isoProdTracks->size();
678  pix = isoPixelTracks->size();
679 
680  genPt[0] = -33;
681  genPhi[0] = -33;
682  genEta[0] = -33;
683 
684  isoPt[0] = -33;
685  isoPhi[0] = -33;
686  isoEta[0] = -33;
687 
688  pixPt[0] = -33;
689  pixPhi[0] = -33;
690  pixEta[0] = -33;
691 
692  Int_t gencount = 0, isocount = 0, pixcount = 0;
693  for (reco::TrackCollection::const_iterator gentr = generalTracks->begin(); gentr != generalTracks->end(); gentr++) {
694  genPt[gencount] = gentr->pt();
695  genPhi[gencount] = gentr->phi();
696  genEta[gencount] = gentr->eta();
697  gencount++;
698  }
699 
700  for (reco::TrackCollection::const_iterator isotr = isoProdTracks->begin(); isotr != isoProdTracks->end(); isotr++) {
701  isoPt[isocount] = isotr->pt();
702  isoPhi[isocount] = isotr->phi();
703  isoEta[isocount] = isotr->eta();
704  isocount++;
705  }
706 
707  for (reco::IsolatedPixelTrackCandidateCollection::const_iterator pixtr = isoPixelTracks->begin();
708  pixtr != isoPixelTracks->end();
709  pixtr++) {
710  pixPt[pixcount] = pixtr->pt();
711  pixPhi[pixcount] = pixtr->phi();
712  pixEta[pixcount] = pixtr->eta();
713  pixcount++;
714  }
715  }
716 
717  tTree->Fill();
718 }
719 
720 // ------------ method called once each job just before starting event loop ------------
722  // if(!ReadCalibFactors(calibFactorsFileName_.c_str() )) {cout<<"Cant read file with cailib coefficients!! ---"<<endl;}
723 
724  // try{
725  // edm::ESHandle <HcalRespCorrs> recalibCorrs;
726  // iSetup.get<HcalRespCorrsRcd>().get("recalibrate",recalibCorrs);
727  // respRecalib = recalibCorrs.product();
728  //
729  // LogInfo("CalibConstants")<<" Loaded: OK ";
730  //
731  // }catch(const cms::Exception & e) {
732  // LogWarning("CalibConstants")<<" Not Found!! ";
733  // }
734 
735  // rootFile = new TFile(outputFileName_.c_str(),"RECREATE");
736 
737  //@@@@@@@@@@@@@
738  //TFileDirectory ValDir = fs->mkdir("Validation");
739 
740  nTracks = fs->make<TH1F>("nTracks", "general;number of general tracks", 11, -0.5, 10.5);
741 
742  tTree = fs->make<TTree>("tTree", "Tree for gen info");
743 
744  fTree = fs->make<TTree>("fTree", "Tree for IsoTrack Calibration");
745 
746  fTree->Branch("eventNumber", &eventNumber, "eventNumber/I");
747  fTree->Branch("runNumber", &runNumber, "runNumber/I");
748 
749  fTree->Branch("eClustBefore", &eClustBefore, "eClustBefore/F");
750  fTree->Branch("eClustAfter", &eClustAfter, "eClustAfter/F");
751  fTree->Branch("eTrack", &eTrack, "eTrack/F");
752  fTree->Branch("etaTrack", &etaTrack, "etaTrack/F");
753  fTree->Branch("phiTrack", &phiTrack, "phiTrack/F");
754 
755  fTree->Branch("numHits", &numHits, "numHits/I");
756  fTree->Branch("eECAL", &eECAL, "eECAL/F");
757  fTree->Branch("PtNearBy", &PtNearBy, "PtNearBy/F");
758  fTree->Branch("numValidTrkHits", &numValidTrkHits, "numValidTrkHits/F");
759  fTree->Branch("numValidTrkStrips", &numValidTrkStrips, "numValidTrkStrips/F");
760 
761  fTree->Branch("eBeforeDepth1", &eBeforeDepth1, "eBeforeDepth1/F");
762  fTree->Branch("eBeforeDepth2", &eBeforeDepth2, "eBeforeDepth2/F");
763  fTree->Branch("eAfterDepth1", &eAfterDepth1, "eAfterDepth1/F");
764  fTree->Branch("eAfterDepth2", &eAfterDepth2, "eAfterDepth2/F");
765 
766  fTree->Branch("e3x3Before", &e3x3Before, "e3x3Before/F");
767  fTree->Branch("e3x3After", &e3x3After, "e3x3After/F");
768  fTree->Branch("e5x5Before", &e5x5Before, "e5x5Before/F");
769  fTree->Branch("e5x5After", &e5x5After, "e5x5After/F");
770 
771  fTree->Branch("eCentHitAfter", &eCentHitAfter, "eCentHitAfter/F");
772  fTree->Branch("eCentHitBefore", &eCentHitBefore, "eCentHitBefore/F");
773  fTree->Branch("iEta", &iEta, "iEta/I");
774  fTree->Branch("iPhi", &iPhi, "iPhi/I");
775 
776  fTree->Branch("iEtaTr", &iEtaTr, "iEtaTr/I");
777  fTree->Branch("iPhiTr", &iPhiTr, "iPhiTr/I");
778  fTree->Branch("dietatr", &dietatr, "dietatr/I");
779  fTree->Branch("diphitr", &diphitr, "diphitr/I");
780  fTree->Branch("iDr", &iDr, "iDr/F");
781  fTree->Branch("delR", &delR, "delR/F");
782 
783  fTree->Branch("iTime", &iTime, "iTime/F");
784  fTree->Branch("HTime", HTime, "HTime[numHits]/F");
785 
786  fTree->Branch("xTrkEcal", &xTrkEcal, "xTrkEcal/F");
787  fTree->Branch("yTrkEcal", &yTrkEcal, "yTrkEcal/F");
788  fTree->Branch("zTrkEcal", &zTrkEcal, "zTrkEcal/F");
789  fTree->Branch("xTrkHcal", &xTrkHcal, "xTrkHcal/F");
790  fTree->Branch("yTrkHcal", &yTrkHcal, "yTrkHcal/F");
791  fTree->Branch("zTrkHcal", &zTrkHcal, "zTrkHcal/F");
792 
793  if (takeGenTracks_) {
794  tTree->Branch("gen", &gen, "gen/I");
795  tTree->Branch("iso", &iso, "iso/I");
796  tTree->Branch("pix", &pix, "pix/I");
797  tTree->Branch("genPt", genPt, "genPt[gen]/F");
798  tTree->Branch("genPhi", genPhi, "genPhi[gen]/F");
799  tTree->Branch("genEta", genEta, "genEta[gen]/F");
800 
801  tTree->Branch("isoPt", isoPt, "isoPt[iso]/F");
802  tTree->Branch("isoPhi", isoPhi, "isoPhi[iso]/F");
803  tTree->Branch("isoEta", isoEta, "isoEta[iso]/F");
804 
805  tTree->Branch("pixPt", pixPt, "pixPt[pix]/F");
806  tTree->Branch("pixPhi", pixPhi, "pixPhi[pix]/F");
807  tTree->Branch("pixEta", pixEta, "pixEta[pix]/F");
808  }
809 }
810 
811 // ------------ method called once each job just after ending the event loop ------------
813  // rootFile->Write();
814  //rootFile->Close();
815 }
816 
817 //define this as a plug-in
RunNumber_t run() const
Definition: EventID.h:39
edm::EDGetTokenT< reco::TrackCollection > tok_genTrack_
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
T getUntrackedParameter(std::string const &, T const &) const
const unsigned int nTracks(const reco::Vertex &sv)
static const TGPicture * info(bool iBackgroundIsBlack)
~ValidIsoTrkCalib() override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
void analyze(const edm::Event &, const edm::EventSetup &) override
std::vector< T >::const_iterator const_iterator
TrackAssociatorParameters parameters_
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
math::XYZPoint trkGlobPosAtHcal
void beginJob()
Definition: Breakpoints.cc:14
edm::EDGetTokenT< reco::IsolatedPixelTrackCandidateCollection > tok_track_
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const CaloGeometry * geo
T sqrt(T t)
Definition: SSEVec.h:18
void beginJob() override
int ieta() const
get the cell ieta
Definition: HcalDetId.h:159
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TrackDetectorAssociator trackAssociator_
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_
const HcalRespCorrs * respRecalib
def gen(fragment, howMuch)
Production test section ####.
ValidIsoTrkCalib(const edm::ParameterSet &)
std::vector< edm::InputTag > genecalLabel_
const_iterator end() const
int iphi() const
get the cell iphi
Definition: HcalDetId.h:161
T const * product() const
Definition: Handle.h:74
edm::Service< TFileService > fs
edm::EventID id() const
Definition: EventBase.h:59
edm::EDGetTokenT< HORecHitCollection > tok_ho_
fixed size matrix
HLT enums.
T get() const
Definition: EventSetup.h:71
math::XYZPoint trkGlobPosAtEcal
Track position at different parts of the calorimeter.
const JetExtendedData & getValue(const Container &, const reco::JetBaseRef &)
get value for the association. Throw exception if no association found
double getDistInPlaneSimple(const GlobalPoint caloPoint, const GlobalPoint rechitPoint)
Definition: ConeDefinition.h:9
edm::EDGetTokenT< reco::TrackCollection > tok_track1_
T const * product() const
Definition: ESHandle.h:86
void endJob() override
DetId getClosestCell(const GlobalPoint &r) const override
const_iterator begin() const