CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
JetFlavourCutFilter Class Reference

#include <JetFlavourCutFilter.h>

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

Public Member Functions

virtual bool filter (edm::Event &, const edm::EventSetup &)
 
 JetFlavourCutFilter (const edm::ParameterSet &)
 
 ~JetFlavourCutFilter ()
 
- Public Member Functions inherited from edm::EDFilter
 EDFilter ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDFilter ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 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
std::vector< ConsumesInfoconsumesInfo () const
 
 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
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Types

typedef std::vector
< HepMC::GenParticle * > 
GenPartVect
 
typedef std::vector
< HepMC::GenParticle * >
::const_iterator 
GenPartVectIt
 

Private Member Functions

HepMC::GenParticle * findParticle (const GenPartVect &genPartVect, const int requested_id)
 
void printHisto (const HepMC::GenEvent::particle_iterator start, const HepMC::GenEvent::particle_iterator end)
 

Private Attributes

int jetType
 
int noAccepted
 
edm::EDGetTokenT
< edm::HepMCProduct
token_
 

Additional Inherited Members

- Public Types inherited from edm::EDFilter
typedef EDFilter ModuleType
 
- Public Types inherited from edm::ProducerBase
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 &)
 
- 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 25 of file JetFlavourCutFilter.h.

Member Typedef Documentation

typedef std::vector< HepMC::GenParticle * > JetFlavourCutFilter::GenPartVect
private

Definition at line 37 of file JetFlavourCutFilter.h.

typedef std::vector< HepMC::GenParticle * >::const_iterator JetFlavourCutFilter::GenPartVectIt
private

Definition at line 38 of file JetFlavourCutFilter.h.

Constructor & Destructor Documentation

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

Definition at line 9 of file JetFlavourCutFilter.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), HLT_25ns14e33_v1_cff::InputTag, HLT_25ns14e33_v1_cff::jetType, and AlCaHLTBitMon_QueryRunRegistry::string.

10 {
11  token_ = consumes<edm::HepMCProduct>(edm::InputTag(iConfig.getUntrackedParameter("moduleLabel",std::string("generator")),"unsmeared"));
12  jetType = iConfig.getParameter< int >("jetType");
13  if ((jetType>=1)&&(jetType<=3)) jetType=1;
14 
15  noAccepted = 0;
16 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::HepMCProduct > token_
JetFlavourCutFilter::~JetFlavourCutFilter ( )

Definition at line 19 of file JetFlavourCutFilter.cc.

References gather_cfg::cout.

20 {
21  std::cout << "Total number of accepted events = " << noAccepted << std::endl;
22 }
tuple cout
Definition: gather_cfg.py:121

Member Function Documentation

bool JetFlavourCutFilter::filter ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
virtual

Implements edm::EDFilter.

Definition at line 72 of file JetFlavourCutFilter.cc.

References class-composition::child, alignCSCRings::ff, reco::flavour(), edm::Event::getByToken(), i, HLT_25ns14e33_v1_cff::jetType, AlCaHLTBitMon_ParallelJobs::p, and parents.

73 {
75  iEvent.getByToken(token_, evt);
76 
77  const HepMC::GenEvent * generated_event = evt->GetEvent();
78 
79  bool event_passed = false;
80 
81  vector<int> foundQ;
82  HepMC::GenEvent::particle_const_iterator p;
83  for (p = generated_event->particles_begin(); p != generated_event->particles_end(); p++) {
84  if (((*p)->pdg_id() < 1) && ((*p)->pdg_id() > -10)) { // We have an anti-quark
85 // cout << "antiQ "<< (*p)->pdg_id();
86  //vector< GenParticle * > parents = (*p)->listParents();
87  vector< GenParticle * > parents;
88  HepMC::GenVertex* inVertex = (*p)->production_vertex();
89  for(std::vector<GenParticle*>::const_iterator iter = inVertex->particles_in_const_begin();
90  iter != inVertex->particles_in_const_end();iter++)
91  parents.push_back(*iter);
92 
93  for (GenPartVectIt z = parents.begin(); z != parents.end(); z++){
94 
95  vector< GenParticle * > child;
96  HepMC::GenVertex* outVertex = (*z)->end_vertex();
97  for(std::vector<GenParticle*>::const_iterator iter = outVertex->particles_in_const_begin();
98  iter != outVertex->particles_in_const_end();iter++)
99  child.push_back(*iter);
100 
101  if (findParticle(child, -(*p)->pdg_id())) foundQ.push_back(-(*p)->pdg_id());
102  }
103 // cout << " "<< foundQ.size()<<endl;
104 
105  }
106 
107  }
108 
109  int flavour = 0;
110  int ff[6];
111  ff[0]=0; ff[1]=0; ff[2]=0; ff[3]=0; ff[4]=0; ff[5]=0;
112  for (vector<int>::iterator i = foundQ.begin(); i != foundQ.end(); i++){
113  ++ff[(*i)-1];
114  if ((*i)>flavour) flavour = (*i);
115  }
116  // Is it light quark jet?
117  if ((flavour>=0)&&(flavour<=3)) flavour=1;
118  // Do we have more than one heavy flavour ?
119  if ( (ff[3] && ff[4]) || (ff[3] && ff[5]) || (ff[4] && ff[5]) ) flavour =0;
120 
121  if (jetType!=flavour) event_passed=true;
122 
123 // cout <<"Final flavour: " << ff[0]<<" "<<ff[1]<<" "<<ff[2]<<" "<<ff[3]<<" "<<ff[4]<<" "<<ff[5];
124 // if (ff[0]||ff[1]||ff[2]) cout << " light";
125 // if (ff[3]) cout << " charm";
126 // if (ff[4]) cout << " bottom";
127 // if (ff[5]) cout << " top";
128 // if ((ff[0]||ff[1]||ff[2])&&((ff[3] + ff[4]+ff[5]))) {cout << " LH";};
129 // if ( (ff[3] && ff[4]) || (ff[3] && ff[5]) || (ff[4] && ff[5]) ) {cout <<" notDef";}//printHisto(start,end);//}
130 
131 // cout<<" "<< flavour << event_passed << endl;
132 
133  if (event_passed) noAccepted++;
134 
135  delete generated_event;
136 
137  return event_passed;
138 }
int i
Definition: DBlmapReader.cc:9
TPRegexp parents
Definition: eve_filter.cc:21
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
HepMC::GenParticle * findParticle(const GenPartVect &genPartVect, const int requested_id)
edm::EDGetTokenT< edm::HepMCProduct > token_
int flavour(const Candidate &part)
Definition: pdgIdUtils.h:31
std::vector< HepMC::GenParticle * >::const_iterator GenPartVectIt
HepMC::GenParticle * JetFlavourCutFilter::findParticle ( const GenPartVect genPartVect,
const int  requested_id 
)
private

Definition at line 25 of file JetFlavourCutFilter.cc.

References AlCaHLTBitMon_ParallelJobs::p.

27 {
28  for (GenPartVectIt p = genPartVect.begin(); p != genPartVect.end(); p++)
29  {
30  if (requested_id == (*p)->pdg_id()) return *p;
31  }
32  return 0;
33 }
std::vector< HepMC::GenParticle * >::const_iterator GenPartVectIt
void JetFlavourCutFilter::printHisto ( const HepMC::GenEvent::particle_iterator  start,
const HepMC::GenEvent::particle_iterator  end 
)
private

Definition at line 38 of file JetFlavourCutFilter.cc.

References class-composition::child, gather_cfg::cout, end, AlCaHLTBitMon_ParallelJobs::p, and parents.

40 {
41  HepMC::GenEvent::particle_iterator p;
42  for (p = start; p != end; p++)
43  {
44  //vector< GenParticle * > parents = (*p)->listParents();
45  vector< GenParticle * > parents;
46  HepMC::GenVertex* inVertex = (*p)->production_vertex();
47  for(std::vector<GenParticle*>::const_iterator iter = inVertex->particles_in_const_begin();
48  iter != inVertex->particles_in_const_end();iter++)
49  parents.push_back(*iter);
50 
51  cout << "isC "<<(*p)->pdg_id()<<" status "<<(*p)->status()<<" Parents: "<<parents.size()<<" - ";
52  for (GenPartVectIt z = parents.begin(); z != parents.end(); z++){
53  cout << (*z)->pdg_id()<<" ";
54  }
55 
56  //vector< GenParticle * > child = (*p)->listChildren();
57  vector< GenParticle * > child;
58  HepMC::GenVertex* outVertex = (*p)->end_vertex();
59  for(std::vector<GenParticle*>::const_iterator iter = outVertex->particles_in_const_begin();
60  iter != outVertex->particles_in_const_end();iter++)
61  child.push_back(*iter);
62 
63  cout << " - Child: "<<child.size()<<" - ";
64  for (GenPartVectIt z = child.begin(); z != child.end(); z++){
65  cout << (*z)->pdg_id()<<" ";
66  }
67  cout<<"\n";
68  }
69 }
tuple start
Check for commandline option errors.
Definition: dqm_diff.py:58
TPRegexp parents
Definition: eve_filter.cc:21
#define end
Definition: vmac.h:37
tuple cout
Definition: gather_cfg.py:121
std::vector< HepMC::GenParticle * >::const_iterator GenPartVectIt

Member Data Documentation

int JetFlavourCutFilter::jetType
private

Definition at line 46 of file JetFlavourCutFilter.h.

int JetFlavourCutFilter::noAccepted
private

Definition at line 49 of file JetFlavourCutFilter.h.

edm::EDGetTokenT<edm::HepMCProduct> JetFlavourCutFilter::token_
private

Definition at line 48 of file JetFlavourCutFilter.h.