CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass > Class Template Reference

#include <PFRecoTauChargedHadron.h>

Inheritance diagram for reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >:
reco::tau::PFRecoTauChargedHadronBuilderPlugin reco::tau::RecoTauEventHolderPlugin reco::tau::RecoTauNamedPlugin

Public Member Functions

void beginEvent () override
 Hook called at the beginning of the event. More...
 
return_type operator() (const reco::Jet &) const override
 Build a collection of chargedHadrons from objects in the input jet. More...
 
 PFRecoTauChargedHadronFromGenericTrackPlugin (const edm::ParameterSet &, edm::ConsumesCollector &&iC)
 
 ~PFRecoTauChargedHadronFromGenericTrackPlugin () override
 
- Public Member Functions inherited from reco::tau::PFRecoTauChargedHadronBuilderPlugin
 PFRecoTauChargedHadronBuilderPlugin (const edm::ParameterSet &pset, edm::ConsumesCollector &&iC)
 
 ~PFRecoTauChargedHadronBuilderPlugin () override
 
- Public Member Functions inherited from reco::tau::RecoTauEventHolderPlugin
const edm::Eventevt () const
 
edm::Eventevt ()
 
const edm::EventSetupevtSetup () const
 
 RecoTauEventHolderPlugin (const edm::ParameterSet &pset)
 
void setup (edm::Event &, const edm::EventSetup &)
 
 ~RecoTauEventHolderPlugin () override
 
- Public Member Functions inherited from reco::tau::RecoTauNamedPlugin
const std::string & name () const
 
 RecoTauNamedPlugin (const edm::ParameterSet &pset)
 
virtual ~RecoTauNamedPlugin ()
 

Private Member Functions

bool filterTrack (const edm::Handle< std::vector< TrackClass > > &, size_t iTrack) const
 
template<>
bool filterTrack (const edm::Handle< std::vector< reco::Track > > &tracks, size_t iTrack) const
 
template<>
bool filterTrack (const edm::Handle< std::vector< pat::PackedCandidate > > &tracks, size_t iTrack) const
 
XYZTLorentzVector getTrackPos (const TrackClass &track) const
 
template<>
XYZTLorentzVector getTrackPos (const reco::Track &track) const
 
template<>
XYZTLorentzVector getTrackPos (const pat::PackedCandidate &track) const
 
double getTrackPtError (const TrackClass &track) const
 
template<>
double getTrackPtError (const reco::Track &track) const
 
template<>
double getTrackPtError (const pat::PackedCandidate &cand) const
 
void setChargedHadronTrack (PFRecoTauChargedHadron &chargedHadron, const edm::Ptr< TrackClass > &track) const
 
template<>
void setChargedHadronTrack (PFRecoTauChargedHadron &chargedHadron, const edm::Ptr< reco::Track > &track) const
 
template<>
void setChargedHadronTrack (PFRecoTauChargedHadron &chargedHadron, const edm::Ptr< pat::PackedCandidate > &track) const
 

Private Attributes

double dRcone_
 
bool dRconeLimitedToJetArea_
 
double dRmergeNeutralHadron_
 
double dRmergePhoton_
 
math::XYZVector magneticFieldStrength_
 
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecordmagneticFieldToken_
 
std::unique_ptr< RecoTauQualityCutsqcuts_
 
edm::InputTag srcTracks_
 
edm::EDGetTokenT< std::vector< TrackClass > > Tracks_token
 
int verbosity_
 
RecoTauVertexAssociator vertexAssociator_
 

Static Private Attributes

static constexpr unsigned int maxWarnings_ = 3
 
static std::atomic< unsigned int > numWarnings_ {0}
 

Additional Inherited Members

- Public Types inherited from reco::tau::PFRecoTauChargedHadronBuilderPlugin
typedef std::vector< std::unique_ptr< PFRecoTauChargedHadron > > ChargedHadronVector
 
typedef ChargedHadronVector return_type
 

Detailed Description

template<class TrackClass>
class reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >

Definition at line 13 of file PFRecoTauChargedHadron.h.

Constructor & Destructor Documentation

◆ PFRecoTauChargedHadronFromGenericTrackPlugin()

Definition at line 95 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

References reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::dRcone_, reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::dRconeLimitedToJetArea_, reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::dRmergeNeutralHadron_, reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::dRmergePhoton_, muonDTDigis_cfi::pset, reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::qcuts_, reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::srcTracks_, reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::Tracks_token, and reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::verbosity_.

98  vertexAssociator_(pset.getParameter<edm::ParameterSet>("qualityCuts"), std::move(iC)),
99  qcuts_(nullptr),
101  edm::ParameterSet qcuts_pset = pset.getParameterSet("qualityCuts").getParameterSet("signalQualityCuts");
102  qcuts_ = std::make_unique<RecoTauQualityCuts>(qcuts_pset);
103 
104  srcTracks_ = pset.getParameter<edm::InputTag>("srcTracks");
105  Tracks_token = iC.consumes<std::vector<TrackClass> >(srcTracks_);
106  dRcone_ = pset.getParameter<double>("dRcone");
107  dRconeLimitedToJetArea_ = pset.getParameter<bool>("dRconeLimitedToJetArea");
108 
109  dRmergeNeutralHadron_ = pset.getParameter<double>("dRmergeNeutralHadron");
110  dRmergePhoton_ = pset.getParameter<double>("dRmergePhoton");
111 
112  verbosity_ = pset.getParameter<int>("verbosity");
113  }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
def move(src, dest)
Definition: eostools.py:511
PFRecoTauChargedHadronBuilderPlugin(const edm::ParameterSet &pset, edm::ConsumesCollector &&iC)

◆ ~PFRecoTauChargedHadronFromGenericTrackPlugin()

Definition at line 116 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

116 {}

Member Function Documentation

◆ beginEvent()

template<class TrackClass >
void reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::beginEvent ( )
overridevirtual

Hook called at the beginning of the event.

Reimplemented from reco::tau::PFRecoTauChargedHadronBuilderPlugin.

Definition at line 120 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

120  {
121  vertexAssociator_.setEvent(*this->evt());
122 
124  }
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
const edm::EventSetup * evtSetup() const
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
void setEvent(const edm::Event &evt)
Load the vertices from the event.
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_

◆ filterTrack() [1/3]

template<class TrackClass >
bool reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::filterTrack ( const edm::Handle< std::vector< TrackClass > > &  ,
size_t  iTrack 
) const
private

◆ filterTrack() [2/3]

template<>
bool reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< reco::Track >::filterTrack ( const edm::Handle< std::vector< reco::Track > > &  tracks,
size_t  iTrack 
) const
private

Definition at line 127 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

References DiMuonV_cfg::tracks.

128  {
129  // ignore tracks which fail quality cuts
130  reco::TrackRef trackRef(tracks, iTrack);
131  return qcuts_->filterTrack(trackRef);
132  }

◆ filterTrack() [3/3]

template<>
bool reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< pat::PackedCandidate >::filterTrack ( const edm::Handle< std::vector< pat::PackedCandidate > > &  tracks,
size_t  iTrack 
) const
private

Definition at line 135 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

136  {
137  // ignore tracks which fail quality cuts
138  const pat::PackedCandidate& cand = (*tracks)[iTrack];
139  if (cand.charge() == 0)
140  return false;
141 
142  return qcuts_->filterChargedCand(cand);
143  }

◆ getTrackPos() [1/3]

template<class TrackClass >
XYZTLorentzVector reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::getTrackPos ( const TrackClass track) const
private

◆ getTrackPos() [2/3]

template<>
XYZTLorentzVector reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< reco::Track >::getTrackPos ( const reco::Track track) const
private

Definition at line 180 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

References HLT_2024v14_cff::track.

181  {
182  return XYZTLorentzVector(track.referencePoint().x(), track.referencePoint().y(), track.referencePoint().z(), 0.);
183  }
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:25

◆ getTrackPos() [3/3]

Definition at line 186 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

References HLT_2024v14_cff::track.

187  {
188  return XYZTLorentzVector(track.vertex().x(), track.vertex().y(), track.vertex().z(), 0.);
189  }
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:25

◆ getTrackPtError() [1/3]

template<class TrackClass >
double reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::getTrackPtError ( const TrackClass track) const
private

◆ getTrackPtError() [2/3]

template<>
double reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< reco::Track >::getTrackPtError ( const reco::Track track) const
private

Definition at line 158 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

References HLT_2024v14_cff::track.

158  {
159  return track.ptError();
160  }

◆ getTrackPtError() [3/3]

template<>
double reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< pat::PackedCandidate >::getTrackPtError ( const pat::PackedCandidate cand) const
private

Definition at line 163 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

References funct::abs(), and HLT_2024v14_cff::track.

164  {
165  double trackPtError =
166  0.06; // MB: Approximate avarage track PtError by 2.5% (barrel), 4% (transition), 6% (endcaps) lostTracks w/o detailed track information available (after TRK-11-001)
167  const reco::Track* track(cand.bestTrack());
168  if (track != nullptr) {
169  trackPtError = track->ptError();
170  } else {
171  if (std::abs(cand.eta()) < 0.9)
172  trackPtError = 0.025;
173  else if (std::abs(cand.eta()) < 1.4)
174  trackPtError = 0.04;
175  }
176  return trackPtError;
177  }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ operator()()

Build a collection of chargedHadrons from objects in the input jet.

Implements reco::tau::PFRecoTauChargedHadronBuilderPlugin.

Definition at line 204 of file PFRecoTauChargedHadronFromGenericTrackPlugin.cc.

References funct::abs(), reco::tau::atECALEntrance(), HPSPFTauProducerPuppi_cfi::chargedHadron, reco::deltaR(), HGC3DClusterGenMatchSelector_cfi::dR, edm::Event::getByToken(), metsig::jet, run3scouting_cff::jetArea, reco::PFRecoTauChargedHadron::kTrack, M_PI, SiStripPI::min, eostools::move(), Skims_PA_cff::name, convertSQLitetoXML_cfg::output, AlCaHLTBitMon_ParallelJobs::p, EgammaValidation_cff::pdgId, BaseParticlePropagator::propagateToEcalEntrance(), L1TObjectsTimingClient_cff::resolution, reco::tau::setChargedHadronP4(), jetUpdater_cfi::sort, mathSSE::sqrt(), HLT_2024v14_cff::track, DiMuonV_cfg::tracks, and L1BJetProducer_cff::vtx.

204  {
205  if (verbosity_) {
206  edm::LogPrint("TauChHFromTrack") << "<PFRecoTauChargedHadronFromGenericTrackPlugin::operator()>:";
207  edm::LogPrint("TauChHFromTrack") << " pluginName = " << name();
208  }
209 
211 
212  const edm::Event& evt = (*this->evt());
213 
216 
218  float jEta = jet.eta();
219  float jPhi = jet.phi();
220  size_t numTracks = tracks->size();
221  for (size_t iTrack = 0; iTrack < numTracks; ++iTrack) {
222  const TrackClass& track = (*tracks)[iTrack];
223 
224  // consider tracks in vicinity of tau-jet candidate only
225  double dR = deltaR(track.eta(), track.phi(), jEta, jPhi);
226  double dRmatch = dRcone_;
228  double jetArea = jet.jetArea();
229  if (jetArea > 0.) {
230  dRmatch = std::min(dRmatch, sqrt(jetArea / M_PI));
231  } else {
232  if (numWarnings_ < maxWarnings_) {
233  edm::LogInfo("PFRecoTauChargedHadronFromGenericTrackPlugin::operator()")
234  << "Jet: Pt = " << jet.pt() << ", eta = " << jet.eta() << ", phi = " << jet.phi()
235  << " has area = " << jetArea << " !!" << std::endl;
236  ++numWarnings_;
237  }
238  dRmatch = 0.1;
239  }
240  }
241  if (dR > dRmatch)
242  continue;
243 
244  if (!this->filterTrack(tracks, iTrack))
245  continue;
246 
247  reco::Candidate::Charge trackCharge_int = 0;
248  if (track.charge() > 0.)
249  trackCharge_int = +1;
250  else if (track.charge() < 0.)
251  trackCharge_int = -1;
252 
253  const double chargedPionMass = 0.13957; // GeV
254  double chargedPionP = track.p();
255  double chargedPionEn = TMath::Sqrt(chargedPionP * chargedPionP + chargedPionMass * chargedPionMass);
256  reco::Candidate::LorentzVector chargedPionP4(track.px(), track.py(), track.pz(), chargedPionEn);
257 
258  reco::Vertex::Point vtx(0., 0., 0.);
260  vtx = vertexAssociator_.associatedVertex(jet)->position();
261 
262  auto chargedHadron = std::make_unique<PFRecoTauChargedHadron>(
263  trackCharge_int, chargedPionP4, vtx, 0, true, PFRecoTauChargedHadron::kTrack);
264 
266 
267  // CV: Take code for propagating track to ECAL entrance
268  // from RecoParticleFlow/PFTracking/src/PFTrackTransformer.cc
269  // to make sure propagation is done in the same way as for charged PFCandidates.
270  //
271  // The following replacements need to be made
272  // outerMomentum -> momentum
273  // outerPosition -> referencePoint
274  // in order to run on AOD input
275  // (outerMomentum and outerPosition require access to reco::TrackExtra objects, which are available in RECO only)
276  //
277  XYZTLorentzVector chargedPionPos(getTrackPos(track));
278  RawParticle p(chargedPionP4, chargedPionPos);
279  p.setCharge(track.charge());
280  BaseParticlePropagator trackPropagator(p, 0., 0., magneticFieldStrength_.z());
281  trackPropagator.propagateToEcalEntrance(false);
282  if (trackPropagator.getSuccess() != 0) {
283  chargedHadron->positionAtECALEntrance_ = trackPropagator.particle().vertex();
284  } else {
285  if (chargedPionP4.pt() > 2. and std::abs(chargedPionP4.eta()) < 3.) {
286  edm::LogWarning("PFRecoTauChargedHadronFromGenericTrackPlugin::operator()")
287  << "Failed to propagate track: Pt = " << track.pt() << ", eta = " << track.eta()
288  << ", phi = " << track.phi() << " to ECAL entrance !!" << std::endl;
289  }
290  chargedHadron->positionAtECALEntrance_ = math::XYZPointF(0., 0., 0.);
291  }
292 
293  std::vector<Candidate_withDistance> neutralJetConstituents_withDistance;
294  for (const auto& jetConstituent : jet.daughterPtrVector()) {
295  int pdgId = jetConstituent->pdgId();
296  if (!(pdgId == 130 || pdgId == 22))
297  continue;
298  double dR = deltaR(atECALEntrance(&*jetConstituent, magneticFieldStrength_.z()),
299  chargedHadron->positionAtECALEntrance_);
300  double dRmerge = -1.;
301  if (pdgId == 130)
302  dRmerge = dRmergeNeutralHadron_;
303  else if (pdgId == 22)
304  dRmerge = dRmergePhoton_;
305  if (dR < dRmerge) {
306  Candidate_withDistance jetConstituent_withDistance;
307  jetConstituent_withDistance.pfCandidate_ = jetConstituent;
308  jetConstituent_withDistance.distance_ = dR;
309  neutralJetConstituents_withDistance.push_back(jetConstituent_withDistance);
310  chargedHadron->addDaughter(jetConstituent);
311  }
312  }
313  std::sort(
314  neutralJetConstituents_withDistance.begin(), neutralJetConstituents_withDistance.end(), isSmallerDistance);
315 
316  const double caloResolutionCoeff =
317  1.0; // CV: approximate ECAL + HCAL calorimeter resolution for hadrons by 100%*sqrt(E)
318  double resolutionTrackP = track.p() * (getTrackPtError(track) / track.pt());
319  double neutralEnSum = 0.;
320  for (std::vector<Candidate_withDistance>::const_iterator nextNeutral =
321  neutralJetConstituents_withDistance.begin();
322  nextNeutral != neutralJetConstituents_withDistance.end();
323  ++nextNeutral) {
324  double nextNeutralEn = nextNeutral->pfCandidate_->energy();
325  double resolutionCaloEn = caloResolutionCoeff * sqrt(neutralEnSum + nextNeutralEn);
326  double resolution = sqrt(resolutionTrackP * resolutionTrackP + resolutionCaloEn * resolutionCaloEn);
327  if ((neutralEnSum + nextNeutralEn) < (track.p() + 2. * resolution)) {
328  chargedHadron->neutralPFCandidates_.push_back(nextNeutral->pfCandidate_);
329  neutralEnSum += nextNeutralEn;
330  } else {
331  break;
332  }
333  }
334 
336 
337  if (verbosity_) {
338  edm::LogPrint("TauChHFromTrack") << *chargedHadron;
339  }
340 
341  output.push_back(std::move(chargedHadron));
342  }
343 
344  return output;
345  }
int Charge
electric charge type
Definition: Candidate.h:34
std::vector< std::unique_ptr< PFRecoTauChargedHadron > > ChargedHadronVector
math::XYZPointF atECALEntrance(const reco::Candidate *part, double bField)
bool filterTrack(const edm::Handle< std::vector< TrackClass > > &, size_t iTrack) const
XYZTLorentzVector getTrackPos(const TrackClass &track) const
void setChargedHadronTrack(PFRecoTauChargedHadron &chargedHadron, const edm::Ptr< TrackClass > &track) const
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:526
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float > > XYZPointF
point in space with cartesian internal representation
Definition: Point3D.h:10
double getTrackPtError(const TrackClass &track) const
reco::VertexRef associatedVertex(const Jet &jet) const
T sqrt(T t)
Definition: SSEVec.h:23
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
math::XYZPoint Point
point in the space
Definition: Vertex.h:40
Log< level::Warning, true > LogPrint
bool propagateToEcalEntrance(bool first=true)
#define M_PI
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:30
Log< level::Info, false > LogInfo
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:36
const std::string & name() const
Definition: output.py:1
Log< level::Warning, false > LogWarning
void setChargedHadronP4(reco::PFRecoTauChargedHadron &chargedHadron, double scaleFactor_neutralPFCands=1.0)
def move(src, dest)
Definition: eostools.py:511
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:25

◆ setChargedHadronTrack() [1/3]

template<class TrackClass >
void reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::setChargedHadronTrack ( PFRecoTauChargedHadron chargedHadron,
const edm::Ptr< TrackClass > &  track 
) const
private

◆ setChargedHadronTrack() [2/3]

template<>
void reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< reco::Track >::setChargedHadronTrack ( PFRecoTauChargedHadron chargedHadron,
const edm::Ptr< reco::Track > &  track 
) const
private

◆ setChargedHadronTrack() [3/3]

template<>
void reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< pat::PackedCandidate >::setChargedHadronTrack ( PFRecoTauChargedHadron chargedHadron,
const edm::Ptr< pat::PackedCandidate > &  track 
) const
private

Member Data Documentation

◆ dRcone_

template<class TrackClass >
double reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::dRcone_
private

◆ dRconeLimitedToJetArea_

template<class TrackClass >
bool reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::dRconeLimitedToJetArea_
private

◆ dRmergeNeutralHadron_

template<class TrackClass >
double reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::dRmergeNeutralHadron_
private

◆ dRmergePhoton_

template<class TrackClass >
double reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::dRmergePhoton_
private

◆ magneticFieldStrength_

template<class TrackClass >
math::XYZVector reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::magneticFieldStrength_
private

◆ magneticFieldToken_

◆ maxWarnings_

template<class TrackClass >
constexpr unsigned int reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::maxWarnings_ = 3
staticprivate

◆ numWarnings_

template<class TrackClass >
std::atomic< unsigned int > reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::numWarnings_ {0}
staticprivate

◆ qcuts_

template<class TrackClass >
std::unique_ptr<RecoTauQualityCuts> reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::qcuts_
private

◆ srcTracks_

template<class TrackClass >
edm::InputTag reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::srcTracks_
private

◆ Tracks_token

template<class TrackClass >
edm::EDGetTokenT<std::vector<TrackClass> > reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::Tracks_token
private

◆ verbosity_

template<class TrackClass >
int reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::verbosity_
private

◆ vertexAssociator_

template<class TrackClass >
RecoTauVertexAssociator reco::tau::PFRecoTauChargedHadronFromGenericTrackPlugin< TrackClass >::vertexAssociator_
private