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