ATLAS Offline Software
TileTBBeamMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 #include "TileEvent/TileCell.h"
9 
10 #include "CaloIdentifier/TileID.h"
11 
12 #include "StoreGate/ReadHandle.h"
13 
14 #include <algorithm>
15 
17 
18  ATH_MSG_INFO("in initialize()");
20 
23 
24  ATH_CHECK( m_cablingSvc.retrieve() );
27 
28  std::vector<std::string> modules;
29  for (int fragID : m_fragIDs) {
30  int ros = fragID >> 8;
31  int drawer = fragID & 0x3F;
32  modules.push_back(TileCalibUtils::getDrawerString(ros, drawer));
34  }
35 
36  std::ostringstream os;
37  if ( m_fragIDs.size() != 0) {
38  std::sort(m_fragIDs.begin(), m_fragIDs.end());
39  for (int fragID : m_fragIDs) {
40  unsigned int ros = fragID >> 8;
41  unsigned int drawer = fragID & 0xFF;
43  os << " " << module << "/0x" << std::hex << fragID << std::dec;
44  }
45  } else {
46  os << "NONE";
47  }
48 
49  ATH_MSG_INFO("Monitored modules/frag ID:" << os.str());
50 
51 
52  std::map<std::string, unsigned int> roses = { {"AUX", 0}, {"LBA", 1}, {"LBC", 2}, {"EBA", 3}, {"EBC", 4} };
53  for (const std::string& maskedModuleChannels : m_masked) {
54 
55  std::string module = maskedModuleChannels.substr(0, 5);
56  std::string partition = module.substr(0, 3);
57  if (roses.count(partition) != 1) {
58  ATH_MSG_WARNING("There no such partition: " << partition << " in module: " << module
59  << " => skip because of bad format: " << maskedModuleChannels);
60  continue;
61  }
62 
63  unsigned int drawer = std::stoi(module.substr(3, 2)) - 1;
65  ATH_MSG_WARNING("There no such drawer: " << drawer + 1 << " in module: " << module
66  << " => skip because of bad format: " << maskedModuleChannels);
67  continue;
68  }
69 
70  unsigned int ros = roses.at(partition);
71  unsigned int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
72 
73  std::string gain = maskedModuleChannels.substr(5,7);
74  unsigned int adc = std::stoi(gain);
75 
77  ATH_MSG_WARNING("There no such gain: " << gain << " => skip because of bad format: " << maskedModuleChannels);
78  continue;
79  }
80 
81  std::stringstream channels(maskedModuleChannels.substr(7));
82  std::string channel;
83  while (std::getline(channels, channel, ',')) {
84  if (!channel.empty()) {
85  unsigned int chan = std::stoi(channel);
87  ATH_MSG_WARNING("There no such channel: " << chan << " in channels: " << channels.str()
88  << " => skip because of bad format: " << maskedModuleChannels);
89  continue;
90  }
91  m_maskedChannels[drawerIdx][chan] |= (1U << adc);
92  ATH_MSG_INFO(TileCalibUtils::getDrawerString(ros, drawer) << " ch" << chan << (adc ? " HG" : " LG") << ": masked!");
93  }
94  }
95 
96  }
97 
98  for (unsigned int pmt : m_maskMuonPMTs) {
99  if (pmt < m_maskedMuPMTs.size()) {
100  m_maskedMuPMTs[pmt] = true;
101  ATH_MSG_INFO("Masking Muon Wall PMT: " << pmt);
102  }
103  }
104 
105  using namespace Monitored;
106 
107  m_tofGroups = buildToolMap<int>(m_tools, "TOF", N_TOF);
108  m_tofDiffGroups = buildToolMap<int>(m_tools, "TOFDiff", m_tofPairs.size());
109  m_sCounterGroups = buildToolMap<int>(m_tools, "Scounter", N_S_COUNTER);
110  m_cherenkovGroups = buildToolMap<int>(m_tools, "Cherenkov", N_CHERENKOV);
111  m_scalerGroups = buildToolMap<int>(m_tools, "Scaler", N_SCALER);
112  m_muonWallGroups = buildToolMap<int>(m_tools, "MuonWallPMT", N_MUON_WALL_PMT);
113 
114  m_cherenkovVsTOFGroups = buildToolMap<std::vector<int>>(m_tools, "CherenkovVsTOF", N_TOF, N_CHERENKOV);
115 
116  std::vector<std::string> beamChambers{"BC1", "BC2"};
117  m_beamChamberGroups = buildToolMap<int>(m_tools, "BeamChamber", beamChambers);
118 
119  if (!m_caloCellContainerKey.empty()) {
120  m_cherenkovVsEnergyGroups = buildToolMap<int>(m_tools, "CherenkovVsEnergy", N_CHERENKOV);
121  }
122 
123  return StatusCode::SUCCESS;
124 }
125 
126 
127 StatusCode TileTBBeamMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
128 
129  // In case you want to measure the execution time
130  auto timer = Monitored::Timer("TIME_execute");
131 
132  uint32_t run = GetEventInfo(ctx)->runNumber();
133 
134  // TDC/BEAM Items
135  int muTag = 0;
136  int muHalo = 0;
137  int muVeto = 0;
138 
139  std::vector<std::reference_wrapper<int>> mu{muTag, muHalo, muVeto};
140 
141  int sCounter[N_S_COUNTER] = {0};
142  int cherenkov[N_CHERENKOV] = {0};
143  int scaler[N_SCALER] = {0};
144  int scaler12 = 0;
145 
146  // MUON/MuWall
147  float muonWall[N_MUON_WALL_PMT] = {0};
148 
149  int tof[N_TDC_CHANNELS] = {0};
150  int btdc[N_TDC_CHANNELS] = {0};
151  for (int i = 0; i < N_TDC_CHANNELS; i += 2) {
152  btdc[i] = +0xFFFF;
153  btdc[i+1] = -0xFFFF;
154  }
155  int btdcHitsN[N_TDC_CHANNELS] = {0};
156 
157  double totalMuonWallEnergy = 0;
158 
160  ATH_CHECK( beamElemContainer.isValid() );
161 
162  ATH_MSG_VERBOSE("TileRawDataContainer of TileRawDataCollection of TileBeamElem size = " << beamElemContainer->size());
163 
164  for (const TileBeamElemCollection* beamElemCollection : *beamElemContainer) {
165 
166  // Retreive frag identifiers
167  int frag = beamElemCollection->identify();
168  ATH_MSG_VERBOSE("TileRawDataCollection of TileBeamElem Id = 0x" << MSG::hex << frag << MSG::dec
169  << " size = " << beamElemCollection->size());
170 
171  for (const TileBeamElem* beamElement : *beamElemCollection) {
172 
173  ATH_MSG_VERBOSE((std::string) *beamElement);
174 
175  HWIdentifier id = beamElement->adc_HWID();
176  std::vector<uint32_t> digits = beamElement->get_digits();
177  int channel = m_tileHWID->channel(id);
178  int nDigits = digits.size();
179 
180  if ( nDigits <= 0 ) {
181  ATH_MSG_ERROR("Wrong no. of samples (" << nDigits
182  << ") for channel " << channel
183  << " in frag 0x"<< MSG::hex << frag << MSG::dec
184  << " - " << BeamFragName[frag & 0x1F]);
185  } else {
186 
187  int amplitude = digits[0];
188 
189  ATH_MSG_DEBUG("Found channel " << channel
190  << " in frag 0x" << MSG::hex << frag << MSG::dec
191  << " - " << BeamFragName[frag & 0x1F]
192  << " with amp=" << amplitude);
193 
194  switch (frag) {
195 
196  case MUON_ADC_FRAG:
197 
198  if(channel >= 0 && channel < 8) {
199  muonWall[channel] = amplitude;
200  if (!m_maskedMuPMTs[channel]) {
201  totalMuonWallEnergy += amplitude;
202  }
203  } else {
204  errorWrongChannel(frag, channel);
205  }
206 
207  break;
208 
209  case ADDR_ADC_FRAG:
210 
211  if(channel >= 0 && channel < 6) {
212  if (8 + channel < N_MUON_WALL_PMT) {
213  muonWall[8 + channel] = amplitude;
214  if (!m_maskedMuPMTs[8 + channel]) {
215  totalMuonWallEnergy += amplitude;
216  }
217  }
218  } else {
219  errorWrongChannel(frag, channel);
220  }
221 
222  break;
223 
224  case COMMON_TOF_FRAG:
225  if (m_TBperiod >= 2022) {
226  // The first channels are connected to BC1 and BC2, the last 4 channels are supposed to be TOF
227  if (channel > 11) {
228  if(channel < 16) {
229  tof[channel] = amplitude;
230  ATH_MSG_VERBOSE( "TOF: " << channel << " amp: " << amplitude);
231  } else {
232  errorWrongChannel(frag, channel);
233  }
234  break;
235  }
236  // Fall through to case COMMON_TDC1_FRAG to unpack the first channels of BC1 and BC2
237  [[fallthrough]]; // silent the warning on fall through
238  } else {
239  break;
240  }
241  case COMMON_TDC1_FRAG:
242 
243  if ((channel > 11) && (channel < 16) && (run > 2211136)) {
244  tof[channel] = amplitude;
245  ATH_MSG_VERBOSE( "TOF: " << channel << " amp: " << amplitude);
246  } else if (channel < 16) {
247  if (m_TBperiod >= 2021) {
248  if (btdcHitsN[channel] == 0) {
249  btdc[channel] = amplitude;
250  ++(btdcHitsN[channel]);
251  }
252  } else {
253  btdc[channel] = amplitude;
254  }
255  } else errorWrongChannel(frag, channel);
256  break;
257 
258  case BEAM_ADC_FRAG:
259 
260  if (channel >= 0 && channel < 8) {
261  if (channel < 3) {
262  sCounter[channel] = amplitude;
263  } else if (channel < 5) {
264  cherenkov[channel - 3] = amplitude;
265  } else {
266  mu[channel - 5] = amplitude;
267  }
268  } else {
269  errorWrongChannel(frag, channel);
270  }
271  break;
272 
273 
274  case COMMON_ADC1_FRAG:
275 
276  if (run > 2211444) {
277 
278  if (channel >= 0 && channel < 16) {
279  if (channel < 2) {
280  sCounter[channel] = amplitude;
281  } else if (channel == 2) {
282  // Before run #2310000 channel 2 was connected to PMT11 of muon wall.
283  // After this run this channel was connected to S3 scintillator.
284  if (run < 2310000) {
285  muonWall[10] = amplitude;
286  if (!m_maskedMuPMTs[10]) {
287  totalMuonWallEnergy += amplitude;
288  }
289  } else {
290  sCounter[2] = amplitude;
291  }
292  } else if (channel < 6) {
293  cherenkov[channel - 3] = amplitude;
294  } else {
295  muonWall[channel - 6] = amplitude;
296  if (!m_maskedMuPMTs[channel - 6]) {
297  totalMuonWallEnergy += amplitude;
298  }
299  }
300  } else {
301  errorWrongChannel(frag, channel);
302  }
303 
304  break;
305 
306  } else {
307 
308  if (channel >= 0 && channel < 16) {
309  if (channel < 3) {
310  sCounter[channel] = amplitude;
311  } else if (channel < 6) {
312  cherenkov[channel - 3] = amplitude;
313  }
314  } else {
315  errorWrongChannel(frag, channel);
316  }
317 
318  break;
319  }
320 
321 
322  case COMMON_ADC2_FRAG:
323 
324  if (run < 2211445) {
325 
326  if(channel >= 0 && channel < N_MUON_WALL_PMT) {
327  muonWall[channel] = amplitude;
328  if (!m_maskedMuPMTs[channel]) {
329  totalMuonWallEnergy += amplitude;
330  }
331  } else if (channel > 31) {
332  errorWrongChannel(frag, channel);
333  }
334  }
335  break;
336 
337  case COMMON_PTN_FRAG:
338  if (run > 2310000 && channel < 16) {
339  if (channel < N_SCALER) {
340  scaler[channel] = amplitude;
341  } else if (channel == N_SCALER) {
342  scaler12 = amplitude;
343  }
344  } else {
345  errorWrongChannel(frag, channel);
346  }
347  break;
348  }
349  }
350  }
351  }
352 
353  auto monTotalMuonEnergy = Monitored::Scalar<double>("TotalMuonEnergy", totalMuonWallEnergy);
354  fill("TileTBTotalMuonEnergy", monTotalMuonEnergy);
355 
356  std::vector<int> counterToTOF{14,15,13};
357  for (int counter = 0; counter < N_TOF; ++counter) {
358  auto monAmplitude = Monitored::Scalar<double>("amplitude", tof[counterToTOF[counter]]);
359  fill(m_tools[m_tofGroups[counter]], monAmplitude);
360  }
361 
362  for (unsigned int pairIdx = 0; pairIdx < m_tofPairs.size(); ++pairIdx) {
363  const std::pair<int, int>& tofPair = m_tofPairs[pairIdx];
364  int tof1 = tof[counterToTOF[tofPair.first - 1]];
365  int tof2 = tof[counterToTOF[tofPair.second - 1]];
366  if (tof1 != 0 && tof2 != 0) {
367  auto monTOFDiff = Monitored::Scalar<double>("TOFDiff", tof1 - tof2);
368  fill(m_tools[m_tofDiffGroups[pairIdx]], monTOFDiff);
369  }
370  }
371 
372  for (int counter = 0; counter < N_S_COUNTER; ++counter) {
373  auto monAmplitude = Monitored::Scalar<double>("amplitude", sCounter[counter]);
374  fill(m_tools[m_sCounterGroups[counter]], monAmplitude);
375  }
376 
377  for (int counter = 0; counter < N_CHERENKOV; ++counter) {
378  auto monAmplitude = Monitored::Scalar<double>("amplitude", cherenkov[counter]);
379  fill(m_tools[m_cherenkovGroups[counter]], monAmplitude);
380  }
381 
382  auto monCherenkovAmplitude1 = Monitored::Scalar<double>("amplitude1", cherenkov[0]);
383  auto monCherenkovAmplitude2 = Monitored::Scalar<double>("amplitude2", cherenkov[1]);
384  fill("CherCompare", monCherenkovAmplitude1, monCherenkovAmplitude2);
385 
386  for (int tofCounter = 0; tofCounter < N_TOF; ++tofCounter) {
387  auto monAmplitudeTOF = Monitored::Scalar<double>("amplitudeTOF", tof[counterToTOF[tofCounter]]);
388  for (int cherenkovCounter = 0; cherenkovCounter < N_CHERENKOV; ++cherenkovCounter) {
389  auto monAmplitudeCherenkov = Monitored::Scalar<double>("amplitudeCherenkov", cherenkov[cherenkovCounter]);
390  fill(m_tools[m_cherenkovVsTOFGroups[tofCounter][cherenkovCounter]], monAmplitudeTOF, monAmplitudeCherenkov);
391  }
392  }
393 
394 
395  if (run > 2310000) {
396  for (int counter = 0; counter < N_SCALER; ++counter) {
397  auto monCounts = Monitored::Scalar<double>("counts", scaler[counter]);
398  fill(m_tools[m_scalerGroups[counter]], monCounts);
399  }
400  auto monCounts12 = Monitored::Scalar<double>("counts12", scaler12);
401  fill("Scaler12", monCounts12);
402  }
403 
404  for (int pmt = 0; pmt < N_MUON_WALL_PMT; ++pmt) {
405  auto monAmplitude = Monitored::Scalar<double>("amplitude", muonWall[pmt]);
406  fill(m_tools[m_muonWallGroups[pmt]], monAmplitude);
407  }
408 
409  for (int row = 0; row < 2; ++row) {
410  for (int column = 0; column < 4; ++column) {
411  auto monRow = Monitored::Scalar<double>("row", row);
412  auto monColumn = Monitored::Scalar<double>("column", column);
413  auto monAmplitude = Monitored::Scalar<double>("amplitude", muonWall[7 - (row * 4 + column)]);
414  fill("PMTHitMap", monColumn, monRow, monAmplitude);
415  }
416  }
417 
418  // Beam Chamber Coordinates
419  // For BC1
420  auto bc1X = Monitored::Scalar<double>("BC1X", 0.);
421  auto bc1Y = Monitored::Scalar<double>("BC1Y", 0.);
422  if (run > 2211444) {
423  bc1X = (btdc[8] - btdc[0]) * m_bc1HorizontalSlope + m_bc1HorizontalOffset; // (right - left)
424  bc1Y = (btdc[9] - btdc[3]) * m_bc1VerticalSlope + m_bc1VerticalOffset; // (up - down)
425  } else {
426  bc1X = (btdc[1] - btdc[0]) * m_bc1HorizontalSlope + m_bc1HorizontalOffset; // (right - left)
427  bc1Y = (btdc[2] - btdc[3]) * m_bc1VerticalSlope + m_bc1VerticalOffset; // (up - down)
428  }
429  fill(m_tools[m_beamChamberGroups.at("BC1")], bc1X, bc1Y);
430 
431  // For BC2:
432  auto bc2X = Monitored::Scalar<double>("BC2X", (btdc[5] - btdc[4]) * m_bc2HorizontalSlope + m_bc2HorizontalOffset); // (right - left)
433  auto bc2Y = Monitored::Scalar<double>("BC2Y", (btdc[6] - btdc[7]) * m_bc2VerticalSlope + m_bc2VerticalOffset); // (up - down)
434  fill(m_tools[m_beamChamberGroups.at("BC2")], bc2X, bc2Y);
435 
436  // Sum Plots
437  // For BC1
438  auto bc1Xsum = Monitored::Scalar<double>("BC1Xsum", 0.);
439  auto bc1Ysum = Monitored::Scalar<double>("BC1Ysum", 0.);;
440  if (run > 2211444) {
441  bc1Xsum =(btdc[8] + btdc[0]) * m_bc1HorizontalSlope + m_bc1HorizontalOffset;
442  bc1Ysum = (btdc[9] + btdc[3]) * m_bc1VerticalSlope + m_bc1VerticalOffset;
443  } else {
444  bc1Xsum = (btdc[1] + btdc[0]) * m_bc1HorizontalSlope + m_bc1HorizontalOffset;
445  bc1Ysum = (btdc[2] + btdc[3]) * m_bc1VerticalSlope + m_bc1VerticalOffset;
446  }
447  fill(m_tools[m_beamChamberGroups.at("BC1")], bc1Xsum, bc1Ysum);
448 
449  //For BC2
450  auto bc2Xsum = Monitored::Scalar<double>("BC2Xsum", (btdc[5] + btdc[4]) * m_bc2HorizontalSlope + m_bc2HorizontalOffset);
451  auto bc2Ysum = Monitored::Scalar<double>("BC2Ysum", (btdc[6] + btdc[7]) * m_bc2VerticalSlope + m_bc2VerticalOffset);
452  fill(m_tools[m_beamChamberGroups.at("BC2")], bc2Xsum, bc2Ysum);
453 
454  //Impact Coordinates
455  // For one cell, plot energy total as a function of x Impact -- (xImp, cell_energy)...
456  auto xImp = Monitored::Scalar<double>("Ximp", bc2X + (bc2X - bc1X) * m_beamBC2Z / (m_beamBC1Z - m_beamBC2Z));
457  auto yImp = Monitored::Scalar<double>("Yimp", bc2Y + (bc2Y - bc1Y) * m_beamBC2Z / (m_beamBC1Z - m_beamBC2Z));
458  fill("ImpactProfile", xImp, yImp);
459 
460 
461  if (!m_caloCellContainerKey.empty()) {
462 
464  ATH_CHECK( caloCellContainer.isValid() );
465 
466  if (!caloCellContainer->empty()) {
467 
468  double cellEnergy = 0;
469  double totalEnergy(0.0);
470 
471  for (const CaloCell* cell : *caloCellContainer) {
472  if (m_tileID->is_tile(cell->ID())) {
473  const TileCell* tile_cell = dynamic_cast<const TileCell*>(cell);
474  if (!tile_cell) continue;
475 
476  const CaloDetDescrElement* caloDDE = cell->caloDDE();
477 
478  IdentifierHash hash1 = caloDDE->onl1();
479  IdentifierHash hash2 = caloDDE->onl2();
480 
481  double energy = 0.0;
482 
483  int gain1 = tile_cell->gain1();
484 
485  HWIdentifier channelId1 = m_tileHWID->channel_id(hash1);
486 
487  int ros1 = m_tileHWID->ros(channelId1);
488  int drawer1 = m_tileHWID->drawer(channelId1);
489  int channel1 = m_tileHWID->channel(channelId1);
490  int drawerIdx1 = TileCalibUtils::getDrawerIdx(ros1, drawer1);
491 
492  if (hash2 == TileHWID::NOT_VALID_HASH) {
493  if (m_monitoredDrawerIdx[drawerIdx1]) {
494  if (!((m_maskedChannels[drawerIdx1][channel1] >> gain1) & 1U)) {
495  energy = cell->energy();
496  }
497  }
498  } else {
499 
500  int gain2 = tile_cell->gain2();
501 
502  HWIdentifier channelId2 = m_tileHWID->channel_id(hash2);
503 
504  int ros2 = m_tileHWID->ros(channelId2);
505  int drawer2 = m_tileHWID->drawer(channelId2);
506  int channel2 = m_tileHWID->channel(channelId2);
507  int drawerIdx2 = TileCalibUtils::getDrawerIdx(ros2, drawer2);
508 
509  if (m_monitoredDrawerIdx[drawerIdx1] || m_monitoredDrawerIdx[drawerIdx2]) {
510  if ((m_maskedChannels[drawerIdx1][channel1] >> gain1) & 1U) {
511  if (!((m_maskedChannels[drawerIdx2][channel2] >> gain2) & 1U)) {
512  energy = tile_cell->ene2() * 2;
513  }
514  } else if ((m_maskedChannels[drawerIdx2][channel2] >> gain2) & 1U) {
515  if (!((m_maskedChannels[drawerIdx1][channel1] >> gain1) & 1U)) {
516  energy = tile_cell->ene1() * 2;
517  }
518  } else {
519  energy = cell->energy();
520  }
521  }
522  }
523 
524  double energy_pC = energy * 0.001; // keep energy in pC;
525  totalEnergy += energy_pC;
526 
527  if (energy_pC > cellEnergy) {
528  cellEnergy = energy_pC;
529  }
530  }
531  }
532 
533  auto monCellEnergy = Monitored::Scalar<double>("cellEnergy", cellEnergy);
534  auto monTotalEnergy = Monitored::Scalar<double>("totalEnergy", totalEnergy);
535 
536  for (int counter = 0; counter < N_CHERENKOV; ++counter) {
537  auto monAmplitude = Monitored::Scalar<double>("amplitude", cherenkov[counter]);
538  fill(m_tools[m_cherenkovVsEnergyGroups[counter]], monTotalEnergy, monAmplitude);
539  }
540 
541  fill("CellEnergyImpactX", xImp, monCellEnergy);
542  fill("CellEnergyImpactY", yImp, monCellEnergy);
543  fill("TotalEnergyImpactX", xImp, monTotalEnergy);
544  fill("TotalEnergyImpactY", yImp, monTotalEnergy);
545 
546  auto monAmplitudeS1 = Monitored::Scalar<double>("amplitude", sCounter[0]);
547  fill("ScinCalEnergy", monAmplitudeS1, monTotalEnergy);
548  }
549  }
550 
551  fill("TileTBBeamMonExecuteTime", timer);
552 
553  return StatusCode::SUCCESS;
554 }
555 
556 
558  ATH_MSG_ERROR("Wrong channel " << channel
559  << " in frag 0x" << MSG::hex << frag << MSG::dec
560  << " - " << BeamFragName[frag & 0x1F]);
561 }
TileTBBeamMonitorAlgorithm::m_maskedChannels
std::array< std::array< unsigned char, TileCalibUtils::MAX_CHAN >, TileCalibUtils::MAX_DRAWERIDX > m_maskedChannels
Definition: TileTBBeamMonitorAlgorithm.h:113
TileTBBeamMonitorAlgorithm::m_maskedMuPMTs
std::array< bool, N_MUON_WALL_PMT > m_maskedMuPMTs
Definition: TileTBBeamMonitorAlgorithm.h:112
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TileCell
Definition: TileCell.h:57
query_example.row
row
Definition: query_example.py:24
CaloDetDescrElement::onl2
IdentifierHash onl2() const
cell online identifier 2
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:408
TileTBBeamMonitorAlgorithm::m_bc1VerticalOffset
Gaudi::Property< double > m_bc1VerticalOffset
Definition: TileTBBeamMonitorAlgorithm.h:63
TileTBBeamMonitorAlgorithm::m_tofDiffGroups
std::vector< int > m_tofDiffGroups
Definition: TileTBBeamMonitorAlgorithm.h:97
COMMON_PTN_FRAG
#define COMMON_PTN_FRAG
Definition: TileTBFrag.h:48
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TileBeamElemCollection
Definition: TileBeamElemCollection.h:12
TileTBBeamMonitorAlgorithm::m_TBperiod
Gaudi::Property< int > m_TBperiod
Definition: TileTBBeamMonitorAlgorithm.h:50
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TileTBBeamMonitorAlgorithm::m_beamElemContainerKey
SG::ReadHandleKey< TileBeamElemContainer > m_beamElemContainerKey
Definition: TileTBBeamMonitorAlgorithm.h:38
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
xAOD::scaler
setOverV setNumU setNumY setODFibSel setYDetCS setYLhcCS setXRPotCS setXStatCS setXBeamCS scaler
Definition: ALFAData_v1.cxx:66
ReadBchFromCool.pmt
pmt
Definition: ReadBchFromCool.py:62
TileCell::ene1
float ene1(void) const
get energy of first PMT
Definition: TileCell.h:193
TileTBBeamMonitorAlgorithm::m_maskMuonPMTs
Gaudi::Property< std::vector< unsigned int > > m_maskMuonPMTs
Definition: TileTBBeamMonitorAlgorithm.h:90
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
TileTBBeamMonitorAlgorithm::m_bc1VerticalSlope
Gaudi::Property< double > m_bc1VerticalSlope
Definition: TileTBBeamMonitorAlgorithm.h:60
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
CaloTime_fillDB.gain2
gain2
Definition: CaloTime_fillDB.py:357
TileTBBeamMonitorAlgorithm.fragID
fragID
Definition: TileTBBeamMonitorAlgorithm.py:251
IdentifiableContainerMT::size
size_t size() const
Duplicate of fullSize for backwards compatability.
Definition: IdentifiableContainerMT.h:209
DeMoUpdate.column
dictionary column
Definition: DeMoUpdate.py:1110
ADDR_ADC_FRAG
#define ADDR_ADC_FRAG
Definition: TileTBFrag.h:26
TileTBBeamMonitorAlgorithm::m_monitoredDrawerIdx
std::array< bool, TileCalibUtils::MAX_DRAWERIDX > m_monitoredDrawerIdx
Definition: TileTBBeamMonitorAlgorithm.h:111
COMMON_TOF_FRAG
#define COMMON_TOF_FRAG
Definition: TileTBFrag.h:45
COMMON_ADC1_FRAG
#define COMMON_ADC1_FRAG
Definition: TileTBFrag.h:43
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
TileTBBeamMonitorAlgorithm::m_fragIDs
Gaudi::Property< std::vector< int > > m_fragIDs
Definition: TileTBBeamMonitorAlgorithm.h:47
TileTBBeamMonitorAlgorithm::m_masked
Gaudi::Property< std::vector< std::string > > m_masked
Definition: TileTBBeamMonitorAlgorithm.h:87
Example_ReadSampleNoise.drawer
drawer
Definition: Example_ReadSampleNoise.py:39
TileTBBeamMonitorAlgorithm::N_TDC_CHANNELS
@ N_TDC_CHANNELS
Definition: TileTBBeamMonitorAlgorithm.h:106
TileHWID::channel
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition: TileHWID.h:189
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:86
TileID.h
BEAM_ADC_FRAG
#define BEAM_ADC_FRAG
Definition: TileTBFrag.h:24
dq_defect_copy_defect_database.channels
def channels
Definition: dq_defect_copy_defect_database.py:56
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
TileHWID::ros
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
Definition: TileHWID.h:167
COMMON_TDC1_FRAG
#define COMMON_TDC1_FRAG
Definition: TileTBFrag.h:46
TileTBBeamMonitorAlgorithm::m_tofPairs
Gaudi::Property< std::vector< std::pair< int, int > > > m_tofPairs
Definition: TileTBBeamMonitorAlgorithm.h:93
CaloDetDescrElement::onl1
IdentifierHash onl1() const
cell online identifier 1
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:404
python.PyAthena.module
module
Definition: PyAthena.py:134
TileTBBeamMonitorAlgorithm::N_S_COUNTER
@ N_S_COUNTER
Definition: TileTBBeamMonitorAlgorithm.h:106
TileTBBeamMonitorAlgorithm.h
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
TileTBBeamMonitorAlgorithm::m_beamChamberGroups
std::map< std::string, int > m_beamChamberGroups
Definition: TileTBBeamMonitorAlgorithm.h:103
lumiFormat.i
int i
Definition: lumiFormat.py:92
ReadCellNoiseFromCool.chan
chan
Definition: ReadCellNoiseFromCool.py:52
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
TileTBBeamMonitorAlgorithm::N_SCALER
@ N_SCALER
Definition: TileTBBeamMonitorAlgorithm.h:106
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
TileTBBeamMonitorAlgorithm::N_TOF
@ N_TOF
Definition: TileTBBeamMonitorAlgorithm.h:106
TileTBBeamMonitorAlgorithm::m_tileID
const TileHWID * m_tileID
Definition: TileTBBeamMonitorAlgorithm.h:108
TileCell.h
TileTBBeamMonitorAlgorithm::m_cherenkovVsTOFGroups
std::vector< std::vector< int > > m_cherenkovVsTOFGroups
Definition: TileTBBeamMonitorAlgorithm.h:104
TileTBBeamMonitorAlgorithm::m_cherenkovVsEnergyGroups
std::vector< int > m_cherenkovVsEnergyGroups
Definition: TileTBBeamMonitorAlgorithm.h:102
TileTBBeamMonitorAlgorithm::errorWrongChannel
void errorWrongChannel(int frag, int channel) const
Definition: TileTBBeamMonitorAlgorithm.cxx:557
TileTBBeamMonitorAlgorithm::m_caloCellContainerKey
SG::ReadHandleKey< CaloCellContainer > m_caloCellContainerKey
Definition: TileTBBeamMonitorAlgorithm.h:84
TileTBBeamMonitorAlgorithm::m_beamBC1Z
Gaudi::Property< double > m_beamBC1Z
Definition: TileTBBeamMonitorAlgorithm.h:78
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TileTBBeamMonitorAlgorithm::m_tofGroups
std::vector< int > m_tofGroups
Definition: TileTBBeamMonitorAlgorithm.h:96
AtlasDetectorID::is_tile
bool is_tile(Identifier id) const
Definition: AtlasDetectorID.h:695
run
Definition: run.py:1
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
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
TileCell::gain1
int gain1(void) const
get gain of first PMT
Definition: TileCell.cxx:182
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TileTBBeamMonitorAlgorithm::N_CHERENKOV
@ N_CHERENKOV
Definition: TileTBBeamMonitorAlgorithm.h:106
TileTBBeamMonitorAlgorithm::m_bc2VerticalOffset
Gaudi::Property< double > m_bc2VerticalOffset
Definition: TileTBBeamMonitorAlgorithm.h:75
CaloTime_fillDB.gain1
gain1
Definition: CaloTime_fillDB.py:356
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
TileTBBeamMonitorAlgorithm::m_bc2HorizontalSlope
Gaudi::Property< double > m_bc2HorizontalSlope
Definition: TileTBBeamMonitorAlgorithm.h:66
TileHWID::channel_id
HWIdentifier channel_id(int ros, int drawer, int channel) const
channel HWIdentifer
Definition: TileHWID.cxx:198
TileTBBeamMonitorAlgorithm::m_beamBC2Z
Gaudi::Property< double > m_beamBC2Z
Definition: TileTBBeamMonitorAlgorithm.h:81
TileTBBeamMonitorAlgorithm::m_cablingSvc
ServiceHandle< TileCablingSvc > m_cablingSvc
Name of Tile cabling service.
Definition: TileTBBeamMonitorAlgorithm.h:44
TileTBBeamMonitorAlgorithm::m_bc2VerticalSlope
Gaudi::Property< double > m_bc2VerticalSlope
Definition: TileTBBeamMonitorAlgorithm.h:72
TileTBBeamMonitorAlgorithm::m_bc1HorizontalOffset
Gaudi::Property< double > m_bc1HorizontalOffset
Definition: TileTBBeamMonitorAlgorithm.h:57
TileTBFrag.h
TileTBBeamMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileTBBeamMonitorAlgorithm.cxx:16
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
MUON_ADC_FRAG
#define MUON_ADC_FRAG
Definition: TileTBFrag.h:25
TileTBBeamMonitorAlgorithm::m_bc2HorizontalOffset
Gaudi::Property< double > m_bc2HorizontalOffset
Definition: TileTBBeamMonitorAlgorithm.h:69
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
TileCell::ene2
float ene2(void) const
get energy of second PMT
Definition: TileCell.h:195
TileHWID::NOT_VALID_HASH
@ NOT_VALID_HASH
Definition: TileHWID.h:314
TileHWID::drawer
int drawer(const HWIdentifier &id) const
extract drawer field from HW identifier
Definition: TileHWID.h:171
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
ReadFloatFromCool.adc
adc
Definition: ReadFloatFromCool.py:48
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
StateLessPT_NewConfig.partition
partition
Definition: StateLessPT_NewConfig.py:49
TileTBBeamMonitorAlgorithm::N_MUON_WALL_PMT
@ N_MUON_WALL_PMT
Definition: TileTBBeamMonitorAlgorithm.h:106
TileTBBeamMonitorAlgorithm::m_cherenkovGroups
std::vector< int > m_cherenkovGroups
Definition: TileTBBeamMonitorAlgorithm.h:99
COMMON_ADC2_FRAG
#define COMMON_ADC2_FRAG
Definition: TileTBFrag.h:44
TileTBBeamMonitorAlgorithm::m_scalerGroups
std::vector< int > m_scalerGroups
Definition: TileTBBeamMonitorAlgorithm.h:100
TileTBBeamMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TileTBBeamMonitorAlgorithm.cxx:127
TileCalibUtils::getDrawerIdx
static unsigned int getDrawerIdx(unsigned int ros, unsigned int drawer)
Returns a drawer hash.
Definition: TileCalibUtils.cxx:60
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
ReadHandle.h
Handle class for reading from StoreGate.
TileBeamElem
Definition: TileBeamElem.h:27
TileCalibUtils::MAX_CHAN
static const unsigned int MAX_CHAN
Number of channels in drawer.
Definition: TileCalibUtils.h:141
TileTBBeamMonitorAlgorithm::m_tileHWID
const TileHWID * m_tileHWID
Definition: TileTBBeamMonitorAlgorithm.h:109
test_pyathena.counter
counter
Definition: test_pyathena.py:15
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
TileTBBeamMonitorAlgorithm::m_sCounterGroups
std::vector< int > m_sCounterGroups
Definition: TileTBBeamMonitorAlgorithm.h:98
TileTBBeamMonitorAlgorithm::m_bc1HorizontalSlope
Gaudi::Property< double > m_bc1HorizontalSlope
Definition: TileTBBeamMonitorAlgorithm.h:54
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
TileTBBeamMonitorAlgorithm::m_muonWallGroups
std::vector< int > m_muonWallGroups
Definition: TileTBBeamMonitorAlgorithm.h:101
TileCalibUtils::MAX_GAIN
static const unsigned int MAX_GAIN
Number of gains per channel
Definition: TileCalibUtils.h:142