CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef std::vector< bool > ParticleBitmap
 
typedef std::vector< const
reco::GenParticle * > 
ParticleVector
 
enum  ResonanceState { kNo = 0, kDirect, kIndirect }
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 

Public Member Functions

ResonanceState fromResonance (ParticleBitmap &invalid, const ParticleVector &p, const reco::GenParticle *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::GenParticle *particle) const
 
 InputGenJetsParticleSelector (const edm::ParameterSet &)
 
bool isIgnored (int pdgId) const
 
bool isParton (int pdgId) const
 
virtual void produce (edm::Event &evt, const edm::EventSetup &evtSetup)
 
void setExcludeResonances (bool flag=true)
 
void setPartonicFinalState (bool flag=true)
 
void setPtMin (double ptMin)
 
void setTausAsJets (bool flag=true)
 
 ~InputGenJetsParticleSelector ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Static Public Member Functions

static bool isHadron (int pdgId)
 
static bool isResonance (int pdgId)
 
- Static Public Member Functions inherited from edm::EDProducer
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::GenParticle *particle) const
 

Private Attributes

std::vector< unsigned int > excludeFromResonancePids
 
bool excludeResonances
 
std::vector< unsigned int > ignoreParticleIDs
 
edm::InputTag inTag
 
bool partonicFinalState
 
double ptMin
 
bool tausAsJets
 

Additional Inherited Members

- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
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 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)
 

Detailed Description

Definition at line 28 of file InputGenJetsParticleSelector.h.

Member Typedef Documentation

Definition at line 31 of file InputGenJetsParticleSelector.h.

Definition at line 32 of file InputGenJetsParticleSelector.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

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

Definition at line 47 of file InputGenJetsParticleSelector.cc.

References edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), setExcludeFromResonancePids(), and setIgnoredParticles().

47  :
48  inTag(params.getParameter<edm::InputTag>("src")),
49  partonicFinalState(params.getParameter<bool>("partonicFinalState")),
50  excludeResonances(params.getParameter<bool>("excludeResonances")),
51  tausAsJets(params.getParameter<bool>("tausAsJets")),
52  ptMin(0.0){
53  if (params.exists("ignoreParticleIDs"))
54  setIgnoredParticles(params.getParameter<std::vector<unsigned int> >
55  ("ignoreParticleIDs"));
56  setExcludeFromResonancePids(params.getParameter<std::vector<unsigned int> >
57  ("excludeFromResonancePids"));
58 
59  produces <reco::GenParticleRefVector> ();
60 
61 }
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
void setIgnoredParticles(const std::vector< unsigned int > &particleIDs)
void setExcludeFromResonancePids(const std::vector< unsigned int > &particleIDs)
InputGenJetsParticleSelector::~InputGenJetsParticleSelector ( )

Definition at line 63 of file InputGenJetsParticleSelector.cc.

63 {}
InputGenJetsParticleSelector::InputGenJetsParticleSelector ( )
inlineprivate

Definition at line 76 of file InputGenJetsParticleSelector.h.

76 {} //should not be used!

Member Function Documentation

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

Definition at line 176 of file InputGenJetsParticleSelector.cc.

References i, customizeTrackingMonitorSeedNumber::idx, isExcludedFromResonance(), isIgnored(), isParton(), isResonance(), kDirect, kIndirect, kNo, reco::CompositeRefCandidateT< D >::mother(), reco::CompositeRefCandidateT< D >::numberOfMothers(), partIdx(), benchmark_cfg::pdgId, reco::LeafCandidate::pdgId(), query::result, and reco::LeafCandidate::status().

Referenced by produce().

179 {
180  unsigned int idx = partIdx(p, particle);
181  int id = particle->pdgId();
182 
183  if (invalid[idx]) return kIndirect;
184 
185  if (isResonance(id) && (particle->status() == 3 || particle->status() == 22) ){
186  return kDirect;
187  }
188 
189 
190  if (!isIgnored(id) && (isParton(id)))
191  return kNo;
192 
193 
194 
195  unsigned int nMo=particle->numberOfMothers();
196  if (!nMo)
197  return kNo;
198 
199 
200  for(unsigned int i=0;i<nMo;++i){
201  ResonanceState result = fromResonance(invalid,p,dynamic_cast<const reco::GenParticle*>(particle->mother(i)));
202  switch(result) {
203  case kNo:
204  break;
205  case kDirect:
206  if (dynamic_cast<const reco::GenParticle*>(particle->mother(i))->pdgId()==id || isResonance(id))
207  return kDirect;
208  if(!isExcludedFromResonance(id))
209  break;
210  case kIndirect:
211  return kIndirect;
212  }
213  }
214 return kNo;
215 }
int i
Definition: DBlmapReader.cc:9
virtual int pdgId() const GCC11_FINAL
PDG identifier.
virtual int status() const GCC11_FINAL
status word
virtual size_t numberOfMothers() const
number of mothers
tuple result
Definition: query.py:137
static unsigned int partIdx(const InputGenJetsParticleSelector::ParticleVector &p, const reco::GenParticle *particle)
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
virtual const Candidate * mother(size_type=0) const
return mother at a given position, i = 0, ... numberOfMothers() - 1 (read only mode) ...
ResonanceState fromResonance(ParticleBitmap &invalid, const ParticleVector &p, const reco::GenParticle *particle) const
bool InputGenJetsParticleSelector::getExcludeResonances ( ) const
inline
const std::vector<unsigned int>& InputGenJetsParticleSelector::getIgnoredParticles ( ) const
inline

Definition at line 44 of file InputGenJetsParticleSelector.h.

References ignoreParticleIDs.

45  { return ignoreParticleIDs; }
std::vector< unsigned int > ignoreParticleIDs
bool InputGenJetsParticleSelector::getPartonicFinalState ( ) const
inline
double InputGenJetsParticleSelector::getPtMin ( ) const
inline

Definition at line 43 of file InputGenJetsParticleSelector.h.

References ptMin.

bool InputGenJetsParticleSelector::getTausAndJets ( ) const
inline

Definition at line 42 of file InputGenJetsParticleSelector.h.

References tausAsJets.

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

Definition at line 218 of file InputGenJetsParticleSelector.cc.

References testPartonChildren().

Referenced by produce().

220  {
221  return testPartonChildren(invalid, p, particle) > 0;
222 }
int testPartonChildren(ParticleBitmap &invalid, const ParticleVector &p, const reco::GenParticle *particle) const
bool InputGenJetsParticleSelector::isExcludedFromResonance ( int  pdgId) const
private

Definition at line 109 of file InputGenJetsParticleSelector.cc.

References excludeFromResonancePids, and benchmark_cfg::pdgId.

Referenced by fromResonance().

110 {
111  pdgId = pdgId > 0 ? pdgId : -pdgId;
112  std::vector<unsigned int>::const_iterator pos =
113  std::lower_bound(excludeFromResonancePids.begin(),
115  (unsigned int)pdgId);
116  return pos != excludeFromResonancePids.end() && *pos == (unsigned int)pdgId;
117 
118 }
std::vector< unsigned int > excludeFromResonancePids
bool InputGenJetsParticleSelector::isHadron ( int  pdgId)
static

Definition at line 85 of file InputGenJetsParticleSelector.cc.

References benchmark_cfg::pdgId.

86 {
87  pdgId = (pdgId > 0 ? pdgId : -pdgId) % 10000;
88  return (pdgId > 100 && pdgId < 900) ||
89  (pdgId > 1000 && pdgId < 9000);
90 }
bool InputGenJetsParticleSelector::isIgnored ( int  pdgId) const

Definition at line 99 of file InputGenJetsParticleSelector.cc.

References ignoreParticleIDs, and benchmark_cfg::pdgId.

Referenced by fromResonance(), and produce().

100 {
101  pdgId = pdgId > 0 ? pdgId : -pdgId;
102  std::vector<unsigned int>::const_iterator pos =
103  std::lower_bound(ignoreParticleIDs.begin(),
104  ignoreParticleIDs.end(),
105  (unsigned int)pdgId);
106  return pos != ignoreParticleIDs.end() && *pos == (unsigned int)pdgId;
107 }
std::vector< unsigned int > ignoreParticleIDs
bool InputGenJetsParticleSelector::isParton ( int  pdgId) const

Definition at line 77 of file InputGenJetsParticleSelector.cc.

References benchmark_cfg::pdgId, and tausAsJets.

Referenced by fromResonance(), and produce().

77  {
78  pdgId = (pdgId > 0 ? pdgId : -pdgId) % 10000;
79  return (pdgId > 0 && pdgId < 6) ||
80  pdgId == 9 || (tausAsJets && pdgId == 15) || pdgId == 21;
81  // tops are not considered "regular" partons
82  // but taus eventually are (since they may hadronize later)
83 }
bool InputGenJetsParticleSelector::isResonance ( int  pdgId)
static

Definition at line 92 of file InputGenJetsParticleSelector.cc.

References benchmark_cfg::pdgId.

Referenced by fromResonance().

93 {
94  // gauge bosons and tops
95  pdgId = (pdgId > 0 ? pdgId : -pdgId) % 10000;
96  return (pdgId > 21 && pdgId <= 42) || pdgId == 6 || pdgId == 7 || pdgId == 8 ; //BUG! was 21. 22=gamma..
97 }
void InputGenJetsParticleSelector::produce ( edm::Event evt,
const edm::EventSetup evtSetup 
)
virtual

Implements edm::EDProducer.

Definition at line 226 of file InputGenJetsParticleSelector.cc.

References excludeResonances, fromResonance(), genParticleCandidates2GenParticles_cfi::genParticles, edm::Event::getByLabel(), hasPartonChildren(), i, customizeTrackingMonitorSeedNumber::idx, inTag, align::invalid, invalidateTree(), isIgnored(), isParton(), reco::CompositeRefCandidateT< D >::numberOfDaughters(), partonicFinalState, reco::LeafCandidate::pdgId(), reco::LeafCandidate::pt(), ptMin, edm::Event::put(), findQualityFiles::size, python.multivaluedict::sort(), and reco::LeafCandidate::status().

226  {
227 
228 
229  std::auto_ptr<reco::GenParticleRefVector> selected_ (new reco::GenParticleRefVector);
230 
232  evt.getByLabel(inTag, genParticles );
233 
234  std::map<const reco::GenParticle*,size_t> particlePtrIdxMap;
235  ParticleVector particles;
236  for (reco::GenParticleCollection::const_iterator iter=genParticles->begin();iter!=genParticles->end();++iter){
237  particles.push_back(&*iter);
238  particlePtrIdxMap[&*iter] = (iter - genParticles->begin());
239  }
240 
241  std::sort(particles.begin(), particles.end());
242  unsigned int size = particles.size();
243 
244  ParticleBitmap selected(size, false);
245  ParticleBitmap invalid(size, false);
246 
247  for(unsigned int i = 0; i < size; i++) {
248  const reco::GenParticle *particle = particles[i];
249  if (invalid[i])
250  continue;
251  if (particle->status() == 1)
252  selected[i] = true;
253  if (partonicFinalState && isParton(particle->pdgId())) {
254 
255  if (particle->numberOfDaughters()==0 &&
256  particle->status() != 1) {
257  // some brokenness in event...
258  invalid[i] = true;
259  }
260  else if (!hasPartonChildren(invalid, particles,
261  particle)) {
262  selected[i] = true;
263  invalidateTree(invalid, particles,particle); //this?!?
264  }
265  }
266 
267  }
268 
269  for(size_t idx = 0; idx < size; ++idx){
270  const reco::GenParticle *particle = particles[idx];
271  if (!selected[idx] || invalid[idx]){
272  continue;
273  }
274 
275  if (excludeResonances &&
276  fromResonance(invalid, particles, particle)) {
277  invalid[idx] = true;
278  //cout<<"[INPUTSELECTOR] Invalidates FROM RESONANCE!: ["<<setw(4)<<idx<<"] "<<particle->pdgId()<<" "<<particle->pt()<<endl;
279  continue;
280  }
281 
282  if (isIgnored(particle->pdgId())){
283  continue;
284  }
285 
286 
287  if (particle->pt() >= ptMin){
288  edm::Ref<reco::GenParticleCollection> particleRef(genParticles,particlePtrIdxMap[particle]);
289  selected_->push_back(particleRef);
290  //cout<<"Finally we have: ["<<setw(4)<<idx<<"] "<<setw(4)<<particle->pdgId()<<" "<<particle->pt()<<endl;
291  }
292  }
293  evt.put(selected_);
294 }
int i
Definition: DBlmapReader.cc:9
bool hasPartonChildren(ParticleBitmap &invalid, const ParticleVector &p, const reco::GenParticle *particle) const
std::vector< const reco::GenParticle * > ParticleVector
virtual int pdgId() const GCC11_FINAL
PDG identifier.
virtual int status() const GCC11_FINAL
status word
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
static void invalidateTree(InputGenJetsParticleSelector::ParticleBitmap &invalid, const InputGenJetsParticleSelector::ParticleVector &p, const reco::GenParticle *particle)
virtual size_t numberOfDaughters() const
number of daughters
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:390
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
virtual float pt() const GCC11_FINAL
transverse momentum
tuple size
Write out results.
ResonanceState fromResonance(ParticleBitmap &invalid, const ParticleVector &p, const reco::GenParticle *particle) const
void InputGenJetsParticleSelector::setExcludeFromResonancePids ( const std::vector< unsigned int > &  particleIDs)
private
void InputGenJetsParticleSelector::setExcludeResonances ( bool  flag = true)
inline
void InputGenJetsParticleSelector::setIgnoredParticles ( const std::vector< unsigned int > &  particleIDs)
private

Definition at line 65 of file InputGenJetsParticleSelector.cc.

References ignoreParticleIDs, and python.multivaluedict::sort().

Referenced by InputGenJetsParticleSelector().

66 {
67  ignoreParticleIDs = particleIDs;
69 }
std::vector< unsigned int > ignoreParticleIDs
void InputGenJetsParticleSelector::setPartonicFinalState ( bool  flag = true)
inline
void InputGenJetsParticleSelector::setPtMin ( double  ptMin)
inline

Definition at line 52 of file InputGenJetsParticleSelector.h.

References ptMin.

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

Definition at line 51 of file InputGenJetsParticleSelector.h.

References tausAsJets.

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

Definition at line 152 of file InputGenJetsParticleSelector.cc.

References reco::CompositeRefCandidateT< D >::daughter(), i, customizeTrackingMonitorSeedNumber::idx, CandMCTagUtils::isParton(), npart, reco::CompositeRefCandidateT< D >::numberOfDaughters(), partIdx(), reco::Candidate::pdgId(), and query::result.

Referenced by hasPartonChildren().

155 {
156  unsigned int npart=particle->numberOfDaughters();
157  if (!npart) {return 0;}
158 
159  for (unsigned int i=0;i<npart;++i){
160  unsigned int idx = partIdx(p,dynamic_cast<const reco::GenParticle*>(particle->daughter(i)));
161  if (invalid[idx])
162  continue;
163  if (isParton((particle->daughter(i)->pdgId()))){
164  return 1;
165  }
166  if (isHadron((particle->daughter(i)->pdgId()))){
167  return -1;
168  }
169  int result = testPartonChildren(invalid,p,dynamic_cast<const reco::GenParticle*>(particle->daughter(i)));
170  if (result) return result;
171  }
172  return 0;
173 }
int i
Definition: DBlmapReader.cc:9
int testPartonChildren(ParticleBitmap &invalid, const ParticleVector &p, const reco::GenParticle *particle) const
double npart
Definition: HydjetWrapper.h:44
virtual size_t numberOfDaughters() const
number of daughters
tuple result
Definition: query.py:137
virtual const Candidate * daughter(size_type) const
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
static unsigned int partIdx(const InputGenJetsParticleSelector::ParticleVector &p, const reco::GenParticle *particle)
virtual int pdgId() const =0
PDG identifier.
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...

Member Data Documentation

std::vector<unsigned int> InputGenJetsParticleSelector::excludeFromResonancePids
private
bool InputGenJetsParticleSelector::excludeResonances
private
std::vector<unsigned int> InputGenJetsParticleSelector::ignoreParticleIDs
private
edm::InputTag InputGenJetsParticleSelector::inTag
private

Definition at line 78 of file InputGenJetsParticleSelector.h.

Referenced by produce().

bool InputGenJetsParticleSelector::partonicFinalState
private
double InputGenJetsParticleSelector::ptMin
private

Definition at line 92 of file InputGenJetsParticleSelector.h.

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

bool InputGenJetsParticleSelector::tausAsJets
private

Definition at line 91 of file InputGenJetsParticleSelector.h.

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