ATLAS Offline Software
TileJetMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include "TileEvent/TileCell.h"
13 
14 #include "CaloIdentifier/TileID.h"
15 #include "CaloEvent/CaloCell.h"
16 
17 #include "StoreGate/ReadHandle.h"
18 #include <xAODCore/ShallowCopy.h>
20 
21 
22 TileJetMonitorAlgorithm::TileJetMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
23  : AthMonitorAlgorithm(name, pSvcLocator)
24  , m_tileID{nullptr}
25  , m_tileHWID{nullptr}
26  , m_cabling{nullptr}
27 {}
28 
29 
31 
32 
34 
36 
37  ATH_MSG_INFO("in initialize()");
38 
41 
42  //=== get TileCablingSvc
43  ServiceHandle<TileCablingSvc> cablingSvc("TileCablingSvc", name());
44  ATH_CHECK( cablingSvc.retrieve() );
45 
46  //=== cache pointers to cabling helpers
47  m_cabling = cablingSvc->cablingService();
48 
49  if (!m_cabling) {
50  ATH_MSG_ERROR( "Pointer to TileCablingService is zero: " << m_cabling);
51  return StatusCode::FAILURE;
52  }
53 
54  ATH_MSG_INFO("value of m_doJetCleaning: " << m_doJetCleaning);
55 
56  //=== get TileBadChanTool
57  ATH_MSG_DEBUG("::Retrieving tile bad channel tool");
58  ATH_CHECK(m_tileBadChanTool.retrieve());
59  ATH_MSG_DEBUG("::Retrieved tile bad channel tool");
60 
61  if (m_doJetCleaning) {
62  ATH_MSG_DEBUG("::initializing JVT updater");
63  ATH_CHECK(m_jvt.retrieve());
64  ATH_MSG_DEBUG("::initialized JVT updater");
65 
66  ATH_MSG_DEBUG("::initializing JetCleaningTool");
67  ATH_CHECK(m_jetCleaningTool.retrieve());
68  ATH_CHECK(m_eventCleaningTool.retrieve());
69  ATH_MSG_DEBUG("::initialized JetCleaningTool");
70  } else {
71  m_jvt.disable();
72  m_jetCleaningTool.disable();
73  m_eventCleaningTool.disable();
74  }
75 
76  ATH_CHECK( m_jetContainerKey.initialize() );
78 
79  /* Initialize Gain and Min/Max cell energies for E-cells:
80  if they are not explicitly given, set them as for the ordinary cells
81  */
84  if (m_gainE1 < 0) m_gainE1 = m_gain;
87  if (m_gainE2 < 0) m_gainE2 = m_gainE1;
90  if (m_gainE3 < 0) m_gainE3 = m_gainE2;
93  if (m_gainE4 < 0) m_gainE4 = m_gainE3;
94 
95  return StatusCode::SUCCESS;
96 }
97 
98 
99 StatusCode TileJetMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
100 
101  // In case you want to measure the execution time
102  auto timer = Monitored::Timer("TIME_execute");
103 
104  if (!isGoodEvent(ctx)) {
105  ATH_MSG_DEBUG("::fillHistograms(), event skipped ");
106  return StatusCode::SUCCESS;
107  } else {
108  ATH_MSG_DEBUG("::fillHistograms(), event accepted ");
109  }
110 
112  if (!jetContainer.isValid()) {
113  ATH_MSG_WARNING("Can't retrieve Jet Container: " << m_jetContainerKey.key());
114  return StatusCode::SUCCESS;
115  }
116 
117  uint32_t lumiBlock = GetEventInfo(ctx)->lumiBlock();
118 
119  ATH_MSG_VERBOSE("::fillHistograms(), lumiblock " << lumiBlock);
120 
121  std::set<Identifier> usedCells; // cells already used in the given event
122 
123  int iJet = 0;
124  for (const xAOD::Jet* jet : *jetContainer) {
125  if ((jet->pt() > m_jetPtMin) && (fabs(jet->eta()) < m_jetEtaMax)) {
126  if (isGoodJet(*jet)) {
127  ATH_MSG_DEBUG("::fillHistograms, jet " << iJet
128  << ", eta " << jet->eta()
129  << ", phi " << jet->phi()
130  << ", constituents " << jet->numConstituents());
131  CHECK(fillTimeHistograms(*jet, lumiBlock, usedCells));
132  } else {
133  ATH_MSG_DEBUG("::fillHistogram, BAD jet " << iJet
134  << ", eta " << jet->eta()
135  << ", phi " << jet->phi()
136  << ", constituents " << jet->numConstituents());
137  }
138  }
139  ++iJet;
140  }
141 
142 
143  fill("TileJetMonExecuteTime", timer);
144 
145  ATH_MSG_VERBOSE("::fillHistograms(), end-of-loops ");
146 
147  return StatusCode::SUCCESS;
148 }
149 
150 
151 /*---------------------------------------------------------*/
153 /*---------------------------------------------------------*/
154 
155  ATH_MSG_VERBOSE( "in fillTimeHistograms()" );
156 
157  if( jet.numConstituents() == 0 || !jet.getConstituents().isValid()) return StatusCode::SUCCESS;
158 
159  int cellIndex(-1);
160 
161  ToolHandle<GenericMonitoringTool> tileJetChannTimeDQTool = getGroup("TileJetChanTimeDQ");
162 
163  std::array<std::string, 2> gainName{"LG", "HG"};
164  std::array<std::string, 5> partitionName{"AUX", "LBA", "LBC", "EBA", "EBC"};
165 
166  for (const xAOD::JetConstituent* jet_constituent : jet.getConstituents()) {
167  if( jet_constituent->type() == xAOD::Type::CaloCluster ){
168  const xAOD::CaloCluster* calo_cluster = static_cast<const xAOD::CaloCluster*>(jet_constituent->rawConstituent());
169  if (calo_cluster && calo_cluster->getCellLinks()) {
170  for (const CaloCell* cell : *calo_cluster) {
171  cellIndex++;
172  if (cell->caloDDE()->getSubCalo() == CaloCell_ID::TILE) { // a Tile Cell
173  ATH_MSG_DEBUG("Cell " << cellIndex << " IS TILECAL !!");
174  const TileCell *tilecell = (TileCell*) cell;
175  Identifier id = tilecell->ID();
176  if (usedCells.find(id) == usedCells.end()) {
177  usedCells.insert(id);
178  } else {
179  continue;
180  }
181  // int section= m_tileID->section(id);
182  // int module = m_tileID->module(id); // ranges 0..63
183  auto module = Monitored::Scalar<int>("module", m_tileID->module(id));
184  int sample = m_tileID->sample(id); // ranges 0..3 (A, BC, D, E)
185  int tower = m_tileID->tower(id);
186  int ros1 = 0;
187  int ros2 = 0;
188  int chan1 = -1;
189  int chan2 = -1;
190  uint32_t bad1 = 0;
191  uint32_t bad2 = 0;
192  int gain1 = tilecell->gain1();
193  int gain2 = tilecell->gain2();
194  unsigned int qbit1 = tilecell->qbit1();
195  unsigned int qbit2 = tilecell->qbit2();
196 
197  const CaloDetDescrElement * caloDDE = tilecell->caloDDE();
198  IdentifierHash hash1 = caloDDE->onl1();
199  if (hash1 != TileHWID::NOT_VALID_HASH) {
200  HWIdentifier adc_id = m_tileHWID->adc_id(hash1, gain1);
201  ros1 = m_tileHWID->ros(adc_id);
202  chan1 = m_tileHWID->channel(adc_id);
203  bad1 = m_tileBadChanTool->encodeStatus(m_tileBadChanTool->getAdcStatus(adc_id));
204  }
205 
206  // How is it here with partition? D0 spans two partitions....
207  // It should be ok to treat it in this way:
208  IdentifierHash hash2 = caloDDE->onl2();
209  if (hash2 != TileHWID::NOT_VALID_HASH) {
210  HWIdentifier adc_id = m_tileHWID->adc_id(hash2, gain2);
211  ros2 = m_tileHWID->ros(adc_id);
212  chan2 = m_tileHWID->channel(adc_id);
213  bad2 = m_tileBadChanTool->encodeStatus(m_tileBadChanTool->getAdcStatus(adc_id));
214  }
215 
216  bool is_good1 = isGoodChannel(ros1, module, chan1, bad1, qbit1, id);
217  bool is_good2 = isGoodChannel(ros2, module, chan2, bad2, qbit2, id);
218  float ene1 = is_good1 ? tilecell->ene1() : -1;
219  float ene2 = is_good2 ? tilecell->ene2() : -1;
220 
222  << ", ch1 " << chan1
223  << ", ch2 " << chan2
224  << ", qbit " << qbit1 << "/" << qbit2
225  << ", is_bad " << bad1 << "/" << bad2
226  << ", isGood " << is_good1
227  << "/" << is_good2
228  << ", ene " << tilecell->energy());
229  /*
230  Now really fill the histograms time vs lumiblock and 1dim time
231  */
232 
233  // first channel
234  if (is_good1 && matchesEnergyRange(sample, tower, ene1, gain1)) {
235  if (m_do1DHistograms) {
236  std::string name = TileCalibUtils::getDrawerString(ros1, module) + "_ch_" + std::to_string(chan1) + "_1d";
237  auto channelTime = Monitored::Scalar<float>(name, tilecell->time1());
238  fill("TileJetChanTime1D", channelTime);
239  }
240 
241  if (m_do2DHistograms) {
242  ATH_MSG_WARNING("This histograms are not implemented yet!");
243  }
244 
245  // info for DQ histograms
246  auto moduleDQ = Monitored::Scalar<int>("module" + partitionName[ros1], module + 1);
247  auto channelDQ = Monitored::Scalar<int>("channel" + partitionName[ros1], chan1);
248  auto timeDQ = Monitored::Scalar<float>("time" + partitionName[ros1], tilecell->time1());
249  Monitored::fill(tileJetChannTimeDQTool, moduleDQ, channelDQ, timeDQ);
250 
251  // general histograms, only require non-affected channels
252  if (bad1 < 2) {
253  ATH_MSG_DEBUG( "Filling in time1 for " << TileCalibUtils::getDrawerString(ros1, module)
254  << ", ch " << chan1
255  << ", ene " << ene1
256  << ", LB " << lumiBlock
257  << ", time: " << tilecell->time1());
258 
259  std::string name("channelTime" + partitionName[ros1]);
260  auto channelTime = Monitored::Scalar<float>(name, tilecell->time1());
261  fill("TileJetChanTime", channelTime);
262 
263  if ((ros1 > 2) && (sample < TileID::SAMP_E)) {
264  std::string nameNoScint("channelTime" + partitionName[ros1] + "_NoScint");
265  auto channelTimeNoScint = Monitored::Scalar<float>(nameNoScint, tilecell->time1());
266  fill("TileJetChanTime", channelTimeNoScint);
267  }
268  }
269  }
270 
271  // second channel
272  if (is_good2 && matchesEnergyRange(sample, tower, ene2, gain2)) {
273  if (m_do1DHistograms) {
274  std::string name = TileCalibUtils::getDrawerString(ros2, module) + "_ch_" + std::to_string(chan2) + "_1d";
275  auto channelTime = Monitored::Scalar<float>(name, tilecell->time2());
276  fill("TileJetChanTime1D", channelTime);
277  }
278 
279  if (m_do2DHistograms) {
280  ATH_MSG_WARNING("This histograms are not implemented yet!");
281  }
282 
283  // info for DQ histograms
284  auto moduleDQ = Monitored::Scalar<int>("module" + partitionName[ros2], module + 1);
285  auto channelDQ = Monitored::Scalar<int>("channel" + partitionName[ros2], chan2);
286  auto timeDQ = Monitored::Scalar<float>("time" + partitionName[ros2], tilecell->time2());
287  Monitored::fill(tileJetChannTimeDQTool, moduleDQ, channelDQ, timeDQ);
288 
289  // general histograms, only require non-affected channels
290  if (bad2 < 2) {
291  ATH_MSG_DEBUG( "Filling in time2 for " << TileCalibUtils::getDrawerString(ros2, module)
292  << ", ch " << chan2
293  << ", ene " << ene2
294  << ", LB " << lumiBlock
295  << ", time: " << tilecell->time2()
296  <<" (qbit2 " << qbit2 << ", ch1 " << chan1 << ", ene1 " << ene1 << ", bad1 " << bad1 << ", qbit1 " << qbit1 << ")" );
297 
298  std::string name("channelTime" + partitionName[ros2]);
299  auto channelTime = Monitored::Scalar<float>(name, tilecell->time2());
300  fill("TileJetChanTime", channelTime);
301 
302  if ((ros2 > 2) && (sample < TileID::SAMP_E)) {
303  std::string nameNoScint("channelTime" + partitionName[ros2] + "_NoScint");
304  auto channelTimeNoScint = Monitored::Scalar<float>(nameNoScint, tilecell->time2());
305  fill("TileJetChanTime", channelTimeNoScint);
306  }
307  }
308  }
309 
310  /*
311  Now filling the cell-based histograms,
312  HG-HG and LG-LG combinations only for normal cells,
313  also include E-cells
314  */
315  if ((is_good1) && (((is_good2) && (gain1 == gain2)) || (sample == TileID::SAMP_E))) {
316  // E-cells are read-out by one channel only, so is_good2 = false for E-cells
317 
318  if (m_doEnergyDiffHistograms && (tilecell->energy() > m_energyDiffThreshold)) {
319  // EneDiff histograms
320 
321  int evenChannnel = (chan1 % 2 == 0) ? chan1 : chan2;
322  std::string name = TileCalibUtils::getDrawerString(ros1, module) + "_enediff_"
323  + gainName[gain1] + "_ch1_" + std::to_string(evenChannnel);
324  auto energyDifference = Monitored::Scalar<float>(name, tilecell->eneDiff() / tilecell->energy());
325  fill("TileJetEnergyDiff", energyDifference);
326  }
327 
328  if ((bad1 < 2) && (bad2 < 2)) {
329 
330  // cell-time histograms, only overall, require not affected channels
331  int index = findIndex(gain1, tilecell->energy());
332  ATH_MSG_DEBUG( "Filling in cell-time for " << TileCalibUtils::getDrawerString(ros1, module)
333  << ", ch1 " << chan1
334  << ", ch2 " << chan2
335  << ", ene " << tilecell->energy()
336  << ", index " << index
337  << ", time: " << tilecell->time());
338 
339  // TD adding histograms per partition and per radial sampling
340  std::string name1("Cell_time_" + partitionName[ros1] + "_" + sampleName(ros1, sample, tower) + "_" + gainName[gain1] + "_slice_" + std::to_string(index));
341  auto cellTime1 = Monitored::Scalar<float>(name1, tilecell->time());
342  fill("TileJetCellTime", cellTime1);
343 
344  if (m_doEnergyProfiles) {
345  // TD adding energy profiles per partition and per radial sampling
346  std::string indexName1("index_" + partitionName[ros1] + "_" + sampleName(ros1, sample, tower) + "_" + gainName[gain1]);
347  auto energyIndex1 = Monitored::Scalar<float>(indexName1, index);
348 
349  std::string energyName1("energy_" + partitionName[ros1] + "_" + sampleName(ros1, sample, tower) + "_" + gainName[gain1]);
350  auto cellEnergy1 = Monitored::Scalar<float>(energyName1, tilecell->energy());
351 
352  fill("TileJetCellEnergyProfile", energyIndex1, cellEnergy1);
353  } else {
354  // TD adding energy histograms per partition and per radial sampling
355  std::string name1("Cell_ene_" + partitionName[ros1] + "_" + sampleName(ros1, sample, tower) + "_" + gainName[gain1] + "_slice_" + std::to_string(index));
356  auto cellEnergy1 = Monitored::Scalar<float>(name1, tilecell->energy());
357  fill("TileJetCellEnergy", cellEnergy1);
358  }
359  }
360  }
361  } else {
362  ATH_MSG_DEBUG("Cell " << cellIndex << " is NOT Tilecal");
363  }
364  }
365  }
366  }
367  }
368 
369  return StatusCode::SUCCESS;
370 }
371 
372 /*---------------------------------------------------------*/
373 std::string TileJetMonitorAlgorithm::sampleName(const int ros, const int sample, const int tower) const {
374 /*---------------------------------------------------------*/
375  std::array<std::string, 3> sample_Name_LB{"A", "BC", "D"};
376  std::array<std::string, 4> sample_Name_EB{"A", "B", "D", "E"};
377  std::string s_name;
378  if (ros < 3) { // LBA, LBC
379  s_name = sample_Name_LB[sample]; // default, standard cells
380  if ((sample == TileID::SAMP_BC) && (tower == 8)) { // cell B9
381  s_name = "B9";
382  }
383  } else { // EBA, EBC
384  s_name = sample_Name_EB[sample]; //default, standard cells
385  if ((sample == TileID::SAMP_C) && (tower == 9)) { // cell C10
386  s_name = "C10";
387  }
388  if ((sample == TileID::SAMP_D) && (tower == 8)) { // cell D4
389  s_name = "D4";
390  }
391  if ((sample == TileID::SAMP_E) && (tower == 10)) { // cell E1
392  s_name = "E1";
393  }
394  if ((sample == TileID::SAMP_E) && (tower == 11)) { // cell E2
395  s_name = "E2";
396  }
397  if ((sample == TileID::SAMP_E) && (tower == 13)) { // cell E3
398  s_name = "E3";
399  }
400  if ((sample == TileID::SAMP_E) && (tower == 15)) { // cell E4
401  s_name = "E4";
402  }
403  }
404  return s_name;
405 }
406 
407 /*---------------------------------------------------------*/
408 bool TileJetMonitorAlgorithm::matchesEnergyRange(const int sample, const int tower, const float energy, const int gain) const {
409 /*---------------------------------------------------------*/
410  /* Want to separate E-cells, D4 and C10 from the rest:
411  ros: 1-2 LBA/LBC, 3-4 EBA/EBC
412  sample: 0 = A, 1 = B/BC/C, D = 2, E = 3
413  tower: 10 = E1, 11 = E2, 13 = E3, 14 = E4, 8 = D4, 9 = C10
414  Nevertheless, C10 and D4 have the same limits, since these are ordinary cells
415  */
416  if (sample != TileID::SAMP_E) {
417  return((energy > m_energyChanMin) && (energy < m_energyChanMax) && (gain == m_gain));
418  } else {
419  switch (tower) {
420  case 10:
421  return((energy > m_energyE1Min) && (energy < m_energyE1Max) && (gain == m_gainE1));
422  break;
423  case 11:
424  return((energy > m_energyE2Min) && (energy < m_energyE2Max) && (gain == m_gainE2));
425  break;
426  case 13:
427  return((energy > m_energyE3Min) && (energy < m_energyE3Max) && (gain == m_gainE3));
428  break;
429  case 15:
430  return((energy > m_energyE4Min) && (energy < m_energyE4Max) && (gain == m_gainE4));
431  break;
432  default:
433  return false;
434  }
435  }
436 }
437 
438 bool TileJetMonitorAlgorithm::isGoodChannel(int ros, int module, int channel, uint32_t bad, unsigned int qbit, Identifier id) const {
439 
440  if ((ros < 1) || (ros >= (int) TileCalibUtils::MAX_ROS)) return false; // invalid partition
441 
442  if ((module < 0) || (module >= (int) TileCalibUtils::MAX_DRAWER)) return false; // invalid module number
443 
445  return false; // non-existing PMT (empty hole)
446  }
447 
448  if (((qbit & TileCell::MASK_BADCH) != 0) || // masked as bad
449  ((qbit & TileCell::MASK_TIME) != TileCell::MASK_TIME) || // flagged
450  ((qbit & TileCell::MASK_ALGO) == TileFragHash::OptFilterDsp)) // in DSP
451 
452  return false;
453  /*
454  bad is the status in the DB (see http://alxr.usatlas.bnl.gov/lxr-stb6/source/atlas/TileCalorimeter/TileConditions/src/TileBadChanTool.cxx#390).
455  Meaning:
456  0 = good, 1 = noisy, 2 = affected, 3 = bad, 4 = otherwise
457  */
458  if (bad > 2) return false;
459 
460  /*
461  Now check for special C10, merged E1, E4'
462  C10 spec is ok only if channel = 5 (i.e. pmt=6). The other is pmt=5
463  E1 merged and E4' should be dropped if channel = 12 (i.e. pmt=13)
464  */
465  return ((( channel != 4) && (channel != 12)) || m_cabling->TileGap_connected(id));
466 }
467 
468 
469 bool TileJetMonitorAlgorithm::isGoodEvent(const EventContext& ctx) const {
470  /* check for errors in LAr and Tile, see https://twiki.cern.ch/twiki/bin/viewauth/Atlas/DataPreparationCheckListForPhysicsAnalysis
471  */
472  if (! m_doEventCleaning) return true;
473 
474  ATH_MSG_DEBUG("::isGoodEvent()....");
475 
477 
478  if (eventInfo->errorState(xAOD::EventInfo::LAr) == xAOD::EventInfo::Error) return false;
479  if (eventInfo->errorState(xAOD::EventInfo::Tile) == xAOD::EventInfo::Error) return false;
480 
481  /* see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/HowToCleanJets2017
482  */
483  if (! m_doJetCleaning) return true;
484 
485  const xAOD::JetContainer* jetContainer = SG::get(m_jetContainerKey);
486  if (! jetContainer){
487  ATH_MSG_INFO("Cannot retrieve " << m_jetContainerKey << ". However, returning true.");
488  return true;
489  }
490 
491  auto jetsSC = xAOD::shallowCopyContainer(*jetContainer);
492  std::unique_ptr< xAOD::JetContainer > jetsCopy(jetsSC.first);
493  std::unique_ptr< xAOD::ShallowAuxContainer > jetsCopyAux(jetsSC.second);
494 
495  // We're attaching decorations here to a temporary object that
496  // is not recorded, so we shouldn't use a WriteDecorHandle.
497  static const SG::AuxElement::Decorator<char> passOR ("passOR");
498  static const SG::AuxElement::Decorator<char> passJvt ("passJvt");
499 
500  int iJet = 0;
501  for (auto jet : *jetsCopy) {
502  ATH_MSG_DEBUG("Jet " << iJet << ", pT " << jet->pt()/1000.0 << " GeV, eta "
503  << jet->eta());
504  passJvt(*jet) = passesJvt(*jet);
505  passOR(*jet) = true;
506  ATH_MSG_DEBUG("... done with jet " << iJet);
507  ++iJet;
508  }
509 
510  bool accept = m_eventCleaningTool->acceptEvent(&*jetsCopy);
511 
512  return accept;
513 }
514 
515 
517 
518  if (jet.pt() > m_jetPtMin
519  && jet.pt() < m_jetPtMax
520  && fabs(jet.getAttribute<float>("DetectorEta")) < m_jetTrackingEtaLimit
521  && m_jvt->updateJvt(jet) < m_jvtThreshold) {
522 
523  return false;
524 
525  } else {
526  return true;
527  }
528 
529 }
530 
532 
533  if (m_doJetCleaning) {
534 
535  if (jet.pt() >= m_jetPtMin && passesJvt(jet) && m_jetCleaningTool->keep(jet)) {
536  return true;
537  } else {
538  return false;
539  }
540 
541  } else {
542  return true;
543  }
544 
545 }
546 
547 unsigned int TileJetMonitorAlgorithm::findIndex(const int gain, const float energy) const {
548 
549  if (gain == 1) {
550  return (std::upper_bound(m_cellEnergyUpperLimitsHG.begin(), m_cellEnergyUpperLimitsHG.end(), energy)
551  - m_cellEnergyUpperLimitsHG.begin());
552  } else {
553  return (std::upper_bound(m_cellEnergyUpperLimitsLG.begin(), m_cellEnergyUpperLimitsLG.end(), energy)
554  - m_cellEnergyUpperLimitsLG.begin());
555  }
556 
557 }
TileJetMonitorAlgorithm::m_jetCleaningTool
ToolHandle< IJetSelector > m_jetCleaningTool
Definition: TileJetMonitorAlgorithm.h:93
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ShallowCopy.h
bad
@ bad
Definition: SUSYToolsTester.cxx:100
TileCell
Definition: TileCell.h:57
CaloDetDescrElement::onl2
IdentifierHash onl2() const
cell online identifier 2
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:408
TileCablingSvc.h
TileCell::time1
float time1(void) const
get time of first PMT
Definition: TileCell.h:198
TileJetMonitorAlgorithm::m_jetTrackingEtaLimit
Gaudi::Property< float > m_jetTrackingEtaLimit
Definition: TileJetMonitorAlgorithm.h:79
TileJetMonitorAlgorithm::passesJvt
bool passesJvt(const xAOD::Jet &jet) const
Definition: TileJetMonitorAlgorithm.cxx:516
TileCablingService::TileGap_connected
bool TileGap_connected(const Identifier &id) const
Definition: TileCablingService.cxx:1756
ReadCellNoiseFromCool.name1
name1
Definition: ReadCellNoiseFromCool.py:233
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
TileJetMonitorAlgorithm::m_energyE3Max
Gaudi::Property< float > m_energyE3Max
Definition: TileJetMonitorAlgorithm.h:66
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TileCell::MASK_ALGO
@ MASK_ALGO
Definition: TileCell.h:62
TileJetMonitorAlgorithm::m_energyE4Min
Gaudi::Property< float > m_energyE4Min
Definition: TileJetMonitorAlgorithm.h:68
TileJetMonitorAlgorithm::m_energyChanMax
Gaudi::Property< float > m_energyChanMax
Definition: TileJetMonitorAlgorithm.h:57
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TileCell::time2
float time2(void) const
get time of second PMT
Definition: TileCell.h:200
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
TileJetMonitorAlgorithm::m_energyE3Min
Gaudi::Property< float > m_energyE3Min
Definition: TileJetMonitorAlgorithm.h:65
TileJetMonitorAlgorithm::m_gainE1
Gaudi::Property< float > m_gainE1
Definition: TileJetMonitorAlgorithm.h:61
TileJetMonitorAlgorithm::m_jetEtaMax
Gaudi::Property< float > m_jetEtaMax
Definition: TileJetMonitorAlgorithm.h:55
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
TileCell::ene1
float ene1(void) const
get energy of first PMT
Definition: TileCell.h:193
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
Tile_Base_ID::SAMP_BC
@ SAMP_BC
Definition: Tile_Base_ID.h:54
CaloTime_fillDB.gain2
gain2
Definition: CaloTime_fillDB.py:357
TileJetMonitorAlgorithm::m_tileHWID
const TileHWID * m_tileHWID
Definition: TileJetMonitorAlgorithm.h:104
Tile_Base_ID::sample
int sample(const Identifier &id) const
Definition: Tile_Base_ID.cxx:171
TileJetMonitorAlgorithm::m_cellEnergyUpperLimitsLG
Gaudi::Property< std::vector< float > > m_cellEnergyUpperLimitsLG
Definition: TileJetMonitorAlgorithm.h:83
TileJetMonitorAlgorithm::m_doJetCleaning
Gaudi::Property< bool > m_doJetCleaning
Definition: TileJetMonitorAlgorithm.h:78
CaloCell.h
TileFragHash.h
TileCalibUtils.h
Tile_Base_ID::tower
int tower(const Identifier &id) const
Definition: Tile_Base_ID.cxx:165
TileJetMonitorAlgorithm::fillTimeHistograms
StatusCode fillTimeHistograms(const xAOD::Jet &jet, uint32_t lumiBlock, std::set< Identifier > &usedCells) const
Definition: TileJetMonitorAlgorithm.cxx:152
Tile_Base_ID::SAMP_E
@ SAMP_E
Definition: Tile_Base_ID.h:55
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
CaloCell::time
float time() const
get time (data member)
Definition: CaloCell.h:352
HWIdentifier
Definition: HWIdentifier.h:13
TileCell::MASK_BADCH
@ MASK_BADCH
Definition: TileCell.h:63
xAOD::EventInfo_v1::LAr
@ LAr
The LAr calorimeter.
Definition: EventInfo_v1.h:335
TileFragHash::OptFilterDsp
@ OptFilterDsp
Definition: TileFragHash.h:34
TileHWID::channel
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition: TileHWID.h:189
xAOD::CaloCluster
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
Definition: Event/xAOD/xAODCaloEvent/xAODCaloEvent/CaloCluster.h:19
TileJetMonitorAlgorithm::m_caloCellContainerKey
SG::ReadHandleKey< CaloCellContainer > m_caloCellContainerKey
Definition: TileJetMonitorAlgorithm.h:100
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:86
TileID.h
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
TileCalibUtils::MAX_DRAWER
static const unsigned int MAX_DRAWER
Number of drawers in ROS 1-4.
Definition: TileCalibUtils.h:139
TileJetMonitorAlgorithm::isGoodChannel
bool isGoodChannel(int part, int module, int channel, uint32_t bad, unsigned int qbit, Identifier id) const
Definition: TileJetMonitorAlgorithm.cxx:438
CaloCell::energy
double energy() const
get energy (data member)
Definition: CaloCell.h:311
xAOD::EventInfo_v1::Error
@ Error
The sub-detector issued an error.
Definition: EventInfo_v1.h:349
Tile_Base_ID::SAMP_C
@ SAMP_C
Definition: Tile_Base_ID.h:54
TileHWID::ros
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
Definition: TileHWID.h:167
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
CaloDetDescrElement::onl1
IdentifierHash onl1() const
cell online identifier 1
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:404
TileJetMonitorAlgorithm::m_gainE3
Gaudi::Property< float > m_gainE3
Definition: TileJetMonitorAlgorithm.h:67
python.PyAthena.module
module
Definition: PyAthena.py:131
TileJetMonitorAlgorithm::m_energyDiffThreshold
Gaudi::Property< float > m_energyDiffThreshold
Definition: TileJetMonitorAlgorithm.h:75
TileJetMonitorAlgorithm.h
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:59
TileJetMonitorAlgorithm::m_jetPtMin
Gaudi::Property< float > m_jetPtMin
Definition: TileJetMonitorAlgorithm.h:53
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
TileJetMonitorAlgorithm::findIndex
unsigned int findIndex(const int gain, const float energy) const
Definition: TileJetMonitorAlgorithm.cxx:547
TileJetMonitorAlgorithm::isGoodEvent
bool isGoodEvent(const EventContext &ctx) const
Definition: TileJetMonitorAlgorithm.cxx:469
TileHWID.h
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
Tile_Base_ID::module
int module(const Identifier &id) const
Definition: Tile_Base_ID.cxx:159
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:59
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:116
TileCablingService.h
TileJetMonitorAlgorithm::m_jetContainerKey
SG::ReadHandleKey< xAOD::JetContainer > m_jetContainerKey
Definition: TileJetMonitorAlgorithm.h:97
TileJetMonitorAlgorithm::m_energyE2Min
Gaudi::Property< float > m_energyE2Min
Definition: TileJetMonitorAlgorithm.h:62
CaloCluster.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TileJetMonitorAlgorithm::m_cabling
const TileCablingService * m_cabling
TileCabling instance.
Definition: TileJetMonitorAlgorithm.h:106
CaloCell::caloDDE
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
Definition: CaloCell.h:305
TileJetMonitorAlgorithm::m_do1DHistograms
Gaudi::Property< bool > m_do1DHistograms
Definition: TileJetMonitorAlgorithm.h:72
TileCell.h
TileJetMonitorAlgorithm::m_jvt
ToolHandle< IJetUpdateJvt > m_jvt
Definition: TileJetMonitorAlgorithm.h:90
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
python.LArCondContChannels.chan1
chan1
Definition: LArCondContChannels.py:666
CaloCell_Base_ID::TILE
@ TILE
Definition: CaloCell_Base_ID.h:46
TileCell::qbit1
uint8_t qbit1(void) const
get quality bits of first PMT (data member)
Definition: TileCell.h:209
TileHWID::NOT_VALID_HASH
@ NOT_VALID_HASH
Definition: TileHWID.h:314
TileJetMonitorAlgorithm::m_energyE2Max
Gaudi::Property< float > m_energyE2Max
Definition: TileJetMonitorAlgorithm.h:63
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TileCalibUtils::MAX_ROS
static const unsigned int MAX_ROS
Number of ROSs
Definition: TileCalibUtils.h:138
TileJetMonitorAlgorithm::m_energyE4Max
Gaudi::Property< float > m_energyE4Max
Definition: TileJetMonitorAlgorithm.h:69
maskDeadModules.ros
ros
Definition: maskDeadModules.py:35
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
TileCell::gain1
int gain1(void) const
get gain of first PMT
Definition: TileCell.cxx:182
Monitored::fill
void fill(const ToolHandle< GenericMonitoringTool > &tool, T &&... variables)
Definition: MonitoredGroup.h:122
TileCell::eneDiff
float eneDiff(void) const
all get methods
Definition: TileCell.h:188
xAOD::CaloCluster_v1::getCellLinks
const CaloClusterCellLink * getCellLinks() const
Get a pointer to the CaloClusterCellLink object (const version)
Definition: CaloCluster_v1.cxx:905
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TileJetMonitorAlgorithm::m_energyE1Min
Gaudi::Property< float > m_energyE1Min
Definition: TileJetMonitorAlgorithm.h:59
TileJetMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileJetMonitorAlgorithm.cxx:33
TileJetMonitorAlgorithm::m_doEnergyDiffHistograms
Gaudi::Property< bool > m_doEnergyDiffHistograms
Definition: TileJetMonitorAlgorithm.h:74
CaloTime_fillDB.gain1
gain1
Definition: CaloTime_fillDB.py:356
TileJetMonitorAlgorithm::m_doEventCleaning
Gaudi::Property< bool > m_doEventCleaning
Definition: TileJetMonitorAlgorithm.h:77
TileJetMonitorAlgorithm::m_gainE4
Gaudi::Property< float > m_gainE4
Definition: TileJetMonitorAlgorithm.h:70
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
TileJetMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TileJetMonitorAlgorithm.cxx:99
CaloCell::ID
Identifier ID() const
get ID (from cached data member) non-virtual and inline for fast access
Definition: CaloCell.h:279
TileJetMonitorAlgorithm::m_energyE1Max
Gaudi::Property< float > m_energyE1Max
Definition: TileJetMonitorAlgorithm.h:60
TileJetMonitorAlgorithm::m_do2DHistograms
Gaudi::Property< bool > m_do2DHistograms
Definition: TileJetMonitorAlgorithm.h:73
xAOD::shallowCopyContainer
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, [[maybe_unused]] const EventContext &ctx)
Function making a shallow copy of a constant container.
Definition: ShallowCopy.h:110
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
TileJetMonitorAlgorithm::m_jvtThreshold
Gaudi::Property< float > m_jvtThreshold
Definition: TileJetMonitorAlgorithm.h:80
TileHWID::adc_id
HWIdentifier adc_id(int ros, int drawer, int channel, int adc) const
adc HWIdentifer
Definition: TileHWID.cxx:229
TileCell::qbit2
uint8_t qbit2(void) const
get quality bits of second PMT (data member)
Definition: TileCell.h:212
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
Tile_Base_ID::SAMP_D
@ SAMP_D
Definition: Tile_Base_ID.h:55
TileCalibUtils::getDrawerString
static std::string getDrawerString(unsigned int ros, unsigned int drawer)
Return the drawer name, e.g.
Definition: TileCalibUtils.cxx:145
TileCell::gain2
int gain2(void) const
get gain of second PMT
Definition: TileCell.cxx:189
xAOD::EventInfo_v1::Tile
@ Tile
The Tile calorimeter.
Definition: EventInfo_v1.h:336
TileCell::MASK_TIME
@ MASK_TIME
Definition: TileCell.h:67
TileCell::ene2
float ene2(void) const
get energy of second PMT
Definition: TileCell.h:195
TileCablingService::isDisconnected
bool isDisconnected(int ros, int drawer, int channel) const
Definition: TileCablingService.cxx:2461
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TileJetMonitorAlgorithm::m_gainE2
Gaudi::Property< float > m_gainE2
Definition: TileJetMonitorAlgorithm.h:64
TileJetMonitorAlgorithm::m_energyChanMin
Gaudi::Property< float > m_energyChanMin
Definition: TileJetMonitorAlgorithm.h:56
TileJetMonitorAlgorithm::m_tileBadChanTool
ToolHandle< ITileBadChanTool > m_tileBadChanTool
Definition: TileJetMonitorAlgorithm.h:86
xAOD::EventInfo_v1::errorState
EventFlagErrorState errorState(EventFlagSubDet subDet) const
Get the error state for a particular sub-detector.
Definition: EventInfo_v1.cxx:817
TileJetMonitorAlgorithm::sampleName
std::string sampleName(const int ros, const int sample, const int tower) const
Definition: TileJetMonitorAlgorithm.cxx:373
TileJetMonitorAlgorithm::m_gain
Gaudi::Property< float > m_gain
Definition: TileJetMonitorAlgorithm.h:58
xAOD::JetConstituent
4-vector of jet constituent at the scale used during jet finding.
Definition: JetConstituentVector.h:61
TileJetMonitorAlgorithm::~TileJetMonitorAlgorithm
virtual ~TileJetMonitorAlgorithm()
Definition: TileJetMonitorAlgorithm.cxx:30
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
ReadHandle.h
Handle class for reading from StoreGate.
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
TileJetMonitorAlgorithm::m_jetPtMax
Gaudi::Property< float > m_jetPtMax
Definition: TileJetMonitorAlgorithm.h:54
TileJetMonitorAlgorithm::isGoodJet
bool isGoodJet(const xAOD::Jet &jet) const
Definition: TileJetMonitorAlgorithm.cxx:531
TileJetMonitorAlgorithm::m_cellEnergyUpperLimitsHG
Gaudi::Property< std::vector< float > > m_cellEnergyUpperLimitsHG
Definition: TileJetMonitorAlgorithm.h:81
SG::get
const T * get(const ReadHandleKey< T > &key)
Convenience function to retrieve an object given a ReadHandleKey.
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:327
TileJetMonitorAlgorithm::TileJetMonitorAlgorithm
TileJetMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TileJetMonitorAlgorithm.cxx:22
passOR
@ passOR
Definition: SUSYToolsTester.cxx:105
TileJetMonitorAlgorithm::m_doEnergyProfiles
Gaudi::Property< bool > m_doEnergyProfiles
Definition: TileJetMonitorAlgorithm.h:76
TileJetMonitorAlgorithm::m_tileID
const TileID * m_tileID
Definition: TileJetMonitorAlgorithm.h:103
TileJetMonitorAlgorithm::matchesEnergyRange
bool matchesEnergyRange(const int sample, const int tower, const float energy, const int gain) const
Definition: TileJetMonitorAlgorithm.cxx:408
GlobalMonitoring_CA.partitionName
partitionName
Definition: GlobalMonitoring_CA.py:22
TileJetMonitorAlgorithm::m_eventCleaningTool
ToolHandle< ECUtils::IEventCleaningTool > m_eventCleaningTool
Definition: TileJetMonitorAlgorithm.h:94
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
AthMonitorAlgorithm::getGroup
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
Definition: AthMonitorAlgorithm.cxx:164
ServiceHandle< TileCablingSvc >
Identifier
Definition: IdentifierFieldParser.cxx:14