CMS 3D CMS Logo

PFFilter.cc
Go to the documentation of this file.
2 
10 
12  collections_ = iConfig.getParameter<std::vector<std::string>>("Collections");
13  variables_ = iConfig.getParameter<std::vector<std::string>>("Variables");
14  min_ = iConfig.getParameter<std::vector<double>>("Mins");
15  max_ = iConfig.getParameter<std::vector<double>>("Maxs");
16  doMin_ = iConfig.getParameter<std::vector<int>>("DoMin");
17  doMax_ = iConfig.getParameter<std::vector<int>>("DoMax");
18 }
19 
21 
23  if (collections_.size() != min_.size()) {
24  std::cout << "Error: in PFFilter: collections_.size()!=min_.size()" << std::endl;
25  std::cout << "collections_.size() = " << collections_.size() << std::endl;
26  std::cout << "min_.size() = " << min_.size() << std::endl;
27  return false;
28  }
29  if (collections_.size() != max_.size()) {
30  std::cout << "Error: in PFFilter: collections_.size()!=max_.size()" << std::endl;
31  std::cout << "collections_.size() = " << collections_.size() << std::endl;
32  std::cout << "max_.size() = " << max_.size() << std::endl;
33  return false;
34  }
35  if (collections_.size() != doMin_.size()) {
36  std::cout << "Error: in PFFilter: collections_.size()!=min_.size()" << std::endl;
37  std::cout << "collections_.size() = " << collections_.size() << std::endl;
38  std::cout << "doMin_.size() = " << doMin_.size() << std::endl;
39  return false;
40  }
41  if (collections_.size() != doMax_.size()) {
42  std::cout << "Error: in PFFilter: collections_.size()!=min_.size()" << std::endl;
43  std::cout << "collections_.size() = " << collections_.size() << std::endl;
44  std::cout << "doMax_.size() = " << doMax_.size() << std::endl;
45  return false;
46  }
47  if (collections_.size() != variables_.size()) {
48  std::cout << "Error: in PFFilter: collections_.size()!=variables_.size()" << std::endl;
49  std::cout << "collections_.size() = " << collections_.size() << std::endl;
50  std::cout << "variables_.size() = " << variables_.size() << std::endl;
51  return false;
52  }
53  return true;
54 }
55 
57  // std::cout << "FL: beginJob" << std::endl;
58 }
59 
61  // std::cout << "FL: filter" << std::endl;
62  // std::cout << "FL: Mins = " << min_ << std::endl;
63 
64  if (!checkInput())
65  return true; // no filtering !
66 
67  bool skip = false;
68 
69  for (unsigned int varc = 0; varc < collections_.size(); ++varc) {
70  // std::cout << "FL: var[" << varc << "] = " << collections_[varc] <<
71  // std::endl; std::cout << "FL: var[0] = " << collections_[0] << std::endl;
72 
73  // if the collection is collection1-collection2:
74  const unsigned int minuspos = collections_[varc].find("-");
75  if (minuspos < collections_[varc].size()) {
76  std::string collection1;
77  collection1.assign(collections_[varc], 0, minuspos);
78  // std::cout << "collection1 = " << collection1 << std::endl;
79  std::string collection2;
80  collection2.assign(collections_[varc], minuspos + 1, collections_[varc].size());
81  // std::cout << "collection2 = " << collection2 << std::endl;
82 
83  const edm::View<reco::Candidate> *var1;
85  bool isVar1 = iEvent.getByLabel(collection1, var1_hnd);
86  if (!isVar1) {
87  std::cout << "Warning : no " << collection1 << " in input !" << std::endl;
88  return false;
89  }
90  var1 = var1_hnd.product();
91  const reco::Candidate *var10 = &(*var1)[0];
92  // std::cout << "FL: var10.pt = " << var10->et() << std::endl;
93  double coll_var1;
94  if (variables_[varc] == "et")
95  coll_var1 = var10->et();
96  else if (variables_[varc] == "phi")
97  coll_var1 = var10->phi();
98  else if (variables_[varc] == "eta")
99  coll_var1 = var10->eta();
100  else {
101  std::cout << "Error: PFFilter: variable unknown: " << variables_[varc] << std::endl;
102  return true;
103  }
104  // std::cout << "FL: coll_var1[" << variables_[varc] << "] = " <<
105  // coll_var1 << std::endl;
106 
107  const edm::View<reco::Candidate> *var2;
109  bool isVar2 = iEvent.getByLabel(collection2, var2_hnd);
110  if (!isVar2) {
111  std::cout << "Warning : no " << collection2 << " in input !" << std::endl;
112  return false;
113  }
114  var2 = var2_hnd.product();
115  const reco::Candidate *var20 = &(*var2)[0];
116  // std::cout << "FL: var20.pt = " << var20->et() << std::endl;
117  double coll_var2;
118  if (variables_[varc] == "et")
119  coll_var2 = var20->et();
120  else if (variables_[varc] == "phi")
121  coll_var2 = var20->phi();
122  else if (variables_[varc] == "eta")
123  coll_var2 = var20->eta();
124  else {
125  std::cout << "Error: PFFilter: variable unknown: " << variables_[varc] << std::endl;
126  return true;
127  }
128  // std::cout << "FL: coll_var2[" << variables_[varc] << "] = " <<
129  // coll_var2 << std::endl; std::cout << "FL: max_[varc] = " << max_[varc]
130  // << std::endl; std::cout << "FL: min_[varc] = " << min_[varc] <<
131  // std::endl;
132 
133  // Delta computation
134  double delta = coll_var1 - coll_var2;
135  if (variables_[varc] == "phi") {
136  if (coll_var1 > M_PI)
137  coll_var1 -= ceil((coll_var1 - M_PI) / (2 * M_PI)) * 2 * M_PI;
138  if (coll_var1 <= -M_PI)
139  coll_var1 += ceil((coll_var1 + M_PI) / (-2. * M_PI)) * 2. * M_PI;
140  if (coll_var2 > M_PI)
141  coll_var2 -= ceil((coll_var2 - M_PI) / (2 * M_PI)) * 2 * M_PI;
142  if (coll_var2 <= -M_PI)
143  coll_var2 += ceil((coll_var2 + M_PI) / (-2. * M_PI)) * 2 * M_PI;
144 
145  double deltaphi = -999.0;
146  if (fabs(coll_var1 - coll_var2) < M_PI) {
147  deltaphi = (coll_var1 - coll_var2);
148  } else {
149  if ((coll_var1 - coll_var2) > 0.0) {
150  deltaphi = (2 * M_PI - fabs(coll_var1 - coll_var2));
151  } else {
152  deltaphi = -(2 * M_PI - fabs(coll_var1 - coll_var2));
153  }
154  }
155  delta = deltaphi;
156  }
157 
158  // cuts
159  if (doMin_[varc] && doMax_[varc] && max_[varc] < min_[varc]) {
160  if (delta > max_[varc] && delta < min_[varc])
161  skip = true;
162  } else {
163  if (doMin_[varc] && delta < min_[varc])
164  skip = true;
165  if (doMax_[varc] && delta > max_[varc])
166  skip = true;
167  }
168  // std::cout << "skip = " << skip << std::endl;
169  } else {
170  // get the variable:
171  const edm::View<reco::Candidate> *var0;
173  bool isVar0 = iEvent.getByLabel(collections_[varc], var0_hnd);
174  if (!isVar0) {
175  std::cout << "Warning : no " << collections_[varc] << " in input !" << std::endl;
176  return false;
177  }
178  var0 = var0_hnd.product();
179  const reco::Candidate *var00 = &(*var0)[0];
180  // std::cout << "FL: var00.pt = " << var00->et() << std::endl;
181  double coll_var;
182  if (variables_[varc] == "et")
183  coll_var = var00->et();
184  else if (variables_[varc] == "phi")
185  coll_var = var00->phi();
186  else if (variables_[varc] == "eta")
187  coll_var = var00->eta();
188  else {
189  std::cout << "Error: PFFilter: variable unknown: " << variables_[varc] << std::endl;
190  return true;
191  }
192  // std::cout << "FL: coll_var[" << variables_[varc] << "] = " << coll_var
193  // << std::endl; std::cout << "FL: max_[varc] = " << max_[varc] <<
194  // std::endl; std::cout << "FL: min_[varc] = " << min_[varc] << std::endl;
195 
196  // cuts
197  if (doMin_[varc] && doMax_[varc] && max_[varc] < min_[varc]) {
198  if (coll_var > max_[varc] && coll_var < min_[varc])
199  skip = true;
200  } else {
201  if (doMin_[varc] && coll_var < min_[varc])
202  skip = true;
203  if (doMax_[varc] && coll_var > max_[varc])
204  skip = true;
205  }
206  // std::cout << "skip = " << skip << std::endl;
207  }
208  }
209  // std::cout << "final skip = " << skip << std::endl;
210  return !skip;
211 }
212 
214  // std::cout << "FL: endJob" << std::endl;
215 }
size
Write out results.
dbl * delta
Definition: mlp_gen.cc:36
T getParameter(std::string const &) const
std::vector< std::string > collections_
Definition: PFFilter.h:22
bool filter(edm::Event &, const edm::EventSetup &) override
Definition: PFFilter.cc:60
std::vector< std::string > variables_
Definition: PFFilter.h:23
std::vector< double > max_
Definition: PFFilter.h:25
std::vector< int > doMin_
Definition: PFFilter.h:26
void beginJob() override
Definition: PFFilter.cc:56
virtual double et() const =0
transverse energy
int iEvent
Definition: GenABIO.cc:224
std::vector< double > min_
Definition: PFFilter.h:24
void endJob() override
Definition: PFFilter.cc:213
bool checkInput()
Definition: PFFilter.cc:22
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:480
#define M_PI
std::vector< int > doMax_
Definition: PFFilter.h:27
virtual double eta() const =0
momentum pseudorapidity
T const * product() const
Definition: Handle.h:74
~PFFilter() override
Definition: PFFilter.cc:20
virtual double phi() const =0
momentum azimuthal angle
PFFilter(const edm::ParameterSet &)
Definition: PFFilter.cc:11