46 (
"GsfTrackModuleLabel"));
52 (
"PrimaryVertexLabel"));
71 produces<GsfPFRecTrackCollection>();
72 produces<GsfPFRecTrackCollection>(
"Secondary" ).setBranchAlias(
"secondary" );
115 auto_ptr< GsfPFRecTrackCollection >
119 auto_ptr< GsfPFRecTrackCollection >
162 vector<Trajectory> tjvec(0);
166 tjvec= *(TrajectoryCollection.
product());
170 vector<reco::GsfPFRecTrack> selGsfPFRecTracks;
171 vector<reco::GsfPFRecTrack> primaryGsfPFRecTracks;
172 std::map<unsigned int, std::vector<reco::GsfPFRecTrack> > GsfPFMap;
175 for (
unsigned int igsf=0; igsf<gsftracks.size();igsf++) {
179 int kf_ind=
FindPfRef(PfRTkColl,gsftracks[igsf],
false);
190 bool isEcalDriven =
true;
191 bool isTrackerDriven =
true;
193 if (&(*trackRef->seedRef())==0) {
194 isEcalDriven =
false;
195 isTrackerDriven =
false;
198 auto const& SeedFromRef=
dynamic_cast<ElectronSeed const&
>(*(trackRef->extra()->seedRef()) );
199 if(SeedFromRef.caloCluster().isNull())
200 isEcalDriven =
false;
201 if(SeedFromRef.ctfTrack().isNull())
202 isTrackerDriven =
false;
205 if(isFifthStepTrack &&
207 isTrackerDriven ==
false &&
212 if(isFifthStepTrack &&
214 isEcalDriven ==
false &&
219 if(isFifthStepTrack &&
241 bool validgsfbrem =
false;
257 if(validgsfbrem && passSel)
258 selGsfPFRecTracks.push_back(
pftrack_);
262 unsigned int count_primary = 0;
263 if(selGsfPFRecTracks.size() > 0) {
264 for(
unsigned int ipfgsf=0; ipfgsf<selGsfPFRecTracks.size();ipfgsf++) {
266 vector<unsigned int> secondaries(0);
271 keepGsf =
resolveGsfTracks(selGsfPFRecTracks,ipfgsf,secondaries,theEcalClusters);
275 if(keepGsf ==
true) {
278 if(
convBremFinder_->foundConvBremPFRecTrack(thePfRecTrackCollection,thePrimaryVertexColl,
279 pfNuclears,pfConversions,pfV0,
282 theEcalClusters,selGsfPFRecTracks[ipfgsf])) {
283 const vector<PFRecTrackRef>& convBremPFRecTracks(
convBremFinder_->getConvBremPFRecTracks());
284 for(
unsigned int ii = 0;
ii<convBremPFRecTracks.size();
ii++) {
285 selGsfPFRecTracks[ipfgsf].addConvBremPFRecTrackRef(convBremPFRecTracks[
ii]);
291 primaryGsfPFRecTracks.push_back(selGsfPFRecTracks[ipfgsf]);
297 unsigned int primGsfIndex = selGsfPFRecTracks[ipfgsf].trackId();
298 vector<reco::GsfPFRecTrack> trueGsfPFRecTracks;
299 if(secondaries.size() > 0) {
301 for(
unsigned int isecpfgsf=0; isecpfgsf<secondaries.size();isecpfgsf++) {
303 PFRecTrackRef refsecKF = selGsfPFRecTracks[(secondaries[isecpfgsf])].kfPFRecTrackRef();
305 unsigned int secGsfIndex = selGsfPFRecTracks[(secondaries[isecpfgsf])].trackId();
306 GsfTrackRef secGsfRef = selGsfPFRecTracks[(secondaries[isecpfgsf])].gsfTrackRef();
312 primGsfIndex, secGsfRef,
320 primGsfIndex, secGsfRef,
324 bool validgsfbrem =
false;
327 gsftracks[secGsfIndex],
332 gsftracks[secGsfIndex],
337 gsfPFRecTrackCollectionSecondary->push_back(
secpftrack_);
342 GsfPFMap.insert(pair<
unsigned int,std::vector<reco::GsfPFRecTrack> >(count_primary,trueGsfPFRecTracks));
343 trueGsfPFRecTracks.clear();
351 iEvent.
put(gsfPFRecTrackCollectionSecondary,
"Secondary");
357 for(
unsigned int iGSF = 0; iGSF<primaryGsfPFRecTracks.size();iGSF++){
358 gsfPFRecTrackCollection->push_back(primaryGsfPFRecTracks[iGSF]);
360 iEvent.
put(gsfPFRecTrackCollection);
362 selGsfPFRecTracks.clear();
364 primaryGsfPFRecTracks.clear();
370 std::vector<reco::GsfPFRecTrack>& gsfPFRecTrackPrimary,
371 const std::map<
unsigned int, std::vector<reco::GsfPFRecTrack> >& MapPrimSec) {
373 unsigned int csecgsf=0;
374 for (
std::map<
unsigned int, std::vector<reco::GsfPFRecTrack> >::const_iterator igsf = MapPrimSec.begin();
375 igsf != MapPrimSec.end(); igsf++,cgsf++) {
376 vector<reco::GsfPFRecTrack> SecGsfPF = igsf->second;
377 for (
unsigned int iSecGsf=0; iSecGsf < SecGsfPF.size(); iSecGsf++) {
379 gsfPFRecTrackPrimary[cgsf].addConvBremGsfPFRecTrackRef(refgprt);
393 if (&(*gsftk.
seedRef())==0)
return -1;
396 if (ElSeedFromRef.ctfTrack().isNull()){
397 reco::PFRecTrackCollection::const_iterator pft=PfRTkColl.begin();
398 reco::PFRecTrackCollection::const_iterator pftend=PfRTkColl.end();
401 unsigned int ish_max=0;
405 for(;pft!=pftend;++pft){
408 float dph= fabs(pft->trackRef()->phi()-gsftk.
phi());
410 float det=fabs(pft->trackRef()->eta()-gsftk.
eta());
411 float dr =
sqrt(dph*dph+det*det);
414 pft->trackRef()->recHitsBegin();
416 pft->trackRef()->recHitsEnd();
420 for(;hhit!=hhit_end;++hhit){
421 if (!(*hhit)->isValid())
continue;
426 for(;hit!=hit_end;++hit){
427 if (!(hit->isValid()))
continue;
437 ((ish==ish_max)&&(dr<dr_min))){
447 if (ibest<0)
return -1;
449 if((ish_max==0) || (dr_min>0.05))
return -1;
450 if(otherColl && (ish_max==0))
return -1;
456 reco::PFRecTrackCollection::const_iterator pft=PfRTkColl.begin();
457 reco::PFRecTrackCollection::const_iterator pftend=PfRTkColl.end();
460 for(;pft!=pftend;++pft){
462 if (pft->trackRef()==ElSeedFromRef.ctfTrack()){
472 bool isFithStep =
false;
475 TrackRef kfref = pfKfTrack->trackRef();
476 unsigned int Algo = 0;
477 switch (kfref->algo()) {
478 case TrackBase::undefAlgorithm:
481 case TrackBase::lowPtTripletStep:
482 case TrackBase::pixelPairStep:
483 case TrackBase::jetCoreRegionalStep:
484 case TrackBase::muonSeededStepInOut:
485 case TrackBase::muonSeededStepOutIn:
497 case TrackBase::tobTecStep:
513 if (&(*gsftk.
seedRef())==0)
return false;
516 bool passCut =
false;
517 if (ElSeedFromRef.ctfTrack().isNull()){
518 if(ElSeedFromRef.caloCluster().isNull())
return passCut;
519 auto const* scRef =
dynamic_cast<SuperCluster const*
>(ElSeedFromRef.caloCluster().get());
522 float caloEne = scRef->energy();
523 float feta = fabs(scRef->eta()-gsftk.
etaMode());
524 float fphi = fabs(scRef->phi()-gsftk.
phiMode());
539 vector<unsigned int> &secondaries,
542 bool n_keepGsf =
true;
546 if (&(*nGsfTrack->seedRef())==0)
return false;
547 auto const& nElSeedFromRef=
dynamic_cast<ElectronSeed const&
>( *(nGsfTrack->extra()->seedRef()) );
552 float nPin = nGsfTrack->pMode();
555 nPin = ninnMom.
mag();
558 float neta = nGsfTrack->innerMomentum().eta();
559 float nphi = nGsfTrack->innerMomentum().phi();
565 cout <<
" PFElecTkProducer:: considering track " << nGsfTrack->pt()
566 <<
" eta,phi " << nGsfTrack->eta() <<
", " << nGsfTrack->phi() << endl;
569 for (
unsigned int igsf=0; igsf< GsfPFVec.size();igsf++) {
574 cout <<
" PFElecTkProducer:: and comparing with track " << iGsfTrack->pt()
575 <<
" eta,phi " << iGsfTrack->eta() <<
", " << iGsfTrack->phi() << endl;
577 float ieta = iGsfTrack->innerMomentum().eta();
578 float iphi = iGsfTrack->innerMomentum().phi();
579 float feta = fabs(neta - ieta);
580 float fphi = fabs(nphi - iphi);
585 if(feta < 0.5 && fabs(fphi) < 1.0) {
587 cout <<
" Entering angular superloose preselection " << endl;
591 float iPin = iGsfTrack->pMode();
594 iPin = i_innMom.
mag();
597 if (&(*iGsfTrack->seedRef())==0)
continue;
598 auto const& iElSeedFromRef=
dynamic_cast<ElectronSeed const&
>( *(iGsfTrack->extra()->seedRef()) );
600 float SCEnergy = -1.;
602 bool areBothGsfEcalDriven =
false;;
603 bool isSameSC =
isSameEgSC(nElSeedFromRef,iElSeedFromRef,areBothGsfEcalDriven,SCEnergy);
606 if(areBothGsfEcalDriven ) {
608 float nEP = SCEnergy/nPin;
609 float iEP = SCEnergy/iPin;
611 cout <<
" Entering SAME supercluster case "
613 <<
" iEP " << iEP << endl;
621 bool isSameLayer =
false;
622 bool iGsfInnermostWithLostHits =
627 cout <<
" iGsf is InnerMostWithLostHits " << iGsfInnermostWithLostHits
628 <<
" isSameLayer " << isSameLayer << endl;
630 if (iGsfInnermostWithLostHits) {
634 else if(isSameLayer){
635 if(fabs(iEP-1) < fabs(nEP-1)) {
640 secondaries.push_back(igsf);
645 secondaries.push_back(igsf);
651 float minBremDphi =
minTangDist(GsfPFVec[ngsf],GsfPFVec[igsf]);
654 bool isBothGsfTrackerDriven =
false;
655 bool nEcalDriven =
false;
656 bool iEcalDriven =
false;
662 isBothGsfTrackerDriven,
669 bool isSameLayer =
false;
670 bool iGsfInnermostWithLostHits =
677 cout <<
" Sharing ECAL energy passed "
678 <<
" nEtot " << nETot
679 <<
" iEtot " << iETot << endl;
680 if(isBothGsfTrackerDriven)
681 cout <<
" Both Track are trackerDriven " << endl;
685 if (iGsfInnermostWithLostHits) {
689 else if(isSameLayer){
698 if(isBothGsfTrackerDriven ==
false) {
705 secondaries.push_back(igsf);
722 float nEP = ETot/nPin;
723 float iEP = ETot/iPin;
727 cout <<
" nETot " << nETot
728 <<
" iETot " << iETot
729 <<
" ETot " << ETot << endl
733 <<
" iEP " << iEP << endl;
736 if(fabs(iEP-1) < fabs(nEP-1)) {
741 secondaries.push_back(igsf);
746 secondaries.push_back(igsf);
751 bool secPushedBack =
false;
752 if(nEcalDriven ==
false && nETot == 0.) {
756 else if(iEcalDriven ==
false && iETot == 0.) {
757 secondaries.push_back(igsf);
758 secPushedBack =
true;
761 cout <<
" Close Tracks "
762 <<
" feta " << feta <<
" fabs(fphi) " << fabs(fphi)
763 <<
" minBremDphi " << minBremDphi
764 <<
" nETot " << nETot
765 <<
" iETot " << iETot
766 <<
" nLostHits " << nGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS)
767 <<
" iLostHits " << iGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS) << endl;
771 if (iGsfInnermostWithLostHits) {
775 else if(isSameLayer ==
false) {
776 if(secPushedBack ==
false)
777 secondaries.push_back(igsf);
781 else if(feta < 0.1 && minBremDphi < 0.2){
785 cout <<
" Close Tracks and failed all the conditions "
786 <<
" feta " << feta <<
" fabs(fphi) " << fabs(fphi)
787 <<
" minBremDphi " << minBremDphi
788 <<
" nETot " << nETot
789 <<
" iETot " << iETot
790 <<
" nLostHits " << nGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS)
791 <<
" iLostHits " << iGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS) << endl;
793 if(nEcalDriven ==
false && nETot == 0.) {
813 std::vector<reco::PFBrem> primPFBrem = primGsf.
PFRecBrem();
814 std::vector<reco::PFBrem> secPFBrem = secGsf.
PFRecBrem();
817 unsigned int cbrem = 0;
818 for (
unsigned isbrem = 0; isbrem < secPFBrem.size(); isbrem++) {
819 if(secPFBrem[isbrem].indTrajPoint() == 99)
continue;
822 if( ! atSecECAL.
isValid() )
continue;
825 unsigned int sbrem = 0;
826 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
827 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
830 if( ! atPrimECAL.
isValid() )
continue;
835 float dphi = fabs(primPhi - secPhi);
837 if(fabs(dphi) < minDphi) {
838 minDphi = fabs(dphi);
853 bool& bothGsfEcalDriven,
856 bool isSameSC =
false;
862 if(nscRef && iscRef) {
863 bothGsfEcalDriven =
true;
864 if(nscRef == iscRef) {
867 SCEnergy = nscRef->energy();
879 bool& bothGsfTrackerDriven,
885 bool isSharingEnergy =
false;
888 bool oneEcalDriven =
true;
895 nEnergy = scRef->
energy();
897 gsfPfTrack = iGsfPFRecTrack;
902 iEnergy = scRef->
energy();
904 gsfPfTrack = nGsfPFRecTrack;
907 oneEcalDriven =
false;
913 vector<PFCluster> vecPFClusters;
914 vecPFClusters.clear();
916 for (PFClusterCollection::const_iterator clus = theEClus.begin();
917 clus != theEClus.end();
928 if(deta < 0.5 && fabs(dphi) < 1.0) {
929 bool foundLink =
false;
935 iEnergy += clust.
energy();
937 nEnergy += clust.
energy();
938 vecPFClusters.push_back(clust);
942 if(foundLink ==
false) {
943 vector<PFBrem> primPFBrem = gsfPfTrack.
PFRecBrem();
944 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
945 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
951 iEnergy += clust.
energy();
953 nEnergy += clust.
energy();
954 vecPFClusters.push_back(clust);
961 if(vecPFClusters.size() > 0 ) {
962 for(
unsigned int pf = 0; pf < vecPFClusters.size(); pf++) {
965 isSharingEnergy =
true;
974 bothGsfTrackerDriven =
true;
975 vector<PFCluster> nPFCluster;
976 vector<PFCluster> iPFCluster;
981 for (PFClusterCollection::const_iterator clus = theEClus.begin();
982 clus != theEClus.end();
992 if(ndeta < 0.5 && fabs(ndphi) < 1.0) {
993 bool foundNLink =
false;
998 nPFCluster.push_back(clust);
999 nEnergy += clust.
energy();
1002 if(foundNLink ==
false) {
1003 const vector<PFBrem>& primPFBrem = nGsfPFRecTrack.
PFRecBrem();
1004 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
1005 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
1007 if(foundNLink ==
false) {
1011 nPFCluster.push_back(clust);
1012 nEnergy += clust.
energy();
1025 if(ideta < 0.5 && fabs(idphi) < 1.0) {
1026 bool foundILink =
false;
1030 iPFCluster.push_back(clust);
1031 iEnergy += clust.
energy();
1034 if(foundILink ==
false) {
1035 vector<PFBrem> primPFBrem = iGsfPFRecTrack.
PFRecBrem();
1036 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
1037 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
1039 if(foundILink ==
false) {
1042 iPFCluster.push_back(clust);
1043 iEnergy += clust.
energy();
1053 if(nPFCluster.size() > 0 && iPFCluster.size() > 0) {
1054 for(
unsigned int npf = 0; npf < nPFCluster.size(); npf++) {
1055 for(
unsigned int ipf = 0; ipf < iPFCluster.size(); ipf++) {
1058 isSharingEnergy =
true;
1068 return isSharingEnergy;
1081 int gsfHitCounter1 = 0 ;
1084 ( elHitsIt1 = nGsfTrack->recHitsBegin() ;
1085 elHitsIt1 != nGsfTrack->recHitsEnd() ;
1086 elHitsIt1++, gsfHitCounter1++ )
1087 {
if (((**elHitsIt1).isValid())) break ; }
1089 int gsfHitCounter2 = 0 ;
1092 ( elHitsIt2 = iGsfTrack->recHitsBegin() ;
1093 elHitsIt2 != iGsfTrack->recHitsEnd() ;
1094 elHitsIt2++, gsfHitCounter2++ )
1095 {
if (((**elHitsIt2).isValid())) break ; }
1097 uint32_t gsfHit1 = gsfHitPattern1.
getHitPattern(HitPattern::TRACK_HITS, gsfHitCounter1) ;
1098 uint32_t gsfHit2 = gsfHitPattern2.
getHitPattern(HitPattern::TRACK_HITS, gsfHitCounter2) ;
1105 else if (gsfHitPattern1.
getLayer(gsfHit1)!=gsfHitPattern2.
getLayer(gsfHit2))
1107 return (gsfHitPattern2.
getLayer(gsfHit2)<gsfHitPattern1.
getLayer(gsfHit1));
1120 unsigned int nLostHits = nGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS);
1121 unsigned int iLostHits = iGsfTrack->hitPattern().numberOfLostHits(HitPattern::MISSING_INNER_HITS);
1123 if (nLostHits!=iLostHits) {
1124 return (nLostHits > iLostHits);
const REPPoint & positionREP() const
trajectory position in (rho, eta, phi) base
bool trajinev_
Trajectory of GSfTracks in the event?
value_type const * get() const
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_
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 &)
bool isNonnull() const
Checks for non-null.
~PFElecTkProducer()
Destructor.
bool momentumFromModeCartesian(const TrajectoryStateOnSurface tsos, GlobalVector &momentum) const
reco::GsfPFRecTrack secpftrack_
std::unique_ptr< ConvBremPFTrackFinder > convBremFinder_
edm::EDGetTokenT< reco::VertexCollection > primVtxLabel_
const MultiTrajectoryStateMode * mtsMode_
double mvaConvBremFinderIDBarrelLowPt_
CaloClusterRef caloCluster() const
double eta() const
pseudorapidity of momentum vector
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::vector< GsfTrack > GsfTrackCollection
collection of GsfTracks
double energy() const
cluster energy
edm::EDGetTokenT< reco::PFDisplacedTrackerVertexCollection > pfNuclear_
const reco::PFTrajectoryPoint & extrapolatedPoint(unsigned layerid) const
bool isSameEgSC(const reco::ElectronSeed &nSeed, const reco::ElectronSeed &iSeed, bool &bothGsfEcalDriven, float &SCEnergy)
static uint32_t getSubStructure(uint16_t pattern)
double energy() const
cluster energy
bool isInnerMostWithLostHits(const reco::GsfTrackRef &nGsfTrack, const reco::GsfTrackRef &iGsfTrack, bool &sameLayer)
PFElecTkProducer(const edm::ParameterSet &, const convbremhelpers::HeavyObjectCache *)
Constructor.
virtual void endRun(const edm::Run &, const edm::EventSetup &) override
int FindPfRef(const reco::PFRecTrackCollection &PfRTkColl, const reco::GsfTrack &, bool)
tuple detachedTripletStep
edm::RefToBase< TrajectorySeed > seedRef() const
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
A PFTrack holds several trajectory points, which basically contain the position and momentum of a tra...
std::unique_ptr< PFTrackTransformer > pfTransformer_
PFTrackTransformer.
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 isSharingEcalEnergyWithEgSC(const reco::GsfPFRecTrack &nGsfPFRecTrack, const reco::GsfPFRecTrack &iGsfPFRecTrack, const reco::ElectronSeed &nSeed, const reco::ElectronSeed &iSeed, const reco::PFClusterCollection &theEClus, bool &bothGsfTrackerDriven, bool &nEcalDriven, bool &iEcalDriven, float &nEnergy, float &iEnergy)
bool applyAngularGsfClean_
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
MultiTrajectoryStateTransform mtsTransform_
bool isInnerMost(const reco::GsfTrackRef &nGsfTrack, const reco::GsfTrackRef &iGsfTrack, bool &sameLayer)