CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Attributes
reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin Class Reference
Inheritance diagram for reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin:
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...
 
 PFRecoTauChargedHadronFromPFCandidatePlugin (const edm::ParameterSet &, edm::ConsumesCollector &&iC)
 
 ~PFRecoTauChargedHadronFromPFCandidatePlugin () 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 Types

typedef std::vector< reco::CandidatePtrCandPtrs
 

Private Attributes

double bField_
 
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecordbFieldToken_
 
double dRmergeNeutralHadronWrtChargedHadron_
 
double dRmergeNeutralHadronWrtElectron_
 
double dRmergeNeutralHadronWrtNeutralHadron_
 
double dRmergeNeutralHadronWrtOther_
 
double dRmergePhotonWrtChargedHadron_
 
double dRmergePhotonWrtElectron_
 
double dRmergePhotonWrtNeutralHadron_
 
double dRmergePhotonWrtOther_
 
std::vector< int > inputParticleIds_
 
int maxUnmatchedBlockElementsNeutralHadron_
 
int maxUnmatchedBlockElementsPhoton_
 
int minBlockElementMatchesNeutralHadron_
 
int minBlockElementMatchesPhoton_
 
double minMergeChargedHadronPt_
 
double minMergeGammaEt_
 
double minMergeNeutralHadronEt_
 
RecoTauQualityCutsqcuts_
 
int verbosity_
 
RecoTauVertexAssociator vertexAssociator_
 

Additional Inherited Members

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

Detailed Description

Definition at line 43 of file PFRecoTauChargedHadronFromPFCandidatePlugin.cc.

Member Typedef Documentation

◆ CandPtrs

Constructor & Destructor Documentation

◆ PFRecoTauChargedHadronFromPFCandidatePlugin()

reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::PFRecoTauChargedHadronFromPFCandidatePlugin ( const edm::ParameterSet pset,
edm::ConsumesCollector &&  iC 
)
explicit

Definition at line 83 of file PFRecoTauChargedHadronFromPFCandidatePlugin.cc.

References dRmergeNeutralHadronWrtChargedHadron_, dRmergeNeutralHadronWrtElectron_, dRmergeNeutralHadronWrtNeutralHadron_, dRmergeNeutralHadronWrtOther_, dRmergePhotonWrtChargedHadron_, dRmergePhotonWrtElectron_, dRmergePhotonWrtNeutralHadron_, dRmergePhotonWrtOther_, inputParticleIds_, maxUnmatchedBlockElementsNeutralHadron_, maxUnmatchedBlockElementsPhoton_, minBlockElementMatchesNeutralHadron_, minBlockElementMatchesPhoton_, minMergeChargedHadronPt_, minMergeGammaEt_, minMergeNeutralHadronEt_, muonDTDigis_cfi::pset, qcuts_, and verbosity_.

86  vertexAssociator_(pset.getParameter<edm::ParameterSet>("qualityCuts"), std::move(iC)),
87  qcuts_(nullptr),
88  bFieldToken_(iC.esConsumes()) {
89  edm::ParameterSet qcuts_pset = pset.getParameterSet("qualityCuts").getParameterSet("signalQualityCuts");
90  qcuts_ = new RecoTauQualityCuts(qcuts_pset);
91 
92  inputParticleIds_ = pset.getParameter<std::vector<int> >("chargedHadronCandidatesParticleIds");
93 
94  dRmergeNeutralHadronWrtChargedHadron_ = pset.getParameter<double>("dRmergeNeutralHadronWrtChargedHadron");
95  dRmergeNeutralHadronWrtNeutralHadron_ = pset.getParameter<double>("dRmergeNeutralHadronWrtNeutralHadron");
96  dRmergeNeutralHadronWrtElectron_ = pset.getParameter<double>("dRmergeNeutralHadronWrtElectron");
97  dRmergeNeutralHadronWrtOther_ = pset.getParameter<double>("dRmergeNeutralHadronWrtOther");
98  minBlockElementMatchesNeutralHadron_ = pset.getParameter<int>("minBlockElementMatchesNeutralHadron");
99  maxUnmatchedBlockElementsNeutralHadron_ = pset.getParameter<int>("maxUnmatchedBlockElementsNeutralHadron");
100  dRmergePhotonWrtChargedHadron_ = pset.getParameter<double>("dRmergePhotonWrtChargedHadron");
101  dRmergePhotonWrtNeutralHadron_ = pset.getParameter<double>("dRmergePhotonWrtNeutralHadron");
102  dRmergePhotonWrtElectron_ = pset.getParameter<double>("dRmergePhotonWrtElectron");
103  dRmergePhotonWrtOther_ = pset.getParameter<double>("dRmergePhotonWrtOther");
104  minBlockElementMatchesPhoton_ = pset.getParameter<int>("minBlockElementMatchesPhoton");
105  maxUnmatchedBlockElementsPhoton_ = pset.getParameter<int>("maxUnmatchedBlockElementsPhoton");
106  minMergeNeutralHadronEt_ = pset.getParameter<double>("minMergeNeutralHadronEt");
107  minMergeGammaEt_ = pset.getParameter<double>("minMergeGammaEt");
108  minMergeChargedHadronPt_ = pset.getParameter<double>("minMergeChargedHadronPt");
109 
110  verbosity_ = pset.getParameter<int>("verbosity");
111  }
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > bFieldToken_
def move(src, dest)
Definition: eostools.py:511
PFRecoTauChargedHadronBuilderPlugin(const edm::ParameterSet &pset, edm::ConsumesCollector &&iC)

◆ ~PFRecoTauChargedHadronFromPFCandidatePlugin()

reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::~PFRecoTauChargedHadronFromPFCandidatePlugin ( )
override

Member Function Documentation

◆ beginEvent()

void reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::beginEvent ( )
overridevirtual

Hook called at the beginning of the event.

Reimplemented from reco::tau::PFRecoTauChargedHadronBuilderPlugin.

Definition at line 116 of file PFRecoTauChargedHadronFromPFCandidatePlugin.cc.

References bField_, bFieldToken_, reco::tau::RecoTauEventHolderPlugin::evt(), reco::tau::RecoTauEventHolderPlugin::evtSetup(), edm::EventSetup::getData(), reco::tau::RecoTauVertexAssociator::setEvent(), and vertexAssociator_.

116  {
118 
119  bField_ = evtSetup()->getData(bFieldToken_).inTesla(GlobalPoint(0, 0, 0)).z();
120  }
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 > bFieldToken_

◆ operator()()

PFRecoTauChargedHadronFromPFCandidatePlugin::return_type reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::operator() ( const reco::Jet ) const
overridevirtual

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

Implements reco::tau::PFRecoTauChargedHadronBuilderPlugin.

Definition at line 160 of file PFRecoTauChargedHadronFromPFCandidatePlugin.cc.

References funct::abs(), reco::tau::RecoTauVertexAssociator::associatedVertex(), reco::tau::atECALEntrance(), bField_, HPSPFTauProducerPuppi_cfi::chargedHadron, reco::deltaR(), HGC3DClusterGenMatchSelector_cfi::dR, dRmergeNeutralHadronWrtChargedHadron_, dRmergeNeutralHadronWrtElectron_, dRmergeNeutralHadronWrtNeutralHadron_, dRmergeNeutralHadronWrtOther_, dRmergePhotonWrtChargedHadron_, dRmergePhotonWrtElectron_, dRmergePhotonWrtNeutralHadron_, dRmergePhotonWrtOther_, reco::tau::RecoTauQualityCuts::filterCandRefs(), inputParticleIds_, metsig::jet, reco::PFRecoTauChargedHadron::kChargedPFCandidate, reco::PFRecoTauChargedHadron::kPFNeutralHadron, reco::PFRecoTauChargedHadron::kUndefined, maxUnmatchedBlockElementsNeutralHadron_, maxUnmatchedBlockElementsPhoton_, minBlockElementMatchesNeutralHadron_, minBlockElementMatchesPhoton_, minMergeChargedHadronPt_, minMergeGammaEt_, minMergeNeutralHadronEt_, eostools::move(), reco::tau::RecoTauNamedPlugin::name(), convertSQLitetoXML_cfg::output, EgammaValidation_cff::pdgId, reco::tau::pfCandidates(), qcuts_, edm::refToPtr(), reco::tau::setChargedHadronP4(), reco::tau::RecoTauQualityCuts::setPV(), verbosity_, and vertexAssociator_.

161  {
162  if (verbosity_) {
163  edm::LogPrint("TauChHadronFromPF") << "<PFRecoTauChargedHadronFromPFCandidatePlugin::operator()>:";
164  edm::LogPrint("TauChHadronFromPF") << " pluginName = " << name();
165  }
166 
168 
169  // Get the candidates passing our quality cuts
172 
173  for (CandPtrs::iterator cand = candsVector.begin(); cand != candsVector.end(); ++cand) {
174  if (verbosity_) {
175  edm::LogPrint("TauChHadronFromPF")
176  << "processing PFCandidate: Pt = " << (*cand)->pt() << ", eta = " << (*cand)->eta()
177  << ", phi = " << (*cand)->phi() << " (pdgId = " << (*cand)->pdgId() << ", charge = " << (*cand)->charge()
178  << ")";
179  }
180 
182  if (std::abs((*cand)->charge()) > 0.5)
184  else
186  auto chargedHadron = std::make_unique<PFRecoTauChargedHadron>(**cand, algo);
187 
188  const reco::PFCandidate* pfCand = dynamic_cast<const reco::PFCandidate*>(&**cand);
189  if (pfCand) {
190  if (pfCand->trackRef().isNonnull())
191  chargedHadron->track_ = edm::refToPtr(pfCand->trackRef());
192  else if (pfCand->muonRef().isNonnull() && pfCand->muonRef()->innerTrack().isNonnull())
193  chargedHadron->track_ = edm::refToPtr(pfCand->muonRef()->innerTrack());
194  else if (pfCand->muonRef().isNonnull() && pfCand->muonRef()->globalTrack().isNonnull())
195  chargedHadron->track_ = edm::refToPtr(pfCand->muonRef()->globalTrack());
196  else if (pfCand->muonRef().isNonnull() && pfCand->muonRef()->outerTrack().isNonnull())
197  chargedHadron->track_ = edm::refToPtr(pfCand->muonRef()->outerTrack());
198  else if (pfCand->gsfTrackRef().isNonnull())
199  chargedHadron->track_ = edm::refToPtr(pfCand->gsfTrackRef());
200  } // TauReco@MiniAOD: Tracks only available dynamically, so no possiblity to save ref here; checked by code downstream
201 
202  chargedHadron->positionAtECALEntrance_ = atECALEntrance(&**cand, bField_);
203  chargedHadron->chargedPFCandidate_ = (*cand);
204  chargedHadron->addDaughter(*cand);
205 
206  int pdgId = std::abs(chargedHadron->chargedPFCandidate_->pdgId());
207 
209  for (const auto& jetConstituent : jet.daughterPtrVector()) {
210  // CV: take care of not double-counting energy in case "charged" PFCandidate is in fact a PFNeutralHadron
211  if (jetConstituent == chargedHadron->chargedPFCandidate_)
212  continue;
213 
214  int jetConstituentPdgId = std::abs(jetConstituent->pdgId());
215  if (!(jetConstituentPdgId == 130 || jetConstituentPdgId == 22))
216  continue;
217 
218  double dR = deltaR(atECALEntrance(jetConstituent.get(), bField_),
219  atECALEntrance(chargedHadron->chargedPFCandidate_.get(), bField_));
220  double dRmerge = -1.;
221  int minBlockElementMatches = 1000;
222  int maxUnmatchedBlockElements = 0;
223  double minMergeEt = 1.e+6;
224  if (jetConstituentPdgId == 130) {
225  if (pdgId == 211)
227  else if (pdgId == 130)
229  else if (pdgId == 11)
231  else
233  minBlockElementMatches = minBlockElementMatchesNeutralHadron_;
234  maxUnmatchedBlockElements = maxUnmatchedBlockElementsNeutralHadron_;
235  minMergeEt = minMergeNeutralHadronEt_;
236  } else if (jetConstituentPdgId == 22) {
237  if (pdgId == 211)
239  else if (pdgId == 130)
241  else if (pdgId == 11)
242  dRmerge = dRmergePhotonWrtElectron_;
243  else
244  dRmerge = dRmergePhotonWrtOther_;
245  minBlockElementMatches = minBlockElementMatchesPhoton_;
246  maxUnmatchedBlockElements = maxUnmatchedBlockElementsPhoton_;
247  minMergeEt = minMergeGammaEt_;
248  }
249 
250  if (jetConstituent->et() > minMergeEt) {
251  if (dR < dRmerge) {
252  chargedHadron->neutralPFCandidates_.push_back(jetConstituent);
253  chargedHadron->addDaughter(jetConstituent);
254  } else {
255  // TauReco@MiniAOD: No access to PF blocks at MiniAOD level, but the code below seems to have very minor impact
256  const reco::PFCandidate* pfJetConstituent =
257  dynamic_cast<const reco::PFCandidate*>(jetConstituent.get());
258  if (pfCand != nullptr && pfJetConstituent != nullptr) {
259  if (isMatchedByBlockElement(*pfJetConstituent,
260  *pfCand,
261  minBlockElementMatches,
262  minBlockElementMatches,
263  maxUnmatchedBlockElements)) {
264  chargedHadron->neutralPFCandidates_.push_back(jetConstituent);
265  chargedHadron->addDaughter(jetConstituent);
266  }
267  }
268  }
269  }
270  }
271  }
272 
274 
275  if (verbosity_) {
276  edm::LogPrint("TauChHadronFromPF") << *chargedHadron;
277  }
278  // Update the vertex
279  if (chargedHadron->daughterPtr(0).isNonnull())
280  chargedHadron->setVertex(chargedHadron->daughterPtr(0)->vertex());
281  output.push_back(std::move(chargedHadron));
282  }
283 
284  return output;
285  }
std::vector< CandidatePtr > pfCandidates(const Jet &jet, int particleId, bool sort=true)
std::vector< std::unique_ptr< PFRecoTauChargedHadron > > ChargedHadronVector
math::XYZPointF atECALEntrance(const reco::Candidate *part, double bField)
Ptr< typename C::value_type > refToPtr(Ref< C, typename C::value_type, refhelper::FindUsingAdvance< C, typename C::value_type > > const &ref)
Definition: RefToPtr.h:18
reco::VertexRef associatedVertex(const Jet &jet) const
std::vector< reco::CandidatePtr > CandPtrs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Log< level::Warning, true > LogPrint
Coll filterCandRefs(const Coll &refcoll, bool invert=false) const
Filter a ref vector of Candidates.
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:30
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:41
const std::string & name() const
Definition: output.py:1
void setChargedHadronP4(reco::PFRecoTauChargedHadron &chargedHadron, double scaleFactor_neutralPFCands=1.0)
void setPV(const reco::VertexRef &vtx)
Update the primary vertex.
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ bField_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::bField_
private

Definition at line 78 of file PFRecoTauChargedHadronFromPFCandidatePlugin.cc.

Referenced by beginEvent(), and operator()().

◆ bFieldToken_

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::bFieldToken_
private

Definition at line 77 of file PFRecoTauChargedHadronFromPFCandidatePlugin.cc.

Referenced by beginEvent().

◆ dRmergeNeutralHadronWrtChargedHadron_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::dRmergeNeutralHadronWrtChargedHadron_
private

◆ dRmergeNeutralHadronWrtElectron_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::dRmergeNeutralHadronWrtElectron_
private

◆ dRmergeNeutralHadronWrtNeutralHadron_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::dRmergeNeutralHadronWrtNeutralHadron_
private

◆ dRmergeNeutralHadronWrtOther_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::dRmergeNeutralHadronWrtOther_
private

◆ dRmergePhotonWrtChargedHadron_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::dRmergePhotonWrtChargedHadron_
private

◆ dRmergePhotonWrtElectron_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::dRmergePhotonWrtElectron_
private

◆ dRmergePhotonWrtNeutralHadron_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::dRmergePhotonWrtNeutralHadron_
private

◆ dRmergePhotonWrtOther_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::dRmergePhotonWrtOther_
private

◆ inputParticleIds_

std::vector<int> reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::inputParticleIds_
private

◆ maxUnmatchedBlockElementsNeutralHadron_

int reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::maxUnmatchedBlockElementsNeutralHadron_
private

◆ maxUnmatchedBlockElementsPhoton_

int reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::maxUnmatchedBlockElementsPhoton_
private

◆ minBlockElementMatchesNeutralHadron_

int reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::minBlockElementMatchesNeutralHadron_
private

◆ minBlockElementMatchesPhoton_

int reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::minBlockElementMatchesPhoton_
private

◆ minMergeChargedHadronPt_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::minMergeChargedHadronPt_
private

◆ minMergeGammaEt_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::minMergeGammaEt_
private

◆ minMergeNeutralHadronEt_

double reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::minMergeNeutralHadronEt_
private

◆ qcuts_

RecoTauQualityCuts* reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::qcuts_
private

◆ verbosity_

int reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::verbosity_
private

◆ vertexAssociator_

RecoTauVertexAssociator reco::tau::PFRecoTauChargedHadronFromPFCandidatePlugin::vertexAssociator_
private

Definition at line 55 of file PFRecoTauChargedHadronFromPFCandidatePlugin.cc.

Referenced by beginEvent(), and operator()().