48 virtual void endJob()
override ;
95 Int_t numValidTrkHits[50], numValidTrkStrips[50], numLayers[50];
125 tok_EE_ = consumes<EcalRecHitCollection>(
edm::InputTag(
"ecalRecHit",
"EcalRecHitsEE") );
126 tok_EB_ = consumes<EcalRecHitCollection>(
edm::InputTag(
"ecalRecHit",
"EcalRecHitsEB") );
127 tok_tracks_ = consumes<reco::TrackCollection>(
edm::InputTag(
"generalTracks") );
128 tok_gen_ = consumes<edm::HepMCProduct>(
edm::InputTag(
"generatorSmeared"));
140 parameters_.loadParameters( parameters, iC );
141 trackAssociator_.useDefaultPropagator();
143 associationConeSize_=iConfig.
getParameter<
double>(
"associationConeSize");
144 clusterConeSize_=iConfig.
getParameter<
double>(
"clusterConeSize");
146 trackIsolationCone_ = iConfig.
getParameter<
double>(
"trackIsolationCone");
147 neutralIsolationCone_ = iConfig.
getParameter<
double>(
"neutralIsolationCone");
156 Float_t resprecal = 1.;
157 Float_t pfrecal = 1.;
159 if(Respcorr_) resprecal = respRecalib -> getValues(
id)->getValue();
160 if(PFcorr_) pfrecal = pfRecalib -> getValues(
id)->getValue();
162 Float_t factor = resprecal*pfrecal;
176 respRecalib = recalibCorrs.
product();
186 LogWarning(
"CalibConstants")<<
" Not Found!! ";
212 {tmpEcalRecHitCollection->push_back(*recHit);}
214 {tmpEcalRecHitCollection->push_back(*recHit);}
233 parameters_.useEcal =
true;
234 parameters_.useHcal =
true;
235 parameters_.useCalo =
false;
236 parameters_.useMuon =
false;
237 parameters_.dREcal = 0.5;
238 parameters_.dRHcal = 0.6;
247 stepPropF->setMaterialMode(
false);
248 stepPropF->applyRadX0Correction(
true);
269 std::cout <<
"no HepMCProduct found" << std::endl;
278 double maxPt = -99999.;
283 HepMC::GenEvent * myGenEvent =
new HepMC::GenEvent(*(evtMC->GetEvent()));
284 for ( HepMC::GenEvent::particle_iterator
p = myGenEvent->particles_begin();
285 p != myGenEvent->particles_end(); ++
p )
287 phiParticle = (*p)->momentum().phi();
288 etaParticle = (*p)->momentum().eta();
289 double pt = (*p)->momentum().perp();
290 mom_MC = (*p)->momentum().rho();
291 if(pt > maxPt) { npart++; maxPt =
pt; }
292 GlobalVector mom ((*p)->momentum().x(),(*p)->momentum().y(),(*p)->momentum().z());
295 if(
abs((*p)->pdg_id())==211) charge = (*p)->pdg_id()/
abs((*p)->pdg_id());
308 GlobalPoint barrelMC(0,0,0), endcapMC(0,0,0), forwardMC1(0,0,0), forwardMC2(0,0,0);
324 if(fabs(etaParticle)<1.392) {
329 if(steppingHelixstateinfo_.
isValid() )
336 if(fabs(etaParticle)>=1.392 && fabs(etaParticle)<5.191) {
352 if (
abs(etaParticle)>5.191)
continue;
354 if(
abs(etaParticle)>2.99) {
365 if(steppingHelixstateinfo_.
isValid() )
368 steppingHelixstateinfo_ = stepPropF->propagate(*freetrajectorystate_, (*aPlane2));
369 if(steppingHelixstateinfo_.
isValid() )
378 Int_t iphitrue = -10;
379 Int_t ietatrue = 100;
383 if (
abs(etaParticle)<1.392)
385 gPointHcal = barrelMC;
388 if (
abs(etaParticle)>=1.392 &&
abs(etaParticle)<3.0)
390 gPointHcal = endcapMC;
393 if (
abs(etaParticle)>=3.0 &&
abs(etaParticle)<5.191)
403 gPointHcal = forwardMC1;
412 ietatrue = tempId.
ieta();
413 iphitrue = tempId.
iphi();
415 etaGPoint = gPointHcal.
eta();
416 phiGPoint = gPointHcal.
phi();
424 if (gPointHcal.
x()==0 && gPointHcal.
y()==0 && gPointHcal.
z()==0)
428 float etahcal=gPointHcal.
eta();
430 if (
abs(etahcal)>5.192)
continue;
448 GlobalPoint gPointEcal(xTrkEcal,yTrkEcal,zTrkEcal);
478 recal = RecalibFactor(hhit->detid());
481 int iphihit = (hhit->id()).iphi();
482 int ietahit = (hhit->id()).ieta();
483 int depthhit = (hhit->id()).
depth();
484 float enehit = hhit->energy()* recal;
486 if (depthhit!=1)
continue;
490 if(distAtHcal < clusterConeSize_)
495 int iphihit2 = (hhit2->id()).iphi();
496 int ietahit2 = (hhit2->id()).ieta();
497 int depthhit2 = (hhit2->id()).
depth();
498 float enehit2 = hhit2->energy() * recal;
500 if (iphihit==iphihit2 && ietahit==ietahit2 && depthhit!=depthhit2) enehit = enehit+enehit2;
508 MaxHit.
ietahitm = (hhit->id()).ieta();
509 MaxHit.
iphihitm = (hhit->id()).iphi();
510 MaxHit.
dr = distAtHcal;
521 recal = RecalibFactor(hhit->detid());
525 int iphihit = (hhit->id()).iphi();
526 int ietahit = (hhit->id()).ieta();
527 int depthhit = (hhit->id()).
depth();
528 float enehit = hhit->energy()* recal;
532 if(distAtHcal < associationConeSize_)
536 int iphihit2 = (hhit2->id()).iphi();
537 int ietahit2 = (hhit2->id()).ieta();
538 int depthhit2 = (hhit2->id()).
depth();
539 float enehit2 = hhit2->energy() * recal;
541 if (iphihit==iphihit2 && ietahit==ietahit2 && depthhit!=depthhit2) enehit = enehit+enehit2;
548 MaxHit.
ietahitm = (hhit->id()).ieta();
549 MaxHit.
iphihitm = (hhit->id()).iphi();
550 MaxHit.
dr = distAtHcal;
565 recal = RecalibFactor(hhit->detid());
570 int iphihit = (hhit->id()).iphi();
571 int ietahit = (hhit->id()).ieta();
572 int depthhit = (hhit->id()).
depth();
573 float enehit = hhit->energy()* recal;
578 int iphihitNoise = iphihit >36 ? iphihit-36 : iphihit+36;
579 int ietahitNoise = -ietahit;
580 int depthhitNoise = depthhit;
583 if(distAtHcal < clusterConeSize_ && MaxHit.hitenergy > 0.)
590 if(MaxHit.
ietahitm*(hhit->id()).ieta()>0)
591 { DIETA = MaxHit.
ietahitm - (hhit->id()).ieta();}
592 if(MaxHit.
ietahitm*(hhit->id()).ieta()<0)
593 { DIETA = MaxHit.
ietahitm - (hhit->id()).ieta(); DIETA = DIETA>0 ? DIETA-1 : DIETA+1;}
594 int DIPHI =
abs(MaxHit.
iphihitm - (hhit->id()).iphi());
595 DIPHI = DIPHI>36 ? 72-DIPHI : DIPHI;
599 {e5x5 += hhit->energy();}
601 {e3x3 += hhit->energy();}
607 recal = RecalibFactor(hhit2->detid());
608 int iphihit2 = (hhit2->id()).iphi();
609 int ietahit2 = (hhit2->id()).ieta();
610 int depthhit2 = (hhit2->id()).
depth();
611 float enehit2 = hhit2->energy()* recal;
613 if (iphihitNoise == iphihit2 && ietahitNoise == ietahit2 && depthhitNoise == depthhit2 && enehit2>0.)
615 eHcalConeNoise += hhit2->energy()*recal;
627 recal = RecalibFactor(hhit->detid());
633 int iphihit = (hhit->id()).iphi();
634 int ietahit = (hhit->id()).ieta();
635 int depthhit = (hhit->id()).
depth();
636 float enehit = hhit->energy()* recal;
639 int iphihitNoise = iphihit >36 ? iphihit-36 : iphihit+36;
640 int ietahitNoise = -ietahit;
641 int depthhitNoise = depthhit;
645 if(distAtHcal < clusterConeSize_ && MaxHit.hitenergy > 0.)
653 if(MaxHit.
ietahitm*(hhit->id()).ieta()>0)
654 { DIETA = MaxHit.
ietahitm - (hhit->id()).ieta();}
655 if(MaxHit.
ietahitm*(hhit->id()).ieta()<0)
656 { DIETA = MaxHit.
ietahitm - (hhit->id()).ieta(); DIETA = DIETA>0 ? DIETA-1 : DIETA+1;}
657 int DIPHI =
abs(MaxHit.
iphihitm - (hhit->id()).iphi());
658 DIPHI = DIPHI>36 ? 72-DIPHI : DIPHI;
662 {e5x5 += hhit->energy();}
664 {e3x3 += hhit->energy();}
668 recal = RecalibFactor(hhit2->detid());
670 int iphihit2 = (hhit2->id()).iphi();
671 int ietahit2 = (hhit2->id()).ieta();
672 int depthhit2 = (hhit2->id()).
depth();
673 float enehit2 = hhit2->energy()* recal;
675 if (iphihitNoise == iphihit2 && ietahitNoise == ietahit2 && depthhitNoise == depthhit2 && enehit2>0.01)
677 eHcalConeNoise += hhit2->energy()*recal;
694 float delR_track_particle = 100;
696 for (reco::TrackCollection::const_iterator track1=generalTracks->begin(); track1!=generalTracks->end(); track1++)
698 delR_track_particle =
deltaR(etaParticle, phiParticle, track1->eta(), track1->phi());
702 trackP[nTracks] =
sqrt(track1->px()*track1->px() + track1->py()*track1->py() + track1->pz()*track1->pz());
704 delRmc[nTracks] = delR_track_particle;
705 numValidTrkHits[nTracks] = track1->hitPattern().numberOfValidHits();
706 numValidTrkStrips[nTracks] = track1->hitPattern().numberOfValidStripTECHits();
707 numLayers[nTracks] = track1->hitPattern().trackerLayersWithMeasurement();
723 diphi_M_P = diphi_M_P>36 ? 72-diphi_M_P : diphi_M_P;
724 iDr =
sqrt(diphi_M_P*diphi_M_P+dieta_M_P*dieta_M_P);
734 Bool_t passCuts = kFALSE;
775 pfTree = fs -> make<TTree>(
"pfTree",
"Tree for pf info");
778 pfTree->Branch(
"nTracks", &nTracks,
"nTracks/I");
779 pfTree->Branch(
"trackEta",
trackEta,
"trackEta[nTracks]/F");
780 pfTree->Branch(
"trackPhi",
trackPhi,
"trackPhi[nTracks]/F");
781 pfTree->Branch(
"trackP", trackP,
"trackP[nTracks]/F");
783 pfTree->Branch(
"delRmc", delRmc,
"delRmc[nTracks]/F");
784 pfTree->Branch(
"numValidTrkHits", numValidTrkHits,
"numValidTrkHits[nTracks]/I");
785 pfTree->Branch(
"numValidTrkStrips", numValidTrkStrips,
"numValidTrkStrips[nTracks]/I");
786 pfTree->Branch(
"numLayers", numLayers,
"numLayers[nTracks]/I");
787 pfTree->Branch(
"trkQual", trkQual,
"trkQual[nTracks]/O");
790 pfTree->Branch(
"eEcalCone", &eEcalCone,
"eEcalCone/F");
791 pfTree->Branch(
"eHcalCone", &eHcalCone,
"eHcalCone/F");
792 pfTree->Branch(
"eHcalConeNoise", &eHcalConeNoise,
"eHcalConeNoise/F");
794 pfTree->Branch(
"UsedCellsNoise", &UsedCellsNoise,
"UsedCellsNoise/I");
795 pfTree->Branch(
"UsedCells", &UsedCells,
"UsedCells/I");
797 pfTree->Branch(
"eCentHit", &eCentHit ,
"eCentHit/F");
799 pfTree->Branch(
"eParticle", &eParticle,
"eParticle/F");
800 pfTree->Branch(
"etaParticle", &etaParticle,
"etaParticle/F");
801 pfTree->Branch(
"phiParticle", &phiParticle,
"phiParticle/F");
803 pfTree->Branch(
"etaGPoint", &etaGPoint,
"etaGPoint/F");
804 pfTree->Branch(
"phiGPoint", &phiGPoint,
"phiGPoint/F");
806 pfTree->Branch(
"xAtHcal", &xAtHcal,
"xAtHcal/F");
807 pfTree->Branch(
"yAtHcal", &yAtHcal,
"yAtHcal/F");
808 pfTree->Branch(
"zAtHcal", &zAtHcal,
"zAtHcal/F");
810 pfTree->Branch(
"eECAL09cm", &eECAL09cm,
"eECAL09cm/F");
811 pfTree->Branch(
"eECAL40cm", &eECAL40cm,
"eECAL40cm/F");
812 pfTree->Branch(
"eECAL", &eECAL,
"eECAL/F");
814 pfTree->Branch(
"e3x3 ", &e3x3 ,
"e3x3/F");
815 pfTree->Branch(
"e5x5", &e5x5 ,
"e5x5/F");
817 pfTree->Branch(
"iDr", &iDr,
"iDr/F");
818 pfTree->Branch(
"delR", &delR,
"delR/F");
820 pfTree->Branch(
"iEta", &iEta,
"iEta/I");
821 pfTree->Branch(
"iPhi", &iPhi,
"iPhi/I");
T getParameter(std::string const &) const
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_
T getUntrackedParameter(std::string const &, T const &) const
const HcalGeometry * geoHcal
const HcalPFCorrs * pfRecalib
bool getByToken(EDGetToken token, Handle< PROD > &result) const
double trackIsolationCone_
double ecalEnergyInCone(const GlobalPoint center, double radius, const EcalRecHitCollection ecalCol, const CaloGeometry *geo)
#define DEFINE_FWK_MODULE(type)
virtual void beginJob() override
Geom::Phi< T > phi() const
ReturnType plane(const PositionType &pos, const RotationType &rot) const
TrackAssociatorParameters parameters_
std::vector< EcalRecHit >::const_iterator const_iterator
virtual void analyze(edm::Event const &ev, edm::EventSetup const &c) override
tuple SteppingHelixPropagator
FreeTrajectoryState const * freeState(bool withErrors=true) const
int ieta() const
get the cell ieta
Abs< T >::type abs(const T &t)
const HcalRespCorrs * respRecalib
const_iterator end() const
double deltaR(double eta1, double eta2, double phi1, double phi2)
virtual DetId getClosestCell(const GlobalPoint &r) const
int iphi() const
get the cell iphi
virtual void endJob() override
GlobalPoint position() const
SteppingHelixPropagator * stepPropF
T const * product() const
edm::EDGetTokenT< HFRecHitCollection > tok_hf_
edm::EDGetTokenT< EcalRecHitCollection > tok_EE_
edm::EDGetTokenT< EcalRecHitCollection > tok_EB_
T const * product() const
Geom::Phi< T > phi() const
MagneticField * theMagField
edm::EDGetTokenT< HORecHitCollection > tok_ho_
TrackDetectorAssociator trackAssociator_
edm::EDGetTokenT< reco::TrackCollection > tok_tracks_
double RecalibFactor(HcalDetId id)
math::XYZPoint trkGlobPosAtEcal
Track position at different parts of the calorimeter.
double getDistInPlaneSimple(const GlobalPoint caloPoint, const GlobalPoint rechitPoint)
edm::Service< TFileService > fs
edm::EDGetTokenT< edm::HepMCProduct > tok_gen_
const_iterator begin() const
Global3DVector GlobalVector
HcalCorrPFCalculation(edm::ParameterSet const &conf)