ATLAS Offline Software
SCEmulation.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "SCEmulation.h"
6 #include "StoreGate/ReadHandle.h"
11 #include <memory>
12 #include <TFile.h>
13 #include <TKey.h>
14 #include <TRandom3.h>
15 #include <regex>
16 #include <set>
17 #include <algorithm>
18 #include <limits>
19 #include <random>
20 #include <cstring>
21 
22 namespace
23 {
31  std::size_t getIndex(const std::vector<float> &bins, float value)
32  {
33  auto itr = std::upper_bound(bins.begin(), bins.end(), value);
34  // upper_bound returns an iterator to the first value larger than value
35  // If begin is returned, then value is below the lowest bin edge,
36  // If end is returned, then value is above the highest bin edge
37  if (itr == bins.begin() || itr == bins.end())
38  return SIZE_MAX;
39  return std::distance(bins.begin(), itr) - 1;
40  }
41 
43  float getRandom(const std::map<float, float> &integrals, std::mt19937_64 &generator)
44  {
45  // The integrals are essentially a binned cdf (though not necessarily properly normalised)
46  // We invert this by constructing a random number uniformly distributed between the
47  // minimum and maximum values of the cumulative integral (the keys of the map).
48  // This allows us to locate the correct bin
49  // The values in the map then correspond to upper edges of each bin, so we can get the
50  // pair of edges from the iterator found by lower_bound and the previous one.
51  // We then perform a simple linear interpolation using how far the random number is into the cdf bin
52  // to approximate the timing to be returned
53  float start = integrals.begin()->first;
54  float end = integrals.rbegin()->first;
55  std::uniform_real_distribution<float> distr(start, end);
56  float r = distr(generator);
57  auto itr = integrals.lower_bound(r);
58  if (itr == integrals.end() || itr == integrals.begin())
59  {
60  // This should never be triggered
61  return -1;
62  }
63  float lowBinEdge, lowBinValue, highBinEdge, highBinValue;
64  std::tie(highBinEdge, highBinValue) = *itr;
65  std::tie(lowBinEdge, lowBinValue) = *(--itr);
66  // Interpolate between the two bin edges
67  float pctDiff = (r - lowBinEdge) / (highBinEdge - lowBinEdge);
68  return lowBinValue + pctDiff * (highBinValue - lowBinValue);
69  }
70 } // namespace
71 
72 namespace LVL1
73 {
74  SCEmulation::SCEmulation(const std::string &name, ISvcLocator *pSvcLocator)
75  : AthReentrantAlgorithm(name, pSvcLocator)
76  {
77  declareProperty("InputCells", m_inputCellsKey = "AllCalo");
78  declareProperty("OutputSuperCells", m_outputSuperCellsKey = "SCEmulationNoBCId");
79  declareProperty("EventInfo", m_evtInfoKey = "EventInfo");
80  declareProperty("SCIDTool", m_scidTool);
81  declareProperty("CompensateForNoise", m_useNoise = true);
82  declareProperty("CompensateForBCID", m_useBCID = true);
83  declareProperty("CellTimingFile", m_cellTimingFile = "Run3L1CaloSimulation/SuperCells/CellTimingDistributions.MiddleTrain.r11881.20210211.root");
84  }
85 
87 
89  {
90  ATH_MSG_INFO("Initializing " << name() << "...");
92  ATH_CHECK(m_scidTool.retrieve());
97 
100 
101  std::unique_ptr<TFile> timingFile(TFile::Open(PathResolver::find_calib_file(m_cellTimingFile).c_str()));
102  ATH_MSG_INFO("...");
103  if (!timingFile || timingFile->IsZombie())
104  {
105  ATH_MSG_ERROR("Failed to open cell timing file " << m_cellTimingFile);
106  return StatusCode::FAILURE;
107  }
108  TDirectory *tdir = timingFile->GetDirectory("CellTiming");
109  if (!tdir)
110  {
111  ATH_MSG_ERROR(m_cellTimingFile << " has no CellTiming directory!");
112  return StatusCode::FAILURE;
113  }
114 
115  // Regex pattern for histogram names
116  std::regex pattern("Layer(\\d+)_([\\d.]+)eta([\\d.]+)_([\\d.-]+)ET([\\d.-]+)_midtrain");
117  std::map<CaloSampling::CaloSample, std::set<std::pair<float, float>>> etaBins;
118  std::map<CaloSampling::CaloSample, std::set<std::pair<float, float>>> etBins;
119  std::map<CaloSampling::CaloSample, std::map<std::pair<std::pair<float, float>, std::pair<float, float>>, TH1F *>> tmpHistMap;
120  std::set<CaloSampling::CaloSample> samples;
121  for (TObject *obj : *tdir->GetListOfKeys())
122  {
123  TKey *key = dynamic_cast<TKey *>(obj);
124  if (!key)
125  {
126  ATH_MSG_ERROR(obj->GetName() << " is not a TKey");
127  return StatusCode::FAILURE;
128  }
129  std::cmatch match;
130  if (!std::regex_match(key->GetName(), match, pattern))
131  {
132  continue;
133  }
134  if (std::strcmp(key->GetClassName(), "TH1F") != 0)
135  {
136  ATH_MSG_ERROR("Object " << key->GetName() << " not histogram as expected!");
137  return StatusCode::FAILURE;
138  }
139  CaloSampling::CaloSample sample = static_cast<CaloSampling::CaloSample>(std::stoi(match.str(1)));
140  samples.insert(sample);
141 
142  auto etaBin = std::make_pair(std::stof(match.str(2)), std::stof(match.str(3)));
143  auto etBin = std::make_pair(std::stof(match.str(4)), std::stof(match.str(5)));
144 
145  etaBins[sample].insert(etaBin);
146  etBins[sample].insert(etBin);
147  tmpHistMap[sample][std::make_pair(etaBin, etBin)] = (TH1F *)key->ReadObj();
148  }
149  // Now regularise the binning
150  for (CaloSampling::CaloSample sample : samples)
151  {
152  auto itr = etaBins[sample].begin();
153  auto end = etaBins[sample].end();
154  m_etaBins[sample].reserve(std::distance(itr, end) + 1);
155  m_etaBins[sample].push_back(itr->first);
156  m_etaBins[sample].push_back(itr->second);
157  ++itr;
158  for (; itr != end; ++itr)
159  {
160  // Make sure that the bin edges match up
161  if (itr->first != m_etaBins[sample].back())
162  {
163  ATH_MSG_ERROR("Eta bins do not match up for sample " << sample << "(" << m_etaBins[sample].back() << ", " << itr->first << ")");
164  return StatusCode::FAILURE;
165  }
166  m_etaBins[sample].push_back(itr->second);
167  }
168 
169  itr = etBins[sample].begin();
170  end = etBins[sample].end();
171  m_etBins[sample].reserve(std::distance(itr, end) + 1);
172  m_etBins[sample].push_back(itr->first);
173  m_etBins[sample].push_back(itr->second);
174  ++itr;
175  for (; itr != end; ++itr)
176  {
177  // Make sure that the bin edges match up
178  if (itr->first != m_etBins[sample].back())
179  {
180  ATH_MSG_ERROR("Et bins do not match up for sample " << sample);
181  return StatusCode::FAILURE;
182  }
183  m_etBins[sample].push_back(itr->second);
184  }
185 
186  // Now copy the histograms over
187  for (const auto &p : tmpHistMap[sample])
188  {
189  // Use the lower bounds of each bins to get the index
190  std::size_t etaIndex = getEtaIndex(sample, p.first.first.first);
191  std::size_t etIndex = getEtIndex(sample, p.first.second.first);
192  auto mapKey = std::make_tuple(sample, etaIndex, etIndex);
193  std::map<float, float> &integrals = m_timingSamples[mapKey];
194  float cumulativeSum = 0;
195  TAxis *axis = p.second->GetXaxis();
196  integrals[cumulativeSum] = axis->GetBinLowEdge(1);
197  for (int idx = 1; idx < axis->GetNbins(); ++idx)
198  {
199  cumulativeSum += p.second->GetBinContent(idx);
200  integrals[cumulativeSum] = axis->GetBinUpEdge(idx);
201  }
202  }
203  }
204  return StatusCode::SUCCESS;
205  }
206 
207  StatusCode SCEmulation::execute(const EventContext &ctx) const
208  {
209  // Prepare output container
210  auto superCells = std::make_unique<CaloCellContainer>();
211  // Get input
212  auto cells = SG::makeHandle(m_inputCellsKey, ctx);
213  if (!cells.isValid())
214  {
215  ATH_MSG_ERROR("Failed to retrieve input cells " << m_inputCellsKey.key());
216  return StatusCode::FAILURE;
217  }
218 
219  const CaloBCIDAverage *caloBCIDAvg = nullptr;
220  const CaloNoiseSigmaDiff *caloNoiseSigmaDiff = nullptr;
221  if (m_useBCID)
222  {
223  auto handle = SG::makeHandle(m_caloBCIDAverageKey, ctx);
224  if (!handle.isValid())
225  {
226  ATH_MSG_ERROR("Failed to retrieve " << m_caloBCIDAverageKey);
227  return StatusCode::FAILURE;
228  }
229  caloBCIDAvg = handle.cptr();
230  }
231  if (m_useNoise)
232  {
234  if (!handle.isValid())
235  {
236  ATH_MSG_ERROR("Failed to retrieve " << m_caloNoiseSigmaDiffKey);
237  return StatusCode::FAILURE;
238  }
239  caloNoiseSigmaDiff = handle.cptr();
240  }
241 
243  const CaloSuperCellDetDescrManager* scellMgr = *caloSuperCellMgrHandle;
244 
245  auto evtInfo = SG::makeHandle(m_evtInfoKey, ctx);
246  if (!evtInfo.isValid())
247  {
248  ATH_MSG_ERROR("Failed to retrieve " << m_evtInfoKey.key());
249  return StatusCode::FAILURE;
250  }
251  std::mt19937_64 generator;
252  // seed the generator for the whole event
253  generator.seed(evtInfo->eventNumber() * evtInfo->runNumber());
254 
255  const CaloCell_SuperCell_ID *superCellIDHelper = m_caloIdMgr->getCaloCell_SuperCell_ID();
256  const TileID *tileCellID = m_caloIdMgr->getTileID();
257  const Tile_SuperCell_ID *tileSuperCellID = m_caloIdMgr->getTile_SuperCell_ID();
258  const CaloCell_ID *caloCellID = m_caloIdMgr->getCaloCell_ID();
259 
260  // Prepare the output values
261  std::size_t nSuperCells = superCellIDHelper->calo_cell_hash_max();
262  std::vector<float> energies(nSuperCells, 0.0);
263  std::vector<float> enTime(nSuperCells, 0.0);
264  std::vector<float> enForTime(nSuperCells, 0.0);
265  std::vector<char> timeDef(nSuperCells, false);
266  std::vector<uint16_t> qualities(nSuperCells, 0);
267  std::vector<float> sigmaNoisePerSuperCell(nSuperCells, 0.0);
268 
269  for (const CaloCell *cell : *cells)
270  {
271  Identifier cellID = cell->ID();
272  IdentifierHash cellIDHash = caloCellID->calo_cell_hash(cellID);
273  // map to super cell ID
274  Identifier superCellID = m_scidTool->offlineToSuperCellID(cellID);
275  const CaloDetDescrElement *cdde = cell->caloDDE();
276  if (!superCellID.is_valid())
277  {
278  continue;
279  }
280  IdentifierHash scIDHash = superCellIDHelper->calo_cell_hash(superCellID);
281  float energy = cell->energy();
282  if (m_useBCID)
283  energy += caloBCIDAvg->average(cellID);
284  energies[scIDHash] += energy;
285  if (m_useNoise && !cdde->is_tile() && cell->gain() == CaloGain::LARHIGHGAIN)
286  sigmaNoisePerSuperCell[scIDHash] += (*caloNoiseSigmaDiff)[cellIDHash];
287 
288  // This is a bad definition, but it's needed to be consistent with the other code (for now...)
289  CaloSampling::CaloSample s = cell->caloDDE()->getSampling();
290  bool isTile_BAD = s >= 9 && s < 21;
291  if (cell->provenance() & 0x2000)
292  {
293  if (cell->energy() > 256)
294  {
295  // We have the timing values correctly for above 256
296  timeDef[scIDHash] |= true;
297  enForTime[scIDHash] += cell->energy();
298  enTime[scIDHash] += cell->energy() * cell->time();
299  }
300  else if (!isTile_BAD)
301  {
302  // Use the random sampling from timing histograms (only midtrain)
303 
304  CaloSampling::CaloSample sample = cell->caloDDE()->getSampling();
305  // Locate the correct eta/et bins
306  std::size_t iEta = getEtaIndex(sample, std::abs(cell->eta()));
307  if (iEta == SIZE_MAX)
308  {
309  ATH_MSG_ERROR("Eta value " << cell->eta() << " for sampling " << sample << " does not fall in a bin");
310  return StatusCode::FAILURE;
311  }
312  std::size_t iEt = getEtIndex(sample, cell->et());
313  if (iEt == SIZE_MAX)
314  {
315  ATH_MSG_ERROR("Et value " << cell->et() << " for sampling " << sample << " does not fall in a bin");
316  return StatusCode::FAILURE;
317  }
318  float cellTime = getRandom(m_timingSamples.at(std::make_tuple(sample, iEta, iEt)), generator);
319  timeDef.at(scIDHash) |= true;
320  enForTime.at(scIDHash) += cell->energy();
321  enTime.at(scIDHash) += cell->energy() * cellTime;
322  }
323  } //> if (provenance & 0x2000)
324  uint16_t &quality = qualities.at(scIDHash);
325  // Add the qualities such that you don't overflow the storage
326  if ((std::numeric_limits<uint16_t>::max() + 1 - quality) < cell->quality())
328  else
329  quality += cell->quality();
330  //ATH_MSG_INFO("Quality is " << quality);
331  // Special case for SAMP_D in tile. The signal is split into two SCs
332  if (cdde->is_tile() && tileCellID->sampling(cellID) == TileID::SAMP_D)
333  {
334  int section = tileCellID->section(cellID);
335  int side = tileCellID->side(cellID);
336  int module = tileCellID->module(cellID);
337  int tower = tileCellID->tower(cellID);
338 
339  // Get the parameters for the new SCs
340  int section1 = section;
341  int section2 = section;
342  int side1 = side;
343  int side2 = side;
344  int tower1 = tower;
345  int tower2 = tower - 1;
346  if (tower == 0)
347  {
348  side1 = -1;
349  side2 = 1;
350  tower1 = 0;
351  tower2 = 0;
352  }
353  else if (tower == 10)
354  {
355  section1 = TileID::EXTBAR;
356  section2 = TileID::BARREL;
357  }
358 
359  Identifier scID1 = tileSuperCellID->cell_id(section1, side1, module, tower1, 0);
360  Identifier scID2 = tileSuperCellID->cell_id(section2, side2, module, tower2, 0);
361 
362  // Split the energy between the SCs
363  energies.at(superCellIDHelper->calo_cell_hash(scID1)) += cell->energy() * 0.5;
364  energies.at(superCellIDHelper->calo_cell_hash(scID2)) += cell->energy() * 0.5;
365  }
366  } //> end loop over cells
367 
368  for (std::size_t idx = 0; idx < energies.size(); ++idx)
369  {
370  const CaloDetDescrElement *dde = scellMgr->get_element(idx);
371  if (!dde)
372  {
373  ATH_MSG_WARNING("Invalid DDE for hash index " << idx);
374  continue;
375  }
376  // Only push LAr supercells
378  bool isTile_BAD = s >= 9 && s < 21;
379  if (isTile_BAD)
380  continue;
381  float energy = energies.at(idx);
382  float sigmaNoise = sigmaNoisePerSuperCell.at(dde->calo_hash());
383  if (!dde->is_tile() && sigmaNoise > 0.0)
384  {
385  std::normal_distribution<double> distribution(0.0, sigmaNoise);
386  energy += distribution(generator);
387  }
388  auto superCell = std::make_unique<CaloCell>();
389  superCell->setCaloDDE(dde);
390  superCell->setEnergy(energy);
391  uint16_t prov = 0;
392  if (timeDef.at(idx) && enForTime.at(idx) != 0)
393  {
394  float time = enTime.at(idx) / enForTime.at(idx);
395  superCell->setTime(time);
396  float et = superCell->et();
397  prov = 0x2000;
398  if ((et > 10e3 && time > -8 && time < 18) || (et <= 10e3 && std::abs(time) < 8))
399  prov |= 0x200;
400  }
401  else
402  superCell->setTime(999.0);
403  superCell->setProvenance(prov);
404  superCell->setGain(CaloGain::LARHIGHGAIN);
405  superCells->push_back(superCell.release());
406  }
407  auto superCellHandle = SG::makeHandle(m_outputSuperCellsKey, ctx);
408  ATH_CHECK(superCellHandle.record(std::move(superCells)));
409  return StatusCode::SUCCESS;
410  }
411 
413  {
414  return getIndex(m_etaBins.at(sample), eta);
415  }
416 
418  {
419  return getIndex(m_etBins.at(sample), et);
420  }
421 } // namespace LVL1
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
mergePhysValFiles.pattern
pattern
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:26
PathResolver::find_calib_file
static std::string find_calib_file(const std::string &logical_file_name)
Definition: PathResolver.cxx:384
beamspotman.r
def r
Definition: beamspotman.py:676
RunTileCalibRec.cells
cells
Definition: RunTileCalibRec.py:271
CaloNoiseSigmaDiff
std::vector< float > CaloNoiseSigmaDiff
NAME : CaloNoiseSigmaDiff.h PACKAGE : Calorimeter/CaloConditions.
Definition: CaloNoiseSigmaDiff.h:20
et
Extra patterns decribing particle interation process.
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
CaloCell_Base_ID::calo_cell_hash
IdentifierHash calo_cell_hash(const Identifier cellId) const
create hash id from 'global' cell id
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
LVL1::SCEmulation::m_etBins
std::map< CaloSampling::CaloSample, std::vector< float > > m_etBins
Et binning read from timing file.
Definition: SCEmulation.h:62
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
LVL1::SCEmulation::m_scidTool
ToolHandle< ICaloSuperCellIDTool > m_scidTool
Offline<->supercell mapping tool.
Definition: SCEmulation.h:50
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
ConvertOldUJHistosToNewHistos.etaBins
list etaBins
Definition: ConvertOldUJHistosToNewHistos.py:145
CaloDetDescrManager_Base::get_element
const CaloDetDescrElement * get_element(const Identifier &cellId) const
get element by its identifier
Definition: CaloDetDescrManager.cxx:159
yodamerge_tmp.axis
list axis
Definition: yodamerge_tmp.py:241
Tile_Base_ID::side
int side(const Identifier &id) const
Definition: Tile_Base_ID.cxx:153
LVL1::SCEmulation::m_timingSamples
std::map< std::tuple< CaloSampling::CaloSample, std::size_t, std::size_t >, std::map< float, float > > m_timingSamples
Timing distributions.
Definition: SCEmulation.h:65
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
athena.value
value
Definition: athena.py:124
Tile_SuperCell_ID
Helper class for Tile offline identifiers for supercells.
Definition: Tile_SuperCell_ID.h:64
Tile_Base_ID::tower
int tower(const Identifier &id) const
Definition: Tile_Base_ID.cxx:165
CaloIdManager::getTile_SuperCell_ID
const Tile_SuperCell_ID * getTile_SuperCell_ID(void) const
Definition: CaloIdManager.cxx:130
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
LVL1::SCEmulation::m_caloNoiseSigmaDiffKey
SG::ReadCondHandleKey< CaloNoiseSigmaDiff > m_caloNoiseSigmaDiffKey
Definition: SCEmulation.h:42
Tile_Base_ID::BARREL
@ BARREL
Definition: Tile_Base_ID.h:48
LVL1
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition: ICMMCPHitsCnvTool.h:18
LVL1::SCEmulation::getEtIndex
std::size_t getEtIndex(CaloSampling::CaloSample sample, float et) const
Definition: SCEmulation.cxx:417
Identifier::is_valid
bool is_valid() const
Check if id is in a valid state.
LVL1::SCEmulation::getEtaIndex
std::size_t getEtaIndex(CaloSampling::CaloSample sample, float eta) const
Definition: SCEmulation.cxx:412
ReadCondHandle.h
SCEmulation.h
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
LVL1::SCEmulation::m_cellTimingFile
std::string m_cellTimingFile
The cell timing file.
Definition: SCEmulation.h: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
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
CaloSuperCellDetDescrManager
Definition: CaloDetDescrManager.h:490
TRT::Hit::side
@ side
Definition: HitInfo.h:83
PrepareReferenceFile.regex
regex
Definition: PrepareReferenceFile.py:43
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
python.PyAthena.module
module
Definition: PyAthena.py:131
Tile_Base_ID::EXTBAR
@ EXTBAR
Definition: Tile_Base_ID.h:48
WriteHandle.h
Handle class for recording to StoreGate.
CaloIdManager::getTileID
const TileID * getTileID(void) const
Definition: CaloIdManager.cxx:100
xAOD::etaBin
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap etaBin
Definition: L2StandAloneMuon_v1.cxx:148
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
LVL1::SCEmulation::initialize
virtual StatusCode initialize() override
Definition: SCEmulation.cxx:88
CaloDetDescrElement::calo_hash
IdentifierHash calo_hash() const
cell calo hash
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:412
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CheckAppliedSFs.e3
e3
Definition: CheckAppliedSFs.py:264
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
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:113
CaloCell_SuperCell_ID
Helper class for offline supercell identifiers.
Definition: CaloCell_SuperCell_ID.h:48
CaloSampling::CaloSample
CaloSample
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
TileID
Helper class for TileCal offline identifiers.
Definition: TileID.h:68
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
LVL1::SCEmulation::m_useNoise
bool m_useNoise
Use noise values.
Definition: SCEmulation.h:52
CaloCell_SuperCell_ID.h
Helper class for offline supercell identifiers.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CaloBCIDAverage
Definition: CaloBCIDAverage.h:16
Tile_Base_ID::sampling
int sampling(const Identifier &id) const
Definition: Tile_Base_ID.h:164
plotting.yearwise_luminosity_vs_mu.bins
bins
Definition: yearwise_luminosity_vs_mu.py:30
CaloCell_ID
Helper class for offline cell identifiers.
Definition: CaloCell_ID.h:34
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
TrigConf::name
Definition: HLTChainList.h:35
python.utils.AtlRunQueryTriggerUtils.getRandom
def getRandom(smk, lhcRun)
Definition: AtlRunQueryTriggerUtils.py:613
CaloDetDescrElement::is_tile
bool is_tile() const
cell belongs to Tile
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:442
LVL1::SCEmulation::m_outputSuperCellsKey
SG::WriteHandleKey< CaloCellContainer > m_outputSuperCellsKey
Definition: SCEmulation.h:47
PathResolver.h
LVL1::SCEmulation::~SCEmulation
virtual ~SCEmulation() override
Definition: SCEmulation.cxx:86
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
CaloIdManager::getCaloCell_ID
const CaloCell_ID * getCaloCell_ID(void) const
Access to IdHelper.
Definition: CaloIdManager.cxx:63
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
LVL1::SCEmulation::m_caloBCIDAverageKey
SG::ReadHandleKey< CaloBCIDAverage > m_caloBCIDAverageKey
Definition: SCEmulation.h:40
CaloGain::LARHIGHGAIN
@ LARHIGHGAIN
Definition: CaloGain.h:18
LVL1::SCEmulation::m_etaBins
std::map< CaloSampling::CaloSample, std::vector< float > > m_etaBins
eta binning read from timing file
Definition: SCEmulation.h:60
LVL1::SCEmulation::m_inputCellsKey
SG::ReadHandleKey< CaloCellContainer > m_inputCellsKey
Definition: SCEmulation.h:38
CaloBCIDAverage::average
float average(const Identifier &id) const
Definition: CaloBCIDAverage.h:27
LVL1::SCEmulation::SCEmulation
SCEmulation(const std::string &name, ISvcLocator *pSvcLocator)
Definition: SCEmulation.cxx:74
Tile_Base_ID::SAMP_D
@ SAMP_D
Definition: Tile_Base_ID.h:55
mc.generator
generator
Configure Herwig7 These are the commands corresponding to what would go into the regular Herwig infil...
Definition: mc.MGH7_FxFx_H71-DEFAULT_test.py:18
LVL1::SCEmulation::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: SCEmulation.cxx:207
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
CaloDetDescrElement::getSampling
CaloCell_ID::CaloSample getSampling() const
cell sampling
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:395
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
CaloIdManager::getCaloCell_SuperCell_ID
const CaloCell_SuperCell_ID * getCaloCell_SuperCell_ID(void) const
Definition: CaloIdManager.cxx:110
LVL1::SCEmulation::m_evtInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_evtInfoKey
Definition: SCEmulation.h:39
python.TrigEgammaMonitorHelper.TH1F
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:24
Tile_Base_ID::section
int section(const Identifier &id) const
Definition: Tile_Base_ID.cxx:147
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
section
void section(const std::string &sec)
Definition: TestTriggerMenuAccess.cxx:22
LVL1::SCEmulation::m_useBCID
bool m_useBCID
Compensate for BCIDs.
Definition: SCEmulation.h:54
Tile_Base_ID::cell_id
Identifier cell_id(const Identifier &any_id) const
Definition: Tile_Base_ID.cxx:581
python.PyAthena.obj
obj
Definition: PyAthena.py:132
xAOD::iEta
setScale setgFexType iEta
Definition: gFexJetRoI_v1.cxx:77
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
LVL1::SCEmulation::m_caloIdMgr
const CaloIdManager * m_caloIdMgr
Calo ID helpers.
Definition: SCEmulation.h:68
LVL1::SCEmulation::m_caloSuperCellMgrKey
SG::ReadCondHandleKey< CaloSuperCellDetDescrManager > m_caloSuperCellMgrKey
Super cell manager key.
Definition: SCEmulation.h:45
match
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition: hcg.cxx:356
CaloCell_Base_ID::calo_cell_hash_max
size_type calo_cell_hash_max(void) const
cell 'global' hash table max size
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:67
Identifier
Definition: IdentifierFieldParser.cxx:14