CMS 3D CMS Logo

L1GtEnergySumCondition.cc
Go to the documentation of this file.
1 
15 // this class header
17 
18 // system include files
19 #include <iomanip>
20 #include <iostream>
21 
22 #include <algorithm>
23 #include <string>
24 #include <vector>
25 
26 // user include files
27 // base classes
30 
32 
34 
37 
38 // constructors
39 // default
41  // empty
42 }
43 
44 // from base template condition (from event setup usually)
47  m_gtEnergySumTemplate(static_cast<const L1GtEnergySumTemplate *>(eSumTemplate)),
48  m_gtPSB(ptrPSB)
49 
50 {
51  // maximum number of objects received for the evaluation of the condition
52  // energy sums are global quantities - one object per event
53 
55 }
56 
57 // copy constructor
59  m_gtEnergySumTemplate = cp.gtEnergySumTemplate();
60  m_gtPSB = cp.gtPSB();
61 
62  m_condMaxNumberObjects = cp.condMaxNumberObjects();
63  m_condLastResult = cp.condLastResult();
64  m_combinationsInCond = cp.getCombinationsInCond();
65 
66  m_verbosity = cp.m_verbosity;
67 }
68 
70  copy(cp);
71 }
72 
73 // destructor
75  // empty
76 }
77 
78 // equal operator
80  copy(cp);
81  return *this;
82 }
83 
84 // methods
86  m_gtEnergySumTemplate = eSumTempl;
87 }
88 
91 
92 // try all object permutations and check spatial correlations, if required
94  // number of trigger objects in the condition
95  // in fact, there is only one object
96  int iCondition = 0;
97 
98  // condition result condResult set to true if the energy sum
99  // passes all requirements
100  bool condResult = false;
101 
102  // store the indices of the calorimeter objects
103  // from the combination evaluated in the condition
104  SingleCombInCond objectsInComb;
105 
106  // clear the m_combinationsInCond vector
108 
109  // clear the indices in the combination
110  objectsInComb.clear();
111 
112  // get energy, phi (ETM and HTM) and overflow for the trigger object
113 
114  unsigned int candEt = 0;
115  unsigned int candPhi = 0;
116  bool candOverflow = false;
117 
118  switch ((m_gtEnergySumTemplate->objectType())[0]) {
119  case ETT: {
120  const L1GctEtTotal *cand1 = m_gtPSB->getCandL1ETT();
121 
122  if (cand1 == nullptr) {
123  return false;
124  }
125 
126  candEt = cand1->et();
127  candOverflow = cand1->overFlow();
128 
129  break;
130  }
131  case ETM: {
132  const L1GctEtMiss *cand2 = m_gtPSB->getCandL1ETM();
133 
134  if (cand2 == nullptr) {
135  return false;
136  }
137 
138  candEt = cand2->et();
139  candPhi = cand2->phi();
140  candOverflow = cand2->overFlow();
141 
142  break;
143  }
144  case HTT: {
145  const L1GctEtHad *cand3 = m_gtPSB->getCandL1HTT();
146 
147  if (cand3 == nullptr) {
148  return false;
149  }
150 
151  candEt = cand3->et();
152  candOverflow = cand3->overFlow();
153 
154  break;
155  }
156  case HTM: {
157  const L1GctHtMiss *cand4 = m_gtPSB->getCandL1HTM();
158 
159  if (cand4 == nullptr) {
160  return false;
161  }
162 
163  candEt = cand4->et();
164  candPhi = cand4->phi();
165  candOverflow = cand4->overFlow();
166 
167  break;
168  }
169  default: {
170  // should not arrive here
171  return false;
172 
173  break;
174  }
175  }
176 
178 
179  // check energy threshold and overflow
180  // overflow evaluation:
181  // for condGEq >=
182  // candidate overflow true -> condition true
183  // candidate overflow false -> evaluate threshold
184  // for condGEq =
185  // candidate overflow true -> condition false
186  // candidate overflow false -> evaluate threshold
187  //
188 
189  bool condGEqVal = m_gtEnergySumTemplate->condGEq();
190 
191  if (condGEqVal) {
192  if (!candOverflow) {
193  if (!checkThreshold(objPar.etThreshold, candEt, condGEqVal)) {
194  return false;
195  }
196  }
197  } else {
198  if (candOverflow) {
199  return false;
200  } else {
201  if (!checkThreshold(objPar.etThreshold, candEt, condGEqVal)) {
202  return false;
203  }
204  }
205  }
206 
207  // for ETM and HTM check phi also
208  // for overflow, the phi requirements are ignored
209 
210  if (!candOverflow) {
211  if ((m_gtEnergySumTemplate->objectType())[0] == ETM) {
212  // phi bitmask is saved in two uint64_t (see parser)
213  if (candPhi < 64) {
214  if (!checkBit(objPar.phiRange0Word, candPhi)) {
215  return false;
216  }
217  } else {
218  if (!checkBit(objPar.phiRange1Word, candPhi - 64)) {
219  return false;
220  }
221  }
222 
223  } else if ((m_gtEnergySumTemplate->objectType())[0] == HTM) {
224  // phi bitmask is in the first word for HTM
225  if (candPhi < 64) {
226  if (!checkBit(objPar.phiRange0Word, candPhi)) {
227  return false;
228  }
229  } else {
230  if (!checkBit(objPar.phiRange1Word, candPhi - 64)) {
231  return false;
232  }
233  }
234  }
235  }
236 
237  // index is always zero, as they are global quantities (there is only one
238  // object)
239  int indexObj = 0;
240 
241  objectsInComb.push_back(indexObj);
242  (combinationsInCond()).push_back(objectsInComb);
243 
244  // if we get here all checks were successfull for this combination
245  // set the general result for evaluateCondition to "true"
246 
247  condResult = true;
248  return condResult;
249 }
250 
251 void L1GtEnergySumCondition::print(std::ostream &myCout) const {
252  m_gtEnergySumTemplate->print(myCout);
254 }
unsigned phi() const
get the Et
Definition: L1GctEtMiss.h:62
void setGtEnergySumTemplate(const L1GtEnergySumTemplate *)
const L1GctEtMiss * getCandL1ETM() const
pointer to ETM data list
bool overFlow() const
get the overflow
Definition: L1GctEtMiss.h:59
Definition: L1GtObject.h:38
unsigned et() const
get the magnitude
Definition: L1GctEtMiss.h:56
void print(std::ostream &myCout) const override
print the condition
bool m_condLastResult
the last result of evaluateCondition()
Definition: L1GtObject.h:35
const bool checkBit(const Type1 &mask, const unsigned int bitNumber) const
check if a bit with a given number is set in a mask
CombinationsInCond m_combinationsInCond
store all the object combinations evaluated to true in the condition
const L1GctHtMiss * getCandL1HTM() const
pointer to HTM data list
std::vector< int > SingleCombInCond
typedefs
Persistable copy of missing Et measured at Level-1.
Definition: L1GctEtMiss.h:17
CombinationsInCond & combinationsInCond() const
get all the object combinations (to fill it...)
virtual void print(std::ostream &myCout) const
print condition
void setGtPSB(const L1GlobalTriggerPSB *)
set the pointer to PSB
const bool evaluateCondition() const override
the core function to check if the condition matches
Definition: L1GtObject.h:37
const bool checkThreshold(const Type1 &threshold, const Type2 &value, const bool condGEqValue) const
bool overFlow() const
get the overflow
Definition: L1GctEtTotal.h:46
Persistable copy of total Et measured at Level-1.
Definition: L1GctEtTotal.h:17
const L1GctEtHad * getCandL1HTT() const
pointer to HTT data list
unsigned et() const
get the Et
Definition: L1GctEtTotal.h:43
Persistable copy of total Ht measured at Level-1.
Definition: L1GctEtHad.h:17
L1GtEnergySumCondition & operator=(const L1GtEnergySumCondition &)
const L1GlobalTriggerPSB * m_gtPSB
pointer to PSB, to be able to get the trigger objects
const bool condGEq() const
get / set condition GEq flag
Definition: L1GtCondition.h:72
const L1GtEnergySumTemplate * m_gtEnergySumTemplate
pointer to a L1GtEnergySumTemplate
const std::vector< L1GtObject > & objectType() const
get / set the trigger object type(s) in the condition
Definition: L1GtCondition.h:67
unsigned et() const
get the Et
Definition: L1GctEtHad.h:43
const L1GctEtTotal * getCandL1ETT() const
pointer to ETT data list
Persistable copy of missing Et measured at Level-1.
Definition: L1GctHtMiss.h:16
deadvectors [0] push_back({0.0175431, 0.538005, 6.80997, 13.29})
Definition: L1GtObject.h:36
unsigned phi() const
get the Et
Definition: L1GctHtMiss.h:65
bool overFlow() const
get the overflow
Definition: L1GctEtHad.h:46
const std::vector< ObjectParameter > * objectParameter() const
void clear(EGIsoObj &c)
Definition: egamma.h:82
unsigned et() const
get the magnitude
Definition: L1GctHtMiss.h:59
void print(std::ostream &myCout) const override
print condition
typedef for a single object template
bool overFlow() const
get the overflow
Definition: L1GctHtMiss.h:62
void copy(const L1GtEnergySumCondition &cp)
copy function for copy constructor and operator=