Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
Calo::CaloTrackingGeometryBuilderCond Class Referencefinal

#include <CaloTrackingGeometryBuilderCond.h>

Inheritance diagram for Calo::CaloTrackingGeometryBuilderCond:
Collaboration diagram for Calo::CaloTrackingGeometryBuilderCond:

Public Member Functions

 CaloTrackingGeometryBuilderCond (const std::string &, const std::string &, const IInterface *)
 Constructor. More...
 
virtual ~CaloTrackingGeometryBuilderCond ()=default
 Destructor. More...
 
virtual StatusCode initialize () override final
 AlgTool initailize method. More...
 
virtual std::unique_ptr< Trk::TrackingGeometrytrackingGeometry (const EventContext &ctx, Trk::TrackingVolume *innerVol, SG::WriteCondHandle< Trk::TrackingGeometry > &whandle) const override final
 TrackingGeometry Interface method. More...
 
virtual Trk::GeometrySignature geometrySignature () const override final
 The unique signature. More...
 
std::unique_ptr< Trk::TrackingGeometrycreateTrackingGeometry (Trk::TrackingVolume *innerVol, const CaloDetDescrManager *caloDDM, const GeoAlignmentStore *geoAlign) const
 TrackingGeometry Interface method. More...
 
Trk::GeometrySignature signature () const
 The unique signature. More...
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 
 DeclareInterfaceID (IGeometryBuilderCond, 1, 0)
 Creates the InterfaceID and interfaceID() method. More...
 

Protected Member Functions

void registerInLayerIndexCaloSampleMap (Trk::LayerIndexSampleMap &licsMAp, const std::vector< CaloCell_ID::CaloSample > &ccid, const Trk::TrackingVolume &vol, int side=1) const
 method to establish a link between the LayerIndex and the CaloCell_ID in an associative container More...
 
std::pair< Trk::TrackingVolume *, Trk::TrackingVolume * > createBeamPipeVolumes (const RZPairVector &bpCutouts, float, float, const std::string &, float &) const
 method to build enclosed beam pipe volumes More...
 
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Protected Attributes

PublicToolHandle< Trk::ITrackingVolumeArrayCreatorm_trackingVolumeArrayCreator {this, "TrackingVolumeArrayCreator", "Trk::TrackingVolumeArrayCreator/TrackingVolumeArrayCreator"}
 Helper Tool to create TrackingVolumes. More...
 
PublicToolHandle< Trk::ITrackingVolumeHelperm_trackingVolumeHelper {this, "TrackingVolumeHelper", "Trk::TrackingVolumeHelper/TrackingVolumeHelper"}
 Second helper for volume creation. More...
 
PublicToolHandle< Trk::ITrackingVolumeCreatorm_trackingVolumeCreator {this, "TrackingVolumeCreator", "Trk::CylinderVolumeCreator/TrackingVolumeCreator"}
 Volume Builder for the Liquid Argon Calorimeter. More...
 
PublicToolHandle< Trk::ICaloTrackingVolumeBuilderm_lArVolumeBuilder {this, "LArVolumeBuilder", "LAr::LArVolumeBuilder/LArVolumeBuilder"}
 Volume Builder for the Tile Calorimeter. More...
 
PublicToolHandle< Trk::ICaloTrackingVolumeBuilderm_tileVolumeBuilder {this, "TileVolumeBuilder", "Tile::TileVolumeBuilder/TileVolumeBuilder"}
 Material properties. More...
 
Trk::Material m_caloMaterial {}
 
Trk::Material m_Ar {140.036, 856.32, 39.948, 18., 0.0014}
 
Trk::Material m_Al {88.93, 388.62, 26.98, 13., 0.0027}
 
Trk::Material m_Scint {424.35, 707.43, 11.16, 5.61, 0.001}
 
Trk::Material m_crackMaterial {424.35, 707.43, 11.16, 5.61, 0.001}
 
DoubleProperty m_caloEnvelope {this, "GapLayerEnvelope", 25 * Gaudi::Units::mm}
 Envelope cover for Gap Layers. More...
 
ServiceHandle< IEnvelopeDefSvcm_enclosingEnvelopeSvc {this, "EnvelopeDefinitionSvc", "AtlasGeometry_EnvelopeDefSvc"}
 
DoubleProperty m_caloDefaultRadius {this, "CalorimeterRadius", 4250.}
 the radius if not built from GeoModel More...
 
DoubleProperty m_caloDefaultHalflengthZ {this, "CalorimeterHalflengthZ", 6500.}
 the halflength in z if not built from More...
 
BooleanProperty m_indexStaticLayers {this, "IndexStaticLayers", true}
 forces robust indexing for layers More...
 
BooleanProperty m_recordLayerIndexCaloSampleMap {this, "RecordLayerIndexCaloSampleMap", true}
 for deposition methods More...
 
StringProperty m_layerIndexCaloSampleMapName {this, "LayerIndexCaloSampleMapName", "LayerIndexCaloSampleMap"}
 name to record it More...
 
BooleanProperty m_buildMBTS {this, "BuildMBTS", true}
 MBTS like detectors. More...
 
std::vector< double > m_mbtsRadiusGap
 MBTS like detectors. More...
 
std::vector< int > m_mbtsPhiSegments
 MBTS like detectors. More...
 
std::vector< double > m_mbtsPhiGap
 MBTS like detectors. More...
 
std::vector< double > m_mbtsPositionZ
 MBTS like detectors. More...
 
std::vector< double > m_mbtsStaggeringZ
 MBTS like detectors. More...
 
StringProperty m_entryVolume {this, "EntryVolumeName", "Calo::Container::EntryVolume"}
 name of the Calo entrance More...
 
StringProperty m_exitVolume {this, "ExitVolumeName", "Calo::Container"}
 name of the Calo container More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

SG::ReadCondHandleKey< CaloDetDescrManagerm_caloMgrKey
 
SG::ReadCondHandleKey< GeoAlignmentStorem_readKeyGeoAlign
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 30 of file CaloTrackingGeometryBuilderCond.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ CaloTrackingGeometryBuilderCond()

CaloTrackingGeometryBuilderCond::CaloTrackingGeometryBuilderCond ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)

Constructor.

Definition at line 16 of file CaloTrackingGeometryBuilderCond.cxx.

19  declareInterface<Trk::IGeometryBuilderCond>(this);
20 }

◆ ~CaloTrackingGeometryBuilderCond()

virtual Calo::CaloTrackingGeometryBuilderCond::~CaloTrackingGeometryBuilderCond ( )
virtualdefault

Destructor.

Member Function Documentation

◆ createBeamPipeVolumes()

std::pair< Trk::TrackingVolume *, Trk::TrackingVolume * > Calo::CaloTrackingGeometryBuilderImpl::createBeamPipeVolumes ( const RZPairVector bpCutouts,
float  zmin,
float  zmax,
const std::string &  name,
float &  outerRadius 
) const
protectedinherited

method to build enclosed beam pipe volumes

Definition at line 1476 of file CaloTrackingGeometryBuilderImpl.cxx.

1478  {
1479  outerRadius = 0.;
1480 
1481  // dummy objects
1482  Trk::LayerArray* dummyLayers = nullptr;
1483  Trk::TrackingVolumeArray* dummyVolumes = nullptr;
1484 
1485  // beam pipe thickness along the z distance
1486  if (bpCutouts.empty()) {
1487  return std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*>(0, 0);
1488  }
1489 
1490  RZPairVector dim;
1491  dim.emplace_back(bpCutouts[0].first, zmin);
1492  float rOut = bpCutouts[0].first;
1493  for (const auto& bpCutout : bpCutouts) {
1494  if (bpCutout.second <= dim[0].second)
1495  dim[0].first = bpCutout.first;
1496  else if (bpCutout.second <= zmax)
1497  dim.push_back(bpCutout);
1498  if (bpCutout.second <= zmax)
1499  rOut = bpCutout.first;
1500  }
1501 
1502  if (dim.back().second < zmax)
1503  dim.emplace_back(rOut, zmax);
1504 
1505  if (dim.size() == 2) { // simple case
1506 
1507  outerRadius = dim[0].first;
1508 
1509  Trk::CylinderVolumeBounds* bpBounds =
1510  new Trk::CylinderVolumeBounds(0., outerRadius, 0.5 * (zmax - zmin));
1511 
1512  Amg::Transform3D* bpPos = new Amg::Transform3D(
1513  Amg::Translation3D(Amg::Vector3D(0., 0., 0.5 * (zmin + zmax))));
1514 
1515  Trk::TrackingVolume* bpVolPos =
1516  new Trk::TrackingVolume(bpPos, bpBounds, m_caloMaterial, dummyLayers,
1517  dummyVolumes, "BeamPipe::Positive" + name);
1518 
1519  Amg::Transform3D* bpNeg = new Amg::Transform3D(
1520  Amg::Translation3D(Amg::Vector3D(0., 0., -0.5 * (zmin + zmax))));
1521 
1522  Trk::TrackingVolume* bpVolNeg = new Trk::TrackingVolume(
1523  bpNeg, bpBounds->clone(), m_caloMaterial, dummyLayers, dummyVolumes,
1524  "BeamPipe::Negative" + name);
1525 
1526  // geometry signature
1527  bpVolPos->sign(Trk::BeamPipe);
1528  bpVolNeg->sign(Trk::BeamPipe);
1529 
1530  return std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*>(bpVolPos,
1531  bpVolNeg);
1532  }
1533 
1534  // cutout included
1535 
1536  outerRadius = dim[0].first;
1537 
1538  // find rMax
1539  for (unsigned int i = 1; i < dim.size(); i++)
1540  if (dim[i].first > outerRadius)
1541  outerRadius = dim[i].first;
1542 
1543  // loop over z sections, prepare volumes for gluing
1544  std::vector<Trk::TrackingVolume*> posVols;
1545 
1546  for (unsigned int i = 0; i < dim.size() - 1; i++) {
1547 
1548  if (dim[i].second == dim[i + 1].second)
1549  continue;
1550 
1551  // beam pipe volume
1553  0., dim[i].first, 0.5 * (dim[i + 1].second - dim[i].second));
1554 
1556  Amg::Vector3D(0., 0., 0.5 * (dim[i + 1].second + dim[i].second))));
1557 
1558  Trk::TrackingVolume* bpVolPos =
1559  new Trk::TrackingVolume(bpPos, bpBounds, m_caloMaterial, dummyLayers,
1560  dummyVolumes, "BeamPipe::Positive" + name);
1561  bpVolPos->sign(Trk::BeamPipe);
1562 
1563  Trk::TrackingVolume* bpVolGap = nullptr;
1564  if (dim[i].first < outerRadius) {
1565 
1567  dim[i].first, outerRadius, 0.5 * (dim[i + 1].second - dim[i].second));
1568 
1569  Amg::Transform3D* bpPB = new Amg::Transform3D(*bpPos);
1570 
1571  bpVolGap = new Trk::TrackingVolume(bpPB, bpGB, m_caloMaterial,
1572  dummyLayers, dummyVolumes,
1573  "Calo::GapVolumes::Positive" + name);
1574  }
1575 
1576  Trk::TrackingVolume* bpSector = bpVolPos;
1577 
1578  if (bpVolGap) {
1579  std::vector<Trk::TrackingVolume*> gapVols;
1580  gapVols.push_back(bpVolPos);
1581  gapVols.push_back(bpVolGap);
1582  bpSector = m_trackingVolumeCreator->createContainerTrackingVolume(
1583  gapVols, m_caloMaterial, "Calo::Container::PositiveBPSector" + name);
1584  }
1585  posVols.push_back(bpSector);
1586  }
1587 
1588  Trk::TrackingVolume* bpPosSector =
1589  m_trackingVolumeCreator->createContainerTrackingVolume(
1590  posVols, m_caloMaterial, "Calo::Container::PositiveBP" + name);
1591 
1592  // loop over z sections, prepare volumes for gluing
1593  std::vector<Trk::TrackingVolume*> negVols;
1594 
1595  for (unsigned int i = 0; i < dim.size() - 1; i++) {
1596 
1597  float zmax2 = -1. * (dim[i].second);
1598  float zmin2 = -1. * (dim[i + 1].second);
1599 
1600  if (zmin2 == zmax2)
1601  continue;
1602 
1603  // beam pipe volume
1604  Trk::CylinderVolumeBounds* bpBounds =
1605  new Trk::CylinderVolumeBounds(0., dim[i].first, 0.5 * (zmax2 - zmin2));
1606 
1607  Amg::Transform3D* bpNeg = new Amg::Transform3D(
1608  Amg::Translation3D(Amg::Vector3D(0., 0., 0.5 * (zmin2 + zmax2))));
1609 
1610  Trk::TrackingVolume* bpVolNeg =
1611  new Trk::TrackingVolume(bpNeg, bpBounds, m_caloMaterial, dummyLayers,
1612  dummyVolumes, "BeamPipe::Negative" + name);
1613  bpVolNeg->sign(Trk::BeamPipe);
1614 
1615  Trk::TrackingVolume* bpVolGap =
1616  dim[i].first < outerRadius
1617  ? new Trk::TrackingVolume(
1618  new Amg::Transform3D(*bpNeg),
1619  new Trk::CylinderVolumeBounds(dim[i].first, outerRadius,
1620  0.5 * (zmax2 - zmin2)),
1621  m_caloMaterial, dummyLayers, dummyVolumes,
1622  "Calo::GapVolumes::Negative" + name)
1623  : nullptr;
1624 
1625  Trk::TrackingVolume* bpSector = bpVolNeg;
1626 
1627  if (bpVolGap) {
1628  std::vector<Trk::TrackingVolume*> gapVols;
1629  gapVols.push_back(bpVolNeg);
1630  gapVols.push_back(bpVolGap);
1631  bpSector = m_trackingVolumeCreator->createContainerTrackingVolume(
1632  gapVols, m_caloMaterial, "Calo::Container::NegativeBPSector" + name);
1633  }
1634 
1635  if (negVols.empty())
1636  negVols.push_back(bpSector);
1637  else
1638  negVols.insert(negVols.begin(), bpSector);
1639  }
1640 
1641  Trk::TrackingVolume* bpNegSector =
1642  m_trackingVolumeCreator->createContainerTrackingVolume(
1643  negVols, m_caloMaterial, "Calo::Container::NegativeBP" + name);
1644 
1645  return std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*>(bpPosSector,
1646  bpNegSector);
1647 }

◆ createTrackingGeometry()

std::unique_ptr< Trk::TrackingGeometry > Calo::CaloTrackingGeometryBuilderImpl::createTrackingGeometry ( Trk::TrackingVolume innerVol,
const CaloDetDescrManager caloDDM,
const GeoAlignmentStore geoAlign 
) const
inherited

TrackingGeometry Interface method.

Definition at line 95 of file CaloTrackingGeometryBuilderImpl.cxx.

97  {
98 
99  ATH_MSG_VERBOSE("Starting to build CaloTrackingGeometry ...");
100 
101  Trk::TrackingVolume* calorimeter = nullptr;
102 
103  // the key dimensions
104  RZPairVector keyDim;
105 
106  // the enclosed input volume (ID)
107  double enclosedInnerSectorHalflength = 0.;
108  double enclosedInnerSectorRadius = 0.;
109 
110  // dummy objects
111  Trk::LayerArray* dummyLayers = nullptr;
112  Trk::TrackingVolumeArray* dummyVolumes = nullptr;
113 
114  if (innerVol) {
115  ATH_MSG_VERBOSE("Got Inner Detector Volume: " << innerVol->volumeName());
116  innerVol->screenDump(msg(MSG::VERBOSE));
117 
118  // retrieve dimensions
119  const Trk::CylinderVolumeBounds* innerDetectorBounds =
120  dynamic_cast<const Trk::CylinderVolumeBounds*>(
121  &(innerVol->volumeBounds()));
122  if (!innerDetectorBounds)
123  std::abort();
124 
125  enclosedInnerSectorHalflength = innerDetectorBounds->halflengthZ();
126  enclosedInnerSectorRadius = innerDetectorBounds->outerRadius();
127 
128  keyDim.emplace_back(enclosedInnerSectorRadius, enclosedInnerSectorHalflength);
129  }
130  // get the dimensions from the envelope service
131  const RZPairVector& envelopeDefsIn =
132  m_enclosingEnvelopeSvc->getCaloRZBoundary();
133 
134  // find the max,max pair
135  unsigned int ii = 0;
136  for (unsigned int i = 0; i < envelopeDefsIn.size(); i++) {
137  if (envelopeDefsIn[i].second > envelopeDefsIn[ii].second)
138  ii = i;
139  else if (envelopeDefsIn[i].second == envelopeDefsIn[ii].second &&
140  envelopeDefsIn[i].first > envelopeDefsIn[ii].first)
141  ii = i;
142  }
143 
144  // find the sense of rotation
145  int irot = 1;
146  unsigned int inext = ii + 1;
147  if (inext == envelopeDefsIn.size())
148  inext = 0;
149  if (envelopeDefsIn[inext].second != envelopeDefsIn[ii].second) {
150  irot = -1;
151  inext = ii > 0 ? ii - 1 : envelopeDefsIn.size() - 1;
152  }
153 
154  // fill starting with upper low edge, end with upper high edge
155  RZPairVector envelopeDefs;
156  if (irot > 0) {
157  for (unsigned int i = inext; i < envelopeDefsIn.size(); i++)
158  envelopeDefs.push_back(envelopeDefsIn[i]);
159  if (inext > 0)
160  for (unsigned int i = 0; i <= inext - 1; i++)
161  envelopeDefs.push_back(envelopeDefsIn[i]);
162  } else {
163  int i = inext;
164  while (i >= 0) {
165  envelopeDefs.push_back(envelopeDefsIn[i]);
166  i = i - 1;
167  };
168  inext = envelopeDefsIn.size() - 1;
169  while (inext >= ii) {
170  envelopeDefs.push_back(envelopeDefsIn[inext]);
171  inext = inext - 1;
172  };
173  }
174 
175  double envEnclosingVolumeHalfZ = m_caloDefaultHalflengthZ;
176 
177  ATH_MSG_VERBOSE("Calo envelope definition retrieved:");
178  RZPairVector msCutouts;
179  for (unsigned int i = 0; i < envelopeDefs.size(); i++) {
180  ATH_MSG_VERBOSE("Rz pair:" << i << ":" << envelopeDefs[i].first << ","
181  << envelopeDefs[i].second);
182  if (std::abs(envelopeDefs[i].second) < envEnclosingVolumeHalfZ)
183  envEnclosingVolumeHalfZ = std::abs(envelopeDefs[i].second);
184  // ID dimensions : pick 1100 < R < 1200
185  if (envelopeDefs[i].first > 1100. && envelopeDefs[i].first < 1200. &&
186  envelopeDefs[i].second > 0.) {
187  // check that radial size of ID envelope fits
188  if (enclosedInnerSectorRadius != envelopeDefs[i].first)
189  ATH_MSG_INFO(
190  "Enclosed ID volume radius does not match ID envelope, adjusting "
191  "Calo.");
192  envEnclosingVolumeHalfZ = envelopeDefs[i].second;
193  if (!innerVol) {
194  enclosedInnerSectorRadius = envelopeDefs[i].first;
195  enclosedInnerSectorHalflength = envelopeDefs[i].second;
196  }
197  }
198  // collect outer cutouts, process those with |z| < 6785.mm ( this cut should
199  // be synchronized with MS default size,
200  // MS builder would crash for a longer input volume )
201  if (envelopeDefs[i].second > 0. && envelopeDefs[i].second < 6785. &&
202  (envelopeDefs[i].first > 1200. ||
203  envelopeDefs[i].second > envEnclosingVolumeHalfZ)) {
204  if (msCutouts.empty())
205  msCutouts.push_back(envelopeDefs[i]);
206  else {
207  RZPairVector::iterator envIter = msCutouts.begin();
208  while (envIter != msCutouts.end() &&
209  (*envIter).second < envelopeDefs[i].second)
210  ++envIter;
211  while (envIter != msCutouts.end() &&
212  (*envIter).second == envelopeDefs[i].second &&
213  (*envIter).first > envelopeDefs[i].first)
214  ++envIter;
215  msCutouts.insert(envIter, envelopeDefs[i]);
216  }
217  }
218  // end outer (MS) cutouts
219  }
220  if (msgLvl(MSG::VERBOSE)) {
221  for (unsigned int i = 0; i < msCutouts.size(); i++)
222  ATH_MSG_VERBOSE("MS cutouts to be processed by Calo:"
223  << i << ":" << msCutouts[i].first << ","
224  << msCutouts[i].second);
225  }
226 
227  // first member of msCutouts redefines the default central cylinder dimension
228  double caloDefaultRadius = m_caloDefaultRadius;
229  double caloDefaultHalflengthZ = m_caloDefaultHalflengthZ;
230 
231  if (!msCutouts.empty()) {
232  caloDefaultRadius = msCutouts[0].first;
233  caloDefaultHalflengthZ = msCutouts[0].second;
235  " Calo central cylinder dimensions adjusted using EnvelopeSvc:"
237  }
238 
239  // create dummy ID if not built already
240 
241  if (!innerVol) {
243  enclosedInnerSectorRadius, enclosedInnerSectorHalflength);
244 
245  Amg::Transform3D* idTr = new Amg::Transform3D(Trk::s_idTransform);
246 
247  innerVol =
248  new Trk::TrackingVolume(idTr, idBounds, m_caloMaterial, dummyLayers,
249  dummyVolumes, "Calo::GapVolumes::DummyID");
250 
251  keyDim.emplace_back(enclosedInnerSectorRadius, enclosedInnerSectorHalflength);
252  }
253 
254  // BEAM PIPE
255  const RZPairVector& bpDefs = m_enclosingEnvelopeSvc->getBeamPipeRZBoundary();
256 
257  ATH_MSG_VERBOSE("BeamPipe envelope definition retrieved:");
258  RZPairVector bpCutouts;
259  for (unsigned int i = 0; i < bpDefs.size(); i++) {
260  ATH_MSG_VERBOSE("Rz pair:" << i << ":" << bpDefs[i].first << ","
261  << bpDefs[i].second);
262  // beam pipe within calo : pick 10. < R < 200; envEnclosingVolumeHalfZ =<
263  // z <= msCutouts.back().second;
264  if (bpDefs[i].first > 10. && bpDefs[i].first < 200. &&
265  bpDefs[i].second >= envEnclosingVolumeHalfZ &&
266  bpDefs[i].second <= msCutouts.back().second) {
267  bpCutouts.push_back(bpDefs[i]);
268  }
269  if (i > 0 && i < 4)
270  keyDim.push_back(bpDefs[i]);
271  }
272 
273  // no beam pipe within ID
274  // if (bpCutouts[0].second == envEnclosingVolumeHalfZ && bpCutouts[0].first >
275  // 0 ) bpCutouts[0].first=0.;
276  // last not needed
277  if (bpCutouts.size() > 1 &&
278  bpCutouts.back().second == bpCutouts[bpCutouts.size() - 2].second)
279  bpCutouts.erase(bpCutouts.end() - 1);
280  // end beam pipe envelope within Calo
281  for (unsigned int i = 0; i < bpCutouts.size(); i++)
282  ATH_MSG_VERBOSE("Beam pipe dimensions to be used by Calo:"
283  << i << ":" << bpCutouts[i].first << ","
284  << bpCutouts[i].second);
285 
286  keyDim.emplace_back(caloDefaultRadius, caloDefaultHalflengthZ);
287 
290 
291  // PART 1 : Liquid Argon Volumes
292  // ===========================================================================================
293  // get the Tracking Volumes from the LAr Builder
294  //
295  const std::vector<Trk::TrackingVolume*>* lArVolumes =
296  m_lArVolumeBuilder->trackingVolumes(*caloDDM,geoAlign);
297 
298  ATH_MSG_INFO(lArVolumes->size()
299  << " volumes retrieved from " << m_lArVolumeBuilder.name());
300 
301  // LAr Barrel part
302  Trk::TrackingVolume* solenoid = (*lArVolumes)[0];
303  Trk::TrackingVolume* solenoidlArPresamplerGap = (*lArVolumes)[1];
304  Trk::TrackingVolume* lArBarrelPresampler = (*lArVolumes)[2];
305  Trk::TrackingVolume* lArBarrel = (*lArVolumes)[3];
306 
307  // LAr Positive Endcap part
308  Trk::TrackingVolume* lArPositiveMBTS = (*lArVolumes)[4];
309  Trk::TrackingVolume* lArPositiveEndcap = (*lArVolumes)[5];
310  Trk::TrackingVolume* lArPositiveHec = (*lArVolumes)[6];
311  Trk::TrackingVolume* lArPositiveFcal = (*lArVolumes)[7];
312  Trk::TrackingVolume* lArPositiveHecFcalCover = (*lArVolumes)[8];
313  // LAr Negative Endcap part
314  Trk::TrackingVolume* lArNegativeMBTS = (*lArVolumes)[9];
315  Trk::TrackingVolume* lArNegativeEndcap = (*lArVolumes)[10];
316  Trk::TrackingVolume* lArNegativeHec = (*lArVolumes)[11];
317  Trk::TrackingVolume* lArNegativeFcal = (*lArVolumes)[12];
318  Trk::TrackingVolume* lArNegativeHecFcalCover = (*lArVolumes)[13];
319  Trk::TrackingVolume* lArPosECPresampler = (*lArVolumes)[14];
320  Trk::TrackingVolume* lArNegECPresampler = (*lArVolumes)[15];
321 
322  // PART 2 : Tile Volumes
323  // ===========================================================================================
324  // get the Tracking Volumes from the Tile Builder
325  std::vector<Trk::TrackingVolume*>* tileVolumes =
326  m_tileVolumeBuilder->trackingVolumes(*caloDDM,geoAlign);
327 
328  ATH_MSG_INFO(tileVolumes->size()
329  << " volumes retrieved from " << m_tileVolumeBuilder.name());
330  if (msgLvl(MSG::INFO)) {
331  ATH_MSG_INFO(
332  "--------------- detailed output "
333  "---------------------------------------------------------- ");
334  std::vector<Trk::TrackingVolume*>::const_iterator tileVolIter =
335  tileVolumes->begin();
336  std::vector<Trk::TrackingVolume*>::const_iterator tileVolIterEnd =
337  tileVolumes->end();
338  for (; tileVolIter != tileVolIterEnd;
339  (*tileVolIter)->screenDump(msg(MSG::VERBOSE)), ++tileVolIter)
340  ;
341  }
342 
343  // Tile Barrel part
344  Trk::TrackingVolume* tileCombined = (*tileVolumes)[0];
345  // Tile Positive Extended Part
346  Trk::TrackingVolume* tilePositiveExtendedBarrel = (*tileVolumes)[1];
347 
348  const Trk::CylinderVolumeBounds* ebBounds =
349  dynamic_cast<const Trk::CylinderVolumeBounds*>(
350  &(tilePositiveExtendedBarrel->volumeBounds()));
351 
352  double rTileMin = ebBounds ? ebBounds->innerRadius() : 2288.;
353  double zTileMin = ebBounds ? tilePositiveExtendedBarrel->center().z() -
354  ebBounds->halflengthZ()
355  : 3559.5;
356 
357  keyDim.emplace_back(rTileMin, zTileMin);
358  for (unsigned int i = 0; i < keyDim.size(); i++) {
359  ATH_MSG_VERBOSE("key dimensions:" << i << ":" << keyDim[i].first << ","
360  << keyDim[i].second);
361  }
362 
363  // The Bounds needed for the Gap Volume creation
364  const Trk::CylinderVolumeBounds* solenoidBounds =
365  dynamic_cast<const Trk::CylinderVolumeBounds*>(
366  &(solenoid->volumeBounds()));
367  if (!solenoidBounds)
368  std::abort();
369  const Trk::CylinderVolumeBounds* lArBarrelBounds =
370  dynamic_cast<const Trk::CylinderVolumeBounds*>(
371  &(lArBarrel->volumeBounds()));
372  if (!lArBarrelBounds)
373  std::abort();
374  const Trk::CylinderVolumeBounds* lArPositiveEndcapBounds =
375  dynamic_cast<const Trk::CylinderVolumeBounds*>(
376  &(lArPositiveEndcap->volumeBounds()));
377  if (!lArPositiveEndcapBounds)
378  std::abort();
379  const Trk::CylinderVolumeBounds* lArNegativeEndcapBounds =
380  dynamic_cast<const Trk::CylinderVolumeBounds*>(
381  &(lArNegativeEndcap->volumeBounds()));
382  if (!lArNegativeEndcapBounds)
383  std::abort();
384  const Trk::CylinderVolumeBounds* lArPositiveHecBounds =
385  dynamic_cast<const Trk::CylinderVolumeBounds*>(
386  &(lArPositiveHec->volumeBounds()));
387  if (!lArPositiveHecBounds)
388  std::abort();
389  const Trk::CylinderVolumeBounds* lArPositiveFcalBounds =
390  dynamic_cast<const Trk::CylinderVolumeBounds*>(
391  &(lArPositiveFcal->volumeBounds()));
392  if (!lArPositiveFcalBounds)
393  std::abort();
394  const Trk::CylinderVolumeBounds* lArNegativeFcalBounds =
395  dynamic_cast<const Trk::CylinderVolumeBounds*>(
396  &(lArNegativeFcal->volumeBounds()));
397  if (!lArNegativeFcalBounds)
398  std::abort();
399 
400  const Trk::CylinderVolumeBounds* tileCombinedBounds =
401  dynamic_cast<const Trk::CylinderVolumeBounds*>(
402  &(tileCombined->volumeBounds()));
403  if (!tileCombinedBounds)
404  std::abort();
405 
406  // Create the gap volumes
407  // ======================================================================
408  Trk::TrackingVolume* lArTileCentralSectorGap = nullptr;
409 
410  Trk::TrackingVolume* lArPositiveSectorInnerGap = nullptr;
411  Trk::TrackingVolume* lArPositiveSectorOuterGap = nullptr;
412  Trk::TrackingVolume* lArPositiveSectorOuterGap0 = nullptr;
413  Trk::TrackingVolume* lArCentralPositiveGap = nullptr;
414 
415  Trk::TrackingVolume* lArNegativeSectorInnerGap = nullptr;
416  Trk::TrackingVolume* lArNegativeSectorOuterGap = nullptr;
417  Trk::TrackingVolume* lArNegativeSectorOuterGap0 = nullptr;
418  Trk::TrackingVolume* lArCentralNegativeGap = nullptr;
419 
420  Trk::TrackingVolume* trtSolenoidGap = nullptr;
421 
422  double caloPositiveOuterBoundary = tileCombinedBounds->halflengthZ();
423 
424  double lArPositiveOuterBoundary = lArPositiveFcal->center().z();
425  lArPositiveOuterBoundary += lArPositiveFcalBounds->halflengthZ();
426 
427  // No. 1
428  // building dense volume here
429  Trk::Material tilePositiveSectorInnerGapMaterial =
430  Trk::Material(58., 565., 30.7, 14.6, 0.0025);
431 
432  // calo sensitive volume outer radius/z extent defined (for example) here
433  float caloVolsOuterRadius = tileCombinedBounds->outerRadius();
434  float caloVolsExtendZ = caloPositiveOuterBoundary;
435 
437  // LAr InnerGap sector + beam pipe
438 
439  Trk::Material lArSectorInnerGapMaterial =
440  Trk::Material(361., 1370., 14.5, 7., 0.0009); // ???
441 
442  // create beam pipe volumes for InnerGap/MBTS and return their outer radius
443  float rInnerGapBP = 0.;
444  std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*> innerGapBP =
446  bpCutouts, keyDim[0].second,
447  // lArPositiveEndcap->center().z()-lArPositiveEndcapBounds->halflengthZ(),
448  keyDim.back().second, "InnerGap", rInnerGapBP);
449 
450  double z = 0.5 * (keyDim.back().second + keyDim[0].second);
451 
452  auto mbtsNegLayers = std::make_unique<std::vector<Trk::Layer*>>();
453  auto mbtsPosLayers = std::make_unique<std::vector<Trk::Layer*>>();
454 
455  if (lArPositiveMBTS && lArNegativeMBTS) {
456  // Disc
457  const Trk::CylinderVolumeBounds* mbtsBounds =
458  dynamic_cast<const Trk::CylinderVolumeBounds*>(
459  &(lArPositiveMBTS->volumeBounds()));
460  if (mbtsBounds && m_buildMBTS) {
461  float rmin = mbtsBounds->innerRadius();
462  float rmax = mbtsBounds->outerRadius();
463  // float d = mbtsBounds->halflengthZ();
464  Trk::DiscBounds* dibo = new Trk::DiscBounds(rmin, rmax);
465  // MBTS positions
466  Amg::Transform3D mbtsNegZpos =
467  Amg::Transform3D(Amg::Translation3D(lArNegativeMBTS->center()));
468  Amg::Transform3D mbtsPosZpos =
469  Amg::Transform3D(Amg::Translation3D(lArPositiveMBTS->center()));
470  // create the two Layers ( TODO: add trd surface subarray )
471  Trk::DiscLayer* mbtsNegLayer = new Trk::DiscLayer(
472  mbtsNegZpos, dibo,
473  // mbtsNegLayerSurfArray,
476  1.);
477  Trk::DiscLayer* mbtsPosLayer = new Trk::DiscLayer(
478  mbtsPosZpos, dibo->clone(),
479  // mbtsPosLayerSurfArray,
482  1. * Gaudi::Units::mm);
483 
484  mbtsNegLayers->push_back(mbtsNegLayer);
485  mbtsPosLayers->push_back(mbtsPosLayer);
486  }
487  }
488 
489  // building inner gap
491  rInnerGapBP,
492  // lArPositiveEndcapBounds->outerRadius(),
493  keyDim[0].first, 0.5 * (keyDim.back().second - keyDim[0].second));
494 
495  Amg::Transform3D* lArG1P =
497  lArPositiveSectorInnerGap = new Trk::TrackingVolume(
498  lArG1P, lArG1Bounds, lArSectorInnerGapMaterial, mbtsPosLayers.release(),
499  "Calo::GapVolumes::LAr::PositiveSectorInnerGap");
500 
501  Amg::Transform3D* lArG1N =
503  lArNegativeSectorInnerGap = new Trk::TrackingVolume(
504  lArG1N, lArG1Bounds->clone(), lArSectorInnerGapMaterial,
505  mbtsNegLayers.release(), "Calo::GapVolumes::LAr::NegativeSectorInnerGap");
506 
507  // glue InnerGap with beam pipe volumes
508  Trk::TrackingVolume* positiveInnerGap = nullptr;
509  if (innerGapBP.first) {
510  std::vector<Trk::TrackingVolume*> volsInnerGap;
511  volsInnerGap.push_back(innerGapBP.first);
512  volsInnerGap.push_back(lArPositiveSectorInnerGap);
513  positiveInnerGap = m_trackingVolumeCreator->createContainerTrackingVolume(
514  volsInnerGap, m_caloMaterial, "Calo::Container::PositiveInnerGap");
515  } else
516  positiveInnerGap = lArPositiveSectorInnerGap;
517 
518  Trk::TrackingVolume* negativeInnerGap = nullptr;
519  if (innerGapBP.second) {
520  std::vector<Trk::TrackingVolume*> volsInnerGap;
521  volsInnerGap.push_back(innerGapBP.second);
522  volsInnerGap.push_back(lArNegativeSectorInnerGap);
523  negativeInnerGap = m_trackingVolumeCreator->createContainerTrackingVolume(
524  volsInnerGap, m_caloMaterial, "Calo::Container::NegativeInnerGap");
525  } else
526  negativeInnerGap = lArNegativeSectorInnerGap;
527 
528  // glue MBTS volumes with ID
529  std::vector<Trk::TrackingVolume*> inBufferVolumes;
530  inBufferVolumes.push_back(negativeInnerGap);
531  inBufferVolumes.push_back(innerVol);
532  inBufferVolumes.push_back(positiveInnerGap);
533 
534  Trk::TrackingVolume* inDetEnclosed =
535  m_trackingVolumeCreator->createContainerTrackingVolume(
536  inBufferVolumes, m_caloMaterial,
537  "Calo::Container::EnclosedInnerDetector");
538 
539  ATH_MSG_DEBUG(" Inner detector enclosed (MBTS volumes)");
540 
542  // LAr endcap sector including the beam pipe
543  // create beam pipe volumes for Endcap and return their outer radius
544  float rEndcapBP = 0.;
545  std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*> endcapBP =
546  createBeamPipeVolumes(bpCutouts, keyDim.back().second,
547  lArPositiveEndcap->center().z() +
548  lArPositiveEndcapBounds->halflengthZ(),
549  "Endcap", rEndcapBP);
550 
551  // build lAr vessel around EC Presampler
552  const Trk::CylinderVolumeBounds* ecpBounds =
553  dynamic_cast<const Trk::CylinderVolumeBounds*>(
554  &(lArPosECPresampler->volumeBounds()));
555  if (!ecpBounds)
556  std::abort();
557 
558  float ecpHz = ecpBounds->halflengthZ();
559  float ecpRmin = ecpBounds->innerRadius();
560  float ecpRmax = ecpBounds->outerRadius();
561 
562  Amg::Transform3D* ecpPos =
563  new Amg::Transform3D(lArPosECPresampler->transform());
564  Amg::Transform3D* ecpNeg =
565  new Amg::Transform3D(lArNegECPresampler->transform());
566 
567  Trk::CylinderVolumeBounds* ecpUpBounds =
568  new Trk::CylinderVolumeBounds(ecpRmax, keyDim.back().first, ecpHz);
569  Trk::CylinderVolumeBounds* ecpDownBounds =
570  new Trk::CylinderVolumeBounds(rEndcapBP, ecpRmin, ecpHz);
571 
572  Trk::TrackingVolume* ecPresamplerCoverPos = new Trk::TrackingVolume(
573  ecpPos, ecpUpBounds, m_Al, dummyLayers, dummyVolumes,
574  "Calo::GapVolumes::LAr::PositiveECPresamplerCover");
575  Trk::TrackingVolume* ecPresamplerCoverNeg = new Trk::TrackingVolume(
576  ecpNeg, ecpUpBounds->clone(), m_Al, dummyLayers, dummyVolumes,
577  "Calo::GapVolumes::LAr::NegativeECPresamplerCover");
578  Trk::TrackingVolume* ecPresamplerInnerPos = new Trk::TrackingVolume(
579  new Amg::Transform3D(*ecpPos), ecpDownBounds, m_Al, dummyLayers,
580  dummyVolumes, "Calo::GapVolumes::LAr::PositiveECPresamplerInner");
581  Trk::TrackingVolume* ecPresamplerInnerNeg = new Trk::TrackingVolume(
582  new Amg::Transform3D(*ecpNeg), ecpDownBounds->clone(), m_Al, dummyLayers,
583  dummyVolumes, "Calo::GapVolumes::LAr::NegativeECPresamplerInner");
584 
585  // glue EC presampler radially
586  std::vector<Trk::TrackingVolume*> volsECP;
587  volsECP.push_back(ecPresamplerInnerPos);
588  volsECP.push_back(lArPosECPresampler);
589  volsECP.push_back(ecPresamplerCoverPos);
590  Trk::TrackingVolume* positiveECP =
591  m_trackingVolumeCreator->createContainerTrackingVolume(
592  volsECP, m_caloMaterial, "Calo::Container::PositiveECPresamplerR");
593  std::vector<Trk::TrackingVolume*> volsECN;
594  volsECN.push_back(ecPresamplerInnerNeg);
595  volsECN.push_back(lArNegECPresampler);
596  volsECN.push_back(ecPresamplerCoverNeg);
597  Trk::TrackingVolume* negativeECP =
598  m_trackingVolumeCreator->createContainerTrackingVolume(
599  volsECN, m_caloMaterial, "Calo::Container::NegativeECPresamplerR");
600 
601  // add surrounding buffers
602  z = lArPosECPresampler->center().z() - ecpHz;
603  float z1 = lArPosECPresampler->center().z() + ecpHz;
604  float z2 =
605  lArPositiveEndcap->center().z() - lArPositiveEndcapBounds->halflengthZ();
607  Amg::Vector3D(0., 0., 0.5 * (z + keyDim.back().second))));
609  Amg::Vector3D(0., 0., -0.5 * (z + keyDim.back().second))));
611  rEndcapBP, keyDim.back().first, 0.5 * (z - keyDim.back().second));
612  Amg::Transform3D* ecOPos = new Amg::Transform3D(
613  Amg::Translation3D(Amg::Vector3D(0., 0., 0.5 * (z1 + z2))));
614  Amg::Transform3D* ecONeg = new Amg::Transform3D(
615  Amg::Translation3D(Amg::Vector3D(0., 0., -0.5 * (z1 + z2))));
617  rEndcapBP, keyDim.back().first, 0.5 * (z2 - z1));
618 
619  Trk::TrackingVolume* ecPresamplerInPos = new Trk::TrackingVolume(
620  ecIPos, ecpIBounds, m_Ar, dummyLayers, dummyVolumes,
621  "Calo::GapVolumes::LAr::PositiveECPresamplerIn");
622  Trk::TrackingVolume* ecPresamplerInNeg = new Trk::TrackingVolume(
623  ecINeg, ecpIBounds->clone(), m_Ar, dummyLayers, dummyVolumes,
624  "Calo::GapVolumes::LAr::NegativeECPresamplerIn");
625  Trk::TrackingVolume* ecPresamplerOutPos = new Trk::TrackingVolume(
626  ecOPos, ecpOBounds, m_Ar, dummyLayers, dummyVolumes,
627  "Calo::GapVolumes::LAr::PositiveECPresamplerOut");
628  Trk::TrackingVolume* ecPresamplerOutNeg = new Trk::TrackingVolume(
629  ecONeg, ecpOBounds->clone(), m_Ar, dummyLayers, dummyVolumes,
630  "Calo::GapVolumes::LAr::NegativeECPresamplerOut");
631 
632  // glue EC presampler in z
633  std::vector<Trk::TrackingVolume*> volECP;
634  volECP.push_back(ecPresamplerInPos);
635  volECP.push_back(positiveECP);
636  volECP.push_back(ecPresamplerOutPos);
637  Trk::TrackingVolume* positiveEP =
638  m_trackingVolumeCreator->createContainerTrackingVolume(
639  volECP, m_caloMaterial, "Calo::Container::PositiveECPresampler");
640  std::vector<Trk::TrackingVolume*> volECN;
641  volECN.push_back(ecPresamplerOutNeg);
642  volECN.push_back(negativeECP);
643  volECN.push_back(ecPresamplerInNeg);
644  Trk::TrackingVolume* negativeEP =
645  m_trackingVolumeCreator->createContainerTrackingVolume(
646  volECN, m_caloMaterial, "Calo::Container::NegativeECPresampler");
647 
648  // build lAr vessel around EMEC
649  ecpHz = lArPositiveEndcapBounds->halflengthZ();
650  ecpRmin = lArPositiveEndcapBounds->innerRadius();
651  ecpRmax = lArPositiveEndcapBounds->outerRadius();
652 
653  Amg::Transform3D* ecPos =
654  new Amg::Transform3D(lArPositiveEndcap->transform());
655  Amg::Transform3D* ecNeg =
656  new Amg::Transform3D(lArNegativeEndcap->transform());
657 
658  Trk::CylinderVolumeBounds* ecUpBounds =
659  new Trk::CylinderVolumeBounds(ecpRmax, keyDim.back().first, ecpHz);
660  Trk::CylinderVolumeBounds* ecDownBounds =
661  new Trk::CylinderVolumeBounds(rEndcapBP, ecpRmin, ecpHz);
662 
663  Trk::TrackingVolume* ecCoverPos = new Trk::TrackingVolume(
664  ecPos, ecUpBounds, m_Ar, dummyLayers, dummyVolumes,
665  "Calo::GapVolumes::LAr::PositiveEndcapCover");
666  Trk::TrackingVolume* ecCoverNeg = new Trk::TrackingVolume(
667  ecNeg, ecUpBounds->clone(), m_Ar, dummyLayers, dummyVolumes,
668  "Calo::GapVolumes::LAr::NegativeEndcapCover");
669  Trk::TrackingVolume* ecInnerPos = new Trk::TrackingVolume(
670  new Amg::Transform3D(*ecPos), ecDownBounds, m_Al, dummyLayers,
671  dummyVolumes, "Calo::GapVolumes::LAr::PositiveEndcapInner");
672  Trk::TrackingVolume* ecInnerNeg = new Trk::TrackingVolume(
673  new Amg::Transform3D(*ecNeg), ecDownBounds->clone(), m_Al, dummyLayers,
674  dummyVolumes, "Calo::GapVolumes::LAr::NegativeEndcapInner");
675 
676  // glue EMEC radially
677  std::vector<Trk::TrackingVolume*> volsEC;
678  volsEC.push_back(ecInnerPos);
679  volsEC.push_back(lArPositiveEndcap);
680  volsEC.push_back(ecCoverPos);
681  Trk::TrackingVolume* positiveEC =
682  m_trackingVolumeCreator->createContainerTrackingVolume(
683  volsEC, m_caloMaterial, "Calo::Container::PositiveEndcapR");
684  std::vector<Trk::TrackingVolume*> volsEN;
685  volsEN.push_back(ecInnerNeg);
686  volsEN.push_back(lArNegativeEndcap);
687  volsEN.push_back(ecCoverNeg);
688  Trk::TrackingVolume* negativeEC =
689  m_trackingVolumeCreator->createContainerTrackingVolume(
690  volsEN, m_caloMaterial, "Calo::Container::NegativeEndcapR");
691 
692  // glue presampler with EMEC
693  std::vector<Trk::TrackingVolume*> volEEP;
694  volEEP.push_back(positiveEP);
695  volEEP.push_back(positiveEC);
696  Trk::TrackingVolume* positiveEEP =
697  m_trackingVolumeCreator->createContainerTrackingVolume(
698  volEEP, m_caloMaterial, "Calo::Container::PositiveEMEC");
699  std::vector<Trk::TrackingVolume*> volEEN;
700  volEEN.push_back(negativeEC);
701  volEEN.push_back(negativeEP);
702  Trk::TrackingVolume* negativeEEP =
703  m_trackingVolumeCreator->createContainerTrackingVolume(
704  volEEN, m_caloMaterial, "Calo::Container::NegativeEMEC");
705 
706  // glue EMEC sector with beam pipe volumes
707 
708  std::vector<Trk::TrackingVolume*> volsEndcapPos;
709  if (endcapBP.first)
710  volsEndcapPos.push_back(endcapBP.first);
711  volsEndcapPos.push_back(positiveEEP);
712 
713  std::unique_ptr<Trk::TrackingVolume> positiveEndcap(
714  m_trackingVolumeCreator->createContainerTrackingVolume(
715  volsEndcapPos, m_caloMaterial, "Calo::Container::PositiveEndcap"));
716 
717  std::vector<Trk::TrackingVolume*> volsEndcapNeg;
718  if (endcapBP.second)
719  volsEndcapNeg.push_back(endcapBP.second);
720  volsEndcapNeg.push_back(negativeEEP);
721 
722  std::unique_ptr<Trk::TrackingVolume> negativeEndcap(
723  m_trackingVolumeCreator->createContainerTrackingVolume(
724  volsEndcapNeg, m_caloMaterial, "Calo::Container::NegativeEndcap"));
725 
727  // Hec sector + beam pipe + lAr cover
728  // create beam pipe volumes for Hec and return their outer radius
729  float rHecBP = 0.;
730  std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*> hecBP =
732  bpCutouts,
733  lArPositiveHec->center().z() - lArPositiveHecBounds->halflengthZ(),
734  lArPositiveHec->center().z() + lArPositiveHecBounds->halflengthZ(),
735  "Hec", rHecBP);
736  // HecInnerGap (new gap volume )
737  Trk::Material lArHecInnerGapMaterial =
738  Trk::Material(390., 1223., 18., 9., 0.0014);
739 
740  // create the Bounds
741  Trk::CylinderVolumeBounds* lArHecInnerGapBounds =
742  new Trk::CylinderVolumeBounds(rHecBP, lArPositiveHecBounds->innerRadius(),
743  lArPositiveHecBounds->halflengthZ());
744 
745  Amg::Transform3D* lArHecPos = new Amg::Transform3D(
746  Amg::Translation3D(Amg::Vector3D(0., 0., lArPositiveHec->center().z())));
747  Amg::Transform3D* lArHecNeg = new Amg::Transform3D(
748  Amg::Translation3D(Amg::Vector3D(0., 0., lArNegativeHec->center().z())));
749 
750  Trk::TrackingVolume* lArPositiveHecInnerGap = new Trk::TrackingVolume(
751  lArHecPos, lArHecInnerGapBounds, m_Al, dummyLayers, dummyVolumes,
752  "Calo::GapVolumes::LAr::PositiveHecInnerGap");
753 
754  Trk::TrackingVolume* lArNegativeHecInnerGap = new Trk::TrackingVolume(
755  lArHecNeg, lArHecInnerGapBounds->clone(), m_Al, dummyLayers, dummyVolumes,
756  "Calo::GapVolumes::LAr::NegativeHecInnerGap");
757  // create the Bounds
758  Trk::CylinderVolumeBounds* lArHecOuterGapBounds =
759  new Trk::CylinderVolumeBounds(lArPositiveHecBounds->outerRadius(),
760  keyDim.back().first,
761  lArPositiveHecBounds->halflengthZ());
762 
763  Trk::TrackingVolume* lArPositiveHecOuterGap = new Trk::TrackingVolume(
764  new Amg::Transform3D(*lArHecPos), lArHecOuterGapBounds, m_Ar, dummyLayers,
765  dummyVolumes, "Calo::GapVolumes::LAr::PositiveHecOuterGap");
766 
767  Trk::TrackingVolume* lArNegativeHecOuterGap = new Trk::TrackingVolume(
768  new Amg::Transform3D(*lArHecNeg), lArHecOuterGapBounds->clone(), m_Ar,
769  dummyLayers, dummyVolumes, "Calo::GapVolumes::LAr::NegativeHecOuterGap");
770 
771  // glue Hec sector with beam pipe volumes
772 
773  std::vector<Trk::TrackingVolume*> volsHecPos;
774  if (hecBP.first)
775  volsHecPos.push_back(hecBP.first);
776  volsHecPos.push_back(lArPositiveHecInnerGap);
777  volsHecPos.push_back(lArPositiveHec);
778  volsHecPos.push_back(lArPositiveHecOuterGap);
779 
780  std::unique_ptr<Trk::TrackingVolume> positiveHec(
781  m_trackingVolumeCreator->createContainerTrackingVolume(
782  volsHecPos, m_caloMaterial, "Calo::Container::PositiveHec"));
783 
784  std::vector<Trk::TrackingVolume*> volsHecNeg;
785  if (hecBP.second)
786  volsHecNeg.push_back(hecBP.second);
787  volsHecNeg.push_back(lArNegativeHecInnerGap);
788  volsHecNeg.push_back(lArNegativeHec);
789  volsHecNeg.push_back(lArNegativeHecOuterGap);
790 
791  std::unique_ptr<Trk::TrackingVolume> negativeHec(
792  m_trackingVolumeCreator->createContainerTrackingVolume(
793  volsHecNeg, m_caloMaterial, "Calo::Container::NegativeHec"));
794 
796  // Fcal sector + beam pipe + lAr cover
797 
798  // create beam pipe volumes for Fcal and return their outer radius
799  float rFcalBP = 0.;
800  std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*> fcalBP =
802  bpCutouts,
803  lArPositiveFcal->center().z() - lArPositiveFcalBounds->halflengthZ(),
804  lArPositiveFcal->center().z() + lArPositiveFcalBounds->halflengthZ(),
805  "Fcal", rFcalBP);
806  // FcalInnerGap (new gap volume )
807  // Trk::Material lArFcalInnerGapMaterial = Trk::Material(390.,
808  // 1223., 40.,18., 0.0014);
809 
810  if (rFcalBP > lArPositiveFcalBounds->innerRadius()) {
811  ATH_MSG_ERROR("PROBLEM : beam pipe collide with Fcal:"
812  << rFcalBP << ">" << lArPositiveFcalBounds->innerRadius()
813  << ", abort");
814  return nullptr;
815  }
816 
817  // create the Bounds
818  Trk::CylinderVolumeBounds* lArFcalInnerGapBounds =
819  new Trk::CylinderVolumeBounds(rFcalBP,
820  lArPositiveFcalBounds->innerRadius(),
821  lArPositiveFcalBounds->halflengthZ());
822 
823  Amg::Transform3D* lArFcalPos = new Amg::Transform3D(
824  Amg::Translation3D(Amg::Vector3D(0., 0., lArPositiveFcal->center().z())));
825  Amg::Transform3D* lArFcalNeg = new Amg::Transform3D(
826  Amg::Translation3D(Amg::Vector3D(0., 0., lArNegativeFcal->center().z())));
827 
828  Trk::TrackingVolume* lArPositiveFcalInnerGap = new Trk::TrackingVolume(
829  lArFcalPos, lArFcalInnerGapBounds, m_Al, dummyLayers, dummyVolumes,
830  "Calo::GapVolumes::LAr::PositiveFcalInnerGap");
831 
832  Trk::TrackingVolume* lArNegativeFcalInnerGap = new Trk::TrackingVolume(
833  lArFcalNeg, lArFcalInnerGapBounds->clone(), m_Al, dummyLayers,
834  dummyVolumes, "Calo::GapVolumes::LAr::NegativeFcalInnerGap");
835 
836  // create the Bounds
837  Trk::CylinderVolumeBounds* lArFcalOuterGapBounds =
838  new Trk::CylinderVolumeBounds(lArPositiveHecBounds->outerRadius(),
839  keyDim.back().first,
840  lArPositiveFcalBounds->halflengthZ());
841 
842  Trk::TrackingVolume* lArPositiveFcalOuterGap = new Trk::TrackingVolume(
843  new Amg::Transform3D(*lArFcalPos), lArFcalOuterGapBounds, m_Ar,
844  dummyLayers, dummyVolumes, "Calo::GapVolumes::LAr::PositiveFcalOuterGap");
845 
846  Trk::TrackingVolume* lArNegativeFcalOuterGap = new Trk::TrackingVolume(
847  new Amg::Transform3D(*lArFcalNeg), lArFcalOuterGapBounds->clone(), m_Ar,
848  dummyLayers, dummyVolumes, "Calo::GapVolumes::LAr::NegativeFcalOuterGap");
849 
850  // glue Fcal sector with beam pipe volumes
851 
852  std::vector<Trk::TrackingVolume*> volsFcalPos;
853  if (fcalBP.first)
854  volsFcalPos.push_back(fcalBP.first);
855  volsFcalPos.push_back(lArPositiveFcalInnerGap);
856  volsFcalPos.push_back(lArPositiveFcal);
857  volsFcalPos.push_back(lArPositiveHecFcalCover);
858  volsFcalPos.push_back(lArPositiveFcalOuterGap);
859 
860  std::unique_ptr<Trk::TrackingVolume> positiveFcal(
861  m_trackingVolumeCreator->createContainerTrackingVolume(
862  volsFcalPos, m_caloMaterial, "Calo::Container::PositiveFcal"));
863 
864  std::vector<Trk::TrackingVolume*> volsFcalNeg;
865  if (fcalBP.second)
866  volsFcalNeg.push_back(fcalBP.second);
867  volsFcalNeg.push_back(lArNegativeFcalInnerGap);
868  volsFcalNeg.push_back(lArNegativeFcal);
869  volsFcalNeg.push_back(lArNegativeHecFcalCover);
870  volsFcalNeg.push_back(lArNegativeFcalOuterGap);
871 
872  std::unique_ptr<Trk::TrackingVolume> negativeFcal(
873  m_trackingVolumeCreator->createContainerTrackingVolume(
874  volsFcalNeg, m_caloMaterial, "Calo::Container::NegativeFcal"));
875 
877  // Outer endcap sector + beam pipe
878 
879  // create beam pipe volumes for Outer sector and return their outer radius
880  float rOutBP = 0.;
881  std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*> outBP =
882  createBeamPipeVolumes(bpCutouts, lArPositiveOuterBoundary,
883  caloPositiveOuterBoundary, "Outer", rOutBP);
884 
885  Trk::Material lArSectorOuterGapMat =
886  Trk::Material(20.5, 723., 64., 28., 0.0084);
887 
888  Trk::CylinderVolumeBounds* lArSectorOuterG0Bounds =
890  rOutBP, 430.,
891  // lArPositiveEndcapBounds->outerRadius(),
892  0.5 * (caloPositiveOuterBoundary - lArPositiveOuterBoundary));
893 
894  Trk::CylinderVolumeBounds* lArSectorOuterG1Bounds =
896  430., keyDim.back().first,
897  // lArPositiveEndcapBounds->outerRadius(),
898  0.5 * (caloPositiveOuterBoundary - lArPositiveOuterBoundary));
899 
900  z = 0.5 * (caloPositiveOuterBoundary + lArPositiveOuterBoundary);
901 
902  Amg::Transform3D* lArSecOutG1P =
904  Amg::Transform3D* lArSecOutG0P =
906 
907  lArPositiveSectorOuterGap0 = new Trk::TrackingVolume(
908  lArSecOutG0P, lArSectorOuterG0Bounds, lArSectorOuterGapMat, dummyLayers,
909  dummyVolumes, "Calo::GapVolumes::LAr::PositiveSectorOuterGap0");
910 
911  lArPositiveSectorOuterGap = new Trk::TrackingVolume(
912  lArSecOutG1P, lArSectorOuterG1Bounds, m_Ar, dummyLayers, dummyVolumes,
913  "Calo::GapVolumes::LAr::PositiveSectorOuterGap");
914 
915  Amg::Transform3D* lArSecOutG1N =
917  Amg::Transform3D* lArSecOutG0N =
919 
920  lArNegativeSectorOuterGap0 =
921  new Trk::TrackingVolume(lArSecOutG0N, lArSectorOuterG0Bounds->clone(),
922  lArSectorOuterGapMat, dummyLayers, dummyVolumes,
923  "Calo::GapVolumes::LAr::NegativeSectorOuterGap0");
924 
925  lArNegativeSectorOuterGap = new Trk::TrackingVolume(
926  lArSecOutG1N, lArSectorOuterG1Bounds->clone(), m_Ar, dummyLayers,
927  dummyVolumes, "Calo::GapVolumes::LAr::NegativeSectorOuterGap");
928 
929  // glue OuterGap with beam pipe volumes
930  std::vector<Trk::TrackingVolume*> volsOuterGapP;
931  if (outBP.first)
932  volsOuterGapP.push_back(outBP.first);
933  volsOuterGapP.push_back(lArPositiveSectorOuterGap0);
934  volsOuterGapP.push_back(lArPositiveSectorOuterGap);
935  std::unique_ptr<Trk::TrackingVolume> positiveOuterGap(
936  m_trackingVolumeCreator->createContainerTrackingVolume(
937  volsOuterGapP, m_caloMaterial, "Calo::Container::PositiveOuterGap"));
938 
939  std::vector<Trk::TrackingVolume*> volsOuterGapN;
940  if (outBP.second)
941  volsOuterGapN.push_back(outBP.second);
942  volsOuterGapN.push_back(lArNegativeSectorOuterGap0);
943  volsOuterGapN.push_back(lArNegativeSectorOuterGap);
944  std::unique_ptr<Trk::TrackingVolume> negativeOuterGap(
945  m_trackingVolumeCreator->createContainerTrackingVolume(
946  volsOuterGapN, m_caloMaterial, "Calo::Container::NegativeOuterGap"));
947 
948  ATH_MSG_DEBUG("Endcap volumes ready");
949 
950  // ++ (ii) lArNegativeSector
951  Trk::TrackingVolume* lArNegativeSector = nullptr;
952  // +++ has 4 sub volumes in Z
953  std::vector<Trk::TrackingVolume*> lArNegativeSectorVolumes;
954  // +++ (A) -> Outer sector
955  lArNegativeSectorVolumes.push_back(negativeOuterGap.release());
956  // +++ (B) -> Fcal sector
957  lArNegativeSectorVolumes.push_back(negativeFcal.release());
958  // +++ (C) -> Hec sector
959  lArNegativeSectorVolumes.push_back(negativeHec.release());
960  // +++ (D) -> Endcap sector
961  lArNegativeSectorVolumes.push_back(negativeEndcap.release());
962  // +++ all exists : create super volume (ii)
963  lArNegativeSector = m_trackingVolumeCreator->createContainerTrackingVolume(
964  lArNegativeSectorVolumes, m_caloMaterial,
965  "Calo::LAr::Container::NegativeSector");
966 
967  // ++ (ii) lArPositiveSector
968  Trk::TrackingVolume* lArPositiveSector = nullptr;
969  // +++ has 4 sub volumes in Z
970  std::vector<Trk::TrackingVolume*> lArPositiveSectorVolumes;
971  // +++ (A) -> Endcap sector
972  lArPositiveSectorVolumes.push_back(positiveEndcap.release());
973  // +++ (B) -> Hec sector
974  lArPositiveSectorVolumes.push_back(positiveHec.release());
975  // +++ (C) -> Fcal sector
976  lArPositiveSectorVolumes.push_back(positiveFcal.release());
977  // +++ (D) -> OuterGap
978  lArPositiveSectorVolumes.push_back(positiveOuterGap.release());
979  // +++ all exists : create super volume (ii)
980  lArPositiveSector = m_trackingVolumeCreator->createContainerTrackingVolume(
981  lArPositiveSectorVolumes, m_caloMaterial,
982  "Calo::LAr::Container::PositiveSector");
983 
985  // central LAr barrel
986  //
987  // solenoid gap
989  keyDim[0].first, solenoidBounds->innerRadius(),
990  solenoidBounds->halflengthZ());
991 
992  // solenoid gap is not completely empty
993  Trk::Material solGapMat(535., 2871., 18.6, 9.1, 0.00038);
994 
995  trtSolenoidGap =
996  new Trk::TrackingVolume(nullptr, trtSolGapBounds, solGapMat, dummyLayers,
997  dummyVolumes, "Calo::GapVolumes::SolenoidGap");
998 
999  Trk::CylinderVolumeBounds* lArTileCentralG1Bounds =
1000  new Trk::CylinderVolumeBounds(lArBarrelBounds->outerRadius(),
1001  tileCombinedBounds->innerRadius(),
1002  lArBarrelBounds->halflengthZ());
1003 
1004  lArTileCentralSectorGap = new Trk::TrackingVolume(
1005  nullptr, lArTileCentralG1Bounds, m_Ar, dummyLayers, dummyVolumes,
1006  "Calo::GapVolumes::LArTileCentralSectorGap");
1007 
1008  Trk::TrackingVolume* lArCentralBarrelSector = nullptr;
1009  // ++ has 6 sub volumes in R
1010  std::vector<Trk::TrackingVolume*> lArCentralBarrelSectorVolumes;
1011  // ++++ (a) -> solenoid gap
1012  lArCentralBarrelSectorVolumes.push_back(trtSolenoidGap);
1013  // ++++ (b) -> solenoid (exists already)
1014  lArCentralBarrelSectorVolumes.push_back(solenoid);
1015  // ++++ (c) -> solenoidlArPresamplerGap (exists already)
1016  lArCentralBarrelSectorVolumes.push_back(solenoidlArPresamplerGap);
1017  // ++++ (d) -> lArBarrelPresampler (exists already)
1018  lArCentralBarrelSectorVolumes.push_back(lArBarrelPresampler);
1019  // ++++ (e) -> lArBarrel (exists already)
1020  lArCentralBarrelSectorVolumes.push_back(lArBarrel);
1021  // ++++ (f) -> lArTile gap
1022  lArCentralBarrelSectorVolumes.push_back(lArTileCentralSectorGap);
1023  // ++++ all sub volumes exist: build the super volume
1024  lArCentralBarrelSector =
1025  m_trackingVolumeCreator->createContainerTrackingVolume(
1026  lArCentralBarrelSectorVolumes, m_caloMaterial,
1027  "Calo::Containers::LAr::CentralBarrelSector", false, true);
1029  // side buffers
1030  // the Tile Crack volume (TileGap3, enum 17) inserted here
1031  // binned material for Crack : steering in binEta
1032  // TODO turn into 2D binned array
1033  std::vector<Trk::IdentifiedMaterial> matCrack;
1034  // layer material can be adjusted here
1035  int baseID = Trk::GeometrySignature(Trk::Calo) * 1000 + 17;
1036  matCrack.emplace_back(std::make_shared<Trk::Material>(m_Scint), baseID);
1037  matCrack.emplace_back(std::make_shared<Trk::Material>(m_caloMaterial), -1);
1038  matCrack.emplace_back(std::make_shared<Trk::Material>(m_Al), -1);
1039  //
1040  double etadist;
1041  // if TileGap3 goes above 1.6 in eta - it's RUN3 geometry
1042  int nbins =
1043  (caloDDM->is_in(1.65, 0.0, CaloCell_ID::TileGap3, etadist)) ? 6 : 3;
1044  auto bun = Trk::BinUtility(nbins, -1.8, -1.2, Trk::open, Trk::binEta);
1045  auto bup = Trk::BinUtility(nbins, 1.2, 1.8, Trk::open, Trk::binEta);
1046  // array of indices
1047  std::vector<std::vector<size_t>> indexP;
1048  std::vector<std::vector<size_t>> indexN;
1049  // binned material for LAr : layer depth per eta bin
1050  std::vector<Trk::BinUtility> layDN(bun.bins());
1051  std::vector<Trk::BinUtility> layUP(bup.bins());
1052  double crackZ1 = 3532.;
1053  double crackZ2 = 3540.;
1054  // construct bin utilities
1055  std::vector<float> steps;
1056  for (unsigned int i = 0; i < bup.bins(); i++) {
1057  steps.clear();
1058  std::vector<size_t> indx;
1059  indx.clear();
1060  steps.push_back(crackZ1);
1061  indx.push_back(i < bup.bins() - 1 ? 0 : 1);
1062  steps.push_back(crackZ2);
1063  indx.push_back(2);
1064  steps.push_back(keyDim.back().second);
1066  layUP[i] = zBU;
1067  indexP.push_back(indx);
1068  }
1069 
1070  const Trk::BinnedMaterial* crackBinPos =
1071  new Trk::BinnedMaterial(m_crackMaterial, bup, layUP, indexP, matCrack);
1072 
1073  Amg::Transform3D* align = nullptr;
1074 
1076  keyDim[0].first, tileCombinedBounds->innerRadius(),
1077  0.5 * (keyDim.back().second - crackZ1));
1078  z = 0.5 * (keyDim.back().second + crackZ1);
1079  Amg::Transform3D* crackPosTransform =
1081 
1083  crackPosTransform, align, crackBoundsPos, crackBinPos, 17,
1084  "Calo::Detectors::Tile::CrackPos");
1085 
1086  for (unsigned int i = 0; i < bun.bins(); i++) {
1087  steps.clear();
1088  std::vector<size_t> indx;
1089  indx.clear();
1090  steps.push_back(-keyDim.back().second);
1091  indx.push_back(2);
1092  steps.push_back(-crackZ2);
1093  indx.push_back(i > 0 ? 0 : 1);
1094  steps.push_back(-crackZ1);
1096  layDN[i] = zBU;
1097  indexN.push_back(indx);
1098  }
1099 
1100  Trk::BinnedMaterial* crackBinNeg =
1101  new Trk::BinnedMaterial(m_crackMaterial, bun, layDN, indexN, matCrack);
1102 
1103  align = nullptr;
1104 
1105  Amg::Transform3D* crackNegTransform =
1107 
1109  crackNegTransform, align, crackBoundsPos->clone(), crackBinNeg, 17,
1110  "Calo::Detectors::Tile::CrackNeg");
1112 
1113  Trk::CylinderVolumeBounds* lArCentralG1Bounds = new Trk::CylinderVolumeBounds(
1114  keyDim[0].first, tileCombinedBounds->innerRadius(),
1115  0.5 * (crackZ1 - lArBarrelBounds->halflengthZ()));
1116 
1117  z = 0.5 * (crackZ1 + lArBarrelBounds->halflengthZ());
1118  Amg::Transform3D* lArCentralG1P =
1120 
1121  lArCentralPositiveGap = new Trk::TrackingVolume(
1122  lArCentralG1P, lArCentralG1Bounds, m_Ar, dummyLayers, dummyVolumes,
1123  "Calo::GapVolumes::LArCentralPositiveGap");
1124 
1125  Amg::Transform3D* lArCentralG1N =
1127 
1128  lArCentralNegativeGap = new Trk::TrackingVolume(
1129  lArCentralG1N, lArCentralG1Bounds->clone(), m_Ar, dummyLayers,
1130  dummyVolumes, "Calo::GapVolumes::LArCentralNegativeGap");
1131 
1132  // glue laterally
1133  Trk::TrackingVolume* lArCentralSector = nullptr;
1134  // ++ has 5 sub volumes in z
1135  std::vector<Trk::TrackingVolume*> lArCentralSectorVolumes;
1136  // ++++ (a) -> negative crack
1137  lArCentralSectorVolumes.push_back(crackNeg);
1138  // ++++ (b) -> negative gap
1139  lArCentralSectorVolumes.push_back(lArCentralNegativeGap);
1140  // ++++ (c) -> central barrel
1141  lArCentralSectorVolumes.push_back(lArCentralBarrelSector);
1142  // ++++ (d) -> positive gap
1143  lArCentralSectorVolumes.push_back(lArCentralPositiveGap);
1144  // ++++ (e) -> positive crack
1145  lArCentralSectorVolumes.push_back(crackPos);
1146  // ++++ all sub volumes exist: build the super volume
1147  lArCentralSector = m_trackingVolumeCreator->createContainerTrackingVolume(
1148  lArCentralSectorVolumes, m_caloMaterial,
1149  "Calo::Containers::LAr::CentralSector");
1150 
1151  // glue with ID sector
1152  Trk::TrackingVolume* caloCentralSector = nullptr;
1153  // ++ has 2 sub volumes in R
1154  std::vector<Trk::TrackingVolume*> caloCentralSectorVolumes;
1155  // ++++ (a) -> ID sector
1156  caloCentralSectorVolumes.push_back(inDetEnclosed);
1157  // ++++ (b) -> LAr sector
1158  caloCentralSectorVolumes.push_back(lArCentralSector);
1159  // ++++ all sub volumes exist: build the super volume
1160  caloCentralSector = m_trackingVolumeCreator->createContainerTrackingVolume(
1161  caloCentralSectorVolumes, m_caloMaterial,
1162  "Calo::Containers::CaloCentralSector");
1163 
1165 
1166  // glue laterally with endcaps
1167  Trk::TrackingVolume* lArCombined = nullptr;
1168  // ++ has 3 sub volumes in z
1169  std::vector<Trk::TrackingVolume*> lArCombinedVolumes;
1170  // ++++ (a) -> negative endcap
1171  lArCombinedVolumes.push_back(lArNegativeSector);
1172  // ++++ (b) -> barrel
1173  lArCombinedVolumes.push_back(caloCentralSector);
1174  // ++++ (a) -> positive endcap
1175  lArCombinedVolumes.push_back(lArPositiveSector);
1176  // ++++ all sub volumes exist: build the super volume
1177  lArCombined = m_trackingVolumeCreator->createContainerTrackingVolume(
1178  lArCombinedVolumes, m_caloMaterial, "Calo::Containers::LAr::Combined");
1179 
1180  // glue with LAr sector
1181  Trk::TrackingVolume* caloCombined = nullptr;
1182  // ++ has 2 sub volumes in R
1183  std::vector<Trk::TrackingVolume*> caloVolumes;
1184  // ++++ (a) -> LAr sector
1185  caloVolumes.push_back(lArCombined);
1186  // ++++ (b) -> Tile sector
1187  caloVolumes.push_back(tileCombined);
1188  // ++++ all sub volumes exist: build the super volume
1189  caloCombined = m_trackingVolumeCreator->createContainerTrackingVolume(
1190  caloVolumes, m_caloMaterial, "Calo::Containers::CombinedCalo");
1191 
1193 
1194  // build the radial buffer volume to synchronize the radial envelope
1195  // dimensions
1196  Trk::TrackingVolume* centralBuffer = nullptr;
1197  Trk::TrackingVolume* ecPosBuffer = nullptr;
1198  Trk::TrackingVolume* ecNegBuffer = nullptr;
1199 
1200  if (caloVolsOuterRadius > caloDefaultRadius) {
1202  "Calo volumes exceeds envelope radius: adjusting envelope "
1203  "(de-synchronizing...)");
1204  caloDefaultRadius = caloVolsOuterRadius;
1205  }
1206 
1207  if (caloVolsOuterRadius < caloDefaultRadius) {
1209  "Build radial buffer to synchronize the boundaries in between R "
1210  << caloVolsOuterRadius << " and " << caloDefaultRadius);
1211 
1212  Trk::CylinderVolumeBounds* centralSynBounds = new Trk::CylinderVolumeBounds(
1213  caloVolsOuterRadius, caloDefaultRadius, caloVolsExtendZ);
1214  centralBuffer = new Trk::TrackingVolume(
1215  nullptr, centralSynBounds, m_caloMaterial, dummyLayers, dummyVolumes,
1216  "Calo::GapVolumes::EnvelopeBuffer");
1217  }
1218 
1219  if (caloVolsExtendZ < caloDefaultHalflengthZ) {
1221  "Build longitudinal buffers to synchronize the boundaries in between Z "
1222  << caloVolsExtendZ << " and " << caloDefaultHalflengthZ);
1223 
1225  0., caloDefaultRadius,
1226  0.5 * (caloDefaultHalflengthZ - caloVolsExtendZ));
1227  // endcap buffers not empty
1228  Trk::Material ecBuffMat(53. / 0.38, 355. / 0.38, 20., 10.,
1229  0.0053 * pow(0.38, 3));
1230 
1231  float zPos = 0.5 * (caloDefaultHalflengthZ + caloVolsExtendZ);
1232  ecPosBuffer = new Trk::TrackingVolume(
1234  endcapSynBounds, m_Ar, dummyLayers, dummyVolumes,
1235  "Calo::GapVolumes::PosECBuffer");
1236 
1237  ecNegBuffer = new Trk::TrackingVolume(
1238  new Amg::Transform3D(Amg::Translation3D(Amg::Vector3D(0., 0., -zPos))),
1239  endcapSynBounds->clone(), m_Ar, dummyLayers, dummyVolumes,
1240  "Calo::GapVolumes::NegECBuffer");
1241  }
1242 
1244  "All gap volumes for the Calorimeter created. Starting to build Volume "
1245  "Hiearchy.");
1246 
1248 
1249  ATH_MSG_VERBOSE("Resolve MS cutouts:");
1250 
1251  // resolve number of additional cutout volumes
1252  int nCutVol = 0;
1253  std::vector<float> zCutStep;
1254  std::vector<float> rCutStep;
1255  if (msCutouts.size() > 1) {
1256  zCutStep.push_back(msCutouts[0].second);
1257  rCutStep.push_back(msCutouts[0].first);
1258  for (unsigned int i = 1; i < msCutouts.size(); i++) {
1259  if (msCutouts[i].second == zCutStep.back())
1260  rCutStep.push_back(msCutouts[i].first);
1261  else
1262  zCutStep.push_back(msCutouts[i].second);
1263  }
1264  nCutVol = zCutStep.size() - 1;
1265  }
1266  if (nCutVol > 0)
1267  ATH_MSG_VERBOSE(nCutVol << " MS cutout volume(s) required ");
1268 
1269  std::vector<Trk::TrackingVolume*> forwardCutoutVols;
1270  std::vector<Trk::TrackingVolume*> backwardCutoutVols;
1271 
1272  // cutout region not empty
1273  std::vector<Trk::Material> cutOutMat;
1274  cutOutMat.emplace_back(19.9, 213., 50., 23.,
1275  0.0065); // 3.5 Fe + 1 Ar : verify
1276  cutOutMat.push_back(m_caloMaterial);
1277  // cutOutMat.push_back(Trk::Material(18.74, 200.9, 52.36, 24.09, 0.0069));
1278 
1279  if (nCutVol > 0) {
1280  // loop over zCutStep, rCutStep[0] gives the fixed outer radius, rCutStep[i]
1281  // the cutout radius for ith volume
1282  float rout = rCutStep[0];
1283  float zlow = zCutStep[0];
1284  for (unsigned int i = 1; i < zCutStep.size(); i++) {
1285  float zup = zCutStep[i];
1286  float rcut = rCutStep[i];
1287  std::stringstream ss;
1288  ss << i;
1289  // get beam pipe volumes
1290  float rCutOutBP = 0.;
1291  std::pair<Trk::TrackingVolume*, Trk::TrackingVolume*> cutOutBP =
1292  createBeamPipeVolumes(bpCutouts, zlow, zup, "CutOuts" + ss.str(),
1293  rCutOutBP);
1294 
1295  // build inner part ( -> Calo )
1296  unsigned int mindex = i > 1 ? 1 : i;
1297 
1298  Trk::CylinderVolumeBounds* cutInBounds =
1299  new Trk::CylinderVolumeBounds(rCutOutBP, rcut, 0.5 * (zup - zlow));
1300  Trk::TrackingVolume* caloInPos = new Trk::TrackingVolume(
1301  new Amg::Transform3D(
1302  Amg::Translation3D(Amg::Vector3D(0., 0., 0.5 * (zup + zlow)))),
1303  cutInBounds, cutOutMat[mindex], dummyLayers, dummyVolumes,
1304  "Calo::GapVolumes::CaloPositiveCutIn" + ss.str());
1305  Trk::TrackingVolume* caloInNeg = new Trk::TrackingVolume(
1306  new Amg::Transform3D(
1307  Amg::Translation3D(Amg::Vector3D(0., 0., -0.5 * (zup + zlow)))),
1308  cutInBounds->clone(), cutOutMat[mindex], dummyLayers, dummyVolumes,
1309  "Calo::GapVolumes::CaloNegativeCutIn" + ss.str());
1310  // build cutout ( -> MS ) : geometry signature needs to be resolved later
1311  // : follow naming convention
1312  Trk::CylinderVolumeBounds* cutOutBounds =
1313  new Trk::CylinderVolumeBounds(rcut, rout, 0.5 * (zup - zlow));
1314  Trk::TrackingVolume* caloOutPos = new Trk::TrackingVolume(
1315  new Amg::Transform3D(
1316  Amg::Translation3D(Amg::Vector3D(0., 0., 0.5 * (zup + zlow)))),
1317  cutOutBounds, m_caloMaterial, dummyLayers, dummyVolumes,
1318  "Muon::GapVolumes::CaloPositiveCutOut" + ss.str());
1319  Trk::TrackingVolume* caloOutNeg = new Trk::TrackingVolume(
1320  new Amg::Transform3D(
1321  Amg::Translation3D(Amg::Vector3D(0., 0., -0.5 * (zup + zlow)))),
1322  cutOutBounds->clone(), m_caloMaterial, dummyLayers, dummyVolumes,
1323  "Muon::GapVolumes::CaloNegativeCutOut" + ss.str());
1324 
1325  // sign
1326  caloOutPos->sign(Trk::MS);
1327  caloOutNeg->sign(Trk::MS);
1328 
1329  // glue radially and save for final gluing
1330  std::vector<Trk::TrackingVolume*> cvPos;
1331  cvPos.push_back(cutOutBP.first);
1332  cvPos.push_back(caloInPos);
1333  cvPos.push_back(caloOutPos);
1334  Trk::TrackingVolume* cutOutPos =
1335  m_trackingVolumeCreator->createContainerTrackingVolume(
1336  cvPos, m_caloMaterial,
1337  "Calo::GapVolumes::CaloPositiveCutoutVolume" + ss.str());
1338  forwardCutoutVols.push_back(cutOutPos);
1339  //
1340  std::vector<Trk::TrackingVolume*> cvNeg;
1341  cvNeg.push_back(cutOutBP.second);
1342  cvNeg.push_back(caloInNeg);
1343  cvNeg.push_back(caloOutNeg);
1344  Trk::TrackingVolume* cutOutNeg =
1345  m_trackingVolumeCreator->createContainerTrackingVolume(
1346  cvNeg, m_caloMaterial,
1347  "Calo::GapVolumes::CaloNegativeCutoutVolume" + ss.str());
1348  backwardCutoutVols.insert(backwardCutoutVols.begin(), cutOutNeg);
1349 
1350  zlow = zup;
1351  }
1352  }
1353 
1355 
1356  if (!centralBuffer) { //(XX)
1357  // all volumes exist : create the super volume at top level
1358  calorimeter = caloCombined;
1359 
1360  } else { //(X)
1361 
1362  std::vector<Trk::TrackingVolume*> envRVols;
1363  envRVols.push_back(caloCombined);
1364  envRVols.push_back(centralBuffer);
1365 
1366  // add cutouts - final step
1367  if (!forwardCutoutVols.empty() || ecNegBuffer) {
1368 
1369  Trk::TrackingVolume* caloRVolume =
1370  m_trackingVolumeCreator->createContainerTrackingVolume(
1371  envRVols, m_caloMaterial, "Calo::Containers::CombinedRCalo");
1372  std::vector<Trk::TrackingVolume*> envZVols;
1373  envZVols.reserve(backwardCutoutVols.size());
1374  for (auto& backwardCutoutVol : backwardCutoutVols)
1375  envZVols.push_back(backwardCutoutVol);
1376  if (ecNegBuffer)
1377  envZVols.push_back(ecNegBuffer);
1378  envZVols.push_back(caloRVolume);
1379  if (ecPosBuffer)
1380  envZVols.push_back(ecPosBuffer);
1381  for (auto& forwardCutoutVol : forwardCutoutVols)
1382  envZVols.push_back(forwardCutoutVol);
1383 
1384  calorimeter = m_trackingVolumeCreator->createContainerTrackingVolume(
1385  envZVols, m_caloMaterial, m_exitVolume);
1386 
1387  } else { // if no cutouts or endcap buffers, this is the top calo volume
1388 
1389  calorimeter = m_trackingVolumeCreator->createContainerTrackingVolume(
1390  envRVols, m_caloMaterial, m_exitVolume);
1391  }
1392  }
1393 
1395  "TrackingVolume 'Calorimeter' built successfully. Wrap it in "
1396  "TrackingGeometry.");
1397 
1398  delete lArVolumes;
1399  lArVolumes = nullptr;
1400  delete tileVolumes;
1401  tileVolumes = nullptr;
1402 
1403  auto caloTrackingGeometry =
1404  std::make_unique<Trk::TrackingGeometry>(calorimeter);
1405 
1406  if (msgLvl(MSG::VERBOSE) && caloTrackingGeometry){
1407  caloTrackingGeometry->printVolumeHierarchy(msg(MSG::VERBOSE));
1408  }
1409 
1410  if (m_indexStaticLayers && caloTrackingGeometry){
1411  caloTrackingGeometry->indexStaticLayers(signature());
1412  }
1413 
1414  return caloTrackingGeometry;
1415 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ DeclareInterfaceID()

Trk::IGeometryBuilderCond::DeclareInterfaceID ( IGeometryBuilderCond  ,
,
 
)
inherited

Creates the InterfaceID and interfaceID() method.

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ geometrySignature()

virtual Trk::GeometrySignature Calo::CaloTrackingGeometryBuilderCond::geometrySignature ( ) const
inlinefinaloverridevirtual

The unique signature.

Implements Trk::IGeometryBuilderCond.

Definition at line 50 of file CaloTrackingGeometryBuilderCond.h.

50  {
52  }

◆ initialize()

StatusCode CaloTrackingGeometryBuilderCond::initialize ( )
finaloverridevirtual

AlgTool initailize method.

Reimplemented from Calo::CaloTrackingGeometryBuilderImpl.

Definition at line 23 of file CaloTrackingGeometryBuilderCond.cxx.

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg() [1/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ registerInLayerIndexCaloSampleMap()

void Calo::CaloTrackingGeometryBuilderImpl::registerInLayerIndexCaloSampleMap ( Trk::LayerIndexSampleMap licsMAp,
const std::vector< CaloCell_ID::CaloSample > &  ccid,
const Trk::TrackingVolume vol,
int  side = 1 
) const
protectedinherited

method to establish a link between the LayerIndex and the CaloCell_ID in an associative container

Definition at line 1417 of file CaloTrackingGeometryBuilderImpl.cxx.

1420  {
1421 
1422  ATH_MSG_VERBOSE("[+] Registering layers of TrackingVolume '"
1423  << vol.volumeName() << "' in LayerIndex/CaloCell_ID map");
1424 
1425  // get the confined Layers from the TrackingVolume
1426  const Trk::LayerArray* confinedLayers = vol.confinedLayers();
1427  if (!confinedLayers)
1428  return;
1429 
1431  confinedLayers->arrayObjects();
1433  layerObjects.begin();
1435  layerObjects.end();
1436 
1437  // now pick out the material layers (and skip the navigation ones)
1438  std::vector<const Trk::Layer*> materialLayers;
1439  for (; layerObjIter != layerObjEnd; ++layerObjIter)
1440  if ((*layerObjIter)->layerMaterialProperties())
1441  materialLayers.push_back((*layerObjIter));
1442 
1443  unsigned int matLaySize = materialLayers.size();
1444  unsigned int ccidSize = ccid.size();
1445 
1446  ATH_MSG_VERBOSE("[+] Found " << matLaySize << " material layers ( "
1447  << ccidSize << " CaloSample ids )");
1448  if (matLaySize != ccidSize)
1449  return;
1450 
1451  // everything's fine for side > 0
1452  if (side > 0) {
1453  // match 1-to-1
1454  std::vector<const Trk::Layer*>::const_iterator layerIt = materialLayers.begin();
1455  std::vector<const Trk::Layer*>::const_iterator layerItEnd = materialLayers.end();
1456  std::vector<CaloCell_ID::CaloSample>::const_iterator ccidIt = ccid.begin();
1457  std::vector<CaloCell_ID::CaloSample>::const_iterator ccidItEnd = ccid.end();
1458 
1459  for (; layerIt != layerItEnd && ccidIt != ccidItEnd; ++layerIt, ++ccidIt)
1460  licsMap.insert(std::make_pair((*layerIt)->layerIndex(), int(*ccidIt)));
1461 
1462  } else {
1463  // the order needs to be reversed, because TG has z-ordering positive
1464  // defined
1465 
1466  std::vector<CaloCell_ID::CaloSample>::const_iterator ccidIt = ccid.begin();
1467  std::vector<CaloCell_ID::CaloSample>::const_iterator ccidItEnd = ccid.end();
1468 
1469  for (; ccidIt != ccidItEnd; ++ccidIt, --matLaySize)
1470  licsMap.insert(std::make_pair(
1471  (materialLayers[matLaySize - 1])->layerIndex(), int(*ccidIt)));
1472  }
1473 }

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ signature()

Trk::GeometrySignature Calo::CaloTrackingGeometryBuilderImpl::signature ( ) const
inlineinherited

The unique signature.

Definition at line 65 of file CaloTrackingGeometryBuilderImpl.h.

65  {
66  return Trk::Calo;
67  }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ trackingGeometry()

std::unique_ptr< Trk::TrackingGeometry > CaloTrackingGeometryBuilderCond::trackingGeometry ( const EventContext &  ctx,
Trk::TrackingVolume innerVol,
SG::WriteCondHandle< Trk::TrackingGeometry > &  whandle 
) const
finaloverridevirtual

TrackingGeometry Interface method.

Implements Trk::IGeometryBuilderCond.

Definition at line 31 of file CaloTrackingGeometryBuilderCond.cxx.

33  {
34 
36  const CaloDetDescrManager* caloDDM = *caloMgrHandle;
38  const GeoAlignmentStore* geoAlign = *readHandleGeoAlign;
40  caloDDM,
41  geoAlign);
42 }

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_Al

Trk::Material Calo::CaloTrackingGeometryBuilderImpl::m_Al {88.93, 388.62, 26.98, 13., 0.0027}
protectedinherited

Definition at line 89 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_Ar

Trk::Material Calo::CaloTrackingGeometryBuilderImpl::m_Ar {140.036, 856.32, 39.948, 18., 0.0014}
protectedinherited

Definition at line 88 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_buildMBTS

BooleanProperty Calo::CaloTrackingGeometryBuilderImpl::m_buildMBTS {this, "BuildMBTS", true}
protectedinherited

MBTS like detectors.

Definition at line 106 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_caloDefaultHalflengthZ

DoubleProperty Calo::CaloTrackingGeometryBuilderImpl::m_caloDefaultHalflengthZ {this, "CalorimeterHalflengthZ", 6500.}
protectedinherited

the halflength in z if not built from

GeoModel

Definition at line 98 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_caloDefaultRadius

DoubleProperty Calo::CaloTrackingGeometryBuilderImpl::m_caloDefaultRadius {this, "CalorimeterRadius", 4250.}
protectedinherited

the radius if not built from GeoModel

Definition at line 97 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_caloEnvelope

DoubleProperty Calo::CaloTrackingGeometryBuilderImpl::m_caloEnvelope {this, "GapLayerEnvelope", 25 * Gaudi::Units::mm}
protectedinherited

Envelope cover for Gap Layers.

Definition at line 93 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_caloMaterial

Trk::Material Calo::CaloTrackingGeometryBuilderImpl::m_caloMaterial {}
protectedinherited

Definition at line 87 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_caloMgrKey

SG::ReadCondHandleKey<CaloDetDescrManager> Calo::CaloTrackingGeometryBuilderCond::m_caloMgrKey
private
Initial value:
{
this, "CaloDetDescrManager", "CaloDetDescrManager"}

Definition at line 55 of file CaloTrackingGeometryBuilderCond.h.

◆ m_crackMaterial

Trk::Material Calo::CaloTrackingGeometryBuilderImpl::m_crackMaterial {424.35, 707.43, 11.16, 5.61, 0.001}
protectedinherited

Definition at line 91 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_enclosingEnvelopeSvc

ServiceHandle<IEnvelopeDefSvc> Calo::CaloTrackingGeometryBuilderImpl::m_enclosingEnvelopeSvc {this, "EnvelopeDefinitionSvc", "AtlasGeometry_EnvelopeDefSvc"}
protectedinherited

Definition at line 95 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_entryVolume

StringProperty Calo::CaloTrackingGeometryBuilderImpl::m_entryVolume {this, "EntryVolumeName", "Calo::Container::EntryVolume"}
protectedinherited

name of the Calo entrance

Definition at line 114 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_exitVolume

StringProperty Calo::CaloTrackingGeometryBuilderImpl::m_exitVolume {this, "ExitVolumeName", "Calo::Container"}
protectedinherited

name of the Calo container

Definition at line 115 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_indexStaticLayers

BooleanProperty Calo::CaloTrackingGeometryBuilderImpl::m_indexStaticLayers {this, "IndexStaticLayers", true}
protectedinherited

forces robust indexing for layers

Definition at line 101 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_lArVolumeBuilder

PublicToolHandle<Trk::ICaloTrackingVolumeBuilder> Calo::CaloTrackingGeometryBuilderImpl::m_lArVolumeBuilder {this, "LArVolumeBuilder", "LAr::LArVolumeBuilder/LArVolumeBuilder"}
protectedinherited

Volume Builder for the Tile Calorimeter.

Definition at line 82 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_layerIndexCaloSampleMapName

StringProperty Calo::CaloTrackingGeometryBuilderImpl::m_layerIndexCaloSampleMapName {this, "LayerIndexCaloSampleMapName", "LayerIndexCaloSampleMap"}
protectedinherited

name to record it

Definition at line 104 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_mbtsPhiGap

std::vector<double> Calo::CaloTrackingGeometryBuilderImpl::m_mbtsPhiGap
protectedinherited

MBTS like detectors.

Definition at line 110 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_mbtsPhiSegments

std::vector<int> Calo::CaloTrackingGeometryBuilderImpl::m_mbtsPhiSegments
protectedinherited

MBTS like detectors.

Definition at line 109 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_mbtsPositionZ

std::vector<double> Calo::CaloTrackingGeometryBuilderImpl::m_mbtsPositionZ
protectedinherited

MBTS like detectors.

Definition at line 111 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_mbtsRadiusGap

std::vector<double> Calo::CaloTrackingGeometryBuilderImpl::m_mbtsRadiusGap
protectedinherited

MBTS like detectors.

Definition at line 108 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_mbtsStaggeringZ

std::vector<double> Calo::CaloTrackingGeometryBuilderImpl::m_mbtsStaggeringZ
protectedinherited

MBTS like detectors.

Definition at line 112 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_readKeyGeoAlign

SG::ReadCondHandleKey<GeoAlignmentStore> Calo::CaloTrackingGeometryBuilderCond::m_readKeyGeoAlign
private
Initial value:
{
this, "LArAlignmentStore", "LArAlignmentStore", "SG key of the GeoAlignmentStore for LAr" }

Definition at line 57 of file CaloTrackingGeometryBuilderCond.h.

◆ m_recordLayerIndexCaloSampleMap

BooleanProperty Calo::CaloTrackingGeometryBuilderImpl::m_recordLayerIndexCaloSampleMap {this, "RecordLayerIndexCaloSampleMap", true}
protectedinherited

for deposition methods

Definition at line 103 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_Scint

Trk::Material Calo::CaloTrackingGeometryBuilderImpl::m_Scint {424.35, 707.43, 11.16, 5.61, 0.001}
protectedinherited

Definition at line 90 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_tileVolumeBuilder

PublicToolHandle<Trk::ICaloTrackingVolumeBuilder> Calo::CaloTrackingGeometryBuilderImpl::m_tileVolumeBuilder {this, "TileVolumeBuilder", "Tile::TileVolumeBuilder/TileVolumeBuilder"}
protectedinherited

Material properties.

Definition at line 84 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_trackingVolumeArrayCreator

PublicToolHandle<Trk::ITrackingVolumeArrayCreator> Calo::CaloTrackingGeometryBuilderImpl::m_trackingVolumeArrayCreator {this, "TrackingVolumeArrayCreator", "Trk::TrackingVolumeArrayCreator/TrackingVolumeArrayCreator"}
protectedinherited

Helper Tool to create TrackingVolumes.

Definition at line 76 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_trackingVolumeCreator

PublicToolHandle<Trk::ITrackingVolumeCreator> Calo::CaloTrackingGeometryBuilderImpl::m_trackingVolumeCreator {this, "TrackingVolumeCreator", "Trk::CylinderVolumeCreator/TrackingVolumeCreator"}
protectedinherited

Volume Builder for the Liquid Argon Calorimeter.

Definition at line 80 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_trackingVolumeHelper

PublicToolHandle<Trk::ITrackingVolumeHelper> Calo::CaloTrackingGeometryBuilderImpl::m_trackingVolumeHelper {this, "TrackingVolumeHelper", "Trk::TrackingVolumeHelper/TrackingVolumeHelper"}
protectedinherited

Second helper for volume creation.

Definition at line 78 of file CaloTrackingGeometryBuilderImpl.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
GeoAlignmentStore
Ensure that the extensions for the Vector3D are properly loaded.
Definition: GeoAlignmentStore.h:24
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
yodamerge_tmp.dim
dim
Definition: yodamerge_tmp.py:239
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
Calo::CaloTrackingGeometryBuilderImpl::m_caloDefaultRadius
DoubleProperty m_caloDefaultRadius
the radius if not built from GeoModel
Definition: CaloTrackingGeometryBuilderImpl.h:97
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Calo::CaloTrackingGeometryBuilderImpl::m_caloDefaultHalflengthZ
DoubleProperty m_caloDefaultHalflengthZ
the halflength in z if not built from
Definition: CaloTrackingGeometryBuilderImpl.h:98
Calo::CaloTrackingGeometryBuilderCond::m_caloMgrKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Definition: CaloTrackingGeometryBuilderCond.h:55
RZPairVector
std::vector< RZPair > RZPairVector
Definition: RZPair.h:18
Trk::binZ
@ binZ
Definition: BinningType.h:49
Calo::CaloTrackingGeometryBuilderImpl::m_enclosingEnvelopeSvc
ServiceHandle< IEnvelopeDefSvc > m_enclosingEnvelopeSvc
Definition: CaloTrackingGeometryBuilderImpl.h:95
PixelAthClusterMonAlgCfg.zmin
zmin
Definition: PixelAthClusterMonAlgCfg.py:169
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Calo::CaloTrackingGeometryBuilderImpl::initialize
virtual StatusCode initialize() override
AlgTool initailize method.
Definition: CaloTrackingGeometryBuilderImpl.cxx:46
Calo::CaloTrackingGeometryBuilderImpl::createTrackingGeometry
std::unique_ptr< Trk::TrackingGeometry > createTrackingGeometry(Trk::TrackingVolume *innerVol, const CaloDetDescrManager *caloDDM, const GeoAlignmentStore *geoAlign) const
TrackingGeometry Interface method.
Definition: CaloTrackingGeometryBuilderImpl.cxx:95
Trk::BinnedMaterial
Definition: BinnedMaterial.h:31
Calo::CaloTrackingGeometryBuilderImpl::m_Ar
Trk::Material m_Ar
Definition: CaloTrackingGeometryBuilderImpl.h:88
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
Calo::CaloTrackingGeometryBuilderImpl
Definition: CaloTrackingGeometryBuilderImpl.h:50
Trk::binEta
@ binEta
Definition: BinningType.h:54
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Trk::Calo
@ Calo
Definition: GeometrySignature.h:28
CaloCell_ID_FCS::TileGap3
@ TileGap3
Definition: FastCaloSim_CaloCell_ID.h:36
Calo::CaloTrackingGeometryBuilderImpl::m_trackingVolumeCreator
PublicToolHandle< Trk::ITrackingVolumeCreator > m_trackingVolumeCreator
Volume Builder for the Liquid Argon Calorimeter.
Definition: CaloTrackingGeometryBuilderImpl.h:80
Trk::BeamPipe
@ BeamPipe
Definition: GeometrySignature.h:27
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
TRT::Hit::side
@ side
Definition: HitInfo.h:83
Trk::MS
@ MS
Definition: GeometrySignature.h:29
Trk::TrackingVolume::confinedLayers
const LayerArray * confinedLayers() const
Return the subLayer array.
Calo::CaloTrackingGeometryBuilderImpl::m_caloMaterial
Trk::Material m_caloMaterial
Definition: CaloTrackingGeometryBuilderImpl.h:87
Calo::CaloTrackingGeometryBuilderImpl::m_indexStaticLayers
BooleanProperty m_indexStaticLayers
forces robust indexing for layers
Definition: CaloTrackingGeometryBuilderImpl.h:101
Trk::GeometrySignature
GeometrySignature
Definition: GeometrySignature.h:24
Calo::CaloTrackingGeometryBuilderImpl::m_crackMaterial
Trk::Material m_crackMaterial
Definition: CaloTrackingGeometryBuilderImpl.h:91
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
beamspotman.steps
int steps
Definition: beamspotman.py:505
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Trk::DiscBounds::clone
virtual DiscBounds * clone() const override final
Virtual constructor.
Calo::CaloTrackingGeometryBuilderImpl::signature
Trk::GeometrySignature signature() const
The unique signature.
Definition: CaloTrackingGeometryBuilderImpl.h:65
Calo::CaloTrackingGeometryBuilderImpl::createBeamPipeVolumes
std::pair< Trk::TrackingVolume *, Trk::TrackingVolume * > createBeamPipeVolumes(const RZPairVector &bpCutouts, float, float, const std::string &, float &) const
method to build enclosed beam pipe volumes
Definition: CaloTrackingGeometryBuilderImpl.cxx:1476
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
beamspotman.n
n
Definition: beamspotman.py:731
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Trk::CylinderVolumeBounds::halflengthZ
double halflengthZ() const
This method returns the halflengthZ.
Definition: CylinderVolumeBounds.h:207
PixelAthClusterMonAlgCfg.zmax
zmax
Definition: PixelAthClusterMonAlgCfg.py:169
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::Volume::center
const Amg::Vector3D & center() const
returns the center of the volume
Definition: Volume.h:86
Trk::DiscLayer
Definition: DiscLayer.h:45
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Calo::CaloTrackingGeometryBuilderCond::m_readKeyGeoAlign
SG::ReadCondHandleKey< GeoAlignmentStore > m_readKeyGeoAlign
Definition: CaloTrackingGeometryBuilderCond.h:57
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
Trk::BinUtility
Definition: BinUtility.h:39
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
Trk::CylinderVolumeBounds
Definition: CylinderVolumeBounds.h:70
Trk::TrackingVolume::volumeName
const std::string & volumeName() const
Returns the VolumeName - for debug reason, might be depreciated later.
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Calo::CaloTrackingGeometryBuilderImpl::m_buildMBTS
BooleanProperty m_buildMBTS
MBTS like detectors.
Definition: CaloTrackingGeometryBuilderImpl.h:106
Trk::CylinderVolumeBounds::outerRadius
double outerRadius() const
This method returns the outer radius.
Definition: CylinderVolumeBounds.h:191
Trk::BinnedArray::arrayObjects
virtual BinnedArraySpan< T *const > arrayObjects()=0
Return all objects of the Array non-const we can still modify the T.
Calo::CaloTrackingGeometryBuilderImpl::m_Scint
Trk::Material m_Scint
Definition: CaloTrackingGeometryBuilderImpl.h:90
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Trk::Volume::transform
const Amg::Transform3D & transform() const
Return methods for geometry transform.
Definition: Volume.h:81
Calo::CaloTrackingGeometryBuilderImpl::m_exitVolume
StringProperty m_exitVolume
name of the Calo container
Definition: CaloTrackingGeometryBuilderImpl.h:115
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
CaloDetDescrManager_Base::is_in
bool is_in(double eta, double phi, CaloCell_ID::CaloSample sample, double &etadist) const
return true if direction eta,phi crosses ANY of the corresponding descriptors
Definition: CaloDetDescrManager.cxx:1348
Trk::open
@ open
Definition: BinningType.h:40
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
Calo::CaloTrackingGeometryBuilderImpl::m_Al
Trk::Material m_Al
Definition: CaloTrackingGeometryBuilderImpl.h:89
Trk::MaterialProperties
Definition: MaterialProperties.h:40
a
TList * a
Definition: liststreamerinfos.cxx:10
h
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:473
Trk::CylinderVolumeBounds::innerRadius
double innerRadius() const
This method returns the inner radius.
Definition: CylinderVolumeBounds.h:187
Trk::TrackingVolume::sign
void sign(GeometrySignature signat, GeometryType gtype=Static)
sign the volume - the geometry builder has to do that
Definition: TrackingVolume.cxx:936
DeMoScan.first
bool first
Definition: DeMoScan.py:536
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
Calo::CaloTrackingGeometryBuilderImpl::m_lArVolumeBuilder
PublicToolHandle< Trk::ICaloTrackingVolumeBuilder > m_lArVolumeBuilder
Volume Builder for the Tile Calorimeter.
Definition: CaloTrackingGeometryBuilderImpl.h:82
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
Trk::Volume::volumeBounds
const VolumeBounds & volumeBounds() const
returns the volumeBounds()
Definition: Volume.h:97
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
Trk::Material
Definition: Material.h:117
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:13
Trk::BinnedArray
Definition: BinnedArray.h:38
Trk::HomogeneousLayerMaterial
Definition: HomogeneousLayerMaterial.h:53
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
Trk::TrackingVolume
Definition: TrackingVolume.h:121
Trk::CylinderVolumeBounds::clone
CylinderVolumeBounds * clone() const override
Virtual constructor.
Definition: CylinderVolumeBounds.h:171
Material
@ Material
Definition: MaterialTypes.h:8
Calo::CaloTrackingGeometryBuilderImpl::m_tileVolumeBuilder
PublicToolHandle< Trk::ICaloTrackingVolumeBuilder > m_tileVolumeBuilder
Material properties.
Definition: CaloTrackingGeometryBuilderImpl.h:84
Trk::BinnedArraySpan
std::span< T > BinnedArraySpan
Definition: BinnedArray.h:34
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
fitman.k
k
Definition: fitman.py:528
Trk::DiscBounds
Definition: DiscBounds.h:44
Trk::TrackingVolume::screenDump
void screenDump(MsgStream &msg) const
Definition: TrackingVolume.cxx:1493
Trk::AlignableTrackingVolume
Definition: AlignableTrackingVolume.h:36