Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 
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  // Adding histograms per selected individual cell
345  int index_ch1 = -1;
346  int index_ch2 = -1;
347  if (m_doCellHistograms)
348  {
349  std::string name_sel("Cell_time_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_" + gainName[gain1] + "_slice_" + std::to_string(index));
350  auto cellTime_sel = Monitored::Scalar<float>(name_sel, tilecell->time());
351  fill("TileJetSelCellTime", cellTime_sel);
352 
353  // Adding histograms per channels of selected individual cell
354  // First channel
355  index_ch1 = findIndex(gain1, tilecell->ene1() * 2); // Using twice the channel energy to find the correct index
356  std::string name_selCh1("Cell_time_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_ch" + std::to_string(chan1) + "_" + gainName[gain1] + "_slice_" + std::to_string(index_ch1));
357  auto cellTime_selCh1 = Monitored::Scalar<float>(name_selCh1, tilecell->time1());
358  fill("TileJetSelChanTime", cellTime_selCh1);
359 
360  // Second channel
361  index_ch2 = findIndex(gain2, tilecell->ene2() * 2); // Using twice the channel energy to find the correct index
362  std::string name_selCh2("Cell_time_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_ch" + std::to_string(chan2) + "_" + gainName[gain2] + "_slice_" + std::to_string(index_ch2));
363  auto cellTime_selCh2 = Monitored::Scalar<float>(name_selCh2, tilecell->time2());
364  fill("TileJetSelChanTime", cellTime_selCh2);
365  }
366 
367  if (m_doEnergyProfiles) {
368  // TD adding energy profiles per partition and per radial sampling
369  std::string indexName1("index_" + partitionName[ros1] + "_" + sampleName(ros1, sample, tower) + "_" + gainName[gain1]);
370  auto energyIndex1 = Monitored::Scalar<float>(indexName1, index);
371 
372  std::string energyName1("energy_" + partitionName[ros1] + "_" + sampleName(ros1, sample, tower) + "_" + gainName[gain1]);
373  auto cellEnergy1 = Monitored::Scalar<float>(energyName1, tilecell->energy());
374 
375  fill("TileJetCellEnergyProfile", energyIndex1, cellEnergy1);
376 
377  // Adding energy profiles per selected individual cell
378  if (m_doCellHistograms)
379  {
380  std::string indexname_sel("index_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_" + gainName[gain1]);
381  auto energyIndex_sel = Monitored::Scalar<float>(indexname_sel, index);
382 
383  std::string energyname_sel("energy_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_" + gainName[gain1]);
384  auto cellEnergy_sel = Monitored::Scalar<float>(energyname_sel, tilecell->energy());
385 
386  fill("TileJetSelCellEnergyProfile", energyIndex_sel, cellEnergy_sel);
387 
388  // Adding histograms per channels of selected individual cell
389  // First channel
390  std::string indexname_selCh1("index_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_ch" + std::to_string(chan1) + "_" + gainName[gain1]);
391  auto energyIndex_selCh1 = Monitored::Scalar<float>(indexname_selCh1, index_ch1);
392 
393  std::string energyname_selCh1("energy_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_ch" + std::to_string(chan1) + "_" + gainName[gain1]);
394  auto cellEnergy_selCh1 = Monitored::Scalar<float>(energyname_selCh1, tilecell->ene1());
395 
396  fill("TileJetSelChanEnergyProfile", energyIndex_selCh1, cellEnergy_selCh1);
397 
398  // Second channel
399  std::string indexname_selCh2("index_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_ch" + std::to_string(chan2) + "_" + gainName[gain2]);
400  auto energyIndex_selCh2 = Monitored::Scalar<float>(indexname_selCh2, index_ch2);
401 
402  std::string energyname_selCh2("energy_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_ch" + std::to_string(chan2) + "_" + gainName[gain2]);
403  auto cellEnergy_selCh2 = Monitored::Scalar<float>(energyname_selCh2, tilecell->ene2());
404 
405  fill("TileJetSelChanEnergyProfile", energyIndex_selCh2, cellEnergy_selCh2);
406  }
407  } else {
408  // TD adding energy histograms per partition and per radial sampling
409  std::string name1("Cell_ene_" + partitionName[ros1] + "_" + sampleName(ros1, sample, tower) + "_" + gainName[gain1] + "_slice_" + std::to_string(index));
410  auto cellEnergy1 = Monitored::Scalar<float>(name1, tilecell->energy());
411  fill("TileJetCellEnergy", cellEnergy1);
412 
413  // Adding energy histograms per selected individual cell
414  if (m_doCellHistograms)
415  {
416  std::string name_sel("Cell_ene_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_" + gainName[gain1] + "_slice_" + std::to_string(index));
417  auto cellEnergy_sel = Monitored::Scalar<float>(name_sel, tilecell->energy());
418  fill("TileJetSelCellEnergy", cellEnergy_sel);
419 
420  // Adding histograms per channels of selected individual cell
421  // First channel
422  std::string name_selCh1("Cell_ene_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_ch" + std::to_string(chan1) + "_" + gainName[gain1] + "_slice_" + std::to_string(index_ch1));
423  auto cellEnergy_selCh1 = Monitored::Scalar<float>(name_selCh1, tilecell->ene1());
424  fill("TileJetSelChanEnergy", cellEnergy_selCh1);
425 
426  // Second channel
427  std::string name_selCh2("Cell_ene_" + TileCalibUtils::getDrawerString(ros1, module) + "_" + cellName(ros1, sample, tower, module) + "_ch" + std::to_string(chan2) + "_" + gainName[gain2] + "_slice_" + std::to_string(index_ch2));
428  auto cellEnergy_selCh2 = Monitored::Scalar<float>(name_selCh2, tilecell->ene2());
429  fill("TileJetSelChanEnergy", cellEnergy_selCh2);
430  }
431  }
432  }
433  }
434  } else {
435  ATH_MSG_DEBUG("Cell " << cellIndex << " is NOT Tilecal");
436  }
437  }
438  }
439  }
440  }
441 
442  return StatusCode::SUCCESS;
443 }
444 
445 /*---------------------------------------------------------*/
446 std::string TileJetMonitorAlgorithm::sampleName(const int ros, const int sample, const int tower) const {
447 /*---------------------------------------------------------*/
448  std::array<std::string, 3> sample_Name_LB{"A", "B", "D"};
449  std::array<std::string, 4> sample_Name_EB{"A", "B", "D", "E"};
450  std::string s_name;
451  if (ros < 3) { // LBA, LBC
452  s_name = sample_Name_LB[sample]; // default, standard cells
453  if ((sample == TileID::SAMP_BC) && (tower == 8)) { // cell B9
454  s_name = "B9";
455  }
456  } else { // EBA, EBC
457  s_name = sample_Name_EB[sample]; //default, standard cells
458  if ((sample == TileID::SAMP_C) && (tower == 9)) { // cell C10
459  s_name = "C10";
460  }
461  if ((sample == TileID::SAMP_D) && (tower == 8)) { // cell D4
462  s_name = "D4";
463  }
464  if ((sample == TileID::SAMP_E) && (tower == 10)) { // cell E1
465  s_name = "E1";
466  }
467  if ((sample == TileID::SAMP_E) && (tower == 11)) { // cell E2
468  s_name = "E2";
469  }
470  if ((sample == TileID::SAMP_E) && (tower == 13)) { // cell E3
471  s_name = "E3";
472  }
473  if ((sample == TileID::SAMP_E) && (tower == 15)) { // cell E4
474  s_name = "E4";
475  }
476  }
477  return s_name;
478 }
479 
480 /*---------------------------------------------------------*/
481 std::string TileJetMonitorAlgorithm::cellName(const int ros, const int sample, const int tower, const int module) const {
482 /*---------------------------------------------------------*/
483  // names compatible with names in TileMonitoringCfgHelper.py
484  std::array<std::string, 3> sample_Name_LB{"A", "B", "D"};
485  std::array<std::string, 4> sample_Name_EB{"A", "B", "D", "E"};
486  std::string c_name;
487  if (ros < 3) { // LBA, LBC
488  c_name = sample_Name_LB[sample] + std::to_string(tower + 1); // default, standard cells
489  if ((sample == TileID::SAMP_BC) && (tower == 8)) { // cell B9
490  c_name = "B9";
491  }
492  if ((sample == TileID::SAMP_D) && (tower == 0)) { // cell D0
493  c_name = "D0";
494  }
495  if ((sample == TileID::SAMP_D) && (tower == 2)) { // cell D1
496  c_name = "D1";
497  }
498  if ((sample == TileID::SAMP_D) && (tower == 4)) { // cell D2
499  c_name = "D2";
500  }
501  if ((sample == TileID::SAMP_D) && (tower == 6)) { // cell D3
502  c_name = "D3";
503  }
504  } else { // EBA, EBC
505  c_name = sample_Name_EB[sample] + std::to_string(tower + 1); // default, standard cells
506  if ((sample == TileID::SAMP_C) && (tower == 9)) { // cell C10
507  c_name = "C10";
508  }
509  if ((sample == TileID::SAMP_D) && (tower == 8)) { // cell D4
510  c_name = "D4";
511  }
512  if ((sample == TileID::SAMP_D) && (tower == 10)) { // cell D5
513  c_name = "D5";
514  }
515  if ((sample == TileID::SAMP_D) && (tower == 12)) { // cell D6
516  c_name = "D6";
517  }
518  if ((sample == TileID::SAMP_E) && (tower == 10)) { // cell E1
519  c_name = "E1";
520  }
521  if ((sample == TileID::SAMP_E) && (tower == 11)) { // cell E2
522  c_name = "E2";
523  }
524  if ((sample == TileID::SAMP_E) && (tower == 13)) { // cell E3
525  if (((ros == 3) && ((module + 1) == 15)) || ((ros == 4) && ((module + 1) == 18))) { // special modules EBA15 & EBC18
526  c_name = "E3*";
527  } else {
528  c_name = "E3";
529  }
530  }
531  if ((sample == TileID::SAMP_E) && (tower == 15)) { // cell E4
532  if (((ros == 3) && ((module + 1) == 15)) || ((ros == 4) && ((module + 1) == 18))) { // special modules EBA15 & EBC18
533  c_name = "E4*";
534  } else {
535  c_name = "E4";
536  }
537  }
538  }
539  return c_name;
540 }
541 
542 /*---------------------------------------------------------*/
543 bool TileJetMonitorAlgorithm::matchesEnergyRange(const int sample, const int tower, const float energy, const int gain) const {
544 /*---------------------------------------------------------*/
545  /* Want to separate E-cells, D4 and C10 from the rest:
546  ros: 1-2 LBA/LBC, 3-4 EBA/EBC
547  sample: 0 = A, 1 = B/BC/C, D = 2, E = 3
548  tower: 10 = E1, 11 = E2, 13 = E3, 14 = E4, 8 = D4, 9 = C10
549  Nevertheless, C10 and D4 have the same limits, since these are ordinary cells
550  */
551  if (sample != TileID::SAMP_E) {
552  return((energy > m_energyChanMin) && (energy < m_energyChanMax) && (gain == m_gain));
553  } else {
554  switch (tower) {
555  case 10:
556  return((energy > m_energyE1Min) && (energy < m_energyE1Max) && (gain == m_gainE1));
557  break;
558  case 11:
559  return((energy > m_energyE2Min) && (energy < m_energyE2Max) && (gain == m_gainE2));
560  break;
561  case 13:
562  return((energy > m_energyE3Min) && (energy < m_energyE3Max) && (gain == m_gainE3));
563  break;
564  case 15:
565  return((energy > m_energyE4Min) && (energy < m_energyE4Max) && (gain == m_gainE4));
566  break;
567  default:
568  return false;
569  }
570  }
571 }
572 
573 bool TileJetMonitorAlgorithm::isGoodChannel(int ros, int module, int channel, uint32_t bad, unsigned int qbit, Identifier id) const {
574 
575  if ((ros < 1) || (ros >= (int) TileCalibUtils::MAX_ROS)) return false; // invalid partition
576 
577  if ((module < 0) || (module >= (int) TileCalibUtils::MAX_DRAWER)) return false; // invalid module number
578 
580  return false; // non-existing PMT (empty hole)
581  }
582 
583  if (((qbit & TileCell::MASK_BADCH) != 0) || // masked as bad
584  ((qbit & TileCell::MASK_TIME) != TileCell::MASK_TIME) || // flagged
585  ((qbit & TileCell::MASK_ALGO) == TileFragHash::OptFilterDsp)) // in DSP
586 
587  return false;
588  /*
589  bad is the status in the DB (see http://alxr.usatlas.bnl.gov/lxr-stb6/source/atlas/TileCalorimeter/TileConditions/src/TileBadChanTool.cxx#390).
590  Meaning:
591  0 = good, 1 = noisy, 2 = affected, 3 = bad, 4 = otherwise
592  */
593  if (bad > 2) return false;
594 
595  /*
596  Now check for special C10, merged E1, E4'
597  C10 spec is ok only if channel = 5 (i.e. pmt=6). The other is pmt=5
598  E1 merged and E4' should be dropped if channel = 12 (i.e. pmt=13)
599  */
600  return ((( channel != 4) && (channel != 12)) || m_cabling->TileGap_connected(id));
601 }
602 
603 
604 bool TileJetMonitorAlgorithm::isGoodEvent(const EventContext& ctx) const {
605  /* check for errors in LAr and Tile, see https://twiki.cern.ch/twiki/bin/viewauth/Atlas/DataPreparationCheckListForPhysicsAnalysis
606  */
607  if (! m_doEventCleaning) return true;
608 
609  ATH_MSG_DEBUG("::isGoodEvent()....");
610 
612 
613  if (eventInfo->errorState(xAOD::EventInfo::LAr) == xAOD::EventInfo::Error) return false;
614  if (eventInfo->errorState(xAOD::EventInfo::Tile) == xAOD::EventInfo::Error) return false;
615 
616  /* see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/HowToCleanJets2017
617  */
618  if (! m_doJetCleaning) return true;
619 
620  const xAOD::JetContainer* jetContainer = SG::get(m_jetContainerKey);
621  if (! jetContainer){
622  ATH_MSG_INFO("Cannot retrieve " << m_jetContainerKey << ". However, returning true.");
623  return true;
624  }
625 
626  auto jetsSC = xAOD::shallowCopyContainer(*jetContainer);
627  std::unique_ptr< xAOD::JetContainer > jetsCopy(jetsSC.first);
628  std::unique_ptr< xAOD::ShallowAuxContainer > jetsCopyAux(jetsSC.second);
629 
630  // We're attaching decorations here to a temporary object that
631  // is not recorded, so we shouldn't use a WriteDecorHandle.
632  static const SG::AuxElement::Decorator<char> passOR ("passOR");
633  static const SG::AuxElement::Decorator<char> passJvt ("passJvt");
634 
635  int iJet = 0;
636  for (auto jet : *jetsCopy) {
637  ATH_MSG_DEBUG("Jet " << iJet << ", pT " << jet->pt()/1000.0 << " GeV, eta "
638  << jet->eta());
639  passJvt(*jet) = passesJvt(*jet);
640  passOR(*jet) = true;
641  ATH_MSG_DEBUG("... done with jet " << iJet);
642  ++iJet;
643  }
644 
645  bool accept = m_eventCleaningTool->acceptEvent(&*jetsCopy);
646 
647  return accept;
648 }
649 
650 
652 
653  if (jet.pt() > m_jetPtMin
654  && jet.pt() < m_jetPtMax
655  && fabs(jet.getAttribute<float>("DetectorEta")) < m_jetTrackingEtaLimit
656  && m_jvt->updateJvt(jet) < m_jvtThreshold) {
657 
658  return false;
659 
660  } else {
661  return true;
662  }
663 
664 }
665 
667 
668  if (m_doJetCleaning) {
669 
670  if (jet.pt() >= m_jetPtMin && passesJvt(jet) && m_jetCleaningTool->keep(jet)) {
671  return true;
672  } else {
673  return false;
674  }
675 
676  } else {
677  return true;
678  }
679 
680 }
681 
682 unsigned int TileJetMonitorAlgorithm::findIndex(const int gain, const float energy) const {
683 
684  if (gain == 1) {
685  return (std::upper_bound(m_cellEnergyUpperLimitsHG.begin(), m_cellEnergyUpperLimitsHG.end(), energy)
686  - m_cellEnergyUpperLimitsHG.begin());
687  } else {
688  return (std::upper_bound(m_cellEnergyUpperLimitsLG.begin(), m_cellEnergyUpperLimitsLG.end(), energy)
689  - m_cellEnergyUpperLimitsLG.begin());
690  }
691 
692 }
TileJetMonitorAlgorithm::m_jetCleaningTool
ToolHandle< IJetSelector > m_jetCleaningTool
Definition: TileJetMonitorAlgorithm.h:95
TileJetMonitorAlgorithm::m_doCellHistograms
Gaudi::Property< bool > m_doCellHistograms
Definition: TileJetMonitorAlgorithm.h:75
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:81
TileJetMonitorAlgorithm::passesJvt
bool passesJvt(const xAOD::Jet &jet) const
Definition: TileJetMonitorAlgorithm.cxx:651
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:67
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:69
TileJetMonitorAlgorithm::m_energyChanMax
Gaudi::Property< float > m_energyChanMax
Definition: TileJetMonitorAlgorithm.h:58
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:67
index
Definition: index.py:1
TileJetMonitorAlgorithm::m_energyE3Min
Gaudi::Property< float > m_energyE3Min
Definition: TileJetMonitorAlgorithm.h:66
TileJetMonitorAlgorithm::m_gainE1
Gaudi::Property< float > m_gainE1
Definition: TileJetMonitorAlgorithm.h:62
TileJetMonitorAlgorithm::m_jetEtaMax
Gaudi::Property< float > m_jetEtaMax
Definition: TileJetMonitorAlgorithm.h:56
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:106
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:85
TileJetMonitorAlgorithm::m_doJetCleaning
Gaudi::Property< bool > m_doJetCleaning
Definition: TileJetMonitorAlgorithm.h:80
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
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
GlobalMonitoring.partitionName
partitionName
Definition: GlobalMonitoring.py:40
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::NOT_VALID_HASH
@ NOT_VALID_HASH
Definition: TileHWID.h:314
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:102
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:573
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:68
python.PyAthena.module
module
Definition: PyAthena.py:131
TileJetMonitorAlgorithm::m_energyDiffThreshold
Gaudi::Property< float > m_energyDiffThreshold
Definition: TileJetMonitorAlgorithm.h:77
TileJetMonitorAlgorithm.h
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:62
TileJetMonitorAlgorithm::m_jetPtMin
Gaudi::Property< float > m_jetPtMin
Definition: TileJetMonitorAlgorithm.h:54
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
TileJetMonitorAlgorithm::findIndex
unsigned int findIndex(const int gain, const float energy) const
Definition: TileJetMonitorAlgorithm.cxx:682
TileJetMonitorAlgorithm::isGoodEvent
bool isGoodEvent(const EventContext &ctx) const
Definition: TileJetMonitorAlgorithm.cxx:604
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:99
TileJetMonitorAlgorithm::m_energyE2Min
Gaudi::Property< float > m_energyE2Min
Definition: TileJetMonitorAlgorithm.h:63
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:108
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:73
TileCell.h
TileJetMonitorAlgorithm::m_jvt
ToolHandle< IJetUpdateJvt > m_jvt
Definition: TileJetMonitorAlgorithm.h:92
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
TileJetMonitorAlgorithm::m_energyE2Max
Gaudi::Property< float > m_energyE2Max
Definition: TileJetMonitorAlgorithm.h:64
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:70
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:794
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:889
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:60
TileJetMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileJetMonitorAlgorithm.cxx:33
TileJetMonitorAlgorithm::m_doEnergyDiffHistograms
Gaudi::Property< bool > m_doEnergyDiffHistograms
Definition: TileJetMonitorAlgorithm.h:76
CaloTime_fillDB.gain1
gain1
Definition: CaloTime_fillDB.py:356
TileJetMonitorAlgorithm::m_doEventCleaning
Gaudi::Property< bool > m_doEventCleaning
Definition: TileJetMonitorAlgorithm.h:79
TileJetMonitorAlgorithm::m_gainE4
Gaudi::Property< float > m_gainE4
Definition: TileJetMonitorAlgorithm.h:71
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
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:61
TileJetMonitorAlgorithm::m_do2DHistograms
Gaudi::Property< bool > m_do2DHistograms
Definition: TileJetMonitorAlgorithm.h:74
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
TileJetMonitorAlgorithm::cellName
std::string cellName(const int ros, const int sample, const int tower, const int module) const
Definition: TileJetMonitorAlgorithm.cxx:481
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
TileJetMonitorAlgorithm::m_jvtThreshold
Gaudi::Property< float > m_jvtThreshold
Definition: TileJetMonitorAlgorithm.h:82
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:65
TileJetMonitorAlgorithm::m_energyChanMin
Gaudi::Property< float > m_energyChanMin
Definition: TileJetMonitorAlgorithm.h:57
TileJetMonitorAlgorithm::m_tileBadChanTool
ToolHandle< ITileBadChanTool > m_tileBadChanTool
Definition: TileJetMonitorAlgorithm.h:88
TileJetMonitorAlgorithm::sampleName
std::string sampleName(const int ros, const int sample, const int tower) const
Definition: TileJetMonitorAlgorithm.cxx:446
TileJetMonitorAlgorithm::m_gain
Gaudi::Property< float > m_gain
Definition: TileJetMonitorAlgorithm.h:59
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:55
TileJetMonitorAlgorithm::isGoodJet
bool isGoodJet(const xAOD::Jet &jet) const
Definition: TileJetMonitorAlgorithm.cxx:666
TileJetMonitorAlgorithm::m_cellEnergyUpperLimitsHG
Gaudi::Property< std::vector< float > > m_cellEnergyUpperLimitsHG
Definition: TileJetMonitorAlgorithm.h:83
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:78
TileJetMonitorAlgorithm::m_tileID
const TileID * m_tileID
Definition: TileJetMonitorAlgorithm.h:105
TileJetMonitorAlgorithm::matchesEnergyRange
bool matchesEnergyRange(const int sample, const int tower, const float energy, const int gain) const
Definition: TileJetMonitorAlgorithm.cxx:543
TileJetMonitorAlgorithm::m_eventCleaningTool
ToolHandle< ECUtils::IEventCleaningTool > m_eventCleaningTool
Definition: TileJetMonitorAlgorithm.h:96
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