CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
PythiaMomDauFilter Class Reference

#include <PythiaMomDauFilter.h>

Inheritance diagram for PythiaMomDauFilter:
edm::EDFilter edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

bool filter (edm::Event &, const edm::EventSetup &) override
 
 PythiaMomDauFilter (const edm::ParameterSet &)
 
 ~PythiaMomDauFilter () override
 
- Public Member Functions inherited from edm::EDFilter
 EDFilter ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilter () 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
 
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)
 
 ~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
 
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::vector< ModuleDescription const * > &modules, 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
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Attributes

double betaBoost
 
bool chargeconju
 
int daughterID
 
std::vector< int > dauIDs
 
std::vector< int > desIDs
 
edm::EDGetTokenT< edm::HepMCProductlabel_
 
double maxetacut
 
double maxptcut
 
double minetacut
 
double minptcut
 
double mom_maxetacut
 
double mom_maxptcut
 
double mom_minetacut
 
double mom_minptcut
 
int ndaughters
 
int ndescendants
 
int particleID
 

Additional Inherited Members

- Public Types inherited from edm::EDFilter
typedef EDFilter 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
 
- Static Public Member Functions inherited from edm::EDFilter
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- 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 ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
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

Description: Filter events using MotherId and ChildrenIds infos

Implementation: <Notes on="" implementation>="">

Definition at line 44 of file PythiaMomDauFilter.h.

Constructor & Destructor Documentation

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

Definition at line 13 of file PythiaMomDauFilter.cc.

References dauIDs, desIDs, and edm::ParameterSet::getUntrackedParameter().

13  :
14 label_(consumes<edm::HepMCProduct>(edm::InputTag(iConfig.getUntrackedParameter("moduleLabel",std::string("generator")),"unsmeared"))),
15 particleID(iConfig.getUntrackedParameter<int>("ParticleID", 0)),
16 daughterID(iConfig.getUntrackedParameter<int>("DaughterID", 0)),
17 chargeconju(iConfig.getUntrackedParameter<bool>("ChargeConjugation", true)),
18 ndaughters(iConfig.getUntrackedParameter<int>("NumberDaughters", 0)),
19 ndescendants(iConfig.getUntrackedParameter<int>("NumberDescendants", 0)),
20 minptcut(iConfig.getUntrackedParameter<double>("MinPt", 0.)),
21 maxptcut(iConfig.getUntrackedParameter<double>("MaxPt", 14000.)),
22 minetacut(iConfig.getUntrackedParameter<double>("MinEta", -10.)),
23 maxetacut(iConfig.getUntrackedParameter<double>("MaxEta", 10.)),
24 mom_minptcut(iConfig.getUntrackedParameter<double>("MomMinPt", 0.)),
25 mom_maxptcut(iConfig.getUntrackedParameter<double>("MomMaxPt", 14000.)),
26 mom_minetacut(iConfig.getUntrackedParameter<double>("MomMinEta", -10.)),
27 mom_maxetacut(iConfig.getUntrackedParameter<double>("MomMaxEta", 10.)),
28 betaBoost(iConfig.getUntrackedParameter("BetaBoost",0.))
29 {
30  //now do what ever initialization is needed
31  vector<int> defdauID;
32  defdauID.push_back(0);
33  vector<int> defdesID;
34  defdesID.push_back(0);
35  dauIDs = iConfig.getUntrackedParameter< vector<int> >("DaughterIDs", defdauID);
36  desIDs = iConfig.getUntrackedParameter< vector<int> >("DescendantsIDs", defdesID);
37 }
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::HepMCProduct > label_
std::vector< int > desIDs
std::vector< int > dauIDs
PythiaMomDauFilter::~PythiaMomDauFilter ( )
override

Definition at line 40 of file PythiaMomDauFilter.cc.

41 {
42 
43  // do anything here that needs to be done at desctruction time
44  // (e.g. close files, deallocate resources etc.)
45 
46 }

Member Function Documentation

bool PythiaMomDauFilter::filter ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 54 of file PythiaMomDauFilter.cc.

References cms::dd::accepted(), betaBoost, chargeconju, class-composition::children, daughterID, dauIDs, desIDs, edm::Event::getByToken(), edm::HepMCProduct::GetEvent(), mps_fire::i, label_, maxetacut, maxptcut, minetacut, minptcut, mom_maxetacut, mom_maxptcut, mom_minetacut, mom_minptcut, ndaughters, ndescendants, AlCaHLTBitMon_ParallelJobs::p, particleID, PYCOMP, and MCFilterZboostHelper::zboost().

55 {
56  using namespace edm;
57  bool accepted = false;
58  bool mom_accepted = false;
60  iEvent.getByToken(label_, evt);
61 
62  const HepMC::GenEvent * myGenEvent = evt->GetEvent();
63  int ndauac = 0;
64  int ndau = 0;
65  int ndesac = 0;
66  int ndes = 0;
67 
68  for ( HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end(); ++p ) {
69 
70  if( (*p)->pdg_id() != particleID ) continue ;
71  HepMC::FourVector mom = MCFilterZboostHelper::zboost((*p)->momentum(),betaBoost);
72  if( (*p)->momentum().perp() > mom_minptcut && (*p)->momentum().perp() < mom_maxptcut && mom.eta() > mom_minetacut && mom.eta() < mom_maxetacut ){
73  mom_accepted = true;
74  ndauac = 0;
75  ndau = 0;
76  ndesac = 0;
77  ndes = 0;
78  if ( (*p)->end_vertex() ) {
79  for ( HepMC::GenVertex::particle_iterator dau =(*p)->end_vertex()->particles_begin(HepMC::children); dau != (*p)->end_vertex()->particles_end(HepMC::children); ++dau ) {
80  ++ndau;
81  for( unsigned int i=0; i<dauIDs.size(); ++i) {
82  if( (*dau)->pdg_id() != dauIDs[i] ) continue ;
83  ++ndauac;
84  break;
85  }
86  if((*dau)->pdg_id() == daughterID){
87  for(HepMC::GenVertex::particle_iterator des = (*dau)->end_vertex()->particles_begin(HepMC::children); des != (*des)->end_vertex()->particles_end(HepMC::children); ++des ){
88  ++ndes;
89  for( unsigned int i=0; i<desIDs.size(); ++i) {
90  if( (*des)->pdg_id() != desIDs[i] ) continue ;
91  HepMC::FourVector dau_i = MCFilterZboostHelper::zboost((*des)->momentum(),betaBoost);
92  if( (*des)->momentum().perp() > minptcut && (*des)->momentum().perp() < maxptcut && dau_i.eta() > minetacut && dau_i.eta() < maxetacut ) {
93  ++ndesac;
94  break;
95  }
96  }
97  }
98  }
99  }
100  }
101  }
102  if( ndau == ndaughters && ndauac == ndaughters && mom_accepted && ndes == ndescendants && ndesac == ndescendants ) {
103  accepted = true;
104  break;
105  }
106 
107  }
108 
109 
110  if( !accepted && chargeconju ) {
111 
112  mom_accepted = false;
113  for ( HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); p != myGenEvent->particles_end(); ++p ) {
114 
115  if( (*p)->pdg_id() != -particleID ) continue ;
116  HepMC::FourVector mom = MCFilterZboostHelper::zboost((*p)->momentum(),betaBoost);
117  if( (*p)->momentum().perp() > mom_minptcut && (*p)->momentum().perp() < mom_maxptcut && mom.eta() > mom_minetacut && mom.eta() < mom_maxetacut ){
118  mom_accepted = true;
119  ndauac = 0;
120  ndau = 0;
121  ndesac = 0;
122  ndes = 0;
123  if ( (*p)->end_vertex() ) {
124  for ( HepMC::GenVertex::particle_iterator dau =(*p)->end_vertex()->particles_begin(HepMC::children); dau != (*p)->end_vertex()->particles_end(HepMC::children); ++dau ) {
125  ++ndau;
126  for( unsigned int i=0; i<dauIDs.size(); ++i) {
127  int IDanti = -dauIDs[i];
128  int pythiaCode = PYCOMP(dauIDs[i]);
129  int has_antipart = pydat2.kchg[3-1][pythiaCode-1];
130  if( has_antipart == 0 ) IDanti = dauIDs[i];
131  if( (*dau)->pdg_id() != IDanti ) continue ;
132  ++ndauac;
133  break;
134  }
135  int daughterIDanti = -daughterID;
136  int pythiaCode = PYCOMP(daughterID);
137  int has_antipart = pydat2.kchg[3-1][pythiaCode-1];
138  if( has_antipart == 0 ) daughterIDanti = daughterID;
139  if((*dau)->pdg_id() == daughterIDanti) {
140  for( HepMC::GenVertex::particle_iterator des = (*dau)->end_vertex()->particles_begin(HepMC::children); des != (*des)->end_vertex()->particles_end(HepMC::children); ++des ){
141  ++ndes;
142  for( unsigned int i=0; i<desIDs.size(); ++i) {
143  int IDanti = -desIDs[i];
144  int pythiaCode = PYCOMP(desIDs[i]);
145  int has_antipart = pydat2.kchg[3-1][pythiaCode-1];
146  if( has_antipart == 0 ) IDanti = desIDs[i];
147  if( (*des)->pdg_id() != IDanti ) continue ;
148  HepMC::FourVector dau_i = MCFilterZboostHelper::zboost((*des)->momentum(),betaBoost);
149  if( (*des)->momentum().perp() > minptcut && (*des)->momentum().perp() < maxptcut && dau_i.eta() > minetacut && dau_i.eta() < maxetacut ) {
150  ++ndesac;
151  break;
152  }
153  }
154  }
155  }
156  }
157  }
158  }
159  if( ndau == ndaughters && ndauac == ndaughters && mom_accepted && ndes == ndescendants && ndesac == ndescendants ) {
160  accepted = true;
161  break;
162  }
163  }
164 
165  }
166 
167  if (accepted){
168  return true; } else {return false;}
169 
170 }
HepMC::FourVector zboost(const HepMC::FourVector &, double)
edm::EDGetTokenT< edm::HepMCProduct > label_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::vector< int > desIDs
#define PYCOMP
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:38
bool accepted(std::vector< std::string_view > const &, std::string_view)
std::vector< int > dauIDs
HLT enums.

Member Data Documentation

double PythiaMomDauFilter::betaBoost
private

Definition at line 70 of file PythiaMomDauFilter.h.

Referenced by filter().

bool PythiaMomDauFilter::chargeconju
private

Definition at line 59 of file PythiaMomDauFilter.h.

Referenced by filter().

int PythiaMomDauFilter::daughterID
private

Definition at line 58 of file PythiaMomDauFilter.h.

Referenced by filter().

std::vector<int> PythiaMomDauFilter::dauIDs
private

Definition at line 55 of file PythiaMomDauFilter.h.

Referenced by filter(), and PythiaMomDauFilter().

std::vector<int> PythiaMomDauFilter::desIDs
private

Definition at line 56 of file PythiaMomDauFilter.h.

Referenced by filter(), and PythiaMomDauFilter().

edm::EDGetTokenT<edm::HepMCProduct> PythiaMomDauFilter::label_
private
double PythiaMomDauFilter::maxetacut
private

Definition at line 65 of file PythiaMomDauFilter.h.

Referenced by filter().

double PythiaMomDauFilter::maxptcut
private

Definition at line 63 of file PythiaMomDauFilter.h.

Referenced by filter().

double PythiaMomDauFilter::minetacut
private

Definition at line 64 of file PythiaMomDauFilter.h.

Referenced by filter().

double PythiaMomDauFilter::minptcut
private

Definition at line 62 of file PythiaMomDauFilter.h.

Referenced by filter().

double PythiaMomDauFilter::mom_maxetacut
private

Definition at line 69 of file PythiaMomDauFilter.h.

Referenced by filter().

double PythiaMomDauFilter::mom_maxptcut
private

Definition at line 67 of file PythiaMomDauFilter.h.

Referenced by filter().

double PythiaMomDauFilter::mom_minetacut
private

Definition at line 68 of file PythiaMomDauFilter.h.

Referenced by filter().

double PythiaMomDauFilter::mom_minptcut
private

Definition at line 66 of file PythiaMomDauFilter.h.

Referenced by filter().

int PythiaMomDauFilter::ndaughters
private

Definition at line 60 of file PythiaMomDauFilter.h.

Referenced by filter().

int PythiaMomDauFilter::ndescendants
private

Definition at line 61 of file PythiaMomDauFilter.h.

Referenced by filter().

int PythiaMomDauFilter::particleID
private

Definition at line 57 of file PythiaMomDauFilter.h.

Referenced by filter().