CMS 3D CMS Logo

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