CMS 3D CMS Logo

RecoTauTwoProngFilter.cc
Go to the documentation of this file.
1 /*
2  * ===========================================================================
3  *
4  * Filename: RecoTauTwoProngFilter
5  *
6  * Description: Modify taus remove low-pt second prongs
7  *
8  * Author: Evan K. Friis (UC Davis)
9  *
10  * ===========================================================================
11  */
12 
15 
16 namespace reco { namespace tau {
17 
18 namespace
19 {
20  // Delete an element from a ptr vector
21  std::vector<CandidatePtr> deleteFrom(const CandidatePtr& ptr, const std::vector<CandidatePtr>& collection)
22  {
23  std::vector<CandidatePtr> output;
24  for ( std::vector<CandidatePtr>::const_iterator cand = collection.begin();
25  cand != collection.end(); ++cand ) {
26  if ( (*cand) != ptr) output.push_back(*cand);
27  }
28  return output;
29  }
30 }
31 
33  public:
35  ~RecoTauTwoProngFilter() override {}
36  void operator()(PFTau&) const override;
37  private:
39 };
40 
42  minPtFractionForSecondProng_ = pset.getParameter<double>("minPtFractionForSecondProng");
43 }
44 
46  if (tau.signalChargedHadrCands().size() == 2) {
47  const std::vector<CandidatePtr>& signalCharged = tau.signalChargedHadrCands();
48  size_t indexOfHighestPt =
49  (signalCharged[0]->pt() > signalCharged[1]->pt()) ? 0 : 1;
50  size_t indexOfLowerPt = ( indexOfHighestPt ) ? 0 : 1;
51  double ratio = signalCharged[indexOfLowerPt]->pt()/
52  signalCharged[indexOfHighestPt]->pt();
53 
54  if (ratio < minPtFractionForSecondProng_) {
55  CandidatePtr keep = signalCharged[indexOfHighestPt];
56  CandidatePtr filter = signalCharged[indexOfLowerPt];
57  // Make our new signal charged candidate collection
58  std::vector<CandidatePtr> newSignalCharged;
59  newSignalCharged.push_back(keep);
60  std::vector<CandidatePtr> newSignal = deleteFrom(filter, tau.signalCands());
61 
62  // Copy our filtered cand to isolation
63  std::vector<CandidatePtr> newIsolationCharged =
65  newIsolationCharged.push_back(filter);
66  std::vector<CandidatePtr> newIsolation = tau.isolationCands();
67  newIsolation.push_back(filter);
68 
69  // Update tau members
70  tau.setP4(tau.p4() - filter->p4());
72  tau.isolationPFChargedHadrCandsPtSum() - filter->pt());
73  tau.setCharge(tau.charge() - filter->charge());
74  // Update tau constituents
75  tau.setsignalChargedHadrCands(newSignalCharged);
76  tau.setsignalCands(newSignal);
77  tau.setisolationChargedHadrCands(newIsolationCharged);
78  tau.setisolationCands(newIsolation);
79  }
80  }
81 }
82 }} // end namespace reco::tau
86  "RecoTauTwoProngFilter");
T getParameter(std::string const &) const
void setsignalChargedHadrCands(const std::vector< reco::CandidatePtr > &)
Definition: PFTau.cc:81
float isolationPFChargedHadrCandsPtSum() const
Definition: PFTau.cc:320
RecoTauTwoProngFilter(const edm::ParameterSet &pset, edm::ConsumesCollector &&iC)
int charge() const final
electric charge
Definition: LeafCandidate.h:91
void setisolationChargedHadrCands(const std::vector< reco::CandidatePtr > &)
Definition: PFTau.cc:90
void setCharge(Charge q) final
set electric charge
Definition: LeafCandidate.h:93
const int keep
void operator()(PFTau &) const override
void setisolationCands(const std::vector< reco::CandidatePtr > &)
Definition: PFTau.cc:88
void setisolationPFChargedHadrCandsPtSum(const float &)
Definition: PFTau.cc:321
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
void setsignalCands(const std::vector< reco::CandidatePtr > &)
Definition: PFTau.cc:79
const std::vector< reco::CandidatePtr > & isolationChargedHadrCands() const
Charged candidates in isolation region.
Definition: PFTau.cc:89
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
const std::vector< reco::CandidatePtr > & signalChargedHadrCands() const
Charged hadrons in signal region.
Definition: PFTau.cc:80
fixed size matrix
const std::vector< reco::CandidatePtr > & isolationCands() const
Candidates in isolation region.
Definition: PFTau.cc:87
#define DEFINE_EDM_PLUGIN(factory, type, name)
const std::vector< reco::CandidatePtr > & signalCands() const
Candidates in signal region.
Definition: PFTau.cc:78
void setP4(const LorentzVector &p4) final
set 4-momentum
def move(src, dest)
Definition: eostools.py:511