80 virtual void endJob() ;
118 float genPt[500], genPhi[500], genEta[500];
119 float isoPt[500], isoPhi[500], isoEta[500];
120 float pixPt[500], pixPhi[500], pixEta[500];
185 float numVH,
numVS, numValidTrkHits, numValidTrkStrips;
217 double dotprod = caloIntersectUnitVector.
dot(rechitUnitVector);
218 double rechitdist = caloIntersectVector.mag()/dotprod;
221 const GlobalVector effectiveRechitVector = rechitdist*rechitUnitVector;
222 const GlobalPoint effectiveRechitPoint(effectiveRechitVector.
x(),
223 effectiveRechitVector.
y(),
224 effectiveRechitVector.
z());
227 GlobalVector distance_vector = effectiveRechitPoint-caloPoint;
231 return distance_vector.
mag();
263 associationConeSize_=iConfig.
getParameter<
double>(
"associationConeSize");
270 calibrationConeSize_=iConfig.
getParameter<
double>(
"calibrationConeSize");
272 MinNTrackHitsBarrel = iConfig.
getParameter<
int>(
"MinNTrackHitsBarrel");
273 MinNTECHitsEndcap = iConfig.
getParameter<
int>(
"MinNTECHitsEndcap");
274 energyECALmip = iConfig.
getParameter<
double>(
"energyECALmip");
275 energyMinIso = iConfig.
getParameter<
double>(
"energyMinIso");
276 energyMaxIso = iConfig.
getParameter<
double>(
"energyMaxIso");
280 parameters_.loadParameters( parameters );
281 trackAssociator_.useDefaultPropagator();
307 respRecalib = recalibCorrs.
product();
309 LogInfo(
"CalibConstants")<<
" Loaded: OK ";
312 LogWarning(
"CalibConstants")<<
" Not Found!! ";
319 iEvent.
getByLabel(trackLabel1_,isoProdTracks);
341 parameters_.useEcal =
true;
342 parameters_.useHcal =
true;
343 parameters_.useCalo =
false;
344 parameters_.useMuon =
false;
345 parameters_.dREcal = taECALCone_;
346 parameters_.dRHcal = taHCALCone_;
355 if(takeGenTracks_ && iEvent.
id().
event()%10==1)
358 iso = isoProdTracks->size();
373 Int_t gencount=0, isocount=0, pixcount=0;
376 genPt[gencount] = gentr->pt();
377 genPhi[gencount] = gentr->phi();
378 genEta[gencount] = gentr->eta();
382 for (reco::TrackCollection::const_iterator isotr=isoProdTracks->begin(); isotr!=isoProdTracks->end(); isotr++)
384 isoPt[isocount] = isotr->pt();
385 isoPhi[isocount] = isotr->phi();
386 isoEta[isocount] = isotr->eta();
390 for (reco::IsolatedPixelTrackCandidateCollection::const_iterator pixtr=
pixelTracks->begin(); pixtr!=
pixelTracks->end(); pixtr++)
392 pixPt[pixcount] = pixtr->pt();
393 pixPhi[pixcount] = pixtr->phi();
394 pixEta[pixcount] = pixtr->eta();
404 for (reco::TrackCollection::const_iterator trit=isoProdTracks->begin(); trit!=isoProdTracks->end(); trit++)
407 reco::IsolatedPixelTrackCandidateCollection::const_iterator isoMatched=
pixelTracks->begin();
412 for (reco::IsolatedPixelTrackCandidateCollection::const_iterator it =
pixelTracks->begin(); it!=
pixelTracks->end(); it++)
416 if (
abs((trit->pt() - it->pt())/it->pt()) < 0.005 &&
abs(trit->eta() - it->eta()) < 0.01)
425 if (!matched)
continue;
426 if(isoMatched->maxPtPxl() > maxPNear)
continue;
428 ptNear = isoMatched->maxPtPxl();
433 if (trit->hitPattern().numberOfValidHits()<MinNTrackHitsBarrel)
continue;
434 if (fabs(trit->eta())>1.47&&trit->hitPattern().numberOfValidStripTECHits()<MinNTECHitsEndcap)
continue;
439 numVH = trit->hitPattern().numberOfValidHits();
440 numVS = trit->hitPattern().numberOfValidStripTECHits();
444 trackE =
sqrt(trit->px()*trit->px()+trit->py()*trit->py()+trit->pz()*trit->pz()+0.14*0.14);
445 trackPt = trit->pt();
449 emEnergy = isoMatched->energyIn();
454 TrackDetMatchInfo info = trackAssociator_.associate(iEvent, iSetup,trackAssociator_.getFreeTrajectoryState(iSetup, *trit), parameters_);
478 if (
abs(etahcal)<1.392)
482 ietatrue = tempId.
ieta();
483 iphitrue = tempId.
iphi();
486 if (
abs(etahcal)>1.392 &&
abs(etahcal)<3.0)
490 ietatrue = tempId.
ieta();
491 iphitrue = tempId.
iphi();
507 std::vector<int> usedHits;
524 bool hitIsUsed=
false;
525 int hitHashedIndex=hhit->id().hashed_index();
526 for (uint32_t
i=0;
i<usedHits.size();
i++)
528 if (usedHits[
i]==hitHashedIndex) hitIsUsed=
true;
530 if (hitIsUsed)
continue;
531 usedHits.push_back(hitHashedIndex);
539 float phihit = pos.
phi();
540 float etahit = pos.
eta();
542 int iphihitm = (hhit->id()).iphi();
543 int ietahitm = (hhit->id()).ieta();
544 int depthhit = (hhit->id()).depth();
545 float enehit = hhit->energy() * recal;
547 if (depthhit!=1)
continue;
549 float dphi = fabs(phihcal - phihit);
550 if(dphi > 4.*atan(1.)) dphi = 8.*atan(1.) - dphi;
551 float deta = fabs(etahcal - etahit);
552 float dr =
sqrt(dphi*dphi + deta*deta);
566 if(dr<associationConeSize_)
571 int iphihitm2 = (hhit2->id()).iphi();
572 int ietahitm2 = (hhit2->id()).ieta();
573 int depthhit2 = (hhit2->id()).depth();
574 float enehit2 = hhit2->energy() * recal;
576 if (iphihitm==iphihitm2 && ietahitm==ietahitm2 && depthhit!=depthhit2) enehit = enehit+enehit2;
588 MaxHit.
ietahitm = (hhit->id()).ieta();
589 MaxHit.
iphihitm = (hhit->id()).iphi();
607 Bool_t passCuts = kFALSE;
608 if(trackE > energyMinIso && trackE < energyMaxIso && emEnergy < energyECALmip && MaxHit.hitenergy > 0. &&
abs(MaxHit.
ietahitm)<29) passCuts = kTRUE;
632 bool hitIsUsed=
false;
633 int hitHashedIndex=hhit->id().hashed_index();
634 for (uint32_t
i=0;
i<usedHits.size();
i++)
636 if (usedHits[
i]==hitHashedIndex) hitIsUsed=
true;
638 if (hitIsUsed)
continue;
639 usedHits.push_back(hitHashedIndex);
642 if(MaxHit.
ietahitm*(hhit->id()).ieta()>0)
644 DIETA = MaxHit.
ietahitm - (hhit->id()).ieta();
646 if(MaxHit.
ietahitm*(hhit->id()).ieta()<0)
648 DIETA = MaxHit.
ietahitm - (hhit->id()).ieta();
649 DIETA = DIETA>0 ? DIETA-1 : DIETA+1;
652 int DIPHI =
abs(MaxHit.
iphihitm - (hhit->id()).iphi());
653 DIPHI = DIPHI>36 ? 72-DIPHI : DIPHI;
665 if(
abs(DIETA)<=numbercell && (
abs(DIPHI)<=numbercell || (
abs(MaxHit.
ietahitm)>=20 &&
abs(DIPHI)<=numbercell+1)) )
667 const GlobalPoint pos2 = geo->getPosition(hhit->detid());
669 if(passCuts && hhit->energy()>0)
675 factor = respRecalib -> getValues(hhit->id())->
getValue();
681 if (hhit->id().ieta() == MaxHit.
ietahitm && hhit->id().iphi() == MaxHit.
iphihitm) CentHitFactor=factor;
683 if (hhit->id().ieta() == MaxHit.
ietahitm && hhit->id().iphi() == MaxHit.
iphihitm) iTime = hhit->time();
685 if(AxB_!=
"3x3" && AxB_!=
"5x5" && AxB_!=
"Cone")
LogWarning(
" AxB ")<<
" Not supported: "<< AxB_;
691 e5x5Before += hhit->energy();
692 e5x5After += hhit->energy()*factor;
699 e3x3Before += hhit->energy();
700 e3x3After += hhit->energy()*factor;
709 if (
abs(MaxHit.
ietahitm)==21 &&
abs((hhit->id()).ieta())<=20 &&
abs(DIPHI)>3)
continue;
711 HTime[numHits]= hhit->time();
714 eClustBefore += hhit->energy();
715 eClustAfter += hhit->energy()*factor;
717 if ((hhit->id().depth() == 1) && (
abs(hhit->id().ieta()) > 17) && (
abs(hhit->id().ieta()) < 29))
719 eBeforeDepth1 += hhit->energy();
720 eAfterDepth1 += hhit->energy()*factor;
722 else if((hhit->id().depth() == 2) && (
abs(hhit->id().ieta()) > 17) && (
abs(hhit->id().ieta()) < 29))
724 eBeforeDepth2 += hhit->energy();
725 eAfterDepth2 += hhit->energy()*factor;
736 if (
abs(MaxHit.
ietahitm)==21 &&
abs((hhit->id()).ieta())<=20 &&
abs(DIPHI)>2)
continue;
738 HTime[numHits]= hhit->time();
741 eClustBefore += hhit->energy();
742 eClustAfter += hhit->energy() * factor;
744 if ((hhit->id().depth() == 1) && (
abs(hhit->id().ieta()) > 17) && (
abs(hhit->id().ieta()) < 29))
746 eBeforeDepth1 += hhit->energy();
747 eAfterDepth1 += hhit->energy() * factor;
749 else if((hhit->id().depth() == 2) && (
abs(hhit->id().ieta()) > 17) && (
abs(hhit->id().ieta()) < 29))
751 eBeforeDepth2 += hhit->energy();
752 eAfterDepth2 += hhit->energy() * factor;
761 HTime[numHits]= hhit->time();
764 eClustBefore += hhit->energy();
765 eClustAfter += hhit->energy() * factor;
767 if ((hhit->id().depth() == 1) && (
abs(hhit->id().ieta()) > 17) && (
abs(hhit->id().ieta()) < 29))
769 eBeforeDepth1 += hhit->energy();
770 eAfterDepth1 += hhit->energy() * factor;
772 else if((hhit->id().depth() == 2) && (
abs(hhit->id().ieta()) > 17) && (
abs(hhit->id().ieta()) < 29))
774 eBeforeDepth2 += hhit->energy();
775 eAfterDepth2 += hhit->energy() * factor;
793 diphi_M_P = diphi_M_P>36 ? 72-diphi_M_P : diphi_M_P;
799 eventNumber = iEvent.
id().
event();
803 eCentHitAfter = MaxHit.
hitenergy*CentHitFactor;
805 numValidTrkHits = numVH;
806 numValidTrkStrips = numVS;
819 iDr =
sqrt(diphi_M_P*diphi_M_P+dieta_M_P*dieta_M_P);
855 nTracks = fs->
make<TH1F>(
"nTracks",
"general;number of general tracks",11,-0.5,10.5);
858 tTree =
new TTree(
"tTree",
"Tree for gen info");
861 tTree->Branch(
"gen", &gen,
"gen/I");
862 tTree->Branch(
"iso", &
iso,
"iso/I");
863 tTree->Branch(
"pix", &pix,
"pix/I");
864 tTree->Branch(
"genPt", genPt,
"genPt[gen]/F");
865 tTree->Branch(
"genPhi", genPhi,
"genPhi[gen]/F");
866 tTree->Branch(
"genEta", genEta,
"genEta[gen]/F");
868 tTree->Branch(
"isoPt", isoPt,
"isoPt[iso]/F");
869 tTree->Branch(
"isoPhi", isoPhi,
"isoPhi[iso]/F");
870 tTree->Branch(
"isoEta", isoEta,
"isoEta[iso]/F");
872 tTree->Branch(
"pixPt", pixPt,
"pixPt[pix]/F");
873 tTree->Branch(
"pixPhi", pixPhi,
"pixPhi[pix]/F");
874 tTree->Branch(
"pixEta", pixEta,
"pixEta[pix]/F");
877 fTree =
new TTree(
"fTree",
"Tree for IsoTrack Calibration");
879 fTree->Branch(
"eventNumber", &eventNumber,
"eventNumber/I");
880 fTree->Branch(
"runNumber", &
runNumber,
"runNumber/I");
882 fTree->Branch(
"eClustBefore", &eClustBefore,
"eClustBefore/F");
883 fTree->Branch(
"eClustAfter", &eClustAfter,
"eClustAfter/F");
884 fTree->Branch(
"eTrack", &eTrack,
"eTrack/F");
885 fTree->Branch(
"etaTrack", &etaTrack,
"etaTrack/F");
886 fTree->Branch(
"phiTrack", &phiTrack,
"phiTrack/F");
888 fTree->Branch(
"numHits", &numHits,
"numHits/I");
889 fTree->Branch(
"eECAL", &eECAL,
"eECAL/F");
890 fTree->Branch(
"PtNearBy", &PtNearBy,
"PtNearBy/F");
891 fTree->Branch(
"numValidTrkHits", &numValidTrkHits,
"numValidTrkHits/F");
892 fTree->Branch(
"numValidTrkStrips", &numValidTrkStrips,
"numValidTrkStrips/F");
894 fTree->Branch(
"eBeforeDepth1", &eBeforeDepth1,
"eBeforeDepth1/F");
895 fTree->Branch(
"eBeforeDepth2", &eBeforeDepth2,
"eBeforeDepth2/F");
896 fTree->Branch(
"eAfterDepth1", &eAfterDepth1,
"eAfterDepth1/F");
897 fTree->Branch(
"eAfterDepth2", &eAfterDepth2,
"eAfterDepth2/F");
899 fTree->Branch(
"e3x3Before", &e3x3Before,
"e3x3Before/F");
900 fTree->Branch(
"e3x3After", &e3x3After,
"e3x3After/F");
901 fTree->Branch(
"e5x5Before", &e5x5Before,
"e5x5Before/F");
902 fTree->Branch(
"e5x5After", &e5x5After,
"e5x5After/F");
904 fTree->Branch(
"eCentHitAfter", &eCentHitAfter,
"eCentHitAfter/F");
905 fTree->Branch(
"eCentHitBefore", &eCentHitBefore,
"eCentHitBefore/F");
906 fTree->Branch(
"iEta", &iEta,
"iEta/I");
907 fTree->Branch(
"iPhi", &iPhi,
"iPhi/I");
910 fTree->Branch(
"iEtaTr", &iEtaTr,
"iEtaTr/I");
911 fTree->Branch(
"iPhiTr", &iPhiTr,
"iPhiTr/I");
912 fTree->Branch(
"dietatr", &dietatr,
"dietatr/I");
913 fTree->Branch(
"diphitr", &diphitr,
"diphitr/I");
914 fTree->Branch(
"iDr", &iDr,
"iDr/F");
915 fTree->Branch(
"delR", &delR,
"delR/F");
917 fTree->Branch(
"iTime", &iTime,
"iTime/F");
918 fTree->Branch(
"HTime", HTime,
"HTime[numHits]/F");
920 fTree->Branch(
"xTrkEcal", &xTrkEcal,
"xTrkEcal/F");
921 fTree->Branch(
"yTrkEcal", &yTrkEcal,
"yTrkEcal/F");
922 fTree->Branch(
"zTrkEcal", &zTrkEcal,
"zTrkEcal/F");
923 fTree->Branch(
"xTrkHcal", &xTrkHcal,
"xTrkHcal/F");
924 fTree->Branch(
"yTrkHcal", &yTrkHcal,
"yTrkHcal/F");
925 fTree->Branch(
"zTrkHcal", &zTrkHcal,
"zTrkHcal/F");
T getParameter(std::string const &) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
double getDistInPlaneSimple(const GlobalPoint caloPoint, const GlobalPoint rechitPoint)
Geom::Phi< T > phi() const
std::vector< T >::const_iterator const_iterator
TrackAssociatorParameters parameters_
PreciseFloatType< T, U >::Type dot(const Vector3DBase< U, FrameTag > &v) const
DEFINE_FWK_MODULE(HiMixingModule)
math::XYZPoint trkGlobPosAtHcal
double calibrationConeSize_
int ieta() const
get the cell ieta
TrackDetectorAssociator trackAssociator_
const HcalRespCorrs * respRecalib
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
ValidIsoTrkCalib(const edm::ParameterSet &)
std::vector< edm::InputTag > genecalLabel_
virtual DetId getClosestCell(const GlobalPoint &r) const
int iphi() const
get the cell iphi
Vector3DBase unit() const
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
edm::Service< TFileService > fs
T const * product() const
virtual void analyze(const edm::Event &, const edm::EventSetup &)
T * make() const
make new ROOT object
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)
double associationConeSize_