ATLAS Offline Software
TileClusterMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
9 
10 #include "StoreGate/ReadHandle.h"
11 #include "AthenaKernel/Units.h"
12 
13 using Athena::Units::GeV;
14 using Athena::Units::ns;
15 
17 
18  ATH_MSG_INFO("in initialize()");
19 
21 
22  using Tile = TileCalibUtils;
23  using namespace Monitored;
24 
25  int nL1Triggers = getNumberOfL1Triggers();
26 
27  m_clusterEtaPhiGroups = buildToolMap<int>(m_tools, "TileClusterEtaPhi", nL1Triggers);
28  m_clusterEtGroups = buildToolMap<int>(m_tools, "TileClusterEt", nL1Triggers);
29  m_clusterNCellsGroups = buildToolMap<int>(m_tools, "TileClusterNCells", nL1Triggers);
30  m_allClusterEnergyGroups = buildToolMap<int>(m_tools, "TileAllClusterEnergy", nL1Triggers);
31  m_allClusterEtaPhiGroups = buildToolMap<int>(m_tools, "TileAllClusterEtaPhi", nL1Triggers);
32  m_allClusterEneEtaPhiGroups = buildToolMap<int>(m_tools, "TileAllClusterEneEtaPhi", nL1Triggers);
33  m_nClustersGroups = buildToolMap<int>(m_tools, "TileNClusters", nL1Triggers);
34  m_clusterSumPxGroups = buildToolMap<int>(m_tools, "TileClusterSumPx", nL1Triggers);
35  m_clusterSumPyGroups = buildToolMap<int>(m_tools, "TileClusterSumPy", nL1Triggers);
36  m_clusterSumEtGroups = buildToolMap<int>(m_tools, "TileClusterSumEt", nL1Triggers);
37  m_clusterTimeDiffGroups = buildToolMap<int>(m_tools, "TileClusterTimeDiff", nL1Triggers);
38  m_clusterEneDiffGroups = buildToolMap<int>(m_tools, "TileClusterEneDiff", nL1Triggers);
39  m_clusterEtaPhiDiffGroups = buildToolMap<int>(m_tools, "TileClusterEtaPhiDiff", nL1Triggers);
40  m_clusterEnergyGroups = buildToolMap<std::vector<int>>(m_tools, "TileClusterEnergy",
41  Tile::MAX_ROS, nL1Triggers);
42 
44  m_partitionTimeLBGroups = buildToolMap<int>(m_tools, "TilePartitionTimeLB", MAX_PART);
45  }
46 
47  //=== TileID
49 
50  ATH_CHECK( m_cablingSvc.retrieve() );
51  m_cabling = m_cablingSvc->cablingService();
52 
54 }
55 
56 
57 StatusCode TileClusterMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
58 
59 
60  // In case you want to measure the execution time
61  auto timer = Monitored::Timer("TIME_execute");
62 
63  const xAOD::EventInfo* eventInfo = GetEventInfo(ctx).get();
64 
65 
66  // Indices of L1 trigger histograms to be filled in the current event
67  std::vector<int> l1TriggersIndices = getL1TriggerIndices(eventInfo->level1TriggerType());
68 
70  ATH_CHECK( caloClusterContainer.isValid() );
71 
72  int nClusters = caloClusterContainer->size();
73  ATH_MSG_DEBUG( "Number of clusters in the event: " << nClusters );
74 
75  auto monNClusters = Monitored::Scalar<int>("nClusters", nClusters);
76  for (int l1TriggerIdx : l1TriggersIndices) {
77  fill(m_tools[m_nClustersGroups[l1TriggerIdx]], monNClusters);
78  }
79 
80  if (nClusters == 0) {
81  return StatusCode::SUCCESS;
82  }
83 
84  const xAOD::CaloCluster* mostEnCluster = *std::max_element(
85  caloClusterContainer->begin(), caloClusterContainer->end(),
86  [] (const xAOD::CaloCluster* cluster1, const xAOD::CaloCluster* cluster2) {
87  return cluster1->e() < cluster2->e();
88  });
89 
90  const CaloCell* mostEnCell = nullptr;
91  double mostEnClusterPhi = 0.0;
92 
93  if (mostEnCluster->e() > 0.0) {
94  mostEnClusterPhi = mostEnCluster->phi();
95 
96  auto monEta = Monitored::Scalar<float>("eta", mostEnCluster->eta());
97  auto monPhi = Monitored::Scalar<float>("phi", mostEnCluster->phi());
98  auto monEnergy = Monitored::Scalar<float>("energy", mostEnCluster->e());
99  auto monEt = Monitored::Scalar<float>("et", mostEnCluster->et());
100  auto monNCells = Monitored::Scalar<int>("nCells", mostEnCluster->size());
101  for (int l1TriggerIdx : l1TriggersIndices) {
102  fill(m_tools[m_clusterEtaPhiGroups[l1TriggerIdx]], monEta, monPhi);
103  fill(m_tools[m_clusterEtGroups[l1TriggerIdx]], monEt);
104  fill(m_tools[m_clusterNCellsGroups[l1TriggerIdx]], monNCells);
105  }
106 
107  if (mostEnCluster->getCellLinks()) {
108  mostEnCell = *std::max_element(mostEnCluster->begin(), mostEnCluster->end(),
109  [] (const CaloCell* cell1, const CaloCell* cell2) {
110  return cell1->energy() < cell2->energy();
111  });
112 
113  int partition = getPartition(mostEnCell, m_tileID);
114  if (partition < PART_ALL) {
115  auto monEt = Monitored::Scalar<float>("Et", mostEnCluster->et());
116  for (int l1TriggerIdx : l1TriggersIndices) {
117  fill(m_tools[m_clusterEnergyGroups[partition][l1TriggerIdx]], monEnergy);
118  fill(m_tools[m_clusterEnergyGroups[PART_ALL][l1TriggerIdx]], monEnergy);
119  }
120  }
121  }
122  }
123 
124 
125  float sumPx = 0.;
126  float sumPy = 0.;
127 
128  const xAOD::CaloCluster* correlCluster = nullptr;
129  double correlClusterEnergy = 0.0;
130 
131  for (const xAOD::CaloCluster* cluster : *caloClusterContainer) {
132 
133  float energy = cluster->e();
134  float phi = cluster->phi();
135  float pt = cluster->pt();
136  float px = pt * std::cos(phi);
137  float py = pt * std::sin(phi);
138 
139  sumPx += px;
140  sumPy += py;
141 
142  if (phi * mostEnClusterPhi < 0.0 // Opposite to the most energetic cluster
143  && energy > correlClusterEnergy) { // With maximum energy
144  correlCluster = cluster;
145  correlClusterEnergy = energy;
146  }
147 
148  ATH_MSG_VERBOSE( "Cluster: nCells= " << cluster->size()
149  << ", Energy= " << energy
150  << ", Et()= " << cluster->et()
151  << ", Eta= " << cluster->eta()
152  << ", Phi= " << cluster->phi() );
153 
154  }
155 
156  auto monEta = Monitored::Collection("eta", *caloClusterContainer,
157  [] (const xAOD::CaloCluster* cluster) {
158  return cluster->eta();
159  });
160 
161  auto monPhi = Monitored::Collection("phi", *caloClusterContainer,
162  [] (const xAOD::CaloCluster* cluster) {
163  return cluster->phi();
164  });
165 
166  auto monEnergy = Monitored::Collection("energy", *caloClusterContainer,
167  [] (const xAOD::CaloCluster* cluster) {
168  return cluster->e();
169  });
170 
171  float sumEt = sqrt(sumPx * sumPx + sumPy * sumPy);
172  auto monSumPx = Monitored::Scalar<float>("sumPx", sumPx);
173  auto monSumPy = Monitored::Scalar<float>("sumPy", sumPy);
174  auto monSumEt = Monitored::Scalar<float>("sumEt", sumEt);
175 
176  for (int l1TriggerIdx : l1TriggersIndices) {
177  fill(m_tools[m_allClusterEnergyGroups[l1TriggerIdx]], monEnergy);
178  fill(m_tools[m_allClusterEtaPhiGroups[l1TriggerIdx]], monEta, monPhi);
179  fill(m_tools[m_allClusterEneEtaPhiGroups[l1TriggerIdx]], monEta, monPhi, monEnergy);
180  fill(m_tools[m_clusterSumPxGroups[l1TriggerIdx]], monSumPx);
181  fill(m_tools[m_clusterSumPyGroups[l1TriggerIdx]], monSumPy);
182  fill(m_tools[m_clusterSumEtGroups[l1TriggerIdx]], monSumEt);
183  }
184 
185 
186 
187  if (mostEnCluster->e() > 0.0 && correlCluster) {
188 
189  float energyDiff = (mostEnClusterPhi > 0.0) ? mostEnCluster->e() - correlCluster->e()
190  : correlCluster->e() - mostEnCluster->e();
191 
192  float etaDelta = std::abs(correlCluster->eta()) - std::abs(mostEnCluster->eta());
193  float phiDelta = std::abs(correlCluster->phi() - mostEnCluster->phi());
194 
195  auto monEta = Monitored::Scalar<float>("eta", etaDelta);
196  auto monPhi = Monitored::Scalar<float>("phi", phiDelta);
197  auto monEnergyDiff = Monitored::Scalar<float>("energyDiff", energyDiff);
198  for (int l1TriggerIdx : l1TriggersIndices) {
199  fill(m_tools[m_clusterEneDiffGroups[l1TriggerIdx]], monEnergyDiff);
200  fill(m_tools[m_clusterEtaPhiDiffGroups[l1TriggerIdx]], monEta, monPhi);
201  }
202 
203  const CaloCell* correlCell = nullptr;
204  if (correlCluster->getCellLinks()) {
205  correlCell = *std::max_element( correlCluster->begin(), correlCluster->end(),
206  [] (const CaloCell* cell1, const CaloCell* cell2) {
207  return cell1->energy() < cell2->energy();
208  });
209  }
210 
211  if (mostEnCell && correlCell) {
212  float timeDiff = mostEnCell->time() - correlCell->time();
213  auto monTimeDiff = Monitored::Scalar<float>("timeDiff", timeDiff);
214  for (int l1TriggerIdx : l1TriggersIndices) {
215  fill(m_tools[m_clusterTimeDiffGroups[l1TriggerIdx]], monTimeDiff);
216  }
217  }
218 
219  }
220 
221 
224 
225  std::set<Identifier> usedCells;
226  std::vector<float> partitionTime[MAX_PART];
227 
228  for (const xAOD::CaloCluster* cluster : *caloClusterContainer) {
229  if (cluster->getCellLinks()) {
230  for (const CaloCell* cell : *cluster) {
231 
232  Identifier id = cell->ID();
233 
234  if (cell->badcell()
235  || cell->energy() < m_cellEnergyThresholdForTiming
236  || usedCells.find(id) != usedCells.end() ) continue;
237 
238  usedCells.insert(id);
239 
240  int sample = m_tileID->sample(id);
241  bool single_PMT_scin = (sample == TileID::SAMP_E);
242  bool single_PMT_C10 = (m_tileID->section(id) == TileID::GAPDET
243  && sample == TileID::SAMP_C
244  && (!m_cabling->C10_connected(m_tileID->module(id))) );
245 
246  // distinguish cells with one or two PMTs
247  bool single_PMT = single_PMT_C10 || single_PMT_scin;
248 
249  if (!single_PMT && !(sample == TileID::SAMP_D && m_tileID->tower(id) == 0)) {
250  int partition = getPartition(id, m_tileID);
251  if (partition < MAX_PART) {
252  partitionTime[partition].push_back(cell->time());
253  }
254  }
255  }
256  }
257  }
258 
259  auto lumiBlock = Monitored::Scalar<int>("lumiBlock", eventInfo->lumiBlock());
260  for (int partition = 0; partition < MAX_PART; ++partition) {
261  if (!partitionTime[partition].empty()) {
262  auto monTime = Monitored::Collection("time", partitionTime[partition]);
265  }
266  }
267  }
268 
269 
270  fill("TileClusterMonExecuteTime", timer);
271 
272  return StatusCode::SUCCESS;
273 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::CaloCluster_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition: CaloCluster_v1.cxx:256
TileMonitorAlgorithm::getL1TriggerIndices
std::vector< int > getL1TriggerIndices(uint32_t lvl1TriggerType) const
Return indices of histograms to be filled according fired L1 trigger type.
Definition: TileMonitorAlgorithm.cxx:67
TileClusterMonitorAlgorithm::m_cablingSvc
ServiceHandle< TileCablingSvc > m_cablingSvc
Name of Tile cabling service.
Definition: TileClusterMonitorAlgorithm.h:48
TileClusterMonitorAlgorithm::m_clusterEtaPhiGroups
std::vector< int > m_clusterEtaPhiGroups
Definition: TileClusterMonitorAlgorithm.h:51
test_pyathena.px
px
Definition: test_pyathena.py:18
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
TileClusterMonitorAlgorithm::m_clusterSumPxGroups
std::vector< int > m_clusterSumPxGroups
Definition: TileClusterMonitorAlgorithm.h:58
TileClusterMonitorAlgorithm::m_clusterEtaPhiDiffGroups
std::vector< int > m_clusterEtaPhiDiffGroups
Definition: TileClusterMonitorAlgorithm.h:63
test_pyathena.pt
pt
Definition: test_pyathena.py:11
Tile_Base_ID::sample
int sample(const Identifier &id) const
Definition: Tile_Base_ID.cxx:171
xAOD::CaloCluster_v1::et
double et() const
Definition: CaloCluster_v1.h:856
Tile_Base_ID::GAPDET
@ GAPDET
Definition: Tile_Base_ID.h:48
TileCalibUtils.h
Tile_Base_ID::tower
int tower(const Identifier &id) const
Definition: Tile_Base_ID.cxx:165
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
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
TileClusterMonitorAlgorithm::m_clusterEneDiffGroups
std::vector< int > m_clusterEneDiffGroups
Definition: TileClusterMonitorAlgorithm.h:62
CaloCell::time
float time() const
get time (data member)
Definition: CaloCell.h:352
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
TileClusterMonitorAlgorithm::m_clusterTimeDiffGroups
std::vector< int > m_clusterTimeDiffGroups
Definition: TileClusterMonitorAlgorithm.h:61
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
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
xAOD::EventInfo_v1::Error
@ Error
The sub-detector issued an error.
Definition: EventInfo_v1.h:349
TileClusterMonitorAlgorithm::m_nClustersGroups
std::vector< int > m_nClustersGroups
Definition: TileClusterMonitorAlgorithm.h:57
Tile_Base_ID::SAMP_C
@ SAMP_C
Definition: Tile_Base_ID.h:54
TileMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileMonitorAlgorithm.cxx:10
TileClusterMonitorAlgorithm::m_cellEnergyThresholdForTiming
Gaudi::Property< float > m_cellEnergyThresholdForTiming
Definition: TileClusterMonitorAlgorithm.h:39
TileClusterMonitorAlgorithm::m_allClusterEneEtaPhiGroups
std::vector< int > m_allClusterEneEtaPhiGroups
Definition: TileClusterMonitorAlgorithm.h:56
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:59
Tile
Definition: TileVolumeBuilder.h:43
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
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:100
xAOD::CaloCluster_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: CaloCluster_v1.cxx:251
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
TileClusterMonitorAlgorithm::m_cabling
const TileCablingService * m_cabling
Definition: TileClusterMonitorAlgorithm.h:68
TileClusterMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TileClusterMonitorAlgorithm.cxx:57
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
TileClusterMonitorAlgorithm::m_allClusterEnergyGroups
std::vector< int > m_allClusterEnergyGroups
Definition: TileClusterMonitorAlgorithm.h:54
TileMonitorAlgorithm::PART_ALL
@ PART_ALL
Definition: TileMonitorAlgorithm.h:47
xAOD::CaloCluster_v1::size
size_t size() const
size method (forwarded from CaloClusterCellLink obj)
Definition: CaloCluster_v1.cxx:996
TileClusterMonitorAlgorithm::m_clusterEtGroups
std::vector< int > m_clusterEtGroups
Definition: TileClusterMonitorAlgorithm.h:52
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
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
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
xAOD::CaloCluster_v1::getCellLinks
const CaloClusterCellLink * getCellLinks() const
Get a pointer to the CaloClusterCellLink object (const version)
Definition: CaloCluster_v1.cxx:905
TileClusterMonitorAlgorithm::m_clusterSumPyGroups
std::vector< int > m_clusterSumPyGroups
Definition: TileClusterMonitorAlgorithm.h:59
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TileClusterMonitorAlgorithm::m_fillTimingHistograms
Gaudi::Property< bool > m_fillTimingHistograms
Definition: TileClusterMonitorAlgorithm.h:36
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
Amg::py
@ py
Definition: GeoPrimitives.h:39
xAOD::CaloCluster_v1::begin
const_iterator begin() const
Definition: CaloCluster_v1.h:824
Units.h
Wrapper to avoid constant divisions when using units.
TileClusterMonitorAlgorithm::m_clusterNCellsGroups
std::vector< int > m_clusterNCellsGroups
Definition: TileClusterMonitorAlgorithm.h:53
TileClusterMonitorAlgorithm::m_tileID
const TileID * m_tileID
Definition: TileClusterMonitorAlgorithm.h:69
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
Tile_Base_ID::SAMP_D
@ SAMP_D
Definition: Tile_Base_ID.h:55
xAOD::EventInfo_v1::Tile
@ Tile
The Tile calorimeter.
Definition: EventInfo_v1.h:336
TileCablingService::C10_connected
static bool C10_connected(int module)
Definition: TileCablingService.cxx:1779
xAOD::CaloCluster_v1::end
const_iterator end() const
Definition: CaloCluster_v1.h:825
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
TileMonitorAlgorithm::getNumberOfL1Triggers
int getNumberOfL1Triggers(void) const
Return number of L1 triggers for which histograms should be filled.
Definition: TileMonitorAlgorithm.h:66
TileMonitorAlgorithm::MAX_PART
@ MAX_PART
Definition: TileMonitorAlgorithm.h:47
TileClusterMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileClusterMonitorAlgorithm.cxx:16
TileClusterMonitorAlgorithm.h
TileClusterMonitorAlgorithm::m_caloClusterContainerKey
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_caloClusterContainerKey
Definition: TileClusterMonitorAlgorithm.h:42
python.Classes.TileCalibUtils
TileCalibUtils
Definition: TileCalib/TileCalibBlobObjs/python/Classes.py:5
StateLessPT_NewConfig.partition
partition
Definition: StateLessPT_NewConfig.py:49
TileClusterMonitorAlgorithm::m_partitionTimeLBGroups
std::vector< int > m_partitionTimeLBGroups
Definition: TileClusterMonitorAlgorithm.h:64
xAOD::EventInfo_v1::level1TriggerType
uint16_t level1TriggerType() const
The Level-1 trigger type.
xAOD::EventInfo_v1::errorState
EventFlagErrorState errorState(EventFlagSubDet subDet) const
Get the error state for a particular sub-detector.
Definition: EventInfo_v1.cxx:817
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
TileClusterMonitorAlgorithm::m_clusterEnergyGroups
std::vector< std::vector< int > > m_clusterEnergyGroups
Definition: TileClusterMonitorAlgorithm.h:66
Tile_Base_ID::section
int section(const Identifier &id) const
Definition: Tile_Base_ID.cxx:147
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
ReadHandle.h
Handle class for reading from StoreGate.
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:327
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
TileClusterMonitorAlgorithm::m_allClusterEtaPhiGroups
std::vector< int > m_allClusterEtaPhiGroups
Definition: TileClusterMonitorAlgorithm.h:55
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
xAOD::CaloCluster_v1::e
virtual double e() const
The total energy of the particle.
Definition: CaloCluster_v1.cxx:265
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
TileMonitorAlgorithm::getPartition
Partition getPartition(const CaloCell *cell, const TileID *tileID) const
Return Partition for Tile cell or MAX_PART otherwise.
Definition: TileMonitorAlgorithm.cxx:109
TileClusterMonitorAlgorithm::m_clusterSumEtGroups
std::vector< int > m_clusterSumEtGroups
Definition: TileClusterMonitorAlgorithm.h:60
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.