CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Private Attributes
PFTau3ProngReco Class Reference
Inheritance diagram for PFTau3ProngReco:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  DiscCutPair
 

Public Types

enum  Alg { useKalmanFit = 0, useTrackHelix }
 
typedef std::vector< DiscCutPair * > DiscCutPairVec
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 PFTau3ProngReco (const edm::ParameterSet &iConfig)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
 ~PFTau3ProngReco () override
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducer () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Attributes

int Algorithm_
 
std::unique_ptr< StringCutObjectSelector< reco::PFTau > > cut_
 
DiscCutPairVec discriminators_
 
KinematicParticleVertexFitter kpvFitter_
 
int ndfPVT_
 
edm::InputTag PFTauTag_
 
edm::InputTag PFTauTIPTag_
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsInputProcessBlocks ()
 
static bool wantsProcessBlocks ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::ProducerBase
template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

Definition at line 71 of file PFTau3ProngReco.cc.

Member Typedef Documentation

◆ DiscCutPairVec

Definition at line 83 of file PFTau3ProngReco.cc.

Member Enumeration Documentation

◆ Alg

Enumerator
useKalmanFit 
useTrackHelix 

Definition at line 73 of file PFTau3ProngReco.cc.

Constructor & Destructor Documentation

◆ PFTau3ProngReco()

PFTau3ProngReco::PFTau3ProngReco ( const edm::ParameterSet iConfig)
explicit

Definition at line 99 of file PFTau3ProngReco.cc.

References PFTau3ProngReco::DiscCutPair::cut_, cut_, PFTau3ProngReco::DiscCutPair::cutFormula_, PDWG_TauSkim_cff::discriminators, discriminators_, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), PFTau3ProngReco::DiscCutPair::inputTag_, muonDTDigis_cfi::pset, and AlCaHLTBitMon_QueryRunRegistry::string.

100  : PFTauTag_(iConfig.getParameter<edm::InputTag>("PFTauTag")),
101  PFTauTIPTag_(iConfig.getParameter<edm::InputTag>("PFTauTIPTag")),
102  Algorithm_(iConfig.getParameter<int>("Algorithm")),
103  ndfPVT_(iConfig.getUntrackedParameter("ndfPVT", (int)5)) {
105  std::vector<edm::ParameterSet> discriminators =
106  iConfig.getParameter<std::vector<edm::ParameterSet>>("discriminators");
107  // Build each of our cuts
108  for (auto const& pset : discriminators) {
109  DiscCutPair* newCut = new DiscCutPair();
110  newCut->inputTag_ = pset.getParameter<edm::InputTag>("discriminator");
111  if (pset.existsAs<std::string>("selectionCut"))
112  newCut->cutFormula_ = new TFormula("selectionCut", pset.getParameter<std::string>("selectionCut").data());
113  else
114  newCut->cut_ = pset.getParameter<double>("selectionCut");
115  discriminators_.push_back(newCut);
116  }
117  // Build a string cut if desired
118  if (iConfig.exists("cut"))
119  cut_ = std::make_unique<StringCutObjectSelector<reco::PFTau>>(iConfig.getParameter<std::string>("cut"));
121  produces<edm::AssociationVector<PFTauRefProd, std::vector<reco::PFTau3ProngSummaryRef>>>();
122  produces<PFTau3ProngSummaryCollection>("PFTau3ProngSummary");
123 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::unique_ptr< StringCutObjectSelector< reco::PFTau > > cut_
bool exists(std::string const &parameterName) const
checks if a parameter exists
edm::InputTag PFTauTIPTag_
T getUntrackedParameter(std::string const &, T const &) const
DiscCutPairVec discriminators_
edm::InputTag PFTauTag_

◆ ~PFTau3ProngReco()

PFTau3ProngReco::~PFTau3ProngReco ( )
override

Definition at line 125 of file PFTau3ProngReco.cc.

125 {}

Member Function Documentation

◆ produce()

void PFTau3ProngReco::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overridevirtual

Implements edm::EDProducer.

Definition at line 146 of file PFTau3ProngReco.cc.

References PdtPdgMini::a_1_plus, funct::abs(), reco::PFTau3ProngSummary::AddSolution(), Algorithm_, TransientTrackBuilder::build(), c, HLT_2022v12_cff::cands, ALCARECOTkAlJpsiMuMu_cff::charge, cut_, ztail::d, TtSemiLepEvtBuilder_cfi::disc, discriminators_, MillePedeFileConverter_cfg::e, TransientTrackBuilder::field(), tauImpactParameter::TauA1NuConstrainedFitter::fit(), KinematicParticleVertexFitter::fit(), edm::EventSetup::get(), tauImpactParameter::TauA1NuConstrainedFitter::getMother(), tauImpactParameter::TauA1NuConstrainedFitter::getRefitDaughters(), getTrack(), mps_fire::i, iEvent, MagneticField::inInverseGeV(), dqmiolumiharvest::j, kpvFitter_, eostools::move(), ndfPVT_, HLTMuonOfflineAnalyzer_cfi::NVertex, tauImpactParameter::LorentzVectorParticle::p4(), KinematicParticleFactoryFromTransientTrack::particle(), TriggerAnalyzer::passed, EgammaValidation_cff::pdgid, EgammaValidation_cff::pdgId, PFTauTag_, PFTauTIPTag_, tauImpactParameter::PDGInfo::pi_mass(), BeamMonitor_cff::primaryVertex, MetAnalyzer::pv(), TrackCollections2monitor_cff::selectedTracks, pfDeepBoostedJetPreprocessParams_cfi::sv, L1TRate_Offline_cfi::Tau, metsig::tau, HLT_2022v12_cff::track, gather_cfg::Tracks, useKalmanFit, useTrackHelix, trackerHitRTTI::vector, and PV3DBase< T, PVType, FrameType >::z().

146  {
147  // Obtain Collections
148  edm::ESHandle<TransientTrackBuilder> transTrackBuilder;
149  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", transTrackBuilder);
150 
152  iEvent.getByLabel(PFTauTag_, Tau);
153 
155  iEvent.getByLabel(PFTauTIPTag_, TIPAV);
156 
157  auto AVPFTau3PS = std::make_unique<edm::AssociationVector<PFTauRefProd, std::vector<reco::PFTau3ProngSummaryRef>>>(
158  PFTauRefProd(Tau));
159  auto PFTau3PSCollection_out = std::make_unique<PFTau3ProngSummaryCollection>();
160  reco::PFTau3ProngSummaryRefProd PFTau3RefProd_out =
161  iEvent.getRefBeforePut<reco::PFTau3ProngSummaryCollection>("PFTau3ProngSummary");
162 
163  // Load each discriminator
164  for (auto& disc : discriminators_) {
165  iEvent.getByLabel(disc->inputTag_, disc->handle_);
166  }
167 
168  // For each Tau Run Algorithim
169  if (Tau.isValid()) {
170  for (reco::PFTauCollection::size_type iPFTau = 0; iPFTau < Tau->size(); iPFTau++) {
171  reco::PFTauRef tau(Tau, iPFTau);
172  reco::PFTau3ProngSummary PFTau3PS;
174  // Check if it passed all the discrimiantors
175  bool passed(true);
176  for (auto const& disc : discriminators_) {
177  // Check this discriminator passes
178  bool passedDisc = true;
179  if (disc->cutFormula_)
180  passedDisc = (disc->cutFormula_->Eval((*disc->handle_)[tau]) > 0.5);
181  else
182  passedDisc = ((*disc->handle_)[tau] > disc->cut_);
183  if (!passedDisc) {
184  passed = false;
185  break;
186  }
187  }
188  if (passed && cut_.get()) {
189  passed = (*cut_)(*tau);
190  }
191  if (passed) {
192  PDGInfo pdgInfo;
193  const reco::PFTauTransverseImpactParameterRef theTIP = TIPAV->value(tau.key());
194  const reco::VertexRef primaryVertex = theTIP->primaryVertex();
196  // Now compute the 3 prong Tau
197  bool SecondaryVtxOK(false);
199  if (theTIP->hasSecondaryVertex() && primaryVertex->ndof() > ndfPVT_) {
200  const VertexRef secVtx = theTIP->secondaryVertex();
201  GlobalPoint sv(secVtx->position().x(), secVtx->position().y(), secVtx->position().z());
202  double vtxchi2(0), vtxndf(1);
203  if (useKalmanFit == Algorithm_) {
204  vtxchi2 = secVtx->chi2();
205  vtxndf = secVtx->ndof();
206  const std::vector<reco::Track>& selectedTracks = secVtx->refittedTracks();
207  std::vector<reco::TransientTrack> transTrkVect;
208  for (unsigned int i = 0; i != selectedTracks.size(); i++)
209  transTrkVect.push_back(transTrackBuilder->build(selectedTracks[i]));
211  float piMassSigma(1.e-6), piChi(0.0), piNdf(0.0);
212  std::vector<RefCountedKinematicParticle> pions;
213  for (unsigned int i = 0; i < transTrkVect.size(); i++)
214  pions.push_back(kinFactory.particle(transTrkVect[i], pdgInfo.pi_mass(), piChi, piNdf, sv, piMassSigma));
215  RefCountedKinematicTree jpTree = kpvFitter_.fit(pions);
216  jpTree->movePointerToTheTop();
217  const KinematicParameters parameters = jpTree->currentParticle()->currentState().kinematicParameters();
218  AlgebraicSymMatrix77 cov = jpTree->currentParticle()->currentState().kinematicParametersError().matrix();
219  // get pions
220  double c(0);
221  std::vector<reco::Track> Tracks;
222  std::vector<LorentzVectorParticle> ReFitPions;
223  for (unsigned int i = 0; i < transTrkVect.size(); i++) {
224  c += transTrkVect[i].charge();
225  ReFitPions.push_back(ParticleBuilder::createLorentzVectorParticle(transTrkVect[i], *secVtx, true, true));
226  }
227  // now covert a1 into LorentzVectorParticle
228  TVectorT<double> a1_par(LorentzVectorParticle::NLorentzandVertexPar);
229  TMatrixTSym<double> a1_cov(LorentzVectorParticle::NLorentzandVertexPar);
230  for (int i = 0; i < LorentzVectorParticle::NLorentzandVertexPar; i++) {
231  a1_par(i) = parameters(i);
232  for (int j = 0; j < LorentzVectorParticle::NLorentzandVertexPar; j++) {
233  a1_cov(i, j) = cov(i, j);
234  }
235  }
237  a1_par, a1_cov, abs(PdtPdgMini::a_1_plus) * c, c, transTrackBuilder->field()->inInverseGeV(sv).z());
238  SecondaryVtxOK = true;
239  PFTau3PS = reco::PFTau3ProngSummary(theTIP, a1.p4(), vtxchi2, vtxndf);
240  } else if (useTrackHelix == Algorithm_) {
241  // use Track Helix
242  std::vector<TrackParticle> pions;
243  GlobalPoint pvpoint(
244  primaryVertex->position().x(), primaryVertex->position().y(), primaryVertex->position().z());
245  const std::vector<edm::Ptr<reco::Candidate>> cands = tau->signalChargedHadrCands();
246  for (std::vector<edm::Ptr<reco::Candidate>>::const_iterator iter = cands.begin(); iter != cands.end();
247  ++iter) {
248  const reco::Track* track = getTrack(**iter);
249  if (track != nullptr) {
250  reco::TransientTrack transTrk = transTrackBuilder->build(*track);
251  pions.push_back(ParticleBuilder::createTrackParticle(transTrk, pvpoint, true, true));
252  }
253  }
254  TVector3 pv(secVtx->position().x(), secVtx->position().y(), secVtx->position().z());
255  Chi2VertexFitter chi2v(pions, pv);
256  SecondaryVtxOK = chi2v.fit();
257  double c(0);
258  for (unsigned int i = 0; i < pions.size(); i++) {
259  c += pions[i].charge();
260  }
261  int pdgid = abs(PdtPdgMini::a_1_plus) * c;
262  a1 = chi2v.getMother(pdgid);
263  PFTau3PS = reco::PFTau3ProngSummary(theTIP, a1.p4(), vtxchi2, vtxndf);
264  }
265  }
266  if (SecondaryVtxOK) {
267  // Tau Solver
268  TVector3 pv(primaryVertex->position().x(), primaryVertex->position().y(), primaryVertex->position().z());
269  TMatrixTSym<double> pvcov(LorentzVectorParticle::NVertex);
271  primaryVertex->fill(pvCov);
272  for (int i = 0; i < LorentzVectorParticle::NVertex; i++) {
273  for (int j = 0; j < LorentzVectorParticle::NVertex; j++) {
274  pvcov(i, j) = pvCov(i, j);
275  }
276  }
277  for (unsigned int i = 0; i < PFTau3ProngSummary::nsolutions; i++) {
278  TauA1NuConstrainedFitter TauA1NU(i, a1, pv, pvcov);
279  bool isFitOK = TauA1NU.fit();
280  if (isFitOK) {
281  LorentzVectorParticle theTau = TauA1NU.getMother();
282  std::vector<LorentzVectorParticle> daughter = TauA1NU.getRefitDaughters();
283  std::vector<TLorentzVector> daughter_p4;
284  std::vector<int> daughter_charge, daughter_PDGID;
285  for (unsigned int d = 0; d < daughter.size(); d++) {
286  daughter_p4.push_back(daughter[d].p4());
287  daughter_charge.push_back((int)daughter[d].charge());
288  daughter_PDGID.push_back(daughter[d].pdgId());
289  }
290  PFTau3PS.AddSolution(i, theTau.p4(), daughter_p4, daughter_charge, daughter_PDGID, (isFitOK), 0.0, -999);
291  }
292  }
293  }
294  }
295  reco::PFTau3ProngSummaryRef PFTau3PSRef =
296  reco::PFTau3ProngSummaryRef(PFTau3RefProd_out, PFTau3PSCollection_out->size());
297  PFTau3PSCollection_out->push_back(PFTau3PS);
298  AVPFTau3PS->setValue(iPFTau, PFTau3PSRef);
299  }
300  }
301  iEvent.put(std::move(PFTau3PSCollection_out), "PFTau3ProngSummary");
302  iEvent.put(std::move(AVPFTau3PS));
303 }
NVertex
parameters for fixed-width plots
std::vector< reco::PFTau3ProngSummary > PFTau3ProngSummaryCollection
collection of PFTau3ProngSummary objects
KinematicParticleVertexFitter kpvFitter_
RefCountedKinematicTree fit(const std::vector< RefCountedKinematicParticle > &particles) const
T z() const
Definition: PV3DBase.h:61
std::unique_ptr< StringCutObjectSelector< reco::PFTau > > cut_
GlobalVector inInverseGeV(const GlobalPoint &gp) const
Field value ad specified global point, in 1/Gev.
Definition: MagneticField.h:36
edm::InputTag PFTauTIPTag_
ErrorD< N >::type type
Definition: Error.h:32
edm::RefProd< PFTauCollection > PFTauRefProd
references to PFTau collection
Definition: PFTauFwd.h:15
uint16_t size_type
reco::TransientTrack build(const reco::Track *p) const
int iEvent
Definition: GenABIO.cc:224
def pv(vc)
Definition: MetAnalyzer.py:7
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
T get() const
Definition: EventSetup.h:82
static double pi_mass()
Definition: PDGInfo.h:13
RefCountedKinematicParticle particle(const reco::TransientTrack &initialTrack, const ParticleMass &massGuess, float chiSquared, float degreesOfFr, float &m_sigma) const
DiscCutPairVec discriminators_
d
Definition: ztail.py:151
Definition: Tau.py:1
edm::Ref< PFTau3ProngSummaryCollection > PFTau3ProngSummaryRef
presistent reference to a PFTau3ProngSummary
static const TrackGhostTrackState * getTrack(const BasicGhostTrackState *basic)
const MagneticField * field() const
virtual bool AddSolution(unsigned int solution, const TLorentzVector &tau, const std::vector< TLorentzVector > &daughter_p4, const std::vector< int > &daughter_charge, const std::vector< int > &daughter_PDGID, bool has3ProngSolution, double solutionChi2, double thetaGJsig)
ROOT::Math::SMatrix< double, 7, 7, ROOT::Math::MatRepSym< double, 7 > > AlgebraicSymMatrix77
Definition: Matrices.h:9
edm::InputTag PFTauTag_
primaryVertex
hltOfflineBeamSpot for HLTMON
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ Algorithm_

int PFTau3ProngReco::Algorithm_
private

Definition at line 92 of file PFTau3ProngReco.cc.

Referenced by produce().

◆ cut_

std::unique_ptr<StringCutObjectSelector<reco::PFTau> > PFTau3ProngReco::cut_
private

Definition at line 94 of file PFTau3ProngReco.cc.

Referenced by PFTau3ProngReco(), and produce().

◆ discriminators_

DiscCutPairVec PFTau3ProngReco::discriminators_
private

Definition at line 93 of file PFTau3ProngReco.cc.

Referenced by PFTau3ProngReco(), and produce().

◆ kpvFitter_

KinematicParticleVertexFitter PFTau3ProngReco::kpvFitter_
private

Definition at line 96 of file PFTau3ProngReco.cc.

Referenced by produce().

◆ ndfPVT_

int PFTau3ProngReco::ndfPVT_
private

Definition at line 95 of file PFTau3ProngReco.cc.

Referenced by produce().

◆ PFTauTag_

edm::InputTag PFTau3ProngReco::PFTauTag_
private

Definition at line 90 of file PFTau3ProngReco.cc.

Referenced by produce().

◆ PFTauTIPTag_

edm::InputTag PFTau3ProngReco::PFTauTIPTag_
private

Definition at line 91 of file PFTau3ProngReco.cc.

Referenced by produce().