ATLAS Offline Software
CaloRingsBuilder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // =================================================================================
6 #include "CaloRingsBuilder.h"
7 
9 
10 // Cell includes:
11 #include "CaloUtils/CaloCellList.h"
12 #include "CaloGeoHelpers/CaloSampling.h"
14 
15 // RingSet includes:
18 
19 // CaloRings includes:
22 
23 // Ringer Conf include:
25 
26 // Other xAOD includes:
27 #include "xAODBase/IParticle.h"
29 
30 // STL
31 #include <algorithm>
32 #include <cfloat>
33 #include <cmath>
34 #include <sstream>
35 
36 namespace Ringer {
37 
38 // =================================================================================
40  const std::string& name,
41  const ::IInterface* parent)
42  : ::AthAlgTool(type, name, parent),
43  m_rsCont(nullptr),
44  m_crCont(nullptr),
45  m_nRingSets(0)
46 {
47  declareInterface<ICaloRingsBuilder>(this);
48 }
49 
50 // =====================================================================================
52 
53 // =====================================================================================
55 {
56  ATH_MSG_DEBUG("Initializing " << name() );
57 
58  m_nRingSets = m_nRings.size();
59 
60  auto itr = m_layers.begin();
61 
62  // Build RingSets configuration:
63  for (size_t rsConfIdx = 0; rsConfIdx < m_nRingSets; ++rsConfIdx) {
64 
65  const auto rsNLayers = m_nLayers[rsConfIdx];
66 
67  auto end_itr = itr + rsNLayers;
68 
69  const auto& caloSampleItr = reinterpret_cast<
71  >(itr);
72  const auto& caloSampleEndItr = reinterpret_cast<
74  >(end_itr);
75 
76  std::vector<CaloSampling::CaloSample> rsLayers( caloSampleItr ,
77  caloSampleEndItr);
78 
79  itr += rsNLayers;
80 
82  m_nRings[rsConfIdx],
83  rsLayers,
84  m_etaWidth[rsConfIdx], m_phiWidth[rsConfIdx],
88  );
89 
90  // Build our raw configuration structure:
91  m_rsRawConfCol.push_back(rawConf);
92  }
93 
94  // We have finished filling the main raw configuration properties, now we add
95  // it bounderies:
96  try {
98  } catch ( const std::runtime_error &e) {
99  ATH_MSG_ERROR("Could not add collection bounderies due to: " << e.what() );
100  ATH_MSG_ERROR("RawConfCollection is: ");
101  std::ostringstream str;
103  ATH_MSG_ERROR(str.str());
104  return StatusCode::FAILURE;
105  }
106 
107  // Print our collection
108  if (msgLevel() <= MSG::DEBUG){
109  std::ostringstream str;
111  ATH_MSG_DEBUG(str.str());
112  }
113 
114  // This will check that the properties were initialized properly
115  // by job configuration.
116  ATH_CHECK( m_crContName.initialize() );
117  ATH_CHECK( m_rsContName.initialize() );
120 
121  return StatusCode::SUCCESS;
122 }
123 
124 // =====================================================================================
126 {
127  return StatusCode::SUCCESS;
128 }
129 
130 // =====================================================================================
132  , xAOD::RingSetContainer* rsCont
133  , std::size_t nReserve )
134 {
135  if ( crCont && rsCont ){
136  m_crCont = crCont;
137  m_rsCont = rsCont;
138  } else {
139  ATH_MSG_ERROR( "Attempted to set CaloRingsContainer and/or RingSetContainer to invalid pointers");
140  return StatusCode::FAILURE;
141  }
142  // Reserve container space if required:
143  if (nReserve) {
144  // Reserve one CaloRings per particle
145  m_crCont->reserve( nReserve );
146  // We need to reserve more space for the RingSet container, there will be
147  // the number of RawConfig available in our raw configuration collection.
148  m_rsCont->reserve( nReserve * m_nRingSets );
149  }
150 
151  return StatusCode::SUCCESS;
152 }
153 
154 // =====================================================================================
157 {
158  double et(0.);
159  const double eta2 = std::fabs(cluster.etaBE(2));
160  const double energy = cluster.e();
161  if ( eta2 < 999.) {
162  const double cosheta = std::cosh(eta2);
163  et = (cosheta != 0.) ? energy /cosheta : 0.;
164  }
165  if ( et > m_minEnergy )
166  {
167  return executeTemp(cluster, clRings);
168  } else {
169  ATH_MSG_DEBUG( "Skipping cluster with low energy (" << et << " MeV) .");
170  return StatusCode::SUCCESS;
171  }
172 }
173 
174 // =====================================================================================
176  const xAOD::IParticle &particle,
178 {
179  double et = particle.pt();
180  if ( et > m_minEnergy )
181  {
182  return executeTemp(particle, clRings);
183  } else {
184  ATH_MSG_DEBUG( "Skipping particle with low energy (" << et << " MeV) .");
185  return StatusCode::SUCCESS;
186  }
187 }
188 
189 // =====================================================================================
190 // Local execute
191 // =====================================================================================
192 template<typename T>
194  const T &input,
196 {
197 
198  ATH_MSG_DEBUG("Entering "<< name() << " execute.");
199 
200  // Create structure to hold rings:
201  xAOD::CaloRings *clRings = new xAOD::CaloRings();
202 
203  // Add the CaloRings to the container:
204  m_crCont->push_back(clRings);
205 
206  // Set elementLink reference to created CaloRings:
207  clRingsLink.toContainedElement(*m_crCont, clRings);
208 
209  // If not using shower barycenter, we need to reset last valid seed to avoid
210  // any possible issue:
211  if ( !m_useShowShapeBarycenter ){
212  m_lastValidSeed = AtlasGeoPoint(input.eta(),input.phi());
213  }
214 
215  // Build this CaloRings RingSets:
216  for ( const auto &rawConf : m_rsRawConfCol ) {
217 
218  // Create new RingSet and add it to the container:
219  xAOD::RingSet* rs = new xAOD::RingSet( rawConf.nRings );
220  m_rsCont->push_back(rs);
221 
222  // Get RingSet seed:
223  AtlasGeoPoint seed;
224  CHECK( getRingSetSeed( rawConf, input, seed ) );
225 
226  // Build it:
227  CHECK( buildRingSet( rawConf, seed, rs ) );
228 
229  // Get the ElementLink and add it to our RingSet holder:
231  clRings->addRingSetEL( rsEL );
232  }
233 
234  // Print CaloRings with DEBUG level:
235  if (msgLevel() <= MSG::DEBUG){
236  std::ostringstream str;
237  clRings->print(str);
238  ATH_MSG_DEBUG(str.str());
239  }
240 
241  return StatusCode::SUCCESS;
242 }
243 
244 // =================================================================================
246  const xAOD::RingSetConf::RawConf &rawConf,
247  const xAOD::CaloCluster &cluster,
248  AtlasGeoPoint &seed )
249 {
250  if ( !m_useShowShapeBarycenter ){
251 
252  seed.setEta( cluster.eta() );
253  seed.setPhi( cluster.phi() );
254 
255  return StatusCode::SUCCESS;
256 
257  } else {
258 
259  bool foundValid = false, foundMultipleValid = false;
260 
261  for ( const auto layer : rawConf.layers ) {
262 
263  AtlasGeoPoint seedCandidate(
264  cluster.etaSample( layer ),
265  cluster.phiSample( layer )
266  );
267 
268  ATH_MSG_DEBUG( "This layer (" << CaloSampling::getSamplingName(layer) <<
269  ") seedCandidate is: (" <<
270  seedCandidate.eta() << "," <<
271  seedCandidate.phi() << ")" );
272 
273  if ( seedCandidate.isValid() ){
274  m_lastValidSeed = seedCandidate;
275  if ( foundValid )
276  foundMultipleValid = true;
277  foundValid = true;
278  }
279  }
280 
281  // If we get here, set it to the last valid seed:
282  seed = m_lastValidSeed;
283  if ( foundMultipleValid ){
284  ATH_MSG_WARNING( "Found multiple valid seeds. Set to last valid candidate.");
285  }
286  return StatusCode::SUCCESS;
287  }
288 }
289 
290 // =================================================================================
292  const xAOD::RingSetConf::RawConf &/*rawConf*/,
293  const xAOD::IParticle &part,
294  AtlasGeoPoint &seed)
295 {
296 
297  seed.setEta( part.eta() );
298  seed.setPhi( part.phi() );
299 
300  return StatusCode::SUCCESS;
301 }
302 
303 // =================================================================================
305  const xAOD::RingSetConf::RawConf &rawConf,
306  const AtlasGeoPoint &seed,
307  xAOD::RingSet *rs)
308 {
309  // Get this RingSet size:
310  const auto nRings = rawConf.nRings;
311 
312  // Retrieve CaloCells
314  // check is only used for serial running; remove when MT scheduler used
315  if(!cellsCont.isValid()) {
316  ATH_MSG_FATAL("Failed to retrieve "<< m_cellsContName.key());
317  return StatusCode::FAILURE;
318  }
319 
321  const CaloDetDescrManager* caloMgr=*caloMgrHandle;
322 
323  CaloCellList cells(caloMgr,cellsCont.ptr() );
324 
325  // loop over cells
326  for ( const int layer : rawConf.layers) { // We use int here because the
327  // cells.select() method needs int as param
328  cells.select(seed.eta(), seed.phi(), m_cellMaxDEtaDist, m_cellMaxDPhiDist, layer );
329  for ( const CaloCell *cell : cells ) {
330 
331  unsigned int ringNumber(0);
332 
333  // calculate the normalised difference in eta
334  const float deltaEta = fabs(
335  (cell->eta() - seed.eta())
336  ) / rawConf.etaWidth;
337  // calculate the normalised difference in phi
338  const float deltaPhi = fabs(
339  CaloPhiRange::diff(cell->phi(), seed.phi())
340  ) / rawConf.phiWidth;
341  // The biggest difference indicates the ring number (we are using
342  // squared-shape rings)
343  const float deltaGreater = std::max(deltaEta, deltaPhi);
344 
345  // Round to nearest integer:
346  ringNumber = static_cast<unsigned int>(std::floor(deltaGreater + .5));
347  if ( ringNumber < nRings ){
349  rs->at(ringNumber) += cell->energy()/cosh(cell->eta());
350  }else{
351  rs->at(ringNumber) += cell->energy();
352  }
353  }
354  }
355  }
356 
357  return StatusCode::SUCCESS;
358 }
359 
360 
361 } // namespace Ringer
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
xAOD::CaloCluster_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition: CaloCluster_v1.cxx:256
Ringer::CaloRingsBuilder::m_caloMgrKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Definition: CaloRingsBuilder.h:245
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
RunTileCalibRec.cells
cells
Definition: RunTileCalibRec.py:271
Ringer::CaloRingsBuilder::~CaloRingsBuilder
~CaloRingsBuilder()
Destructor.
Ringer::CaloRingsBuilder::finalize
virtual StatusCode finalize() override
finalize method
Definition: CaloRingsBuilder.cxx:125
xAOD::RingSetConf_v1::print
static void print(const RawConf &raw, std::ostream &stream)
Prints rawConf.
Definition: RingSetConf_v1.cxx:206
et
Extra patterns decribing particle interation process.
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
Ringer::CaloRingsBuilder::getRingSetSeed
StatusCode getRingSetSeed(const xAOD::RingSetConf::RawConf &conf, const xAOD::CaloCluster &cluster, AtlasGeoPoint &seed)
Fill RingSet seed for CaloCluster.
Definition: CaloRingsBuilder.cxx:245
CaloCellList
Definition: CaloCellList.h:40
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
max
#define max(a, b)
Definition: cfImp.cxx:41
ParticleGun_SamplingFraction.eta2
eta2
Definition: ParticleGun_SamplingFraction.py:96
IParticle.h
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Ringer::CaloRingsBuilder::initialize
virtual StatusCode initialize() override
Tool main methods:
Definition: CaloRingsBuilder.cxx:54
xAOD::et
et
Definition: TrigEMCluster_v1.cxx:25
Ringer::CaloRingsBuilder::m_etaWidth
Gaudi::Property< std::vector< float > > m_etaWidth
Width of the ring in eta.
Definition: CaloRingsBuilder.h:175
Ringer::CaloRingsBuilder::m_crCont
xAOD::CaloRingsContainer * m_crCont
Create and hold CaloRingsContainer for each event.
Definition: CaloRingsBuilder.h:258
Ringer::CaloRingsBuilder::m_cellMaxDPhiDist
Gaudi::Property< float > m_cellMaxDPhiDist
Maximum cell distance in phi to seed.
Definition: CaloRingsBuilder.h:191
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
CaloCellList.h
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
Ringer::CaloRingsBuilder::m_rsContName
SG::WriteHandleKey< xAOD::RingSetContainer > m_rsContName
Name of RingSetContainer on Event StoreGate.
Definition: CaloRingsBuilder.h:159
Ringer::CaloRingsBuilder::rawConf
const xAOD::RingSetConf::RawConfCollection & rawConf() override
Extra methods:
Definition: CaloRingsBuilder.h:95
xAOD::RingSet_v1::at
float & at(const unsigned int i)
Get/set ring Et at ith position.
Definition: RingSet_v1.cxx:42
AtlasGeoPoint::phi
float phi() const
Definition: AtlasGeoPoint.h:94
RingSetAuxContainer.h
Ringer::CaloRingsBuilder::m_phiWidth
Gaudi::Property< std::vector< float > > m_phiWidth
Width of the ring in phi.
Definition: CaloRingsBuilder.h:180
CaloRingsBuilder.h
xAOD::RingSet_v1
Class holding a set of rings.
Definition: RingSet_v1.h:31
Ringer::CaloRingsBuilder::m_cellsContName
SG::ReadHandleKey< CaloCellContainer > m_cellsContName
Name of CaloCellContainer.
Definition: CaloRingsBuilder.h:167
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
AtlasGeoPoint::isValid
bool isValid() const
Definition: AtlasGeoPoint.h:76
Ringer::CaloRingsBuilder::buildRingSet
virtual StatusCode buildRingSet(const xAOD::RingSetConf::RawConf &rawConf, const AtlasGeoPoint &seed, xAOD::RingSet *rs)
main method where the RingSets are built.
Definition: CaloRingsBuilder.cxx:304
Ringer::CaloRingsBuilder::m_doTransverseEnergy
Gaudi::Property< bool > m_doTransverseEnergy
Switch to use raw cell energy instead ET.
Definition: CaloRingsBuilder.h:240
xAOD::RingSetConf_v1::whichLayer
static Ringer::CalJointLayer whichLayer(const std::vector< CaloSampling::CaloSample > &layers)
Definition: RingSetConf_v1.cxx:188
xAOD::CaloCluster_v1::etaSample
float etaSample(const CaloSample sampling) const
Retrieve barycenter in a given sample.
Definition: CaloCluster_v1.cxx:532
CaloRingsAuxContainer.h
xAOD::CaloCluster_v1::etaBE
float etaBE(const unsigned layer) const
Get the eta in one layer of the EM Calo.
Definition: CaloCluster_v1.cxx:644
Ringer::CaloRingsBuilder::executeTemp
StatusCode executeTemp(const T &input, ElementLink< xAOD::CaloRingsContainer > &crEL)
Tool protected methods:
Definition: CaloRingsBuilder.cxx:193
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:59
CaloRingsContainer.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Ringer::CaloRingsBuilder::m_layers
Gaudi::Property< std::vector< int > > m_layers
Calorimeter layers in each ringset.
Definition: CaloRingsBuilder.h:215
Ringer::CaloRingsBuilder::CaloRingsBuilder
CaloRingsBuilder(const std::string &type, const std::string &name, const IInterface *parent)
Default constructor.
Definition: CaloRingsBuilder.cxx:39
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
P4Helpers::deltaEta
double deltaEta(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
Definition: P4Helpers.h:66
xAOD::CaloCluster_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: CaloCluster_v1.cxx:251
CaloCluster.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Ringer::CaloRingsBuilder::m_nLayers
Gaudi::Property< std::vector< unsigned int > > m_nLayers
Number of calorimeter layers in each ringset.
Definition: CaloRingsBuilder.h:222
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
Ringer::CaloRingsBuilder::m_cellMaxDEtaDist
Gaudi::Property< float > m_cellMaxDEtaDist
Maximum cell distance in eta to seed.
Definition: CaloRingsBuilder.h:185
xAOD::CaloRings_v1::addRingSetEL
void addRingSetEL(const ElementLink< RingSetContainer_v1 > &rsEL)
Add ElementLink to holden vector.
xAOD::RingSetConf_v1::addRawConfColBounderies
static void addRawConfColBounderies(RawConfCollection &clRingsConf)
Add to RawConfCollection its JointLayer/JointSection bounderies.
Definition: RingSetConf_v1.cxx:239
xAOD::CaloRings_v1::print
void print(std::ostream &stream) const
Print-out methods:
Definition: CaloRings_v1.cxx:280
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Ringer::CaloRingsBuilder::m_lastValidSeed
AtlasGeoPoint m_lastValidSeed
last valid RingSet seed
Definition: CaloRingsBuilder.h:268
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
xAOD::CaloRings_v1
Class summarizing the particle interaction throughout the Calorimeter (its shower shape).
Definition: CaloRings_v1.h:51
xAOD::CaloCluster_v1::phiSample
float phiSample(const CaloSample sampling) const
Retrieve barycenter in a given sample.
Definition: CaloCluster_v1.cxx:547
AtlasGeoPoint::eta
float eta() const
Definition: AtlasGeoPoint.h:87
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
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
RingSetContainer.h
RingSetConf.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
errorcheck.h
Helpers for checking error return status codes and reporting errors.
Ringer::CaloRingsBuilder::m_minEnergy
Gaudi::Property< float > m_minEnergy
Minimum particle energy to build rings (GeV)
Definition: CaloRingsBuilder.h:203
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
CaloCellContainer.h
Ringer::CaloRingsBuilder::m_nRingSets
size_t m_nRingSets
hold the number of RingSets we are building for each CaloRings
Definition: CaloRingsBuilder.h:276
Ringer::CaloRingsBuilder::m_rsCont
xAOD::RingSetContainer * m_rsCont
Tool props (non configurables):
Definition: CaloRingsBuilder.h:254
SG::ReadHandle::ptr
const_pointer_type ptr()
Dereference the pointer.
Ringer::CaloRingsBuilder::m_rsRawConfCol
xAOD::RingSetConf::RawConfCollection m_rsRawConfCol
holds each RingSet configuration (filled at initialize)
Definition: CaloRingsBuilder.h:262
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:473
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
Ringer::CaloRingsBuilder::preExecute
virtual StatusCode preExecute(xAOD::CaloRingsContainer *crCont, xAOD::RingSetContainer *rsCont, const std::size_t nReserve=0) override
method for working on containers
Definition: CaloRingsBuilder.cxx:131
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::CaloRings
CaloRings_v1 CaloRings
Definition of the current "CaloRings version".
Definition: Event/xAOD/xAODCaloRings/xAODCaloRings/CaloRings.h:15
Ringer::CaloRingsBuilder::m_crContName
SG::WriteHandleKey< xAOD::CaloRingsContainer > m_crContName
Tool props (python configurables):
Definition: CaloRingsBuilder.h:151
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
AtlasGeoPoint
Definition: AtlasGeoPoint.h:15
xAOD::RingSetConf_v1::RawConf
Definition: RingSetConf_v1.h:49
Ringer::CaloRingsBuilder::execute
virtual StatusCode execute(const xAOD::IParticle &particle, ElementLink< xAOD::CaloRingsContainer > &clRingsLink) override
build CaloRings for IParticle
Definition: CaloRingsBuilder.cxx:175
str
Definition: BTagTrackIpAccessor.cxx:11
CaloSampling::getSamplingName
static std::string getSamplingName(CaloSample theSample)
Returns a string (name) for each CaloSampling.
Definition: Calorimeter/CaloGeoHelpers/Root/CaloSampling.cxx:18
Ringer::CaloRingsBuilder::m_nRings
Gaudi::Property< std::vector< unsigned int > > m_nRings
Number of rings in a ringset.
Definition: CaloRingsBuilder.h:197
AthAlgTool
Definition: AthAlgTool.h:26
xAOD::RingSetConf_v1::whichSection
static Ringer::CalJointSection whichSection(const std::vector< CaloSampling::CaloSample > &layers)
Definition: RingSetConf_v1.cxx:179
Ringer::CaloRingsBuilder::m_useShowShapeBarycenter
Gaudi::Property< bool > m_useShowShapeBarycenter
Switch to use shower barycenter seed for each RingSets.
Definition: CaloRingsBuilder.h:232
xAOD::CaloCluster_v1::e
virtual double e() const
The total energy of the particle.
Definition: CaloCluster_v1.cxx:265
xAOD::RingSet
RingSet_v1 RingSet
Definition of the current "RingSet version".
Definition: RingSet.h:15
CaloPhiRange::diff
static double diff(double phi1, double phi2)
simple phi1 - phi2 calculation, but result is fixed to respect range.
Definition: CaloPhiRange.cxx:22
Ringer
Namespace dedicated for Ringer utilities.
Definition: CaloRingsDefs.h:9