CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PythiaFilter.cc
Go to the documentation of this file.
1 
3 
5 #include <iostream>
6 
7 using namespace edm;
8 using namespace std;
9 
10 
12 token_(consumes<edm::HepMCProduct>(edm::InputTag(iConfig.getUntrackedParameter("moduleLabel",std::string("generator")),"unsmeared"))),
13 particleID(iConfig.getUntrackedParameter("ParticleID", 0)),
14 minpcut(iConfig.getUntrackedParameter("MinP", 0.)),
15 maxpcut(iConfig.getUntrackedParameter("MaxP", 10000.)),
16 minptcut(iConfig.getUntrackedParameter("MinPt", 0.)),
17 maxptcut(iConfig.getUntrackedParameter("MaxPt", 10000.)),
18 minetacut(iConfig.getUntrackedParameter("MinEta", -10.)),
19 maxetacut(iConfig.getUntrackedParameter("MaxEta", 10.)),
20 minrapcut(iConfig.getUntrackedParameter("MinRapidity", -20.)),
21 maxrapcut(iConfig.getUntrackedParameter("MaxRapidity", 20.)),
22 minphicut(iConfig.getUntrackedParameter("MinPhi", -3.5)),
23 maxphicut(iConfig.getUntrackedParameter("MaxPhi", 3.5)),
24 status(iConfig.getUntrackedParameter("Status", 0)),
25 motherID(iConfig.getUntrackedParameter("MotherID", 0)),
26 processID(iConfig.getUntrackedParameter("ProcessID", 0))
27 {
28  //now do what ever initialization is needed
29 
30 }
31 
32 
34 {
35 
36  // do anything here that needs to be done at desctruction time
37  // (e.g. close files, deallocate resources etc.)
38 
39 }
40 
41 
42 //
43 // member functions
44 //
45 
46 // ------------ method called to produce the data ------------
48 {
49  using namespace edm;
50  bool accepted = false;
52  iEvent.getByToken(token_, evt);
53 
54  const HepMC::GenEvent * myGenEvent = evt->GetEvent();
55 
56  if(processID == 0 || processID == myGenEvent->signal_process_id()) {
57 
58  for ( HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin();
59  p != myGenEvent->particles_end(); ++p ) {
60 
61  rapidity = 0.5*log( ((*p)->momentum().e()+(*p)->momentum().pz()) / ((*p)->momentum().e()-(*p)->momentum().pz()) );
62 
63  if ( abs((*p)->pdg_id()) == particleID
64  && (*p)->momentum().rho() > minpcut
65  && (*p)->momentum().rho() < maxpcut
66  && (*p)->momentum().perp() > minptcut
67  && (*p)->momentum().perp() < maxptcut
68  && (*p)->momentum().eta() > minetacut
69  && (*p)->momentum().eta() < maxetacut
70  && rapidity > minrapcut
71  && rapidity < maxrapcut
72  && (*p)->momentum().phi() > minphicut
73  && (*p)->momentum().phi() < maxphicut ) {
74 
75 
76 
77  if (status == 0 && motherID == 0){
78  accepted = true;
79  }
80  if (status != 0 && motherID == 0){
81  if ((*p)->status() == status)
82  accepted = true;
83  }
84 
85  HepMC::GenParticle* mother = (*((*p)->production_vertex()->particles_in_const_begin()));
86 
87  if (status == 0 && motherID != 0){
88  if (abs(mother->pdg_id()) == abs(motherID)) {
89  accepted = true;
90  }
91  }
92  if (status != 0 && motherID != 0){
93 
94  if ((*p)->status() == status && abs(mother->pdg_id()) == abs(motherID)){
95  accepted = true;
96 
97  }
98  }
99 
100  /*
101  if (status == 0 && motherID != 0){
102  if (abs(((*p)->mother())->pdg_id()) == abs(motherID)) {
103  accepted = true;
104  }
105  }
106  if (status != 0 && motherID != 0){
107 
108  if ((*p)->status() == status && abs(((*p)->mother())->pdg_id()) == abs(motherID)){
109  accepted = true;
110 
111  }
112  }
113  */
114 
115  }
116  }
117 
118  } else { accepted = true; }
119 
120  if (accepted){
121  return true; } else {return false;}
122 
123 }
124 
double maxpcut
Definition: PythiaFilter.h:55
double maxphicut
Definition: PythiaFilter.h:63
PythiaFilter(const edm::ParameterSet &)
Definition: PythiaFilter.cc:11
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
double maxptcut
Definition: PythiaFilter.h:57
edm::EDGetTokenT< edm::HepMCProduct > token_
Definition: PythiaFilter.h:52
double minrapcut
Definition: PythiaFilter.h:60
int iEvent
Definition: GenABIO.cc:230
double minphicut
Definition: PythiaFilter.h:62
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double rapidity
Definition: PythiaFilter.h:65
double maxrapcut
Definition: PythiaFilter.h:61
double maxetacut
Definition: PythiaFilter.h:59
double minpcut
Definition: PythiaFilter.h:54
double minptcut
Definition: PythiaFilter.h:56
double minetacut
Definition: PythiaFilter.h:58
virtual bool filter(edm::Event &, const edm::EventSetup &)
Definition: PythiaFilter.cc:47
tuple status
Definition: ntuplemaker.py:245
tuple log
Definition: cmsBatch.py:341