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 Attributes
PFFilter Class Reference

#include <PFFilter.h>

Inheritance diagram for PFFilter:
edm::EDFilter edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

virtual void beginJob ()
 
bool checkInput ()
 
virtual void endJob ()
 
virtual bool filter (edm::Event &, const edm::EventSetup &)
 
 PFFilter (const edm::ParameterSet &)
 
virtual ~PFFilter ()
 
- Public Member Functions inherited from edm::EDFilter
 EDFilter ()
 
virtual ~EDFilter ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Attributes

std::vector< std::string > collections_
 
std::vector< int > doMax_
 
std::vector< int > doMin_
 
std::vector< double > max_
 
std::vector< double > min_
 
std::vector< std::string > variables_
 

Additional Inherited Members

- Public Types inherited from edm::EDFilter
typedef EDFilter ModuleType
 
typedef WorkerT< EDFilterWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- 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::EDFilter
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Definition at line 11 of file PFFilter.h.

Constructor & Destructor Documentation

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

Definition at line 11 of file PFFilter.cc.

References collections_, doMax_, doMin_, edm::ParameterSet::getParameter(), max_, min_, and variables_.

12 {
13  collections_= iConfig.getParameter< std::vector<std::string> >("Collections");
14  variables_= iConfig.getParameter< std::vector<std::string> >("Variables");
15  min_ = iConfig.getParameter< std::vector<double> >("Mins");
16  max_ = iConfig.getParameter< std::vector<double> >("Maxs");
17  doMin_ = iConfig.getParameter< std::vector<int> >("DoMin");
18  doMax_ = iConfig.getParameter< std::vector<int> >("DoMax");
19 }
T getParameter(std::string const &) const
std::vector< std::string > collections_
Definition: PFFilter.h:23
std::vector< std::string > variables_
Definition: PFFilter.h:24
std::vector< double > max_
Definition: PFFilter.h:26
std::vector< int > doMin_
Definition: PFFilter.h:27
std::vector< double > min_
Definition: PFFilter.h:25
std::vector< int > doMax_
Definition: PFFilter.h:28
PFFilter::~PFFilter ( )
virtual

Definition at line 21 of file PFFilter.cc.

21 {}

Member Function Documentation

void PFFilter::beginJob ( void  )
virtual

Reimplemented from edm::EDFilter.

Definition at line 63 of file PFFilter.cc.

64 {
65  //std::cout << "FL: beginJob" << std::endl;
66 }
bool PFFilter::checkInput ( )

Definition at line 23 of file PFFilter.cc.

References collections_, gather_cfg::cout, doMax_, doMin_, max_, min_, and variables_.

Referenced by filter().

24 {
25  if (collections_.size()!=min_.size())
26  {
27  std::cout << "Error: in PFFilter: collections_.size()!=min_.size()" << std::endl;
28  std::cout << "collections_.size() = " << collections_.size() << std::endl;
29  std::cout << "min_.size() = " << min_.size() << std::endl;
30  return false;
31  }
32  if (collections_.size()!=max_.size())
33  {
34  std::cout << "Error: in PFFilter: collections_.size()!=max_.size()" << std::endl;
35  std::cout << "collections_.size() = " << collections_.size() << std::endl;
36  std::cout << "max_.size() = " << max_.size() << std::endl;
37  return false;
38  }
39  if (collections_.size()!=doMin_.size())
40  {
41  std::cout << "Error: in PFFilter: collections_.size()!=min_.size()" << std::endl;
42  std::cout << "collections_.size() = " << collections_.size() << std::endl;
43  std::cout << "doMin_.size() = " << doMin_.size() << std::endl;
44  return false;
45  }
46  if (collections_.size()!=doMax_.size())
47  {
48  std::cout << "Error: in PFFilter: collections_.size()!=min_.size()" << std::endl;
49  std::cout << "collections_.size() = " << collections_.size() << std::endl;
50  std::cout << "doMax_.size() = " << doMax_.size() << std::endl;
51  return false;
52  }
53  if (collections_.size()!=variables_.size())
54  {
55  std::cout << "Error: in PFFilter: collections_.size()!=variables_.size()" << std::endl;
56  std::cout << "collections_.size() = " << collections_.size() << std::endl;
57  std::cout << "variables_.size() = " << variables_.size() << std::endl;
58  return false;
59  }
60  return true;
61 }
std::vector< std::string > collections_
Definition: PFFilter.h:23
std::vector< std::string > variables_
Definition: PFFilter.h:24
std::vector< double > max_
Definition: PFFilter.h:26
std::vector< int > doMin_
Definition: PFFilter.h:27
std::vector< double > min_
Definition: PFFilter.h:25
std::vector< int > doMax_
Definition: PFFilter.h:28
tuple cout
Definition: gather_cfg.py:121
void PFFilter::endJob ( void  )
virtual

Reimplemented from edm::EDFilter.

Definition at line 221 of file PFFilter.cc.

222 {
223  //std::cout << "FL: endJob" << std::endl;
224 }
bool PFFilter::filter ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
virtual

Implements edm::EDFilter.

Definition at line 68 of file PFFilter.cc.

References checkInput(), collections_, gather_cfg::cout, delta, doMax_, doMin_, reco::Candidate::et(), reco::Candidate::eta(), edm::Event::getByLabel(), M_PI, max_, min_, reco::Candidate::phi(), edm::Handle< T >::product(), findQualityFiles::size, createPayload::skip, and variables_.

70 {
71  //std::cout << "FL: filter" << std::endl;
72  //std::cout << "FL: Mins = " << min_ << std::endl;
73 
74  if (!checkInput()) return true; // no filtering !
75 
76  bool skip=false;
77 
78  for (unsigned int varc=0;varc<collections_.size();++varc)
79  {
80  //std::cout << "FL: var[" << varc << "] = " << collections_[varc] << std::endl;
81  //std::cout << "FL: var[0] = " << collections_[0] << std::endl;
82 
83  // if the collection is collection1-collection2:
84  const unsigned int minuspos=collections_[varc].find("-");
85  if (minuspos<collections_[varc].size())
86  {
87  std::string collection1;
88  collection1.assign(collections_[varc],0,minuspos);
89  //std::cout << "collection1 = " << collection1 << std::endl;
90  std::string collection2;
91  collection2.assign(collections_[varc],minuspos+1,collections_[varc].size());
92  //std::cout << "collection2 = " << collection2 << std::endl;
93 
94  const edm::View<reco::Candidate> *var1;
96  bool isVar1 = iEvent.getByLabel(collection1, var1_hnd);
97  if ( !isVar1 ) {
98  std::cout << "Warning : no " << collection1 << " in input !" << std::endl;
99  return false;
100  }
101  var1 = var1_hnd.product();
102  const reco::Candidate *var10 = &(*var1)[0];
103  //std::cout << "FL: var10.pt = " << var10->et() << std::endl;
104  double coll_var1;
105  if (variables_[varc]=="et") coll_var1=var10->et();
106  else if (variables_[varc]=="phi") coll_var1=var10->phi();
107  else if (variables_[varc]=="eta") coll_var1=var10->eta();
108  else
109  {
110  std::cout << "Error: PFFilter: variable unknown: " << variables_[varc] << std::endl;
111  return true;
112  }
113  //std::cout << "FL: coll_var1[" << variables_[varc] << "] = " << coll_var1 << std::endl;
114 
115  const edm::View<reco::Candidate> *var2;
117  bool isVar2 = iEvent.getByLabel(collection2, var2_hnd);
118  if ( !isVar2 ) {
119  std::cout << "Warning : no " << collection2 << " in input !" << std::endl;
120  return false;
121  }
122  var2 = var2_hnd.product();
123  const reco::Candidate *var20 = &(*var2)[0];
124  //std::cout << "FL: var20.pt = " << var20->et() << std::endl;
125  double coll_var2;
126  if (variables_[varc]=="et") coll_var2=var20->et();
127  else if (variables_[varc]=="phi") coll_var2=var20->phi();
128  else if (variables_[varc]=="eta") coll_var2=var20->eta();
129  else
130  {
131  std::cout << "Error: PFFilter: variable unknown: " << variables_[varc] << std::endl;
132  return true;
133  }
134  //std::cout << "FL: coll_var2[" << variables_[varc] << "] = " << coll_var2 << std::endl;
135  //std::cout << "FL: max_[varc] = " << max_[varc] << std::endl;
136  //std::cout << "FL: min_[varc] = " << min_[varc] << std::endl;
137 
138  // Delta computation
139  double delta=coll_var1-coll_var2;
140  if (variables_[varc]=="phi")
141  {
142  if (coll_var1 > M_PI) coll_var1 -= ceil((coll_var1 - M_PI) / (2 * M_PI)) * 2 * M_PI;
143  if (coll_var1 <= - M_PI) coll_var1 += ceil((coll_var1 + M_PI) / (-2. * M_PI)) * 2. * M_PI;
144  if (coll_var2 > M_PI) coll_var2 -= ceil((coll_var2 - M_PI) / (2 * M_PI)) * 2 * M_PI;
145  if (coll_var2 <= - M_PI) coll_var2 += ceil((coll_var2 + M_PI) / (-2. * M_PI)) * 2 * M_PI;
146 
147  double deltaphi=-999.0;
148  if (fabs(coll_var1 - coll_var2)<M_PI)
149  {
150  deltaphi=(coll_var1-coll_var2);
151  }
152  else
153  {
154  if ((coll_var1-coll_var2)>0.0)
155  {
156  deltaphi=(2*M_PI - fabs(coll_var1 - coll_var2));
157  }
158  else
159  {
160  deltaphi=-(2*M_PI - fabs(coll_var1 - coll_var2));
161  }
162  }
163  delta=deltaphi;
164  }
165 
166  // cuts
167  if (doMin_[varc] && doMax_[varc] && max_[varc]<min_[varc])
168  {
169  if (delta>max_[varc] && delta<min_[varc]) skip=true;
170  }
171  else
172  {
173  if (doMin_[varc] && delta<min_[varc]) skip=true;
174  if (doMax_[varc] && delta>max_[varc]) skip=true;
175  }
176  //std::cout << "skip = " << skip << std::endl;
177  }
178  else
179  {
180  // get the variable:
181  const edm::View<reco::Candidate> *var0;
183  bool isVar0 = iEvent.getByLabel(collections_[varc], var0_hnd);
184  if ( !isVar0 ) {
185  std::cout << "Warning : no " << collections_[varc] << " in input !" << std::endl;
186  return false;
187  }
188  var0 = var0_hnd.product();
189  const reco::Candidate *var00 = &(*var0)[0];
190  //std::cout << "FL: var00.pt = " << var00->et() << std::endl;
191  double coll_var;
192  if (variables_[varc]=="et") coll_var=var00->et();
193  else if (variables_[varc]=="phi") coll_var=var00->phi();
194  else if (variables_[varc]=="eta") coll_var=var00->eta();
195  else
196  {
197  std::cout << "Error: PFFilter: variable unknown: " << variables_[varc] << std::endl;
198  return true;
199  }
200  //std::cout << "FL: coll_var[" << variables_[varc] << "] = " << coll_var << std::endl;
201  //std::cout << "FL: max_[varc] = " << max_[varc] << std::endl;
202  //std::cout << "FL: min_[varc] = " << min_[varc] << std::endl;
203 
204  // cuts
205  if (doMin_[varc] && doMax_[varc] && max_[varc]<min_[varc])
206  {
207  if (coll_var>max_[varc] && coll_var<min_[varc]) skip=true;
208  }
209  else
210  {
211  if (doMin_[varc] && coll_var<min_[varc]) skip=true;
212  if (doMax_[varc] && coll_var>max_[varc]) skip=true;
213  }
214  //std::cout << "skip = " << skip << std::endl;
215  }
216  }
217  //std::cout << "final skip = " << skip << std::endl;
218  return !skip;
219 }
dbl * delta
Definition: mlp_gen.cc:36
std::vector< std::string > collections_
Definition: PFFilter.h:23
virtual double et() const =0
transverse energy
std::vector< std::string > variables_
Definition: PFFilter.h:24
std::vector< double > max_
Definition: PFFilter.h:26
std::vector< int > doMin_
Definition: PFFilter.h:27
std::vector< double > min_
Definition: PFFilter.h:25
bool checkInput()
Definition: PFFilter.cc:23
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
std::vector< int > doMax_
Definition: PFFilter.h:28
#define M_PI
Definition: BFit3D.cc:3
T const * product() const
Definition: Handle.h:74
tuple cout
Definition: gather_cfg.py:121
tuple size
Write out results.
virtual double phi() const =0
momentum azimuthal angle
virtual double eta() const =0
momentum pseudorapidity

Member Data Documentation

std::vector<std::string> PFFilter::collections_
private

Definition at line 23 of file PFFilter.h.

Referenced by checkInput(), filter(), and PFFilter().

std::vector<int> PFFilter::doMax_
private

Definition at line 28 of file PFFilter.h.

Referenced by checkInput(), filter(), and PFFilter().

std::vector<int> PFFilter::doMin_
private

Definition at line 27 of file PFFilter.h.

Referenced by checkInput(), filter(), and PFFilter().

std::vector<double> PFFilter::max_
private

Definition at line 26 of file PFFilter.h.

Referenced by checkInput(), filter(), and PFFilter().

std::vector<double> PFFilter::min_
private

Definition at line 25 of file PFFilter.h.

Referenced by checkInput(), filter(), and PFFilter().

std::vector<std::string> PFFilter::variables_
private

Definition at line 24 of file PFFilter.h.

Referenced by checkInput(), filter(), and PFFilter().