CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
InputGenJetsParticleSelector Class Reference

#include <InputGenJetsParticleSelector.h>

Inheritance diagram for InputGenJetsParticleSelector:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef std::vector< bool > ParticleBitmap
 
typedef std::vector< const reco::Candidate * > ParticleVector
 
enum  ResonanceState { kNo = 0, kDirect, kIndirect }
 
- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase 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

ResonanceState fromResonance (ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const
 
bool getExcludeResonances () const
 
const std::vector< unsigned int > & getIgnoredParticles () const
 
bool getPartonicFinalState () const
 
double getPtMin () const
 
bool getTausAndJets () const
 
bool hasPartonChildren (ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const
 
 InputGenJetsParticleSelector (const edm::ParameterSet &)
 
bool isIgnored (int pdgId) const
 
bool isParton (int pdgId) const
 
void produce (edm::StreamID, edm::Event &evt, const edm::EventSetup &evtSetup) const override
 
void setExcludeResonances (bool flag=true)
 
void setPartonicFinalState (bool flag=true)
 
void setPtMin (double ptMin)
 
void setTausAsJets (bool flag=true)
 
 ~InputGenJetsParticleSelector () override
 
- Public Member Functions inherited from edm::global::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () 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 &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
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
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static bool isHadron (int pdgId)
 
static bool isResonance (int pdgId)
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

 InputGenJetsParticleSelector ()
 
bool isExcludedFromResonance (int pdgId) const
 
void setExcludeFromResonancePids (const std::vector< unsigned int > &particleIDs)
 
void setIgnoredParticles (const std::vector< unsigned int > &particleIDs)
 
int testPartonChildren (ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const
 

Private Attributes

std::vector< unsigned int > excludeFromResonancePids
 
bool excludeResonances
 
std::vector< unsigned int > ignoreParticleIDs
 
edm::EDGetTokenT< reco::CandidateViewinput_genpartcoll_token_
 
edm::EDGetTokenT< reco::CandidateViewinput_prunedgenpartcoll_token_
 
edm::InputTag inTag
 
bool isMiniAOD
 
bool partonicFinalState
 
edm::InputTag prunedInTag
 
double ptMin
 
bool tausAsJets
 

Additional Inherited Members

- Protected Member Functions inherited from edm::ProducerBase
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 declare what type of product will make and with which optional label More...
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
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)
 
template<Transition B>
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 (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
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<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 

Detailed Description

Definition at line 27 of file InputGenJetsParticleSelector.h.

Member Typedef Documentation

◆ ParticleBitmap

Definition at line 30 of file InputGenJetsParticleSelector.h.

◆ ParticleVector

Definition at line 31 of file InputGenJetsParticleSelector.h.

Member Enumeration Documentation

◆ ResonanceState

Enumerator
kNo 
kDirect 
kIndirect 

Definition at line 56 of file InputGenJetsParticleSelector.h.

56 { kNo = 0, kDirect, kIndirect };

Constructor & Destructor Documentation

◆ InputGenJetsParticleSelector() [1/2]

InputGenJetsParticleSelector::InputGenJetsParticleSelector ( const edm::ParameterSet params)

Definition at line 49 of file InputGenJetsParticleSelector.cc.

50  : inTag(params.getParameter<edm::InputTag>("src")),
51  prunedInTag(params.exists("prunedGenParticles") ? params.getParameter<edm::InputTag>("prunedGenParticles")
52  : edm::InputTag("prunedGenParticles")),
53  partonicFinalState(params.getParameter<bool>("partonicFinalState")),
54  excludeResonances(params.getParameter<bool>("excludeResonances")),
55  tausAsJets(params.getParameter<bool>("tausAsJets")),
56  ptMin(0.0) {
57  if (params.exists("ignoreParticleIDs"))
58  setIgnoredParticles(params.getParameter<std::vector<unsigned int> >("ignoreParticleIDs"));
59  setExcludeFromResonancePids(params.getParameter<std::vector<unsigned int> >("excludeFromResonancePids"));
60  isMiniAOD =
61  (params.exists("isMiniAOD") ? params.getParameter<bool>("isMiniAOD") : (inTag.label() == "packedGenParticles"));
62 
64  edm::LogError("PartonicFinalStateFromMiniAOD")
65  << "Partonic final state not supported for MiniAOD. Falling back to the stable particle selection.";
66  partonicFinalState = false;
67  }
68 
69  produces<reco::CandidatePtrVector>();
70 
71  input_genpartcoll_token_ = consumes<reco::CandidateView>(inTag);
72  if (isMiniAOD)
73  input_prunedgenpartcoll_token_ = consumes<reco::CandidateView>(prunedInTag);
74 }

References input_genpartcoll_token_, input_prunedgenpartcoll_token_, inTag, isMiniAOD, edm::InputTag::label(), CalibrationSummaryClient_cfi::params, partonicFinalState, prunedInTag, setExcludeFromResonancePids(), and setIgnoredParticles().

◆ ~InputGenJetsParticleSelector()

InputGenJetsParticleSelector::~InputGenJetsParticleSelector ( )
override

Definition at line 76 of file InputGenJetsParticleSelector.cc.

76 {}

◆ InputGenJetsParticleSelector() [2/2]

InputGenJetsParticleSelector::InputGenJetsParticleSelector ( )
inlineprivate

Definition at line 63 of file InputGenJetsParticleSelector.h.

63 {} //should not be used!

Member Function Documentation

◆ fromResonance()

InputGenJetsParticleSelector::ResonanceState InputGenJetsParticleSelector::fromResonance ( ParticleBitmap invalid,
const ParticleVector p,
const reco::Candidate particle 
) const

Definition at line 172 of file InputGenJetsParticleSelector.cc.

173  {
174  unsigned int idx = partIdx(p, particle);
175  int id = particle->pdgId();
176 
177  if (invalid[idx])
178  return kIndirect;
179 
180  if (isResonance(id) && (particle->status() == 3 || particle->status() == 22)) {
181  return kDirect;
182  }
183 
184  if (!isIgnored(id) && (isParton(id)))
185  return kNo;
186 
187  unsigned int nMo = particle->numberOfMothers();
188  if (!nMo)
189  return kNo;
190 
191  for (unsigned int i = 0; i < nMo; ++i) {
193  switch (result) {
194  case kNo:
195  break;
196  case kDirect:
197  if (particle->mother(i)->pdgId() == id || isResonance(id))
198  return kDirect;
199  if (!isExcludedFromResonance(id))
200  break;
201  [[fallthrough]];
202  case kIndirect:
203  return kIndirect;
204  }
205  }
206  return kNo;
207 }

References mps_fire::i, heavyIonCSV_trainingSettings::idx, invalid, isExcludedFromResonance(), isIgnored(), isParton(), isResonance(), kDirect, kIndirect, kNo, reco::Candidate::mother(), reco::Candidate::numberOfMothers(), AlCaHLTBitMon_ParallelJobs::p, partIdx(), reco::Candidate::pdgId(), mps_fire::result, and reco::Candidate::status().

Referenced by produce().

◆ getExcludeResonances()

bool InputGenJetsParticleSelector::getExcludeResonances ( ) const
inline

Definition at line 40 of file InputGenJetsParticleSelector.h.

40 { return excludeResonances; }

References excludeResonances.

◆ getIgnoredParticles()

const std::vector<unsigned int>& InputGenJetsParticleSelector::getIgnoredParticles ( ) const
inline

Definition at line 43 of file InputGenJetsParticleSelector.h.

43 { return ignoreParticleIDs; }

References ignoreParticleIDs.

◆ getPartonicFinalState()

bool InputGenJetsParticleSelector::getPartonicFinalState ( ) const
inline

Definition at line 39 of file InputGenJetsParticleSelector.h.

39 { return partonicFinalState; }

References partonicFinalState.

◆ getPtMin()

double InputGenJetsParticleSelector::getPtMin ( ) const
inline

Definition at line 42 of file InputGenJetsParticleSelector.h.

42 { return ptMin; }

References ptMin.

◆ getTausAndJets()

bool InputGenJetsParticleSelector::getTausAndJets ( ) const
inline

Definition at line 41 of file InputGenJetsParticleSelector.h.

41 { return tausAsJets; }

References tausAsJets.

◆ hasPartonChildren()

bool InputGenJetsParticleSelector::hasPartonChildren ( ParticleBitmap invalid,
const ParticleVector p,
const reco::Candidate particle 
) const

Definition at line 209 of file InputGenJetsParticleSelector.cc.

211  {
212  return testPartonChildren(invalid, p, particle) > 0;
213 }

References invalid, AlCaHLTBitMon_ParallelJobs::p, and testPartonChildren().

Referenced by produce().

◆ isExcludedFromResonance()

bool InputGenJetsParticleSelector::isExcludedFromResonance ( int  pdgId) const
private

Definition at line 113 of file InputGenJetsParticleSelector.cc.

113  {
114  pdgId = pdgId > 0 ? pdgId : -pdgId;
115  std::vector<unsigned int>::const_iterator pos =
117  return pos != excludeFromResonancePids.end() && *pos == (unsigned int)pdgId;
118 }

References excludeFromResonancePids, createfilelist::int, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, and EgammaValidation_cff::pdgId.

Referenced by fromResonance().

◆ isHadron()

bool InputGenJetsParticleSelector::isHadron ( int  pdgId)
static

Definition at line 95 of file InputGenJetsParticleSelector.cc.

95  {
96  pdgId = (pdgId > 0 ? pdgId : -pdgId) % 10000;
97  return (pdgId > 100 && pdgId < 900) || (pdgId > 1000 && pdgId < 9000);
98 }

References EgammaValidation_cff::pdgId.

Referenced by testPartonChildren().

◆ isIgnored()

bool InputGenJetsParticleSelector::isIgnored ( int  pdgId) const

Definition at line 106 of file InputGenJetsParticleSelector.cc.

106  {
107  pdgId = pdgId > 0 ? pdgId : -pdgId;
108  std::vector<unsigned int>::const_iterator pos =
109  std::lower_bound(ignoreParticleIDs.begin(), ignoreParticleIDs.end(), (unsigned int)pdgId);
110  return pos != ignoreParticleIDs.end() && *pos == (unsigned int)pdgId;
111 }

References ignoreParticleIDs, createfilelist::int, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, and EgammaValidation_cff::pdgId.

Referenced by fromResonance(), and produce().

◆ isParton()

bool InputGenJetsParticleSelector::isParton ( int  pdgId) const

Definition at line 88 of file InputGenJetsParticleSelector.cc.

88  {
89  pdgId = (pdgId > 0 ? pdgId : -pdgId) % 10000;
90  return (pdgId > 0 && pdgId < 6) || pdgId == 9 || (tausAsJets && pdgId == 15) || pdgId == 21;
91  // tops are not considered "regular" partons
92  // but taus eventually are (since they may hadronize later)
93 }

References EgammaValidation_cff::pdgId, and tausAsJets.

Referenced by fromResonance(), produce(), and testPartonChildren().

◆ isResonance()

bool InputGenJetsParticleSelector::isResonance ( int  pdgId)
static

Definition at line 100 of file InputGenJetsParticleSelector.cc.

100  {
101  // gauge bosons and tops
102  pdgId = (pdgId > 0 ? pdgId : -pdgId) % 10000;
103  return (pdgId > 21 && pdgId <= 42) || pdgId == 6 || pdgId == 7 || pdgId == 8; //BUG! was 21. 22=gamma..
104 }

References EgammaValidation_cff::pdgId.

Referenced by fromResonance().

◆ produce()

void InputGenJetsParticleSelector::produce ( edm::StreamID  ,
edm::Event evt,
const edm::EventSetup evtSetup 
) const
overridevirtual

Implements edm::global::EDProducerBase.

Definition at line 217 of file InputGenJetsParticleSelector.cc.

217  {
218  auto selected_ = std::make_unique<reco::CandidatePtrVector>();
219 
221 
223  if (isMiniAOD) {
225 
227  iter != prunedGenParticles->end();
228  ++iter) {
229  if (iter->status() !=
230  1) // to avoid double-counting, skipping stable particles already contained in the collection of PackedGenParticles
231  particles.push_back(&*iter);
232  }
233  }
234 
237 
238  std::map<const reco::Candidate *, size_t> particlePtrIdxMap;
239 
240  for (edm::View<reco::Candidate>::const_iterator iter = genParticles->begin(); iter != genParticles->end(); ++iter) {
241  particles.push_back(&*iter);
242  particlePtrIdxMap[&*iter] = (iter - genParticles->begin());
243  }
244 
245  std::sort(particles.begin(), particles.end());
246  unsigned int size = particles.size();
247 
248  ParticleBitmap selected(size, false);
249  ParticleBitmap invalid(size, false);
250 
251  for (unsigned int i = 0; i < size; i++) {
252  const reco::Candidate *particle = particles[i];
253  if (invalid[i])
254  continue;
255  if (particle->status() == 1) // selecting stable particles
256  selected[i] = true;
257  if (partonicFinalState && isParton(particle->pdgId())) {
258  if (particle->numberOfDaughters() == 0 && particle->status() != 1) {
259  // some brokenness in event...
260  invalid[i] = true;
261  } else if (!hasPartonChildren(invalid, particles, particle)) {
262  selected[i] = true;
263  invalidateTree(invalid, particles, particle); //this?!?
264  }
265  }
266  }
267 
268  for (size_t idx = 0; idx < size; ++idx) {
269  const reco::Candidate *particle = particles[idx];
270  if (!selected[idx] || invalid[idx]) {
271  continue;
272  }
273 
274  if (excludeResonances && fromResonance(invalid, particles, particle)) {
275  invalid[idx] = true;
276  //cout<<"[INPUTSELECTOR] Invalidates FROM RESONANCE!: ["<<setw(4)<<idx<<"] "<<particle->pdgId()<<" "<<particle->pt()<<endl;
277  continue;
278  }
279 
280  if (isIgnored(particle->pdgId())) {
281  continue;
282  }
283 
284  if (particle->pt() >= ptMin) {
285  selected_->push_back(genParticles->ptrAt(particlePtrIdxMap[particle]));
286  //cout<<"Finally we have: ["<<setw(4)<<idx<<"] "<<setw(4)<<particle->pdgId()<<" "<<particle->pt()<<endl;
287  }
288  }
289  evt.put(std::move(selected_));
290 }

References excludeResonances, fromResonance(), genParticles2HepMC_cfi::genParticles, edm::Event::getByToken(), hasPartonChildren(), mps_fire::i, heavyIonCSV_trainingSettings::idx, input_genpartcoll_token_, input_prunedgenpartcoll_token_, invalid, invalidateTree(), isIgnored(), isMiniAOD, isParton(), eostools::move(), reco::Candidate::numberOfDaughters(), ecalTrigSettings_cff::particles, partonicFinalState, reco::Candidate::pdgId(), prunedGenParticles_cfi::prunedGenParticles, reco::Candidate::pt(), ptMin, edm::Event::put(), findQualityFiles::size, jetUpdater_cfi::sort, and reco::Candidate::status().

◆ setExcludeFromResonancePids()

void InputGenJetsParticleSelector::setExcludeFromResonancePids ( const std::vector< unsigned int > &  particleIDs)
private

◆ setExcludeResonances()

void InputGenJetsParticleSelector::setExcludeResonances ( bool  flag = true)
inline

Definition at line 46 of file InputGenJetsParticleSelector.h.

References excludeResonances, and RemoveAddSevLevel::flag.

◆ setIgnoredParticles()

void InputGenJetsParticleSelector::setIgnoredParticles ( const std::vector< unsigned int > &  particleIDs)
private

Definition at line 78 of file InputGenJetsParticleSelector.cc.

78  {
79  ignoreParticleIDs = particleIDs;
81 }

References ignoreParticleIDs, and jetUpdater_cfi::sort.

Referenced by InputGenJetsParticleSelector().

◆ setPartonicFinalState()

void InputGenJetsParticleSelector::setPartonicFinalState ( bool  flag = true)
inline

◆ setPtMin()

void InputGenJetsParticleSelector::setPtMin ( double  ptMin)
inline

Definition at line 48 of file InputGenJetsParticleSelector.h.

48 { this->ptMin = ptMin; }

References ptMin.

◆ setTausAsJets()

void InputGenJetsParticleSelector::setTausAsJets ( bool  flag = true)
inline

Definition at line 47 of file InputGenJetsParticleSelector.h.

47 { tausAsJets = flag; }

References RemoveAddSevLevel::flag, and tausAsJets.

◆ testPartonChildren()

int InputGenJetsParticleSelector::testPartonChildren ( InputGenJetsParticleSelector::ParticleBitmap invalid,
const ParticleVector p,
const reco::Candidate particle 
) const
private

Definition at line 147 of file InputGenJetsParticleSelector.cc.

149  {
150  unsigned int npart = particle->numberOfDaughters();
151  if (!npart) {
152  return 0;
153  }
154 
155  for (unsigned int i = 0; i < npart; ++i) {
156  unsigned int idx = partIdx(p, particle->daughter(i));
157  if (invalid[idx])
158  continue;
159  if (isParton((particle->daughter(i)->pdgId()))) {
160  return 1;
161  }
162  if (isHadron((particle->daughter(i)->pdgId()))) {
163  return -1;
164  }
165  int result = testPartonChildren(invalid, p, particle->daughter(i));
166  if (result)
167  return result;
168  }
169  return 0;
170 }

References reco::Candidate::daughter(), mps_fire::i, heavyIonCSV_trainingSettings::idx, invalid, isHadron(), isParton(), npart, reco::Candidate::numberOfDaughters(), AlCaHLTBitMon_ParallelJobs::p, partIdx(), reco::Candidate::pdgId(), and mps_fire::result.

Referenced by hasPartonChildren().

Member Data Documentation

◆ excludeFromResonancePids

std::vector<unsigned int> InputGenJetsParticleSelector::excludeFromResonancePids
private

◆ excludeResonances

bool InputGenJetsParticleSelector::excludeResonances
private

◆ ignoreParticleIDs

std::vector<unsigned int> InputGenJetsParticleSelector::ignoreParticleIDs
private

◆ input_genpartcoll_token_

edm::EDGetTokenT<reco::CandidateView> InputGenJetsParticleSelector::input_genpartcoll_token_
private

Definition at line 81 of file InputGenJetsParticleSelector.h.

Referenced by InputGenJetsParticleSelector(), and produce().

◆ input_prunedgenpartcoll_token_

edm::EDGetTokenT<reco::CandidateView> InputGenJetsParticleSelector::input_prunedgenpartcoll_token_
private

Definition at line 82 of file InputGenJetsParticleSelector.h.

Referenced by InputGenJetsParticleSelector(), and produce().

◆ inTag

edm::InputTag InputGenJetsParticleSelector::inTag
private

Definition at line 65 of file InputGenJetsParticleSelector.h.

Referenced by InputGenJetsParticleSelector().

◆ isMiniAOD

bool InputGenJetsParticleSelector::isMiniAOD
private

Definition at line 78 of file InputGenJetsParticleSelector.h.

Referenced by InputGenJetsParticleSelector(), and produce().

◆ partonicFinalState

bool InputGenJetsParticleSelector::partonicFinalState
private

◆ prunedInTag

edm::InputTag InputGenJetsParticleSelector::prunedInTag
private

Definition at line 66 of file InputGenJetsParticleSelector.h.

Referenced by InputGenJetsParticleSelector().

◆ ptMin

double InputGenJetsParticleSelector::ptMin
private

Definition at line 79 of file InputGenJetsParticleSelector.h.

Referenced by getPtMin(), produce(), and setPtMin().

◆ tausAsJets

bool InputGenJetsParticleSelector::tausAsJets
private

Definition at line 77 of file InputGenJetsParticleSelector.h.

Referenced by getTausAndJets(), isParton(), and setTausAsJets().

reco::Candidate::daughter
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode)
mps_fire.i
i
Definition: mps_fire.py:428
genParticles2HepMC_cfi.genParticles
genParticles
Definition: genParticles2HepMC_cfi.py:4
InputGenJetsParticleSelector::input_genpartcoll_token_
edm::EDGetTokenT< reco::CandidateView > input_genpartcoll_token_
Definition: InputGenJetsParticleSelector.h:81
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
pos
Definition: PixelAliasList.h:18
InputGenJetsParticleSelector::fromResonance
ResonanceState fromResonance(ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const
Definition: InputGenJetsParticleSelector.cc:172
InputGenJetsParticleSelector::testPartonChildren
int testPartonChildren(ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const
Definition: InputGenJetsParticleSelector.cc:147
InputGenJetsParticleSelector::isParton
bool isParton(int pdgId) const
Definition: InputGenJetsParticleSelector.cc:88
InputGenJetsParticleSelector::isHadron
static bool isHadron(int pdgId)
Definition: InputGenJetsParticleSelector.cc:95
reco::Candidate::pt
virtual double pt() const =0
transverse momentum
InputGenJetsParticleSelector::kDirect
Definition: InputGenJetsParticleSelector.h:56
reco::Candidate::status
virtual int status() const =0
status word
InputGenJetsParticleSelector::ignoreParticleIDs
std::vector< unsigned int > ignoreParticleIDs
Definition: InputGenJetsParticleSelector.h:69
CTPPSpixelLocalTrackReconstructionInfo::invalid
reco::Candidate::mother
virtual const Candidate * mother(size_type i=0) const =0
return pointer to mother
edm::Handle
Definition: AssociativeIterator.h:50
InputGenJetsParticleSelector::input_prunedgenpartcoll_token_
edm::EDGetTokenT< reco::CandidateView > input_prunedgenpartcoll_token_
Definition: InputGenJetsParticleSelector.h:82
ecalTrigSettings_cff.particles
particles
Definition: ecalTrigSettings_cff.py:11
npart
double npart
Definition: HydjetWrapper.h:46
invalidateTree
static void invalidateTree(InputGenJetsParticleSelector::ParticleBitmap &invalid, const InputGenJetsParticleSelector::ParticleVector &p, const reco::Candidate *particle)
Definition: InputGenJetsParticleSelector.cc:130
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
partIdx
static unsigned int partIdx(const InputGenJetsParticleSelector::ParticleVector &p, const reco::Candidate *particle)
Definition: InputGenJetsParticleSelector.cc:120
InputGenJetsParticleSelector::excludeFromResonancePids
std::vector< unsigned int > excludeFromResonancePids
Definition: InputGenJetsParticleSelector.h:70
edm::InputTag::label
std::string const & label() const
Definition: InputTag.h:36
reco::Candidate::numberOfMothers
virtual size_type numberOfMothers() const =0
number of mothers (zero or one in most of but not all the cases)
InputGenJetsParticleSelector::kNo
Definition: InputGenJetsParticleSelector.h:56
InputGenJetsParticleSelector::setIgnoredParticles
void setIgnoredParticles(const std::vector< unsigned int > &particleIDs)
Definition: InputGenJetsParticleSelector.cc:78
InputGenJetsParticleSelector::setExcludeFromResonancePids
void setExcludeFromResonancePids(const std::vector< unsigned int > &particleIDs)
Definition: InputGenJetsParticleSelector.cc:83
reco::Candidate::numberOfDaughters
virtual size_type numberOfDaughters() const =0
number of daughters
InputGenJetsParticleSelector::hasPartonChildren
bool hasPartonChildren(ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const
Definition: InputGenJetsParticleSelector.cc:209
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:535
InputGenJetsParticleSelector::isResonance
static bool isResonance(int pdgId)
Definition: InputGenJetsParticleSelector.cc:100
InputGenJetsParticleSelector::kIndirect
Definition: InputGenJetsParticleSelector.h:56
InputGenJetsParticleSelector::partonicFinalState
bool partonicFinalState
Definition: InputGenJetsParticleSelector.h:75
InputGenJetsParticleSelector::isMiniAOD
bool isMiniAOD
Definition: InputGenJetsParticleSelector.h:78
pfDeepBoostedJetPreprocessParams_cfi.lower_bound
lower_bound
Definition: pfDeepBoostedJetPreprocessParams_cfi.py:15
InputGenJetsParticleSelector::ResonanceState
ResonanceState
Definition: InputGenJetsParticleSelector.h:56
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
createfilelist.int
int
Definition: createfilelist.py:10
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
EgammaValidation_cff.pdgId
pdgId
Definition: EgammaValidation_cff.py:118
InputGenJetsParticleSelector::ParticleBitmap
std::vector< bool > ParticleBitmap
Definition: InputGenJetsParticleSelector.h:30
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
reco::Candidate::pdgId
virtual int pdgId() const =0
PDG identifier.
reco::Candidate
Definition: Candidate.h:27
InputGenJetsParticleSelector::tausAsJets
bool tausAsJets
Definition: InputGenJetsParticleSelector.h:77
eostools.move
def move(src, dest)
Definition: eostools.py:511
prunedGenParticles_cfi.prunedGenParticles
prunedGenParticles
Definition: prunedGenParticles_cfi.py:3
InputGenJetsParticleSelector::isIgnored
bool isIgnored(int pdgId) const
Definition: InputGenJetsParticleSelector.cc:106
InputGenJetsParticleSelector::inTag
edm::InputTag inTag
Definition: InputGenJetsParticleSelector.h:65
edm::View::const_iterator
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
InputGenJetsParticleSelector::ptMin
double ptMin
Definition: InputGenJetsParticleSelector.h:79
InputGenJetsParticleSelector::excludeResonances
bool excludeResonances
Definition: InputGenJetsParticleSelector.h:76
mps_fire.result
result
Definition: mps_fire.py:311
InputGenJetsParticleSelector::ParticleVector
std::vector< const reco::Candidate * > ParticleVector
Definition: InputGenJetsParticleSelector.h:31
InputGenJetsParticleSelector::isExcludedFromResonance
bool isExcludedFromResonance(int pdgId) const
Definition: InputGenJetsParticleSelector.cc:113
edm::InputTag
Definition: InputTag.h:15
InputGenJetsParticleSelector::prunedInTag
edm::InputTag prunedInTag
Definition: InputGenJetsParticleSelector.h:66
RemoveAddSevLevel.flag
flag
Definition: RemoveAddSevLevel.py:116
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443