ATLAS Offline Software
PPMSimBSMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 
9 PPMSimBSMonitorAlgorithm::PPMSimBSMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
10  : AthMonitorAlgorithm(name,pSvcLocator)
11 {
12 }
13 
15 
16  ATH_MSG_DEBUG("PPMSimBSMonitorAlgorithm::initialize");
17  ATH_MSG_DEBUG("Package Name "<< m_packageName);
18  ATH_MSG_DEBUG("m_xAODTriggerTowerContainerName "<< m_xAODTriggerTowerContainerName);
19 
20  // we initialise all the containers that we need
23 
24 
25  ATH_CHECK( m_ttTool.retrieve());
27 
29 
30  return StatusCode::SUCCESS;
31 }
32 
33 StatusCode PPMSimBSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
34 
35  ATH_MSG_DEBUG("PPMSimBSMonitorAlgorithm::fillHistograms");
36 
37 
38  // Retrieve L1CaloRunParametersContainer
40  unsigned int readoutConfigID = runParameters->runParameters(1)->readoutConfigID();
41  ATH_MSG_DEBUG("RunParameters:: readoutConfigID " << readoutConfigID);
42 
43  // Retrieve Trigger Towers from SG
45  if(!triggerTowerTES.isValid()){
46  ATH_MSG_ERROR("No Trigger Tower container found in TES "<< m_xAODTriggerTowerContainerName);
47  return StatusCode::FAILURE;
48  }
49 
50  // Create a vector of trigger towers with quantities to be monitored
51  std::vector<MonitorTT> vecMonTT; // All towers
52 
53  const int nCrates = 8;
54  ErrorVector crateError(nCrates);
55  ErrorVector moduleError(nCrates);
56 
57  bool error_tt{false};
58 
59  // PPM sim vectors
60  std::vector<int> LutCp;
61  std::vector<int> LutJep;
62  std::vector<int> BcidR;
63  std::vector<int> BcidD;
64 
65  // Loop over trigger tower container
66  // Create the trigger tower objects and calculate scaled phi
67  for (const xAOD::TriggerTower* tt : *triggerTowerTES) {
68  ATH_CHECK( makePPMTower(tt, vecMonTT) );
69  }
70 
71 
72  std::vector<std::string> mismatch_map= {"NonZeroMatches", "ZeroMatches", "DataNoSim", "SimNoData"};
73  std::vector<std::string> lut_map= { "SimEqData", "SimNeData", "SimNoData", "DataNoSim"};
74  std::vector<std::string> crate_map= { "cr0cr1", "cr2cr3", "cr4cr5", "cr6cr7"};
75 
76  // set maximum number of error events per lumiblock(per type) to avoid histograms with many x-bins
77  const int maxErrorsPerLB=10;
78 
79  auto lb = GetEventInfo(ctx)->lumiBlock();
80  ATH_MSG_DEBUG("Lumi Block" << lb);
81  const long long eventNumber = ctx.eventID().event_number();
82  ATH_MSG_DEBUG("Event Number" << eventNumber);
83 
84 
85 
86  // Loop over the trigger tower objects and fill the histograms
87 
88  for (auto& myTower : vecMonTT) {
89  ATH_MSG_DEBUG("PPMSimBSMonitorAlgorithm looping over TTs");
90 
91  const double eta = (myTower.tower)->eta();
92  const double phi = (myTower.tower)->phi();
93  const int datCp = (myTower.tower)->cpET();
94  const int datJep = (myTower.tower)->lut_jep().empty() ? 0 : (myTower.tower)->jepET();
95  bool pedCorrOverflow = false;
96  const std::size_t nPedCorr = (myTower.tower)->correction().size();
97  int simCp = 0;
98  int simJep = 0;
99  int simBcid = 0;
100  uint8_t datBcid = 0;
101  std::vector<uint8_t> datBcidVec = ( (myTower.tower)->bcidVec());
102  if ( datBcidVec.size() > 0) {
103  datBcid = datBcidVec[ (myTower.tower)->peak()];
104  }
105 
106 
107 
108  //Retrieve RunParameters container from COOL database and check if run was taken with 80MHz readout. If yes, drop the 80MHz samples to emulate 40 MHz readout
109  std::vector<uint16_t> digits40;
110 
111  if(readoutConfigID==5 or readoutConfigID==6){
112 
113  int nSlices = (myTower.tower)->adc().size();
114 
115  if((nSlices%4)==3){
116  for (int i=0 ; i < (nSlices-1)/2 ; i++ ){
117  digits40.push_back((myTower.tower)->adc().at(2*i+1));
118  }
119  }
120  else if((nSlices%4)==1){
121  for (int i=0 ; i <= (nSlices-1)/2 ; i++ ){
122  digits40.push_back((myTower.tower)->adc().at(2*i));
123  }
124  }
125 
126  }else{
127  digits40 = (myTower.tower)->adc();
128  }
129 
130  const std::vector<uint_least16_t>& ADC = digits40;
131  const int Slices = ADC.size();
132  const int Peak = Slices/2.;
133 
134  //Check for over-/underflow of pedestalCorrection
135  for(std::size_t i = 0; i < nPedCorr; ++i) {
136  if((myTower.tower)->correction()[i]>=511 or (myTower.tower)->correction()[i]<=-512){
137  pedCorrOverflow = true;
138  break;
139  }
140  }
141 
142 
143  // only run simulation for non-empty TTs
144  if(datCp || datJep || *std::max_element(std::begin(ADC), std::end(ADC)) >= m_simulationADCCut) {
145  BcidR.clear();
146  BcidD.clear();
147  m_ttTool->simulateChannel(*(myTower.tower), LutCp, LutJep, BcidR, BcidD);
148  simBcid = BcidR[Peak];
149  if (Slices < 7 || nPedCorr < 3) {
150  simJep = LutJep[Peak];
151  simCp = LutCp[Peak];
152  }
153  }
154 
155 
156 
157  // ---------------------Fill in error plots------------------------
158  int mismatch = 0;
159 
160  std::string groupName = "group_Mismatch_peakf_";
161 
162  if (datCp || datJep || *std::max_element(std::begin(ADC), std::end(ADC)) >= m_simulationADCCut) {
163  std::bitset<3> simBcidBits(simBcid);
164  std::bitset<3> datBcidBits(datBcid);
165  if ((Slices >= 7) && (nPedCorr >= 3)) { // compare simulation of peak finder to data (sim not possible in 5+1 readout mode)
166  if (simBcidBits[2] && datBcidBits[2]) { //non-zero match
167  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + mismatch_map.at(0), "", 1) );
168  }
169  else if (!simBcidBits[2] && !datBcidBits[2]) { // zero match
170  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + mismatch_map.at(1), "", 1) );
171  }
172  else if (simBcidBits[2] != datBcidBits[2]) { // mismatch
173  mismatch = 1;
174  if (!simBcidBits[2]) { //data no sim
175  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + mismatch_map.at(2), "", 1) );
176  }
177  else if (!datBcidBits[2]) { //sim no data
178  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + mismatch_map.at(3), "", 1) );
179  }
180  ATH_MSG_DEBUG(" PeakfinderBCID sim/data Mismatch eta/phi/sim/dat: " << eta << "/" << phi << "/" << simBcidBits[2] << "/" << datBcidBits[2]);
181  }
182  }
183 
184 
185 
186  groupName = "group_Mismatch_satBcid_";
187 
188  if (ADC[0] < 1020 && ADC[1] < 1020) { // compare simulation of saturated bcid algorithm to data
189  if (simBcidBits[1] && datBcidBits[1]) { // non-zero match
190  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + mismatch_map.at(0), "", 1) );
191  }
192  else if (!simBcidBits[1] && !datBcidBits[1]) { // zero match
193  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + mismatch_map.at(1), "", 1) );
194  }
195  else if (simBcidBits[1] != datBcidBits[1]) { // mismatch
196  mismatch = 1;
197  if (!simBcidBits[1]) { // data no sim
198  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + mismatch_map.at(2), "", 1) );
199  mismatch=0;
200  }
201  else if (!datBcidBits[1]) { // sim no data
202  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + mismatch_map.at(3), "", 1) );
203  }
204  ATH_MSG_DEBUG(" SaturatedBCID sim/data Mismatch eta/phi/sim/dat: "
205  << eta << "/" << phi << "/" << simBcidBits[1] << "/" << datBcidBits[1]);
206  }
207  }
208  }
209 
210 
211  // Compare LUT simulation to data
212  // only fill histograms for non-empty towers (simulation or data)
213  if (!simCp && !datCp && !simJep && !datJep) continue;
214 
215 
216  groupName = "groupLUTCP_EM_";
217  if ( (myTower.tower)->layer() == 0) { // For EM layer
218  // For LUT-CP
219  if (simCp && simCp == datCp) { // non-zero match
220  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(0), "", 1) );
221  }
222  else if (simCp != datCp && !pedCorrOverflow) { // mis-match
223  mismatch = 1;
224  if (simCp && datCp) { // non-zero mis-match
225  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(1), "", 1) );
226  }
227  else if (!datCp) { // no data
228  if ((Slices >= 7) && (nPedCorr >= 3)) {
229  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(2), "", 1) );
230  }
231  else mismatch = 0;
232  }
233  else { // no sim
234  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(3), "", 1) );
235  }
236  ATH_MSG_DEBUG(" EMTowerMismatch eta/phi/sim/dat: "
237  << eta << "/" << phi << "/" << simCp << "/" << datCp);
238  }
239 
240 
241  groupName = "groupLUTJEP_EM_";
242 
243  if (simJep && simJep == datJep) { // non-zero match
244  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(0), "", 1) );
245  }
246  else if (simJep != datJep && !pedCorrOverflow) { // mis-match
247  mismatch = 1;
248  if (simJep && datJep) { // non-zero mis-match
249  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(1), "", 1) );
250  }
251  else if (!datJep) { // no data
252  if ((Slices >= 7) && (nPedCorr >= 3)) {
253  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(2), "", 1) );
254  }
255  else mismatch = 0;
256  }
257  else {
258  // no sim
259  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(3), "", 1) );
260  }
261  ATH_MSG_DEBUG(" EMTowerMismatch eta/phi/sim/dat: "
262  << eta << "/" << phi << "/" << simJep << "/" << datJep);
263  }
264  }
265 
266 
267  // For HAD layer
268  groupName = "groupLUTCP_HAD_";
269 
270  if ((myTower.tower)->layer() == 1) { // For HAD layer
271  // For LUT-CP
272  if (simCp && simCp == datCp) { // non-zero match
273  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(0), "", 1) );
274  }
275  else if (simCp != datCp && !pedCorrOverflow ) { // mis-match
276  mismatch = 1;
277  if (simCp && datCp) { // non-zero mis-match
278  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(1), "", 1) );
279  }
280  else if (!datCp) { // no data
281  if ((Slices >= 7) && (nPedCorr >= 3)) {
282  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(2), "", 1) );
283  }
284  else mismatch = 0;
285  }
286  else { // no sim
287  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(3), "", 1) );
288  }
289  ATH_MSG_DEBUG(" HADTowerMismatch eta/phi/sim/dat: "
290  << eta << "/" << phi << "/" << simCp << "/" << datCp);
291  }
292 
293  // For LUT-JEP
294  groupName = "groupLUTJEP_HAD_";
295 
296  if (simJep && simJep == datJep) { // non-zero match
297  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(0), "", 1) );
298  }
299  else if (simJep != datJep && !pedCorrOverflow ) { // mis-match
300  mismatch = 1;
301  if (simJep && datJep) { // non-zero mis-match
302  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(1), "", 1) );
303  }
304  else if (!datJep) { // no data
305  if ((Slices >= 7) && (nPedCorr >= 3)) {
306  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(2), "", 1) );
307  }
308  else mismatch = 0;
309  }
310  else { // no sim
311  ATH_CHECK( fillPPMEtaPhi(myTower, groupName + lut_map.at(3), "", 1) );
312 
313  }
314  ATH_MSG_DEBUG(" HADTowerMismatch eta/phi/sim/dat: "
315  << eta << "/" << phi << "/" << simJep << "/" << datJep);
316  }
317  }
318 
319 
320 
321 
322  groupName = "group_Error_";
323 
324 
325  // scope for mutable error event per lumi block tt counter
326 
327 
328 
329  if (mismatch == 1) {
330  std::lock_guard<std::mutex> lock(m_mutex);
331  const L1CaloCoolChannelId coolId((myTower.tower)->coolId());
332  const int crate = coolId.crate();
333  const int module = coolId.module();
334  crateError[crate] = 1;
335  if (!error_tt) {
336  m_errorLB_tt_counter[lb]+=1;
337  error_tt = true;
338  }
339  if (!((moduleError[crate] >> module) & 0x1)) {
340  const int y = module + 16 * (crate % 2);
341  auto y_2D = Monitored::Scalar<int>("y_2D", y);
342  if (m_errorLB_tt_counter[lb]<=maxErrorsPerLB) {
343  auto eventMonitor= Monitored::Scalar<std::string>("eventMonitor", std::to_string(eventNumber));
344  if (crate == 0 || crate == 1) fill(groupName + crate_map.at(0), eventMonitor, y_2D );
345  else if (crate == 2 || crate == 3) fill(groupName + crate_map.at(1), eventMonitor, y_2D );
346  else if (crate == 4 || crate == 5) fill(groupName + crate_map.at(2), eventMonitor, y_2D );
347  else if (crate == 6 || crate == 7) fill(groupName + crate_map.at(3), eventMonitor, y_2D );
348  moduleError[crate] |= (1 << module);
349  }
350  }
351  }
352 
353 
354 
355  } // End loop over tower objects
356 
357 
358  // Save error vector for global summary
359  {
360  auto save = std::make_unique<ErrorVector>(crateError);
361  auto* result = SG::makeHandle(m_errorLocation, ctx).put(std::move(save));
362  if (!result) {
363  ATH_MSG_ERROR("Error recording PPMSimBS mismatch vector in TES");
364  return StatusCode::FAILURE;
365  }
366  }
367 
368 
369  return StatusCode::SUCCESS;
370 }
371 
372 
374  std::vector<MonitorTT> &vecMonTT) const
375 {
376  // Geometry
377  const double phi = tt->phi();
378  double phiMod = phi * m_phiScaleTT;
379 
380  // LUT JEP
381  int jepET = 0;
382  const std::vector<uint_least8_t> jepETvec = tt->lut_jep();
383  if (jepETvec.size() > 0) jepET = tt->jepET();
384 
385 
386  // Fill TT quantities
387  MonitorTT monTT;
388  monTT.tower = tt;
389  monTT.phiScaled = phiMod;
390  monTT.jepET = jepET;
391  monTT.phi1d = 0;
392  monTT.maxADC = 0;
393  vecMonTT.push_back(monTT);
394 
395  return StatusCode::SUCCESS;
396 }
397 
398 
400  const std::string& groupName,
401  const std::string& weightName,
402  double weight) const {
403 
404  // Number of bins filled in phi depends on eta due to electronics coverage
405 
406  // KW to do: fill in shrinkEtaBins part
407  double phiMod = monTT.phiScaled; // Integer binning for 2D plots
408  double etaMod = monTT.tower->eta();
409  const double absEta = std::abs(etaMod);
410 
411  const std::vector<double> offset32 = {1.5, 0.5, -0.5, -1.5};
412  const std::vector<double> offset25 = {0.5, -0.5};
413  std::vector<double> offset = {};
414 
415  if (absEta > 3.2) {
416  // Fill four bins in phi
417  phiMod = std::floor(phiMod/4)*4. + 2.;
418  offset = offset32;
419  }
420  else if (absEta > 2.5) {
421  // Fill two bins in phi
422  phiMod = std::floor(phiMod/2)*2. + 1.;
423  offset = offset25;
424  }
425  else {
426  offset = {0.};
427  }
428 
429  ATH_MSG_DEBUG("absEta: " << absEta << "offset.size(): " << offset.size());
430 
431  // Fill the histograms
432  for (auto phiOffset : offset) {
433 
434  auto etaTT_2D = Monitored::Scalar<double>("etaTT_2D", etaMod);
435  auto phiTT_2D = Monitored::Scalar<double>("phiTT_2D", phiMod + phiOffset);
436 
437  auto weight_2D = Monitored::Scalar<double>(weightName, weight); // Weight for filling 2D profile histograms; name must be included in python histogram definition
438  ATH_MSG_DEBUG("groupName: weight_2D" << weight_2D);
439 
440  fill(groupName, etaTT_2D, phiTT_2D, weight_2D);
441 
442  }
443 
444 
445 
446 
447 
448 
449 
450  return StatusCode::SUCCESS;
451 }
452 
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
PPMSimBSMonitorAlgorithm::MonitorTT::jepET
int jepET
phi for 1d phi distributions (taking into account granularity in eta)
Definition: PPMSimBSMonitorAlgorithm.h:32
PPMSimBSMonitorAlgorithm::fillPPMEtaPhi
StatusCode fillPPMEtaPhi(MonitorTT &monTT, const std::string &groupName, const std::string &weightName, double weight) const
Definition: PPMSimBSMonitorAlgorithm.cxx:399
MonDataType::ADC
@ ADC
get_generator_info.result
result
Definition: get_generator_info.py:21
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
PPMSimBSMonitorAlgorithm::MonitorTT
Struct to contain PPM trigger tower info.
Definition: PPMSimBSMonitorAlgorithm.h:28
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
RunTileMonitoring.groupName
groupName
Definition: RunTileMonitoring.py:158
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
L1CaloCoolChannelId::crate
unsigned int crate() const
Definition: L1CaloCoolChannelId.h:25
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
PPMSimBSMonitorAlgorithm::m_simulationADCCut
Gaudi::Property< int > m_simulationADCCut
Definition: PPMSimBSMonitorAlgorithm.h:49
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
tools.zlumi_mc_cf.correction
def correction(mu, runmode, campaign, run=None)
Definition: zlumi_mc_cf.py:4
python.PyAthena.module
module
Definition: PyAthena.py:134
PPMSimBSMonitorAlgorithm::MonitorTT::tower
const xAOD::TriggerTower * tower
Definition: PPMSimBSMonitorAlgorithm.h:29
PPMSimBSMonitorAlgorithm::makePPMTower
StatusCode makePPMTower(const xAOD::TriggerTower *tt, std::vector< MonitorTT > &vecMonTT) const
Helper functions.
Definition: PPMSimBSMonitorAlgorithm.cxx:373
PPMSimBSMonitorAlgorithm::m_phiScaleTT
Gaudi::Property< double > m_phiScaleTT
Properties.
Definition: PPMSimBSMonitorAlgorithm.h:48
checkTP.save
def save(self, fileName="./columbo.out")
Definition: checkTP.py:178
StlVectorClids.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
python.BunchSpacingUtils.lb
lb
Definition: BunchSpacingUtils.py:88
L1CaloRunParametersContainer::runParameters
const L1CaloRunParameters * runParameters(unsigned int channelId) const
Definition: L1CaloRunParametersContainer.cxx:93
lumiFormat.i
int i
Definition: lumiFormat.py:92
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
PPMSimBSMonitorAlgorithm::m_mutex
std::mutex m_mutex
Definition: PPMSimBSMonitorAlgorithm.h:71
xAOD::TriggerTower_v2
Description of TriggerTower_v2.
Definition: TriggerTower_v2.h:49
xAOD::TriggerTower_v2::eta
virtual double eta() const final
The pseudorapidity ( ) of the particle.
Definition: TriggerTower_v2.cxx:210
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IL1TriggerTowerToolRun3.h
xAOD::eventNumber
eventNumber
Definition: EventInfo_v1.cxx:124
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
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
PPMSimBSMonitorAlgorithm.h
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
PPMSimBSMonitorAlgorithm::ErrorVector
std::vector< int > ErrorVector
Definition: PPMSimBSMonitorAlgorithm.h:38
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
PPMSimBSMonitorAlgorithm::m_runParametersContainer
SG::ReadCondHandleKey< L1CaloRunParametersContainer > m_runParametersContainer
Definition: PPMSimBSMonitorAlgorithm.h:58
PPMSimBSMonitorAlgorithm::PPMSimBSMonitorAlgorithm
PPMSimBSMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: PPMSimBSMonitorAlgorithm.cxx:9
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
L1CaloCoolChannelId
Definition: L1CaloCoolChannelId.h:10
y
#define y
ReadFloatFromCool.adc
adc
Definition: ReadFloatFromCool.py:48
PPMSimBSMonitorAlgorithm::m_xAODTriggerTowerContainerName
SG::ReadHandleKey< xAOD::TriggerTowerContainer > m_xAODTriggerTowerContainerName
container keys including steering parameter and description
Definition: PPMSimBSMonitorAlgorithm.h:43
PPMSimBSMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: PPMSimBSMonitorAlgorithm.cxx:33
PPMSimBSMonitorAlgorithm::MonitorTT::phi1d
double phi1d
phi for 2d maps with integer bins (taking into account granularity in eta)
Definition: PPMSimBSMonitorAlgorithm.h:31
PPMSimBSMonitorAlgorithm::MonitorTT::phiScaled
double phiScaled
Definition: PPMSimBSMonitorAlgorithm.h:30
PPMSimBSMonitorAlgorithm::m_errorLocation
SG::WriteHandleKey< std::vector< int > > m_errorLocation
Definition: PPMSimBSMonitorAlgorithm.h:54
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
TauGNNUtils::Variables::absEta
bool absEta(const xAOD::TauJet &tau, double &out)
Definition: TauGNNUtils.cxx:232
PPMSimBSMonitorAlgorithm::m_ttTool
ToolHandle< LVL1::IL1TriggerTowerToolRun3 > m_ttTool
Definition: PPMSimBSMonitorAlgorithm.h:45
PPMSimBSMonitorAlgorithm::m_packageName
StringProperty m_packageName
Definition: PPMSimBSMonitorAlgorithm.h:40
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
fillSCTHists.etaMod
etaMod
Definition: fillSCTHists.py:23
PPMSimBSMonitorAlgorithm::MonitorTT::maxADC
double maxADC
Definition: PPMSimBSMonitorAlgorithm.h:33
L1CaloRunParameters::readoutConfigID
unsigned int readoutConfigID() const
Definition: L1CaloRunParameters.h:29
TileDCSDataPlotter.tt
tt
Definition: TileDCSDataPlotter.py:874
L1CaloCoolChannelId::module
unsigned int module(bool logical=true) const
PPMSimBSMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: PPMSimBSMonitorAlgorithm.cxx:14