48 (
"GsfTrackModuleLabel"));
54 (
"PrimaryVertexLabel"));
73 produces<GsfPFRecTrackCollection>();
74 produces<GsfPFRecTrackCollection>(
"Secondary" ).setBranchAlias(
"secondary" );
99 string mvaWeightFileConvBremBarrelLowPt = iConfig.
getParameter<
string>(
"pf_convBremFinderID_mvaWeightFileBarrelLowPt");
100 string mvaWeightFileConvBremBarrelHighPt = iConfig.
getParameter<
string>(
"pf_convBremFinderID_mvaWeightFileBarrelHighPt");
101 string mvaWeightFileConvBremEndcapsLowPt = iConfig.
getParameter<
string>(
"pf_convBremFinderID_mvaWeightFileEndcapsLowPt");
102 string mvaWeightFileConvBremEndcapsHighPt = iConfig.
getParameter<
string>(
"pf_convBremFinderID_mvaWeightFileEndcapsHighPt");
104 if(useConvBremFinder_) {
132 auto_ptr< GsfPFRecTrackCollection >
136 auto_ptr< GsfPFRecTrackCollection >
183 vector<Trajectory> tjvec(0);
187 tjvec= *(TrajectoryCollection.
product());
191 vector<reco::GsfPFRecTrack> selGsfPFRecTracks;
192 vector<reco::GsfPFRecTrack> primaryGsfPFRecTracks;
193 std::map<unsigned int, std::vector<reco::GsfPFRecTrack> > GsfPFMap;
196 for (
unsigned int igsf=0; igsf<gsftracks.size();igsf++) {
200 int kf_ind=
FindPfRef(PfRTkColl,gsftracks[igsf],
false);
211 bool isEcalDriven =
true;
212 bool isTrackerDriven =
true;
214 if (&(*trackRef->seedRef())==0) {
215 isEcalDriven =
false;
216 isTrackerDriven =
false;
220 if(SeedRef->caloCluster().
isNull())
221 isEcalDriven =
false;
222 if(SeedRef->ctfTrack().
isNull())
223 isTrackerDriven =
false;
226 if(isFifthStepTrack &&
228 isTrackerDriven ==
false &&
233 if(isFifthStepTrack &&
235 isEcalDriven ==
false &&
240 if(isFifthStepTrack &&
262 bool validgsfbrem =
false;
278 if(validgsfbrem && passSel)
279 selGsfPFRecTracks.push_back(
pftrack_);
283 unsigned int count_primary = 0;
284 if(selGsfPFRecTracks.size() > 0) {
285 for(
unsigned int ipfgsf=0; ipfgsf<selGsfPFRecTracks.size();ipfgsf++) {
287 vector<unsigned int> secondaries(0);
292 keepGsf =
resolveGsfTracks(selGsfPFRecTracks,ipfgsf,secondaries,theEcalClusters);
296 if(keepGsf ==
true) {
300 pfNuclears,pfConversions,pfV0,
302 theEcalClusters,selGsfPFRecTracks[ipfgsf])) {
304 for(
unsigned int ii = 0;
ii<convBremPFRecTracks.size();
ii++) {
305 selGsfPFRecTracks[ipfgsf].addConvBremPFRecTrackRef(convBremPFRecTracks[
ii]);
311 primaryGsfPFRecTracks.push_back(selGsfPFRecTracks[ipfgsf]);
317 unsigned int primGsfIndex = selGsfPFRecTracks[ipfgsf].trackId();
318 vector<reco::GsfPFRecTrack> trueGsfPFRecTracks;
319 if(secondaries.size() > 0) {
321 for(
unsigned int isecpfgsf=0; isecpfgsf<secondaries.size();isecpfgsf++) {
323 PFRecTrackRef refsecKF = selGsfPFRecTracks[(secondaries[isecpfgsf])].kfPFRecTrackRef();
325 unsigned int secGsfIndex = selGsfPFRecTracks[(secondaries[isecpfgsf])].trackId();
326 GsfTrackRef secGsfRef = selGsfPFRecTracks[(secondaries[isecpfgsf])].gsfTrackRef();
332 primGsfIndex, secGsfRef,
340 primGsfIndex, secGsfRef,
344 bool validgsfbrem =
false;
347 gsftracks[secGsfIndex],
352 gsftracks[secGsfIndex],
357 gsfPFRecTrackCollectionSecondary->push_back(
secpftrack_);
362 GsfPFMap.insert(pair<
unsigned int,std::vector<reco::GsfPFRecTrack> >(count_primary,trueGsfPFRecTracks));
363 trueGsfPFRecTracks.clear();
371 iEvent.
put(gsfPFRecTrackCollectionSecondary,
"Secondary");
377 for(
unsigned int iGSF = 0; iGSF<primaryGsfPFRecTracks.size();iGSF++){
378 gsfPFRecTrackCollection->push_back(primaryGsfPFRecTracks[iGSF]);
380 iEvent.
put(gsfPFRecTrackCollection);
382 selGsfPFRecTracks.clear();
384 primaryGsfPFRecTracks.clear();
390 std::vector<reco::GsfPFRecTrack>& gsfPFRecTrackPrimary,
391 const std::map<
unsigned int, std::vector<reco::GsfPFRecTrack> >& MapPrimSec) {
393 unsigned int csecgsf=0;
394 for (
std::map<
unsigned int, std::vector<reco::GsfPFRecTrack> >::const_iterator igsf = MapPrimSec.begin();
395 igsf != MapPrimSec.end(); igsf++,cgsf++) {
396 vector<reco::GsfPFRecTrack> SecGsfPF = igsf->second;
397 for (
unsigned int iSecGsf=0; iSecGsf < SecGsfPF.size(); iSecGsf++) {
399 gsfPFRecTrackPrimary[cgsf].addConvBremGsfPFRecTrackRef(refgprt);
413 if (&(*gsftk.
seedRef())==0)
return -1;
416 if (ElSeedRef->ctfTrack().
isNull()){
417 reco::PFRecTrackCollection::const_iterator pft=PfRTkColl.begin();
418 reco::PFRecTrackCollection::const_iterator pftend=PfRTkColl.end();
421 unsigned int ish_max=0;
425 for(;pft!=pftend;++pft){
428 float dph= fabs(pft->trackRef()->phi()-gsftk.
phi());
430 float det=fabs(pft->trackRef()->eta()-gsftk.
eta());
431 float dr =
sqrt(dph*dph+det*det);
434 pft->trackRef()->recHitsBegin();
436 pft->trackRef()->recHitsEnd();
440 for(;hhit!=hhit_end;++hhit){
441 if (!(*hhit)->isValid())
continue;
446 for(;hit!=hit_end;++hit){
447 if (!(hit->isValid()))
continue;
457 ((ish==ish_max)&&(dr<dr_min))){
467 if (ibest<0)
return -1;
469 if((ish_max==0) || (dr_min>0.05))
return -1;
470 if(otherColl && (ish_max==0))
return -1;
476 reco::PFRecTrackCollection::const_iterator pft=PfRTkColl.begin();
477 reco::PFRecTrackCollection::const_iterator pftend=PfRTkColl.end();
480 for(;pft!=pftend;++pft){
482 if (pft->trackRef()==ElSeedRef->ctfTrack()){
492 bool isFithStep =
false;
495 TrackRef kfref = pfKfTrack->trackRef();
496 unsigned int Algo = 0;
497 switch (kfref->algo()) {
498 case TrackBase::undefAlgorithm:
500 case TrackBase::iter0:
501 case TrackBase::iter1:
502 case TrackBase::iter2:
503 case TrackBase::iter7:
504 case TrackBase::iter9:
505 case TrackBase::iter10:
508 case TrackBase::iter3:
511 case TrackBase::iter4:
514 case TrackBase::iter5:
517 case TrackBase::iter6:
533 if (&(*gsftk.
seedRef())==0)
return false;
536 bool passCut =
false;
537 if (ElSeedRef->ctfTrack().
isNull()){
538 if(ElSeedRef->caloCluster().
isNull())
return passCut;
542 float caloEne = scRef->energy();
543 float feta = fabs(scRef->eta()-gsftk.
etaMode());
544 float fphi = fabs(scRef->phi()-gsftk.
phiMode());
559 vector<unsigned int> &secondaries,
562 bool n_keepGsf =
true;
566 if (&(*nGsfTrack->seedRef())==0)
return false;
572 float nPin = nGsfTrack->pMode();
573 if(inTSOS.isValid()){
575 nPin = ninnMom.
mag();
578 float neta = nGsfTrack->innerMomentum().eta();
579 float nphi = nGsfTrack->innerMomentum().phi();
585 cout <<
" PFElecTkProducer:: considering track " << nGsfTrack->pt()
586 <<
" eta,phi " << nGsfTrack->eta() <<
", " << nGsfTrack->phi() << endl;
589 for (
unsigned int igsf=0; igsf< GsfPFVec.size();igsf++) {
594 cout <<
" PFElecTkProducer:: and comparing with track " << iGsfTrack->pt()
595 <<
" eta,phi " << iGsfTrack->eta() <<
", " << iGsfTrack->phi() << endl;
597 float ieta = iGsfTrack->innerMomentum().eta();
598 float iphi = iGsfTrack->innerMomentum().phi();
599 float feta = fabs(neta - ieta);
600 float fphi = fabs(nphi - iphi);
605 if(feta < 0.5 && fabs(fphi) < 1.0) {
607 cout <<
" Entering angular superloose preselection " << endl;
611 float iPin = iGsfTrack->pMode();
614 iPin = i_innMom.
mag();
617 if (&(*iGsfTrack->seedRef())==0)
continue;
620 float SCEnergy = -1.;
622 bool areBothGsfEcalDriven =
false;;
623 bool isSameSC =
isSameEgSC(nElSeedRef,iElSeedRef,areBothGsfEcalDriven,SCEnergy);
626 if(areBothGsfEcalDriven ) {
628 float nEP = SCEnergy/nPin;
629 float iEP = SCEnergy/iPin;
631 cout <<
" Entering SAME supercluster case "
633 <<
" iEP " << iEP << endl;
641 bool isSameLayer =
false;
642 bool iGsfInnermostWithLostHits =
647 cout <<
" iGsf is InnerMostWithLostHits " << iGsfInnermostWithLostHits
648 <<
" isSameLayer " << isSameLayer << endl;
650 if (iGsfInnermostWithLostHits) {
654 else if(isSameLayer){
655 if(fabs(iEP-1) < fabs(nEP-1)) {
660 secondaries.push_back(igsf);
665 secondaries.push_back(igsf);
671 float minBremDphi =
minTangDist(GsfPFVec[ngsf],GsfPFVec[igsf]);
674 bool isBothGsfTrackerDriven =
false;
675 bool nEcalDriven =
false;
676 bool iEcalDriven =
false;
682 isBothGsfTrackerDriven,
689 bool isSameLayer =
false;
690 bool iGsfInnermostWithLostHits =
697 cout <<
" Sharing ECAL energy passed "
698 <<
" nEtot " << nETot
699 <<
" iEtot " << iETot << endl;
700 if(isBothGsfTrackerDriven)
701 cout <<
" Both Track are trackerDriven " << endl;
705 if (iGsfInnermostWithLostHits) {
709 else if(isSameLayer){
718 if(isBothGsfTrackerDriven ==
false) {
725 secondaries.push_back(igsf);
742 float nEP = ETot/nPin;
743 float iEP = ETot/iPin;
747 cout <<
" nETot " << nETot
748 <<
" iETot " << iETot
749 <<
" ETot " << ETot << endl
753 <<
" iEP " << iEP << endl;
756 if(fabs(iEP-1) < fabs(nEP-1)) {
761 secondaries.push_back(igsf);
766 secondaries.push_back(igsf);
771 bool secPushedBack =
false;
772 if(nEcalDriven ==
false && nETot == 0.) {
776 else if(iEcalDriven ==
false && iETot == 0.) {
777 secondaries.push_back(igsf);
778 secPushedBack =
true;
781 cout <<
" Close Tracks "
782 <<
" feta " << feta <<
" fabs(fphi) " << fabs(fphi)
783 <<
" minBremDphi " << minBremDphi
784 <<
" nETot " << nETot
785 <<
" iETot " << iETot
786 <<
" nLostHits " << nGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS)
787 <<
" iLostHits " << iGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS) << endl;
791 if (iGsfInnermostWithLostHits) {
795 else if(isSameLayer ==
false) {
796 if(secPushedBack ==
false)
797 secondaries.push_back(igsf);
801 else if(feta < 0.1 && minBremDphi < 0.2){
805 cout <<
" Close Tracks and failed all the conditions "
806 <<
" feta " << feta <<
" fabs(fphi) " << fabs(fphi)
807 <<
" minBremDphi " << minBremDphi
808 <<
" nETot " << nETot
809 <<
" iETot " << iETot
810 <<
" nLostHits " << nGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS)
811 <<
" iLostHits " << iGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS) << endl;
813 if(nEcalDriven ==
false && nETot == 0.) {
830 float minDphi = 1000.;
833 std::vector<reco::PFBrem> primPFBrem = primGsf.
PFRecBrem();
834 std::vector<reco::PFBrem> secPFBrem = secGsf.
PFRecBrem();
837 unsigned int cbrem = 0;
838 for (
unsigned isbrem = 0; isbrem < secPFBrem.size(); isbrem++) {
839 if(secPFBrem[isbrem].indTrajPoint() == 99)
continue;
842 if( ! atSecECAL.
isValid() )
continue;
845 unsigned int sbrem = 0;
846 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
847 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
850 if( ! atPrimECAL.
isValid() )
continue;
855 float dphi = fabs(primPhi - secPhi);
857 if(fabs(dphi) < minDphi) {
858 minDphi = fabs(dphi);
873 bool& bothGsfEcalDriven,
876 bool isSameSC =
false;
882 if(nscRef.
isNonnull() && iscRef.isNonnull()) {
883 bothGsfEcalDriven =
true;
884 if(nscRef == iscRef) {
887 SCEnergy = nscRef->energy();
899 bool& bothGsfTrackerDriven,
905 bool isSharingEnergy =
false;
908 bool oneEcalDriven =
true;
912 if(nSeedRef->caloCluster().
isNonnull()) {
914 nEnergy = scRef->energy();
916 gsfPfTrack = iGsfPFRecTrack;
918 else if(iSeedRef->caloCluster().
isNonnull()){
920 iEnergy = scRef->energy();
922 gsfPfTrack = nGsfPFRecTrack;
925 oneEcalDriven =
false;
931 vector<PFCluster> vecPFClusters;
932 vecPFClusters.clear();
934 for (PFClusterCollection::const_iterator clus = theEClus.begin();
935 clus != theEClus.end();
940 float deta = fabs(scRef->position().eta() - clust.
position().eta());
941 float dphi = fabs(scRef->position().phi() - clust.
position().phi());
946 if(deta < 0.5 && fabs(dphi) < 1.0) {
947 bool foundLink =
false;
953 iEnergy += clust.
energy();
955 nEnergy += clust.
energy();
956 vecPFClusters.push_back(clust);
960 if(foundLink ==
false) {
961 vector<PFBrem> primPFBrem = gsfPfTrack.
PFRecBrem();
962 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
963 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
969 iEnergy += clust.
energy();
971 nEnergy += clust.
energy();
972 vecPFClusters.push_back(clust);
979 if(vecPFClusters.size() > 0 ) {
980 for(
unsigned int pf = 0; pf < vecPFClusters.size(); pf++) {
983 isSharingEnergy =
true;
992 bothGsfTrackerDriven =
true;
993 vector<PFCluster> nPFCluster;
994 vector<PFCluster> iPFCluster;
999 for (PFClusterCollection::const_iterator clus = theEClus.begin();
1000 clus != theEClus.end();
1010 if(ndeta < 0.5 && fabs(ndphi) < 1.0) {
1011 bool foundNLink =
false;
1016 nPFCluster.push_back(clust);
1017 nEnergy += clust.
energy();
1020 if(foundNLink ==
false) {
1021 const vector<PFBrem>& primPFBrem = nGsfPFRecTrack.
PFRecBrem();
1022 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
1023 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
1025 if(foundNLink ==
false) {
1029 nPFCluster.push_back(clust);
1030 nEnergy += clust.
energy();
1043 if(ideta < 0.5 && fabs(idphi) < 1.0) {
1044 bool foundILink =
false;
1048 iPFCluster.push_back(clust);
1049 iEnergy += clust.
energy();
1052 if(foundILink ==
false) {
1053 vector<PFBrem> primPFBrem = iGsfPFRecTrack.
PFRecBrem();
1054 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
1055 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
1057 if(foundILink ==
false) {
1060 iPFCluster.push_back(clust);
1061 iEnergy += clust.
energy();
1071 if(nPFCluster.size() > 0 && iPFCluster.size() > 0) {
1072 for(
unsigned int npf = 0; npf < nPFCluster.size(); npf++) {
1073 for(
unsigned int ipf = 0; ipf < iPFCluster.size(); ipf++) {
1076 isSharingEnergy =
true;
1086 return isSharingEnergy;
1099 int gsfHitCounter1 = 0 ;
1102 ( elHitsIt1 = nGsfTrack->recHitsBegin() ;
1103 elHitsIt1 != nGsfTrack->recHitsEnd() ;
1104 elHitsIt1++, gsfHitCounter1++ )
1105 {
if (((**elHitsIt1).isValid())) break ; }
1107 int gsfHitCounter2 = 0 ;
1110 ( elHitsIt2 = iGsfTrack->recHitsBegin() ;
1111 elHitsIt2 != iGsfTrack->recHitsEnd() ;
1112 elHitsIt2++, gsfHitCounter2++ )
1113 {
if (((**elHitsIt2).isValid())) break ; }
1115 uint32_t gsfHit1 = gsfHitPattern1.
getHitPattern(HitPattern::TRACK_HITS, gsfHitCounter1) ;
1116 uint32_t gsfHit2 = gsfHitPattern2.
getHitPattern(HitPattern::TRACK_HITS, gsfHitCounter2) ;
1123 else if (gsfHitPattern1.
getLayer(gsfHit1)!=gsfHitPattern2.
getLayer(gsfHit2))
1125 return (gsfHitPattern2.
getLayer(gsfHit2)<gsfHitPattern1.
getLayer(gsfHit1));
1138 unsigned int nLostHits = nGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS);
1139 unsigned int iLostHits = iGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS);
1141 if (nLostHits!=iLostHits) {
1142 return (nLostHits > iLostHits);
1176 vector <TString> weightfiles;
1182 FILE * fileConvBremID = fopen(weightfiles[
iter],
"r");
1183 if (fileConvBremID) {
1184 fclose(fileConvBremID);
1187 string err =
"PFElecTkProducer: cannot open weight file '";
1188 err += weightfiles[
iter];
1190 throw invalid_argument( err );
const REPPoint & positionREP() const
trajectory position in (rho, eta, phi) base
bool trajinev_
Trajectory of GSfTracks in the event?
T getParameter(std::string const &) const
const math::XYZPoint & position() const
cluster centroid position
reconstructed track used as an input to particle flow
edm::EDGetTokenT< reco::PFRecTrackCollection > pfTrackLabel_
static uint32_t getLayer(uint16_t pattern)
static bool overlap(const reco::CaloCluster &sc1, const reco::CaloCluster &sc, float minfrac=0.01, bool debug=false)
bool isNonnull() const
Checks for non-null.
edm::EDGetTokenT< reco::GsfTrackCollection > gsfTrackLabel_
void createGsfPFRecTrackRef(const edm::OrphanHandle< reco::GsfPFRecTrackCollection > &gsfPfHandle, std::vector< reco::GsfPFRecTrack > &gsfPFRecTrackPrimary, const std::map< unsigned int, std::vector< reco::GsfPFRecTrack > > &MapPrimSec)
const TrackExtraRef & extra() const
reference to "extra" object
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
double mvaConvBremFinderIDEndcapsLowPt_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
bool useFifthStepForTrackDriven_
std::string path_mvaWeightFileConvBremEndcapsLowPt_
ConvBremPFTrackFinder * convBremFinder_
bool isFifthStep(reco::PFRecTrackRef pfKfTrack)
const std::vector< reco::PFBrem > & PFRecBrem() const
double phi() const
azimuthal angle of momentum vector
bool applySelection(const reco::GsfTrack &)
~PFElecTkProducer()
Destructor.
bool momentumFromModeCartesian(const TrajectoryStateOnSurface tsos, GlobalVector &momentum) const
reco::GsfPFRecTrack secpftrack_
edm::EDGetTokenT< reco::VertexCollection > primVtxLabel_
std::string path_mvaWeightFileConvBremBarrelHighPt_
PFTrackTransformer * pfTransformer_
PFTrackTransformer.
const MultiTrajectoryStateMode * mtsMode_
double mvaConvBremFinderIDBarrelLowPt_
const std::vector< reco::PFRecTrackRef > & getConvBremPFRecTracks()
bool isSameEgSC(const reco::ElectronSeedRef &nSeedRef, const reco::ElectronSeedRef &iSeedRef, bool &bothGsfEcalDriven, float &SCEnergy)
PFElecTkProducer(const edm::ParameterSet &)
Constructor.
double eta() const
pseudorapidity of momentum vector
bool foundConvBremPFRecTrack(const edm::Handle< reco::PFRecTrackCollection > &thePfRecTrackCol, const edm::Handle< reco::VertexCollection > &primaryVertex, const edm::Handle< reco::PFDisplacedTrackerVertexCollection > &pfNuclears, const edm::Handle< reco::PFConversionCollection > &pfConversions, const edm::Handle< reco::PFV0Collection > &pfV0, bool useNuclear, bool useConversions, bool useV0, const reco::PFClusterCollection &theEClus, const reco::GsfPFRecTrack &gsfpfrectk)
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
void calculatePositionREP()
computes posrep_ once and for all
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
edm::EDGetTokenT< reco::PFV0Collection > pfV0_
const reco::GsfTrackRef & gsfTrackRef() const
recHitContainer::const_iterator const_iterator
std::string path_mvaWeightFileConvBremEndcapsHighPt_
std::vector< GsfTrack > GsfTrackCollection
collection of GsfTracks
edm::EDGetTokenT< reco::PFDisplacedTrackerVertexCollection > pfNuclear_
const reco::PFTrajectoryPoint & extrapolatedPoint(unsigned layerid) const
bool isNull() const
Checks for null.
static uint32_t getSubStructure(uint16_t pattern)
double energy() const
cluster energy
bool isInnerMostWithLostHits(const reco::GsfTrackRef &nGsfTrack, const reco::GsfTrackRef &iGsfTrack, bool &sameLayer)
virtual void endRun(const edm::Run &, const edm::EventSetup &) override
int FindPfRef(const reco::PFRecTrackCollection &PfRTkColl, const reco::GsfTrack &, bool)
edm::RefToBase< TrajectorySeed > seedRef() const
std::string path_mvaWeightFileConvBremBarrelLowPt_
bool resolveGsfTracks(const std::vector< reco::GsfPFRecTrack > &GsfPFVec, unsigned int ngsf, std::vector< unsigned int > &secondaries, const reco::PFClusterCollection &theEClus)
bool isValid() const
is this point valid ?
T const * product() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
T const * product() const
double mvaConvBremFinderIDBarrelHighPt_
double mvaConvBremFinderIDEndcapsHighPt_
edm::EDGetTokenT< reco::PFConversionCollection > pfConv_
std::vector< Trajectory > TrajectoryCollection
virtual void beginRun(const edm::Run &, const edm::EventSetup &) override
double etaMode() const
pseudorapidity of momentum vector from mode
bool useFifthStepForEcalDriven_
reco::GsfPFRecTrack pftrack_
virtual void produce(edm::Event &, const edm::EventSetup &) override
Produce the PFRecTrack collection.
double phiMode() const
azimuthal angle of momentum vector from mode
bool useConvBremFinder_
Conv Brem Finder.
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
bool isSharingEcalEnergyWithEgSC(const reco::GsfPFRecTrack &nGsfPFRecTrack, const reco::GsfPFRecTrack &iGsfPFRecTrack, const reco::ElectronSeedRef &nSeedRef, const reco::ElectronSeedRef &iSeedRef, const reco::PFClusterCollection &theEClus, bool &bothGsfTrackerDriven, bool &nEcalDriven, bool &iEcalDriven, float &nEnergy, float &iEnergy)
A PFTrack holds several trajectory points, which basically contain the position and momentum of a tra...
uint16_t getHitPattern(HitCategory category, int position) const
static double testTrackAndClusterByRecHit(const reco::PFRecTrack &track, const reco::PFCluster &cluster, bool isBrem=false, bool debug=false)
float minTangDist(const reco::GsfPFRecTrack &primGsf, const reco::GsfPFRecTrack &secGsf)
std::vector< PFRecTrack > PFRecTrackCollection
collection of PFRecTrack objects
edm::EDGetTokenT< reco::PFClusterCollection > pfEcalClusters_
bool applyAngularGsfClean_
MultiTrajectoryStateTransform mtsTransform_
bool isInnerMost(const reco::GsfTrackRef &nGsfTrack, const reco::GsfTrackRef &iGsfTrack, bool &sameLayer)