ATLAS Offline Software
L1CPCMXTools.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <map>
6 #include <memory>
7 #include <numeric>
8 #include <utility> // Temporary
9 
13 #include "TrigConfL1Data/Menu.h"
18 #include "L1CPCMXTools.h"
25 
26 namespace LVL1 {
27 
30 L1CPCMXTools::L1CPCMXTools(const std::string &type, const std::string &name,
31  const IInterface *parent)
33  m_crates(4),
34  m_modules(14), m_maxTobs(5), m_sysCrate(3), m_debug(false) {
35  declareInterface<IL1CPCMXTools>(this);
36 
37 }
38 
43 
44  return StatusCode::SUCCESS;
45 }
46 
49 std::pair<uint32_t, uint32_t> L1CPCMXTools::roiWord(const EmTauROI *roi) const {
50  const uint32_t oldRoi = roi->roiWord();
52  const int crate = decoder.crate(oldRoi);
53  const int module = decoder.module(oldRoi);
54  const int chip = decoder.chip(oldRoi);
55  const int coord = decoder.localcoord(oldRoi);
56  bool em = false;
57  bool tau = false;
58  for (unsigned int thresh = 1; thresh <= TrigT1CaloDefs::numOfCPThresholds;
59  ++thresh) {
60  if (roi->thresholdPassed(thresh)) {
62  em = true;
63  else
64  tau = true;
65  }
66  }
67  uint32_t emRoi = 0;
68  uint32_t tauRoi = 0;
69  if (em) {
70  int isolation =
72  roi->hadRingIsolationEnergy(), roi->hadCoreEnergy());
73  const CPMTobRoI newRoi(crate, module, chip, coord, 0, roi->clusterEnergy(),
74  isolation);
75  emRoi = newRoi.roiWord();
76  }
77  if (tau) {
78  int isolation =
80  roi->hadRingIsolationEnergy());
81  const CPMTobRoI newRoi(crate, module, chip, coord, 1,
82  roi->tauClusterEnergy(), isolation);
83  tauRoi = newRoi.roiWord();
84  }
85  return std::make_pair(emRoi, tauRoi);
86 }
87 
88 int L1CPCMXTools::isolationEm(unsigned int /*clusterEnergy*/,
89  unsigned int /*emIsol*/, unsigned int /*hadIsol*/,
90  unsigned int hadVeto) const {
91  int isol = 0;
92  if (hadVeto > 1)
93  isol = 1;
94  return isol;
95 }
96 
97 int L1CPCMXTools::isolationTau(unsigned int /*clusterEnergy*/,
98  unsigned int emIsol,
99  unsigned int /*hadIsol*/) const {
100  int isol = 0;
101  if (emIsol > 4)
102  isol = 1;
103  return isol;
104 }
105 
106 void L1CPCMXTools::unpackEmIsol(int /*energy*/, int isol, unsigned int &emIsol,
107  unsigned int &hadIsol,
108  unsigned int &hadVeto) const {
109  emIsol = 0;
110  hadIsol = 0;
111  hadVeto = (isol == 1) ? 2 : 0;
112 }
113 
114 void L1CPCMXTools::unpackTauIsol(int /*energy*/, int isol, unsigned int &emIsol,
115  unsigned int &hadIsol) const {
116  emIsol = (isol == 1) ? 5 : 0;
117  hadIsol = 0;
118 }
119 
123  xAOD::CMXCPTobContainer *cmxTobVec) const {
124  std::vector<const xAOD::CPMTobRoIContainer *> cpmRoiColls(1, cpmRoiVec);
125  formCMXCPTob(cpmRoiColls, cmxTobVec, 0);
126 }
127 
131  const std::vector<const xAOD::CPMTobRoIContainer *> &cpmRoiColls,
132  xAOD::CMXCPTobContainer *cmxTobVec, uint8_t peak) const {
133  std::map<uint32_t, const xAOD::CPMTobRoI *> cpmRoiMap;
134  std::map<int, xAOD::CMXCPTob *> cmxTobMap;
136  int timeslices = cpmRoiColls.size();
137  for (int slice = 0; slice < timeslices; ++slice) {
138  const xAOD::CPMTobRoIContainer *cpmRoiVec = cpmRoiColls[slice];
139  cpmRoiMap.clear();
140  std::vector<unsigned int> presenceMaps(2 * m_crates * m_modules);
141  std::vector<int> tobCount(2 * m_crates * m_modules);
144  for (; it != itE; ++it) { // get sorted list
145  const xAOD::CPMTobRoI *roi = *it;
146  const int type = roi->type();
147  const int crate = roi->crate();
148  const int cpm = roi->cpm();
149  const int index = ((type * m_crates) + crate) * m_modules + cpm - 1;
150  const int presenceBit =
151  (roi->chip() << 1) |
152  ((roi->location() >> 2) &
153  0x1); // <<== CHECK THIS SHIFT LOOKS OK @@vkousk
154  presenceMaps[index] |= (1 << presenceBit);
155  tobCount[index]++;
156  uint32_t key = roi->roiWord();
157  cpmRoiMap.insert(std::make_pair(key, roi));
158  }
159  std::map<uint32_t, const xAOD::CPMTobRoI *>::const_iterator mit =
160  cpmRoiMap.begin();
161  std::map<uint32_t, const xAOD::CPMTobRoI *>::const_iterator mitE =
162  cpmRoiMap.end();
163  for (; mit != mitE; ++mit) {
164  const xAOD::CPMTobRoI *roi = mit->second;
165  const int type = roi->type();
166  const int crate = roi->crate();
167  const int cmx = 1 - type; // <<== CHECK
168  const int cpm = roi->cpm();
169  const int chip = (roi->chip() << 1) | ((roi->location() >> 2) & 0x1);
170  const int loc = roi->location() & 0x3;
171  const int index = ((type * m_crates) + crate) * m_modules + cpm - 1;
172  const int energy = roi->energy();
173  const int isolation = roi->isolation();
174  const unsigned int presence = presenceMaps[index];
175  int error = 0;
176  if (tobCount[index] > m_maxTobs) { // overflow
177  int count = 0;
178  for (int bit = 0; bit <= chip; ++bit)
179  count += (presence >> bit) & 0x1;
180  if (count > m_maxTobs)
181  continue;
184  error = err.error();
185  }
186  const int key =
187  (((((((crate << 1) | cmx) << 4) | cpm) << 4) | chip) << 2) | loc;
188  xAOD::CMXCPTob *tob = 0;
189  std::map<int, xAOD::CMXCPTob *>::iterator xit = cmxTobMap.find(key);
190  if (xit == cmxTobMap.end()) {
191  tob = new xAOD::CMXCPTob();
192  tob->makePrivateStore(); // make temp store
193  tob->initialize(crate, cmx, cpm, chip, loc);
194  std::vector<uint8_t> vecI(timeslices);
195  std::vector<uint32_t> vecU32(timeslices);
196  std::vector<uint16_t> vecU(timeslices);
197  tob->addTob(vecI, vecI, vecU32, vecU);
198  tob->setPeak(peak);
199  cmxTobMap.insert(std::make_pair(key, tob));
200  cmxTobVec->push_back(tob);
201  } else
202  tob = xit->second;
203  std::vector<uint8_t> energyVec(tob->energyVec());
204  std::vector<uint8_t> isolationVec(tob->isolationVec());
205  std::vector<uint32_t> errorVec(tob->errorVec());
206  std::vector<uint16_t> presenceMapVec(tob->presenceMapVec());
207  energyVec[slice] = energy;
208  isolationVec[slice] = isolation;
209  errorVec[slice] = error;
210  presenceMapVec[slice] = presence;
211  tob->addTob(energyVec, isolationVec, errorVec, presenceMapVec);
212  }
213  }
214 }
215 
219  const xAOD::CMXCPTobContainer *cmxTobVec,
220  xAOD::CMXCPHitsContainer *cmxHitsVec) const {
223  // @@vkousk
224  // temporarily comment out cmxHitsTopo, see Jira ticket: ATLLONECAL-13
225  // xAOD::CMXCPHitsContainer* cmxHitsTopo = new xAOD::CMXCPHitsContainer;
226  formCMXCPHitsCrate(l1menu, cmxTobVec, cmxHitsCrate);
227  formCMXCPHitsSystem(cmxHitsCrate, cmxHitsSys);
228  // formCMXCPHitsTopo(cmxTobVec, cmxHitsTopo);
229  mergeCMXCPHits(cmxHitsVec, cmxHitsCrate);
230  mergeCMXCPHits(cmxHitsVec, cmxHitsSys);
231  // mergeCMXCPHits(cmxHitsVec, cmxHitsTopo);
232  delete cmxHitsCrate;
233  delete cmxHitsSys;
234  // delete cmxHitsTopo;
235 }
236 
240  const TrigConf::L1Menu* l1menu,
241  const xAOD::CMXCPTobContainer *cmxTobVec,
242  xAOD::CMXCPHitsContainer *cmxHitsCrate) const {
243  uint8_t peakm = 0;
244  std::vector<HitsVector> hitVec(4 * m_crates);
245  std::vector<ErrorVector> errVec(4 *
246  m_crates); // Need overflow for neutral format
247  HitsVector hit0;
248  HitsVector hit1;
251  xAOD::CMXCPTobContainer::const_iterator pose = cmxTobVec->end();
252  for (; pos != pose; ++pos) {
253  const xAOD::CMXCPTob *tob = *pos;
254  uint8_t crate = tob->crate();
255  uint8_t cmx = tob->cmx();
256  const int index = (crate * 2 + cmx) * 2;
257  const std::vector<uint32_t> &error(tob->errorVec());
258  hit0.clear();
259  hit1.clear();
260  getHits(l1menu, tob, hit0, hit1);
261 
262  addCMXCPHits(hitVec[index], hit0);
263  addCMXCPHits(hitVec[index + 1], hit1);
264  addOverflow(errVec[index], error);
265  addOverflow(errVec[index + 1], error);
266  uint8_t peak = tob->peak();
267  if (peak > peakm)
268  peakm = peak;
269  }
270  // Save non-zero crate totals
271  for (uint8_t crate = 0; crate < m_crates; ++crate) {
272  for (uint8_t cmx = 0; cmx < 2; ++cmx) {
273  const int index = (crate * 2 + cmx) * 2;
274  saveCMXCPHits(cmxHitsCrate, hitVec[index], hitVec[index + 1],
275  errVec[index], errVec[index + 1], crate, cmx,
276  xAOD::CMXCPHits::LOCAL, peakm);
277  if (crate != m_sysCrate) { // REMOTE totals
278  uint8_t source = crate;
279  saveCMXCPHits(cmxHitsCrate, hitVec[index], hitVec[index + 1],
280  errVec[index], errVec[index + 1], m_sysCrate, cmx, source,
281  peakm);
282  }
283  }
284  }
285 }
286 
288  HitsVector &hit1) const {
289  using namespace TrigConf;
290  const std::vector<uint8_t> &energy(tob->energyVec());
291  const std::vector<uint8_t> &isolation(tob->isolationVec());
292 
293  int cmx = tob->cmx();
294  int crate = tob->crate();
295  int cpm = tob->cpm();
296  int chip = (tob->chip() >> 1) & 0x7;
297  int loc = tob->location() | ((tob->chip() & 1) << 2);
298  auto err = LVL1::DataError(tob->error());
299 
300  const int type = 1 - cmx;
301  const int timeslices = energy.size();
302  hit0.resize(timeslices);
303  hit1.resize(timeslices);
304 
305  // Get thresholds from menu
306  L1DataDef def;
307  const std::string thrType = (type == 0) ? def.emType() : def.tauType();
308 
309  // Get EM and TAU trigger thresholds
310  std::vector<std::shared_ptr<TrigConf::L1Threshold>> allThresholds = l1menu->thresholds();
311  std::vector<std::shared_ptr<TrigConf::L1Threshold>> thresholds;
312  thresholds.reserve(16);
313 
314  for ( const auto& thresh : allThresholds ) {
315  if (thresh->type() == thrType) {
316  thresholds.push_back(thresh);
317  }
318  }
319 
320  if (thresholds.size() > 16) {
321  ATH_MSG_ERROR("Wrong number of thresholds " << thresholds.size());
322  return;
323  }
324 
325  for (int slice = 0; slice < timeslices; ++slice) {
326  if (energy[slice] == 0)
327  continue;
328 
329  if (err.get(LVL1::DataError::Overflow)) {
330  hit0[slice] = 0xffffff;
331  hit1[slice] = 0xffffff;
332  continue;
333  }
334  /* Form an RoI word from the information present
335  Simplest way without duplication is to create a CPMTobRoI */
336  int et = energy[slice];
337  int isol = isolation[slice];
338  std::unique_ptr<LVL1::CPMTobRoI> roi(
339  new CPMTobRoI(crate, cpm, chip, loc, type, et, isol));
340 
341  /* Now get the hit information using RecEmTauroI */
342  RecEmTauRoI recRoI(roi->roiWord(), &(*l1menu));
343  auto mask = recRoI.thresholdPattern();
344  for (const auto& threshold : thresholds) {
345  auto numThresh = threshold->mapping();
346  if (!recRoI.isValidThreshold(numThresh) ||
347  (((1 << numThresh) & mask) == 0)) {
348  continue;
349  }
350  if (numThresh < 8) {
351  hit0[slice] |= (1 << (numThresh * 3));
352  } else {
353  hit1[slice] |= (1 << ((numThresh - 8) * 3));
354  }
355  }
356  }
357 }
358 
360  const ErrorVector &tobErr) const {
361  const int timeslices = tobErr.size();
362  hitErr.resize(timeslices);
363  for (int slice = 0; slice < timeslices; ++slice) {
364  int error = tobErr[slice];
365  if (error) {
367  int overflow = err.get(LVL1::DataError::Overflow);
368  LVL1::DataError err2;
369  err2.set(LVL1::DataError::Overflow, overflow);
370  hitErr[slice] |= err2.error();
371  }
372  }
373 }
374 
378  const xAOD::CMXCPHitsContainer *cmxHitsCrate,
379  xAOD::CMXCPHitsContainer *cmxHitsSys) const {
380  uint8_t peakm = 0;
381  std::vector<HitsVector> systemHit0(2);
382  std::vector<HitsVector> systemHit1(2);
383  std::vector<ErrorVector> systemErr0(2);
384  std::vector<ErrorVector> systemErr1(2);
386  DataVector<xAOD::CMXCPHits>::const_iterator pose = cmxHitsCrate->end();
387  for (; pos != pose; ++pos) {
388  const xAOD::CMXCPHits *hits = *pos;
389  if (hits->crate() != m_sysCrate)
390  continue;
391  uint8_t source = hits->sourceComponent();
392  if (source != xAOD::CMXCPHits::LOCAL &&
393  source != xAOD::CMXCPHits::REMOTE_0 &&
394  source != xAOD::CMXCPHits::REMOTE_1 &&
395  source != xAOD::CMXCPHits::REMOTE_2)
396  continue;
397  const uint8_t peak = hits->peak();
398  if (peak > peakm)
399  peakm = peak;
400  HitsVector hits0(hits->hitsVec0());
401  HitsVector hits1(hits->hitsVec1());
402  ErrorVector err0(hits->errorVec0());
403  ErrorVector err1(hits->errorVec1());
404  uint8_t cmx = hits->cmx();
405  addCMXCPHits(systemHit0[cmx], hits0);
406  addCMXCPHits(systemHit1[cmx], hits1);
407  addOverflow(systemErr0[cmx], err0);
408  addOverflow(systemErr1[cmx], err1);
409  }
410  // Save non-zero system totals
411  for (uint8_t cmx = 0; cmx < 2; ++cmx) {
412  saveCMXCPHits(cmxHitsSys, systemHit0[cmx], systemHit1[cmx], systemErr0[cmx],
413  systemErr1[cmx], m_sysCrate, cmx, xAOD::CMXCPHits::TOTAL,
414  peakm);
415  }
416 }
417  // Temporary for
419  // testing
420 
422  const xAOD::CMXCPTobContainer *cmxTobVec,
423  xAOD::CMXCPHitsContainer *cmxHitsTopo) const {
424  uint8_t peakm = 0;
425  int timeslices = 0;
426  std::vector<HitsVector> hitVec(8 * m_crates);
428  xAOD::CMXCPTobContainer::const_iterator pose = cmxTobVec->end();
429  for (; pos != pose; ++pos) {
430  const xAOD::CMXCPTob *tob = *pos;
431  uint8_t crate = tob->crate();
432  uint8_t cmx = tob->cmx();
433  const uint8_t cpm = tob->cpm();
434  const uint8_t chip = tob->chip() >> 1;
435  const uint8_t loc = ((tob->chip() & 0x1) << 2) | tob->location();
436  const int index = (crate * 2 + cmx) * 4;
437  const std::vector<uint8_t> &energy(tob->energyVec());
438  const std::vector<uint8_t> &isolation(tob->isolationVec());
439  const std::vector<uint32_t> &error(tob->errorVec());
440  timeslices = energy.size();
441  HitsVector &checksum(hitVec[index]);
442  HitsVector &map(hitVec[index + 1]);
443  HitsVector &countsLow(hitVec[index + 2]);
444  HitsVector &countsHigh(hitVec[index + 3]);
445  checksum.resize(timeslices);
446  map.resize(timeslices);
447  countsLow.resize(timeslices);
448  countsHigh.resize(timeslices);
449  for (int slice = 0; slice < timeslices; ++slice) {
450  if (energy[slice] == 0)
451  continue;
452  // checksum
454  int overflow = err.get(LVL1::DataError::Overflow);
455  checksum[slice] +=
456  cpm + chip + loc + energy[slice] + isolation[slice] + overflow;
457  checksum[slice] &= 0xff;
458  // occupancy map
459  map[slice] |= (1 << (cpm - 1));
460  // occupancy counts
461  if (cpm <= 7) {
462  countsLow[slice] += (1 << (3 * (cpm - 1))); // can't saturate
463  } else {
464  countsHigh[slice] += (1 << (3 * (cpm - 8)));
465  }
466  }
467  uint8_t peak = tob->peak();
468  if (peak > peakm)
469  peakm = peak;
470  }
471  // Save non-zero crate totals
472  HitsVector dummy(timeslices);
473  std::vector<uint32_t> dummyE(timeslices);
474  for (uint8_t crate = 0; crate < m_crates; ++crate) {
475  for (uint8_t cmx = 0; cmx < 2; ++cmx) {
476  const int index = (crate * 2 + cmx) * 4;
477  saveCMXCPHits(cmxHitsTopo, hitVec[index], dummy, dummyE, dummyE, crate,
478  cmx, xAOD::CMXCPHits::TOPO_CHECKSUM, peakm);
479  saveCMXCPHits(cmxHitsTopo, hitVec[index + 1], dummy, dummyE, dummyE,
480  crate, cmx, xAOD::CMXCPHits::TOPO_OCCUPANCY_MAP, peakm);
481  saveCMXCPHits(cmxHitsTopo, hitVec[index + 2], hitVec[index + 3], dummyE,
482  dummyE, crate, cmx, xAOD::CMXCPHits::TOPO_OCCUPANCY_COUNTS,
483  peakm);
484  }
485  }
486 }
487 
491  const HitsVector &vec2) const {
492  int size1 = vec1.size();
493  int size2 = vec2.size();
494  if (size1 < size2)
495  vec1.resize(size2);
496  HitsVector::iterator pos1 = vec1.begin();
497  HitsVector::iterator pose1 = vec1.end();
498  HitsVector::const_iterator pos2 = vec2.begin();
499  HitsVector::const_iterator pose2 = vec2.end();
500  for (; pos1 != pose1 && pos2 != pose2; ++pos1, ++pos2) {
501  *pos1 = addHits(*pos1, *pos2, 24, 24);
502  }
503 }
504 
507 unsigned int L1CPCMXTools::addHits(unsigned int hitMult, unsigned int hitVec,
508  int multBits, int vecBits) const {
509  if (m_debug)
510  msg() << MSG::DEBUG << "addHits: Original hitMult = " << std::hex << hitMult
511  << ". Add hitWord = " << hitVec << std::dec << endmsg;
512 
513  // Results transmitted in 2 words, each reporting half of the CP thresholds
514  int nthresh = TrigT1CaloDefs::numOfCPThresholds / 2;
515 
516  int nbitsOut = multBits / nthresh;
517  int nbitsIn = vecBits / nthresh;
518 
519  if (m_debug)
520  msg() << MSG::DEBUG << " Bits per threshold = " << nbitsOut << endmsg;
521 
522  int max = (1 << nbitsOut) - 1;
523  unsigned int multMask = max;
524  unsigned int hitMask = (1 << nbitsIn) - 1;
525  unsigned int shift = 0;
526 
527  unsigned int hits = 0;
528 
529  for (int i = 0; i < nthresh; i++) {
530  int mult = (hitMult & multMask) + (hitVec & hitMask);
531  mult = ((mult <= max) ? mult : max);
532  hits += (mult << shift);
533 
534  hitMult >>= nbitsOut;
535  hitVec >>= nbitsIn;
536  shift += nbitsOut;
537  }
538 
539  if (m_debug)
540  msg() << MSG::DEBUG << "addHits returning hitMult = " << std::hex << hits
541  << std::dec << endmsg;
542 
543  return hits;
544 }
545 
549  xAOD::CMXCPHitsContainer *cmxHitsVec2) const {
550  int size = cmxHitsVec2->size();
551  for (int index = 0; index < size; ++index) {
552  xAOD::CMXCPHits *hitsIn = 0;
553  xAOD::CMXCPHits *hitsOut = 0;
554  cmxHitsVec2->swapElement(index, hitsIn, hitsOut);
555  cmxHitsVec1->push_back(hitsOut);
556  }
557  cmxHitsVec2->clear();
558 }
559 
563  xAOD::CMXCPHitsContainer *cmxHitsVec, const HitsVector &hits0,
564  const HitsVector &hits1, const ErrorVector &err0, const ErrorVector &err1,
565  uint8_t crate, uint8_t cmx, uint8_t source, uint8_t peak) const {
566  if (std::accumulate(hits0.begin(), hits0.end(), 0) ||
567  std::accumulate(hits1.begin(), hits1.end(), 0)) {
568  xAOD::CMXCPHits *cmxCpHits = new xAOD::CMXCPHits();
569  cmxCpHits->makePrivateStore();
570  cmxCpHits->initialize(crate, cmx, source, hits0, hits1, err0, err1, peak);
571  cmxHitsVec->push_back(cmxCpHits);
572  }
573 }
574 
575 } // end of namespace
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
xAOD::CPMTobRoI_v1::isolation
int isolation() const
Return isolation.
Definition: CPMTobRoI_v1.cxx:74
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
CTPConfig.h
RecEmTauRoI.h
D3PDMakerTestInstan::vec2
std::vector< D3PDTest::MyVec2 > vec2
Definition: D3PDMakerTestDict.h:14
et
Extra patterns decribing particle interation process.
xAOD::hadIsol
setThrPattern hadIsol
Definition: EmTauRoI_v2.cxx:68
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
xAOD::CMXCPTob_v1::crate
uint8_t crate() const
get crate
LVL1::DataError
Error data.
Definition: DataError.h:27
xAOD::CMXCPHits_v1::REMOTE_2
@ REMOTE_2
Definition: CMXCPHits_v1.h:29
max
#define max(a, b)
Definition: cfImp.cxx:41
xAOD::CMXCPTob_v1::addTob
void addTob(const std::vector< uint8_t > &energyVec, const std::vector< uint8_t > &isolationVec, const std::vector< uint32_t > &errorVec, const std::vector< uint16_t > &presenceMapVec)
add data to existing object
Definition: CMXCPTob_v1.cxx:53
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
python.LArCondContChannels.decoder
decoder
def channelSelection(self, channelList, groupType): if groupType == self.SingleGroup: pass elif group...
Definition: LArCondContChannels.py:618
physval_make_web_display.thresh
thresh
Definition: physval_make_web_display.py:35
LVL1::EmTauROI
This class defines the em/tau hadron ROI which are generated by the LVL1 Calo Trigger.
Definition: EmTauROI.h:40
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
LVL1::L1CPCMXTools::L1CPCMXTools
L1CPCMXTools(const std::string &type, const std::string &name, const IInterface *parent)
Constructor.
Definition: L1CPCMXTools.cxx:30
index
Definition: index.py:1
LVL1::EmTauROI::hadCoreEnergy
unsigned int hadCoreEnergy() const
return energy
Definition: EmTauROI.h:92
LVL1::L1CPCMXTools::m_debug
bool m_debug
Debug printout flag.
Definition: L1CPCMXTools.h:111
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
CPRoIDecoder.h
LVL1::L1CPCMXTools::unpackEmIsol
void unpackEmIsol(int energy, int isol, unsigned int &emIsol, unsigned int &hadIsol, unsigned int &hadVeto) const
Definition: L1CPCMXTools.cxx:106
skel.it
it
Definition: skel.GENtoEVGEN.py:423
xAOD::CMXCPTob
CMXCPTob_v1 CMXCPTob
Define the latest version of the CMXCPTob class.
Definition: Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/CMXCPTob.h:17
ClusterProcessorModuleKey.h
LVL1::L1CPCMXTools::ErrorVector
std::vector< uint32_t > ErrorVector
Definition: L1CPCMXTools.h:68
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
Menu.h
xAOD::CPMTobRoI_v1::crate
int crate() const
Return crate number (0-1)
Definition: CPMTobRoI_v1.cxx:38
xAOD::CMXCPTob_v1
Description of CMXCPTob_v1.
Definition: CMXCPTob_v1.h:27
TrigConf::L1Menu
L1 menu configuration.
Definition: L1Menu.h:28
L1CPCMXTools.h
LVL1::L1CPCMXTools::formCMXCPHits
virtual void formCMXCPHits(const TrigConf::L1Menu *l1menu, const xAOD::CMXCPTobContainer *cmxTobVec, xAOD::CMXCPHitsContainer *cmxHitsVec) const
form complete CMX-CP hits from CMX-CP TOBs
Definition: L1CPCMXTools.cxx:218
xAOD::CMXCPTob_v1::setPeak
void setPeak(uint8_t)
set peak
LVL1::TrigT1CaloDefs::EMAlg
@ EMAlg
Definition: TrigT1CaloDefs.h:208
LVL1::L1CPCMXTools::formCMXCPHitsTopo
virtual void formCMXCPHitsTopo(const xAOD::CMXCPTobContainer *cmxTobVec, xAOD::CMXCPHitsContainer *cmxHitsTopo) const
form partial CMX-CP hits (topo) from CMX-CP TOBs
Definition: L1CPCMXTools.cxx:421
DataVector::swapElement
void swapElement(size_type index, value_type newElem, reference oldElem)
Swap one element out of the container.
LVL1
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition: ICMMCPHitsCnvTool.h:18
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
LVL1::CPMTobRoI::roiWord
uint32_t roiWord() const
Return packed RoI word.
Definition: Trigger/TrigT1/TrigT1CaloEvent/TrigT1CaloEvent/CPMTobRoI.h:112
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
LVL1::L1CPCMXTools::addCMXCPHits
void addCMXCPHits(HitsVector &vec1, const HitsVector &vec2) const
Add hits from second vector to first.
Definition: L1CPCMXTools.cxx:490
TruthTest.itE
itE
Definition: TruthTest.py:25
xAOD::CMXCPHits_v1::TOPO_OCCUPANCY_MAP
@ TOPO_OCCUPANCY_MAP
Definition: CMXCPHits_v1.h:30
xAOD::CMXCPHits
CMXCPHits_v1 CMXCPHits
Define the latest version of the CMMCPHits class.
Definition: Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/CMXCPHits.h:17
LVL1::EmTauROI::clusterEnergy
unsigned int clusterEnergy() const
return energy
Definition: EmTauROI.h:94
TrigConf
Forward iterator to traverse the main components of the trigger configuration.
Definition: Config.h:22
LVL1::L1CPCMXTools::m_crates
int m_crates
Number of CP crates.
Definition: L1CPCMXTools.h:103
xAOD::CMXCPTob_v1::errorVec
const std::vector< uint32_t > & errorVec() const
get errorVec
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
python.PyAthena.module
module
Definition: PyAthena.py:134
LVL1::L1CPCMXTools::mergeCMXCPHits
void mergeCMXCPHits(xAOD::CMXCPHitsContainer *cmxHitsVec1, xAOD::CMXCPHitsContainer *cmxHitsVec2) const
Merge CMX-CP hits vectors.
Definition: L1CPCMXTools.cxx:548
LVL1::RecEmTauRoI::isValidThreshold
bool isValidThreshold(unsigned int thresh) const
returns true if thresh is a valid threshold number
Definition: RecEmTauRoI.cxx:495
xAOD::CMXCPHits_v1::initialize
virtual void initialize(const uint8_t crate, const uint8_t cmx, const uint8_t source)
initialize
Definition: CMXCPHits_v1.cxx:21
TrigConf::L1DataDef
Definition: L1DataDef.h:27
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
LVL1::DataError::Overflow
@ Overflow
Definition: DataError.h:31
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:193
perfmonmt-refit.slice
slice
Definition: perfmonmt-refit.py:52
LVL1::L1CPCMXTools::addHits
unsigned int addHits(unsigned int hitMult, unsigned int hitVec, int multBits, int vecBits) const
Increment CPM/CMX hit word.
Definition: L1CPCMXTools.cxx:507
xAOD::CPMTobRoI_v1::cpm
int cpm() const
Return CPM number (1-14)
Definition: CPMTobRoI_v1.cxx:44
lumiFormat.i
int i
Definition: lumiFormat.py:92
LVL1::L1CPCMXTools::getHits
void getHits(const TrigConf::L1Menu *l1menu, const xAOD::CMXCPTob *tob, HitsVector &hits0, HitsVector &hits1) const
Definition: L1CPCMXTools.cxx:287
xAOD::CMXCPHits_v1::TOTAL
@ TOTAL
Definition: CMXCPHits_v1.h:29
LVL1::L1CPCMXTools::initialize
virtual StatusCode initialize()
standard Athena-Algorithm method
Definition: L1CPCMXTools.cxx:41
xAOD::CMXCPTob_v1::initialize
virtual void initialize(const uint8_t crate, const uint8_t cmx, const uint8_t cpm, const uint8_t chip, const uint8_t loc)
initialize
Definition: CMXCPTob_v1.cxx:21
LVL1::L1CPCMXTools::unpackTauIsol
void unpackTauIsol(int energy, int isol, unsigned int &emIsol, unsigned int &hadIsol) const
Definition: L1CPCMXTools.cxx:114
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAOD::CMXCPTob_v1::error
uint32_t error() const
get errorVec at peak bunch crossing
Definition: CMXCPTob_v1.cxx:92
LVL1::EmTauROI::thresholdType
TrigT1CaloDefs::ClusterAlgorithm thresholdType(int thresh) const
returns type of thresholds number threshold_number Thresholds numbered from 1 to TrigT1CaloDefs::numO...
Definition: EmTauROI.cxx:59
LVL1::DataError::set
void set(ErrorBit bit, int value=1)
Set an error bit or data.
Definition: DataError.cxx:28
LArG4ShowerLibProcessing.hits
hits
Definition: LArG4ShowerLibProcessing.py:136
test_pyathena.parent
parent
Definition: test_pyathena.py:15
LVL1::EmTauROI::tauClusterEnergy
unsigned int tauClusterEnergy() const
Definition: EmTauROI.h:95
LVL1::L1CPCMXTools::addOverflow
void addOverflow(ErrorVector &hitErr, const ErrorVector &tobErr) const
Definition: L1CPCMXTools.cxx:359
python.xAODType.dummy
dummy
Definition: xAODType.py:4
LVL1::RecEmTauRoI
This class defines the reconstructed em/tau hadron ROI.
Definition: RecEmTauRoI.h:44
xAOD::CPMTobRoI_v1::type
int type() const
Return type em/tau (0/1)
Definition: CPMTobRoI_v1.cxx:62
xAOD::CMXCPTob_v1::isolationVec
const std::vector< uint8_t > & isolationVec() const
get isolationVec
xAOD::CPMTobRoI_v1::roiWord
uint32_t roiWord() const
get roiWord
TriggerThreshold.h
CPMTobRoI.h
xAOD::CMXCPTob_v1::presenceMapVec
const std::vector< uint16_t > & presenceMapVec() const
get presenceMapVec
TriggerThresholdValue.h
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
DataVector::clear
void clear()
Erase all the elements in the collection.
LVL1::L1CPCMXTools::isolationEm
int isolationEm(unsigned int clusterEnergy, unsigned int emIsol, unsigned int hadIsol, unsigned int hadVeto) const
Definition: L1CPCMXTools.cxx:88
DataError.h
TrigConf::name
Definition: HLTChainList.h:35
LVL1::L1CPCMXTools::formCMXCPHitsCrate
virtual void formCMXCPHitsCrate(const TrigConf::L1Menu *l1menu, const xAOD::CMXCPTobContainer *cmxTobVec, xAOD::CMXCPHitsContainer *cmxHitsCrate) const
form partial CMX-CP hits (crate) from CMX-CP TOBs
Definition: L1CPCMXTools.cxx:239
LVL1::DataError::error
int error() const
Return the full error word.
Definition: DataError.h:78
LVL1::EmTauROI::hadRingIsolationEnergy
unsigned int hadRingIsolationEnergy() const
return energy
Definition: EmTauROI.h:90
xAOD::CMXCPHits_v1::LOCAL
@ LOCAL
Definition: CMXCPHits_v1.h:29
EmTauROI.h
LVL1::L1CPCMXTools::m_sysCrate
int m_sysCrate
System crate.
Definition: L1CPCMXTools.h:109
xAOD::CMXCPHitsContainer
CMXCPHitsContainer_v1 CMXCPHitsContainer
Define the latest version of the CMXCPHits class.
Definition: CMXCPHitsContainer.h:18
LVL1::CPMTobRoI
CPM RoI data.
Definition: Trigger/TrigT1/TrigT1CaloEvent/TrigT1CaloEvent/CPMTobRoI.h:19
xAOD::CMXCPTob_v1::cmx
uint8_t cmx() const
get cmx
threshold
Definition: chainparser.cxx:74
LVL1::L1CPCMXTools::formCMXCPTob
virtual void formCMXCPTob(const xAOD::CPMTobRoIContainer *cpmRoiVec, xAOD::CMXCPTobContainer *cmxTobVec) const
form CMX-CP TOBs from RoIs - single slice
Definition: L1CPCMXTools.cxx:122
LVL1::L1CPCMXTools::saveCMXCPHits
void saveCMXCPHits(xAOD::CMXCPHitsContainer *cmxHitsVec, const HitsVector &hits0, const HitsVector &hits1, const ErrorVector &err0, const ErrorVector &err1, uint8_t crate, uint8_t cmx, uint8_t source, uint8_t peak) const
Save non-zero CMX-CP hits.
Definition: L1CPCMXTools.cxx:562
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:172
xAOD::CMXCPHits_v1::REMOTE_0
@ REMOTE_0
Definition: CMXCPHits_v1.h:29
TrigT1CaloDefs.h
xAOD::CMXCPHits_v1::REMOTE_1
@ REMOTE_1
Definition: CMXCPHits_v1.h:29
JetVoronoiDiagramHelpers::coord
double coord
Definition: JetVoronoiDiagramHelpers.h:45
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
xAOD::CMXCPHits_v1::TOPO_OCCUPANCY_COUNTS
@ TOPO_OCCUPANCY_COUNTS
Definition: CMXCPHits_v1.h:30
L1DataDef.h
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
LVL1::CPRoIDecoder
A level 1 calorimeter trigger conversion service: returns the Coordinate represented by a RoI word.
Definition: CPRoIDecoder.h:37
LVL1::L1CPCMXTools::roiWord
std::pair< uint32_t, uint32_t > roiWord(const EmTauROI *roi) const
Temporary for testing until CPAlgorithm and EmTauROI are updated.
Definition: L1CPCMXTools.cxx:49
DeMoScan.index
string index
Definition: DeMoScan.py:362
CoordinateRange.h
ClusterThresholdValue.h
LVL1::TrigT1CaloDefs::numOfCPThresholds
static const unsigned int numOfCPThresholds
Definition: TrigT1CaloDefs.h:124
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
LVL1::L1CPCMXTools::HitsVector
std::vector< uint32_t > HitsVector
Definition: L1CPCMXTools.h:67
python.XMLReader.l1menu
l1menu
Definition: XMLReader.py:73
xAOD::CMXCPTob_v1::energyVec
const std::vector< uint8_t > & energyVec() const
get energyVec
LVL1::L1CPCMXTools::isolationTau
int isolationTau(unsigned int clusterEnergy, unsigned int emIsol, unsigned int hadIsol) const
Definition: L1CPCMXTools.cxx:97
xAOD::CPMTobRoI_v1::chip
int chip() const
Return CP chip number (0-7)
Definition: CPMTobRoI_v1.cxx:50
LVL1::L1CPCMXTools::formCMXCPHitsSystem
virtual void formCMXCPHitsSystem(const xAOD::CMXCPHitsContainer *cmxHitsCrate, xAOD::CMXCPHitsContainer *cmxHitsSys) const
form partial CMX-CP hits (system) from crate CMX-CP hits
Definition: L1CPCMXTools.cxx:377
LVL1::EmTauROI::thresholdPassed
bool thresholdPassed(int thresh) const
returns TRUE if threshold number threshold_number has been passed by this ROI.
Definition: EmTauROI.cxx:49
AthAlgTool
Definition: AthAlgTool.h:26
LVL1::RecEmTauRoI::thresholdPattern
unsigned int thresholdPattern() const
returns bitmask of passed thresholds
Definition: RecEmTauRoI.cxx:374
get_generator_info.error
error
Definition: get_generator_info.py:40
xAOD::CPMTobRoI_v1::energy
int energy() const
Return energy.
Definition: CPMTobRoI_v1.cxx:68
xAOD::CMXCPHits_v1
Description of CMXCPHits_v1.
Definition: CMXCPHits_v1.h:27
error
Definition: IImpactPoint3dEstimator.h:70
LVL1::L1CPCMXTools::m_modules
int m_modules
Number of CPMs per crate.
Definition: L1CPCMXTools.h:105
xAOD::CPMTobRoI_v1::location
int location() const
Return location (RoI local coords) (0-7)
Definition: CPMTobRoI_v1.cxx:56
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
LVL1::EmTauROI::emRingIsolationEnergy
unsigned int emRingIsolationEnergy() const
return energy
Definition: EmTauROI.h:88
LVL1::L1CPCMXTools::m_maxTobs
int m_maxTobs
Maximum number of TOBs per CPM.
Definition: L1CPCMXTools.h:107
xAOD::CPMTobRoI
CPMTobRoI_v1 CPMTobRoI
Define the latest version of the CPMTobRoI class.
Definition: Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/CPMTobRoI.h:17
xAOD::CMXCPTob_v1::peak
uint8_t peak() const
get peak
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAOD::CMXCPTob_v1::cpm
uint8_t cpm() const
get cpm
xAOD::CPMTobRoI_v1
Description of CPMTobRoI_v1.
Definition: CPMTobRoI_v1.h:24
xAOD::CMXCPTob_v1::location
uint8_t location() const
get location
LVL1::EmTauROI::roiWord
unsigned int roiWord() const
returns the 32bit ROI word.
Definition: EmTauROI.cxx:42
xAOD::CMXCPTob_v1::chip
uint8_t chip() const
get chip
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
xAOD::CMXCPHits_v1::TOPO_CHECKSUM
@ TOPO_CHECKSUM
Definition: CMXCPHits_v1.h:30