ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
Trk::CylinderVolumeCreator Class Reference

#include <CylinderVolumeCreator.h>

Inheritance diagram for Trk::CylinderVolumeCreator:
Collaboration diagram for Trk::CylinderVolumeCreator:

Public Member Functions

 CylinderVolumeCreator (const std::string &, const std::string &, const IInterface *)
 Constructor. More...
 
 ~CylinderVolumeCreator ()
 Destructor. More...
 
virtual StatusCode initialize () override
 AlgTool initialize method. More...
 
virtual TrackingVolumecreateTrackingVolume (const std::vector< Layer * > &layers, Material &matprop, VolumeBounds *volBounds=0, Amg::Transform3D *transform=0, const std::string &volumeName="UndefinedVolume", BinningType btype=arbitrary) const override final
 
virtual TrackingVolumecreateTrackingVolume (const std::vector< Layer * > &layers, Material &matprop, double loc1Min, double loc1Max, double loc2Min, double loc2Max, const std::string &volumeName="UndefinedVolume", BinningType btype=arbitrary) const override final
 
virtual TrackingVolumecreateGapTrackingVolume (Material &matprop, double rMin, double rMax, double zMin, double zMax, unsigned int materialLayers, bool cylinder=true, const std::string &volumeName="UndefinedVolume") const override final
 
virtual TrackingVolumecreateGapTrackingVolume (Material &matprop, double rMin, double rMax, double zMin, double zMax, const std::vector< double > &layerPositions, bool cylinder=true, const std::string &volumeName="UndefinedVolume", BinningType btype=arbitrary) const override final
 
virtual TrackingVolumecreateContainerTrackingVolume (const std::vector< TrackingVolume * > &volumes, const Material &matprop, const std::string &volumeName="UndefinedVolume", bool buildBoundaryLayers=false, bool replaceBoundaryFace=false) const override final
 
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 (ITrackingVolumeCreator, 1, 0)
 Creates the InterfaceID and interfaceID() method. More...
 

Protected Member Functions

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...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

StatusCode estimateAndCheckDimension (const std::vector< Layer * > &layers, Trk::CylinderVolumeBounds *&cylBounds, Amg::Transform3D *&translation, std::vector< CylinderLayer * > &cylLayers, std::vector< DiscLayer * > &discLayers, double &rMinClean, double &rMaxClean, double &zMinClean, double &zMaxClean, BinningType bType=arbitrary) const
 Private method - it estimates the CylinderBounds and Translation of layers, if given, these are checked against the layer positions/dimensions. More...
 
StatusCode interGlueTrackingVolume (TrackingVolume &tVolume, bool rBinned, bool buildBoundaryLayers, bool replaceBoundaryFace=false) const
 Private method - interglue all volumes contained by a TrackingVolume and set the outside glue volumes in the descriptor. More...
 
void addFaceVolumes (TrackingVolume &tvol, Trk::BoundarySurfaceFace bsf, std::vector< Trk::TrackingVolume * > &vols) const
 Private method - helper method not to duplicate code. More...
 
void glueTrackingVolumes (TrackingVolume &volumeOne, BoundarySurfaceFace faceOne, TrackingVolume &volumeTwo, BoundarySurfaceFace faceTwo, bool buildBoundaryLayers, bool replaceBoundaryFace=false) const
 Private method - glue volume to the other – use trackingVolume helper. More...
 
CylinderLayercreateCylinderLayer (double z, double r, double halflength, double thickness, int binsPhi, int binsZ) const
 Private method - helper method to save some code. More...
 
DiscLayercreateDiscLayer (double z, double rMin, double rMax, double thickness, int binsPhi, int binsR) const
 Private method - helper method to save some code. More...
 
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

ToolHandle< ILayerArrayCreatorm_layerArrayCreator
 < A Tool for coherent LayerArray creation More...
 
ToolHandle< ITrackingVolumeArrayCreatorm_trackingVolumeArrayCreator
 TrackingVolume helper. More...
 
ToolHandle< ITrackingVolumeHelperm_trackingVolumeHelper
 
double m_passiveLayerThickness
 thickness of passive layers More...
 
int m_passiveLayerPhiBins
 bins in phi for the passive layer More...
 
int m_passiveLayerRzBins
 bins in r/z for the passive layer More...
 
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

The concrete implementation for cylindrical TrackingVolume objects of the ITrackingVolumeCreator interface

Author
Andre.nosp@m.as.S.nosp@m.alzbu.nosp@m.rger.nosp@m.@cern.nosp@m..ch

Definition at line 47 of file CylinderVolumeCreator.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

◆ CylinderVolumeCreator()

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

Constructor.

Definition at line 33 of file CylinderVolumeCreator.cxx.

34 : AthAlgTool(t,n,p),
35  m_layerArrayCreator("Trk::LayerArrayCreator/LayerArrayCreator"),
36  m_trackingVolumeArrayCreator("Trk::TrackingVolumeArrayCreator/TrackingVolumeArrayCreator"),
37  m_trackingVolumeHelper("Trk::TrackingVolumeHelper/TrackingVolumeHelper"),
41 {
42  declareInterface<ITrackingVolumeCreator>(this);
43  // the helper tools
44  declareProperty("LayerArrayCreator", m_layerArrayCreator);
45  declareProperty("TrackingVolumeArrayCreator", m_trackingVolumeArrayCreator);
46  declareProperty("TrackingVolumeHelper", m_trackingVolumeHelper);
47  // the parameters for the passive layers
48  declareProperty("PassiveLayerThickness", m_passiveLayerThickness);
49  declareProperty("PassiveLayerBinsPhi", m_passiveLayerPhiBins);
50  declareProperty("PassiveLayerBinsRZ", m_passiveLayerRzBins);
51 }

◆ ~CylinderVolumeCreator()

Trk::CylinderVolumeCreator::~CylinderVolumeCreator ( )
default

Destructor.

Member Function Documentation

◆ addFaceVolumes()

void Trk::CylinderVolumeCreator::addFaceVolumes ( Trk::TrackingVolume tvol,
Trk::BoundarySurfaceFace  bsf,
std::vector< Trk::TrackingVolume * > &  vols 
) const
private

Private method - helper method not to duplicate code.

Definition at line 714 of file CylinderVolumeCreator.cxx.

717 {
718 
719  ATH_MSG_VERBOSE( "Adding face volumes of face " << glueFace << " for the volume '" << tvol.volumeName() << "'." );
720  // retrieve the gluevolume descriptor
721  Trk::GlueVolumesDescriptor& gvDescriptor = tvol.glueVolumesDescriptor();
722  // if volumes are registered: take them
723  if (!gvDescriptor.glueVolumes(glueFace).empty()) {
724  // get the navigation level subvolumes
725  std::vector<Trk::TrackingVolume*>::const_iterator volIter = gvDescriptor.glueVolumes(glueFace).begin();
726  std::vector<Trk::TrackingVolume*>::const_iterator volEnd = gvDescriptor.glueVolumes(glueFace).end();
727  for ( ; volIter != volEnd; ++volIter){
728  ATH_MSG_VERBOSE( " -> adding volumes : " << (*volIter)->volumeName() );
729  vols.push_back(*volIter);
730  }
731  // screen output
732  ATH_MSG_VERBOSE( vols.size() << " navigation volumes registered as glue volumes." );
733  } else {
734  // the volume itself is on navigation level
735  ATH_MSG_VERBOSE( "Volume is on navigation level." );
736  vols.push_back(&tvol);
737  }
738 }

◆ createContainerTrackingVolume()

Trk::TrackingVolume * Trk::CylinderVolumeCreator::createContainerTrackingVolume ( const std::vector< TrackingVolume * > &  volumes,
const Material matprop,
const std::string &  volumeName = "UndefinedVolume",
bool  buildBoundaryLayers = false,
bool  replaceBoundaryFace = false 
) const
finaloverridevirtual

;

Implements Trk::ITrackingVolumeCreator.

Definition at line 344 of file CylinderVolumeCreator.cxx.

350 {
351  // check if you have more than one volume
352  if (volumes.size() <= (unsigned int)1) {
353  ATH_MSG_WARNING("None (only one) TrackingVolume given to create container "
354  "volume (min required: 2) - returning 0 ");
355  return nullptr;
356  }
357 
358  // screen output
359  ATH_MSG_VERBOSE("[start] Creating container volume '"
360  << volumeName << "' with " << volumes.size()
361  << " sub volumes:");
362  // volumes need to be sorted in either r or z - both increasing
363  // set the iterator to the volumes, the first and the end
364  auto firstVolume = volumes.begin();
365  auto lastVolume = volumes.end();
366 
367  for (unsigned int ivol = 0; firstVolume != lastVolume;
368  ++firstVolume, ++ivol) {
369  ATH_MSG_VERBOSE(" - volume ("
370  << ivol << ") is : " << (*firstVolume)->volumeName());
372  " at position : " << Amg::toString((*firstVolume)->center()));
373  ATH_MSG_VERBOSE(" with bounds : " << (*firstVolume)->volumeBounds());
374  }
375 
376  // reset the iterator
377  firstVolume = volumes.begin();
378  --lastVolume; // set to the last volume
379 
380  if (firstVolume == lastVolume) {
381  ATH_MSG_WARNING("Only one TrackingVolume given to create Top level volume "
382  "(min required: 2) - returning 0 ");
383  return nullptr;
384  }
385 
386  // get the bounds
387  const Trk::CylinderVolumeBounds* firstVolumeBounds =
388  dynamic_cast<const Trk::CylinderVolumeBounds*>(
389  &((*firstVolume)->volumeBounds()));
390  const Trk::CylinderVolumeBounds* lastVolumeBounds =
391  dynamic_cast<const Trk::CylinderVolumeBounds*>(
392  &((*lastVolume)->volumeBounds()));
393  // check the dynamic cast
394  if (!firstVolumeBounds || !lastVolumeBounds) {
395  ATH_MSG_WARNING("VolumeBounds given are not of type: "
396  "Trk::CylinderVolumeBounds (required) - returning 0 ");
397  return nullptr;
398  }
399 
400  // check whether it is a r-binned case or a z-binned case
401  bool rCase = fabs(firstVolumeBounds->innerRadius() -
402  lastVolumeBounds->innerRadius()) > 0.1;
403  // fill these ones depending on the rCase though assignment - no parsing at
404  // that stage
405  double zMin = 0.;
406  double zMax = 0.;
407  double rMin = 0.;
408  double rMax = 0.;
409  if (rCase) {
410  zMin = (*firstVolume)->center().z() - firstVolumeBounds->halflengthZ();
411  zMax = (*firstVolume)->center().z() + firstVolumeBounds->halflengthZ();
412  rMin = firstVolumeBounds->innerRadius();
413  rMax = lastVolumeBounds->outerRadius();
414  } else {
415  zMin = (*firstVolume)->center().z() - firstVolumeBounds->halflengthZ();
416  zMax = (*lastVolume)->center().z() + lastVolumeBounds->halflengthZ();
417  rMin = firstVolumeBounds->innerRadius();
418  rMax = firstVolumeBounds->outerRadius();
419  }
420 
421  // estimate the z - position
422  double zPos = 0.5 * (zMin + zMax);
423  // create the HEP transform from the stuff known so far
424  Amg::Transform3D* topVolumeTransform =
425  fabs(zPos) > 0.1 ? new Amg::Transform3D : nullptr;
426  if (topVolumeTransform)
427  (*topVolumeTransform) = Amg::Translation3D(0., 0., zPos);
428  // create the bounds from the information gathered so far
429  Trk::CylinderVolumeBounds* topVolumeBounds =
430  fabs(rMin) > 0.1
431  ? new Trk::CylinderVolumeBounds(rMin, rMax, 0.5 * fabs(zMax - zMin))
432  : new Trk::CylinderVolumeBounds(rMax, 0.5 * fabs(zMax - zMin));
433  // create the volume array to fill in
435  (rCase) ? m_trackingVolumeArrayCreator->cylinderVolumesArrayInR(volumes)
436  : m_trackingVolumeArrayCreator->cylinderVolumesArrayInZ(volumes);
437  if (!volumeArray) {
439  "Creation of TrackingVolume array did not succeed - returning 0 ");
440  delete topVolumeTransform;
441  delete topVolumeBounds;
442  return nullptr;
443  }
444 
445  // we have the bounds and the volume array, create the volume
446  Trk::TrackingVolume* topVolume = new Trk::TrackingVolume(topVolumeTransform,
447  topVolumeBounds,
448  matprop,
449  nullptr,
450  volumeArray,
451  volumeName);
452 
453  // glueing section
454  // --------------------------------------------------------------------------------------
456  *topVolume, rCase, buildBoundaryLayers, replaceBoundaryFace)
457  .isFailure()) {
459  "Problem with inter-glueing of TrackingVolumes (needed) - returning 0 ");
460  delete topVolume;
461  return nullptr;
462  }
463 
465  "[ end ] return newly created container : " << topVolume->volumeName());
466 
467  return topVolume;
468 }

◆ createCylinderLayer()

Trk::CylinderLayer * Trk::CylinderVolumeCreator::createCylinderLayer ( double  z,
double  r,
double  halflength,
double  thickness,
int  binsPhi,
int  binsZ 
) const
private

Private method - helper method to save some code.

Definition at line 812 of file CylinderVolumeCreator.cxx.

818 {
819  ATH_MSG_VERBOSE( "Creating a CylinderLayer at position " << z << " and radius " << r );
820  // prepare the material
821  Trk::LayerMaterialProperties* cylinderMaterial = nullptr;
822  // positioning
823  std::unique_ptr<Amg::Transform3D> transform =
824  (fabs(z) > 0.1) ? std::make_unique<Amg::Transform3D>() : nullptr;
825  if (transform){
826  (*transform) = Amg::Translation3D(0., 0., z);
827  }
828 
829  // z-binning
830  Trk::BinUtility layerBinUtility(binsZ,z-halflengthZ,z+halflengthZ,Trk::open,Trk::binZ);
831  if (binsPhi==1){
832  // the BinUtility for the material
833  // ---------------------> create the layer material
834  cylinderMaterial = new Trk::BinnedLayerMaterial(layerBinUtility);
835  ATH_MSG_VERBOSE( " -> Preparing the binned material with "
836  << binsZ << " bins in Z. ");
837 
838  } else { // break the phi symmetry
839  // update the BinUtility: local position on Cylinder is rPhi, z
840  Trk::BinUtility layerBinUtilityRPhiZ(binsPhi,-r*M_PI,+r*M_PI,Trk::closed,Trk::binRPhi);
841  layerBinUtilityRPhiZ += layerBinUtility;
842  // ---------------------> create the layer material
843  cylinderMaterial = new Trk::BinnedLayerMaterial(layerBinUtilityRPhiZ);
844 
845  ATH_MSG_VERBOSE( " -> Preparing the binned material with "
846  << binsPhi << " / " << binsZ << " bins in R*phi / Z. ");
847  }
848  // bounds
849  Trk::CylinderBounds* cylinderBounds = new Trk::CylinderBounds(r,halflengthZ);
850  // create the cylinder
852  cylinderBounds,
853  *cylinderMaterial,
854  thickness,
855  nullptr, int(Trk::passive)) :
856  new Trk::CylinderLayer(cylinderBounds,
857  *cylinderMaterial,
858  thickness,
859  nullptr, int(Trk::passive)) ;
860  // delete the material
861  delete cylinderMaterial;
862  // and return it
863  return cylinderLayer;
864 }

◆ createDiscLayer()

Trk::DiscLayer * Trk::CylinderVolumeCreator::createDiscLayer ( double  z,
double  rMin,
double  rMax,
double  thickness,
int  binsPhi,
int  binsR 
) const
private

Private method - helper method to save some code.

Definition at line 867 of file CylinderVolumeCreator.cxx.

873 {
874 
875  ATH_MSG_VERBOSE( "Creating a DiscLayer at position " << z << " and rMin/rMax " << rMin << " / " << rMax);
876 
877  // positioning
878  std::unique_ptr<Amg::Transform3D> transform =
879  fabs(z) > 0.1 ? std::make_unique<Amg::Transform3D>() : nullptr;
880  if (transform)
881  (*transform) = Amg::Translation3D(0.,0.,z);
882  Trk::BinnedLayerMaterial* discMaterial = nullptr;
883 
884  // R is the primary binning for the material
885  Trk::BinUtility layerBinUtility(binsR, rMin, rMax, Trk::open, Trk::binR);
886  if (binsPhi==1) {
887  ATH_MSG_VERBOSE( " -> Preparing the binned material with "
888  << binsR << " bins in R. ");
889  } else {
890  // also binning in phi chosen
891  layerBinUtility += Trk::BinUtility(binsPhi, -M_PI, M_PI, Trk::closed, Trk::binPhi);
892  ATH_MSG_VERBOSE( " -> Preparing the binned material with "
893  << binsPhi << " / " << binsR << " bins in phi / R. ");
894  }
895  // ---------------------> create the layer material
896  discMaterial = new Trk::BinnedLayerMaterial(layerBinUtility);
897  // bounds
898  Trk::DiscBounds* discBounds = new Trk::DiscBounds(rMin,rMax);
899  // create the disc
900  Trk::DiscLayer* discLayer = new Trk::DiscLayer(*transform,
901  discBounds,
902  *discMaterial,
903  thickness,
904  nullptr, int(Trk::passive));
905  // delete the material
906  delete discMaterial;
907  // and return it
908  return discLayer;
909 }

◆ createGapTrackingVolume() [1/2]

Trk::TrackingVolume * Trk::CylinderVolumeCreator::createGapTrackingVolume ( Trk::Material matprop,
double  rMin,
double  rMax,
double  zMin,
double  zMax,
const std::vector< double > &  layerPositions,
bool  cylinder = true,
const std::string &  volumeName = "UndefinedVolume",
BinningType  btype = arbitrary 
) const
finaloverridevirtual

ITrackingVolumeCreator::createGaoTrackingVolume(Material&,,std::vector<double>&,int,bool,const std::string&) const;

Implements Trk::ITrackingVolumeCreator.

Definition at line 287 of file CylinderVolumeCreator.cxx.

297 {
298 
299  // screen output
300  ATH_MSG_VERBOSE("Create cylindrical gap TrackingVolume '"
301  << volumeName << "' with (rMin/rMax/zMin/Max) = ");
302  ATH_MSG_VERBOSE('\t' << rMin << " / " << rMax << " / " << zMin << " / "
303  << zMax);
304 
305  // create the layers
306  std::vector<Trk::Layer*> layers;
307  layers.reserve(layerPositions.size());
308 
309  std::vector<double>::const_iterator layerPropIter = layerPositions.begin();
310  std::vector<double>::const_iterator layerPropEnd = layerPositions.end();
311  for (; layerPropIter != layerPropEnd; ++layerPropIter) {
312  // create cylinder layers
313  if (cylinder) {
314  // take envelopes into account
315  double zMinLayer = zMin;
316  double zMaxLayer = zMax;
317  // create the layer
318  layers.push_back(createCylinderLayer(0.5 * (zMinLayer + zMaxLayer),
319  (*layerPropIter),
320  fabs(0.5 * (zMaxLayer - zMinLayer)),
324 
325  } else {
326  // take the envelopes into account
327  double rMinLayer = rMin;
328  double rMaxLayer = rMax;
329  // create the layer
330  layers.push_back(createDiscLayer((*layerPropIter),
331  rMinLayer,
332  rMaxLayer,
336  }
337  }
338  // now call the createTrackingVolume() method
339  return createTrackingVolume(
340  layers, matprop, rMin, rMax, zMin, zMax, volumeName, btype);
341 }

◆ createGapTrackingVolume() [2/2]

Trk::TrackingVolume * Trk::CylinderVolumeCreator::createGapTrackingVolume ( Trk::Material matprop,
double  rMin,
double  rMax,
double  zMin,
double  zMax,
unsigned int  materialLayers,
bool  cylinder = true,
const std::string &  volumeName = "UndefinedVolume" 
) const
finaloverridevirtual

ITrackingVolumeCreator::createGapTrackingVolume(Material&,,double,double,double,double,int,bool,const std::string&) const;

Implements Trk::ITrackingVolumeCreator.

Definition at line 244 of file CylinderVolumeCreator.cxx.

252 {
253 
254  // screen output
255  ATH_MSG_VERBOSE( "Create cylindrical gap TrackingVolume '" << volumeName << "' with (rMin/rMax/zMin/Max) = ");
256  ATH_MSG_VERBOSE( '\t' << rMin << " / " << rMax << " / " << zMin << " / " << zMax );
257 
258  // assing min/max
259  double min = cylinder ? rMin : zMin;
260  double max = cylinder ? rMax : zMax;
261 
262  // create the layer r/z positions
263  std::vector<double> layerPositions;
264  layerPositions.reserve(materialLayers);
265  if (materialLayers > 1){
266  //double step = cylinder ? (max-min)/(materialLayers-1) : (max-min)/(materialLayers-1);
267  const double step=(max-min)/(materialLayers-1);
268  for (unsigned int il = 0; il < materialLayers; ++il)
269  layerPositions.push_back(min+il*step);
270  } else
271  layerPositions.push_back(0.5*(min+max));
272 
273  // now call the main method
274  return createGapTrackingVolume(matprop,
275  rMin,
276  rMax,
277  zMin,
278  zMax,
279  layerPositions,
280  cylinder,
281  volumeName,
282  (layerPositions.size() == 1 ? Trk::arbitrary : Trk::biequidistant));
283 
284 }

◆ createTrackingVolume() [1/2]

Trk::TrackingVolume * Trk::CylinderVolumeCreator::createTrackingVolume ( const std::vector< Layer * > &  layers,
Trk::Material matprop,
double  loc1Min,
double  loc1Max,
double  loc2Min,
double  loc2Max,
const std::string &  volumeName = "UndefinedVolume",
Trk::BinningType  btype = arbitrary 
) const
finaloverridevirtual

;

Implements Trk::ITrackingVolumeCreator.

Definition at line 196 of file CylinderVolumeCreator.cxx.

206 {
207  // that's what is needed
208  Trk::CylinderVolumeBounds* cBounds = nullptr;
209 
210  // screen output
211  ATH_MSG_VERBOSE("Create cylindrical TrackingVolume '" << volumeName << "'.");
212  ATH_MSG_VERBOSE(" -> with given dimensions of (rMin/rMax/zMin/Max) = "
213  << rMin << " / " << rMax << " / " << zMin << " / " << zMax);
214 
215  // check for consistency
216  if (zMin > zMax || rMin > rMax) {
217  ATH_MSG_WARNING("Inconsistent dimensions given :"
218  << ((zMin > zMax) ? " zMin > zMax (" : " rMin > rMax (")
219  << ((zMin > zMax) ? zMin : rMin) << " > "
220  << ((zMin > zMax) ? zMax : rMax) << " ) - return 0");
221  return nullptr;
222  }
223 
224  // create a Amg::Transform3D and VolumeBounds out of the zMin/zMax
225  double halflengthZ = 0.5 * (zMax - zMin);
226  double zPosition = 0.5 * (zMin + zMax);
227  zPosition = fabs(zPosition) < 0.1 ? 0. : zPosition;
228 
229  // now create the cylinder volume bounds
230  cBounds = rMin > 0.1 ? new Trk::CylinderVolumeBounds(rMin, rMax, halflengthZ)
231  : new Trk::CylinderVolumeBounds(rMax, halflengthZ);
232  // transform
234  (zPosition != 0) ? new Amg::Transform3D : nullptr;
235  if (transform)
236  (*transform) = Amg::Translation3D(0., 0., zPosition);
237 
238  // call to the Bounds/Amg::Translation3D method
239  return createTrackingVolume(
240  layers, matprop, cBounds, transform, volumeName, btype);
241 }

◆ createTrackingVolume() [2/2]

Trk::TrackingVolume * Trk::CylinderVolumeCreator::createTrackingVolume ( const std::vector< Layer * > &  layers,
Trk::Material matprop,
Trk::VolumeBounds volBounds = 0,
Amg::Transform3D transform = 0,
const std::string &  volumeName = "UndefinedVolume",
Trk::BinningType  btype = arbitrary 
) const
finaloverridevirtual

;

Implements Trk::ITrackingVolumeCreator.

Definition at line 94 of file CylinderVolumeCreator.cxx.

102 {
103 
104  // the final one to build / sensitive Volume / Bounds
105  Trk::TrackingVolume* tVolume = nullptr;
106 
107  // cases are:
108  // (1) volBounds && transform : use both information
109  // (2) volBounds && !transform : centered around 0, but with given bounds
110  // (3) !volBounds && transform : estimate size from layers, use transform
111  // (4) !volBounds && !transform : estimate size & translation from layers
112  Trk::CylinderVolumeBounds* cylinderBounds = nullptr;
113  // this is the implementation of CylinderVolumeCreator
114  if (volBounds) {
115  cylinderBounds = dynamic_cast<Trk::CylinderVolumeBounds*>(volBounds);
116  if (!cylinderBounds){
117  ATH_MSG_WARNING( "[!] Problem: given bounds were not cylindrical - return 0" );
118  return tVolume;
119  }
120  }
121  std::vector<Trk::CylinderLayer*> cylLayers;
122  cylLayers.reserve(layers.size());
123  std::vector<Trk::DiscLayer*> discLayers;
124  discLayers.reserve(layers.size());
125 
126  // the raw data
127  double rMinRaw{0.}, rMaxRaw{0.}, zMinRaw{0.}, zMaxRaw{0.};
128 
129  // check the dimension and fill raw data
131  cylinderBounds,
132  transform,
133  cylLayers,
134  discLayers,
135  rMinRaw,rMaxRaw,
136  zMinRaw,zMaxRaw,
137  btype).isFailure()) {
138  ATH_MSG_WARNING( "[!] Problem with given dimensions - return 0 and delete provided objects" );
139  delete volBounds; delete transform;
140  delete cylinderBounds;
141  return tVolume;
142  }
143 
144  // get the zMin/Max
145  double zMin = ( transform ? transform->translation().z() : 0. ) +
146  ( cylinderBounds ? -cylinderBounds->halflengthZ() : 0. );
147  double zMax = ( transform ? transform->translation().z() : 0. ) +
148  ( cylinderBounds ? cylinderBounds->halflengthZ() : 0. );
149 
150  double rMin = 0.;
151  double rMax = 0.;
152 
153  // overrule the zMin/zMax for biequidistant binning
154  if (btype == Trk::biequidistant) {
155  // set rMin/rMax and zMin/zMax
156  zMin = zMinRaw;
157  zMax = zMaxRaw;
158  rMin = rMinRaw;
159  rMax = rMaxRaw;
160  } else {
161  if (!cylinderBounds) {
162  ATH_MSG_WARNING( "[!] No cylindrical bounds given - return 0" );
163  return tVolume;
164  }
165  rMin = cylinderBounds->innerRadius();
166  rMax = cylinderBounds->outerRadius();
167  }
168 
169  ATH_MSG_VERBOSE("Filling the layers into an appropriate layer array");
170  // create the Layer Array
171  Trk::BinnedArray<Trk::Layer>* layerArray = !cylLayers.empty() ?
172  m_layerArrayCreator->cylinderLayerArray(cylLayers,
173  rMin,
174  rMax,
175  btype) :
176  m_layerArrayCreator->discLayerArray(discLayers,
177  zMin,
178  zMax,
179  btype);
180 
181  // finally create the TrackingVolume
182  tVolume = new Trk::TrackingVolume(transform,
183  cylinderBounds,
184  matprop,
185  layerArray,nullptr,
186  volumeName);
187  // screen output
188  ATH_MSG_VERBOSE( "Created cylindrical volume at z-position :" << tVolume->center().z() );
189  ATH_MSG_VERBOSE( " created bounds : " << tVolume->volumeBounds() );
190 
191  // return the constructed TrackingVolume
192  return tVolume;
193 }

◆ 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::ITrackingVolumeCreator::DeclareInterfaceID ( ITrackingVolumeCreator  ,
,
 
)
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; }

◆ estimateAndCheckDimension()

StatusCode Trk::CylinderVolumeCreator::estimateAndCheckDimension ( const std::vector< Layer * > &  layers,
Trk::CylinderVolumeBounds *&  cylBounds,
Amg::Transform3D *&  translation,
std::vector< CylinderLayer * > &  cylLayers,
std::vector< DiscLayer * > &  discLayers,
double &  rMinClean,
double &  rMaxClean,
double &  zMinClean,
double &  zMaxClean,
Trk::BinningType  bType = arbitrary 
) const
private

Private method - it estimates the CylinderBounds and Translation of layers, if given, these are checked against the layer positions/dimensions.

private helper method to estimate and check the dimensions of a tracking volume

Definition at line 472 of file CylinderVolumeCreator.cxx.

484 {
485  // check and bail out if no layers are given
486  if (layers.empty()) {
487  ATH_MSG_VERBOSE( "No layers given, you shouldn't use : "<< type() );
488  return StatusCode::FAILURE;
489  }
490 
491  // some verbose output
492  ATH_MSG_VERBOSE( "Parsing the " << layers.size() << " layers to gather overall dimensions" );
493  if (cylinderVolumeBounds) ATH_MSG_VERBOSE( "Cylinder volume bounds are given." );
494 
495  // prepare for parsing the layers
496  double layerRmin = 10e10;
497  double layerRmax = 0.;
498  double layerZmin = 10e10;
499  double layerZmax = -10e10;
500  bool radial = false;
501 
502  rMinClean = 10e10;
503  rMaxClean = 0.;
504  zMinClean = 10e10;
505  zMaxClean = -10e10;
506 
507  // find out what is there
508  for (auto *const layerIter : layers) {
509  //class is not thread safe due to this
510  // initialize
511  double currentRmin = 0.;
512  double currentRmax = 0.;
513  double currentZmin = 0.;
514  double currentZmax = 0.;
515  // dynamic cast the bounds either to CylinderBounds or DiscBounds
516  const Trk::CylinderBounds* cylBounds =
517  dynamic_cast<const Trk::CylinderBounds*>(&(layerIter->surfaceRepresentation()).bounds());
518  // cylinder bounds
519  if (cylBounds) {
520  radial = true;
521  // fill it into the cylinderLayer vector
522  cylinderLayers.push_back(dynamic_cast<Trk::CylinderLayer*>(layerIter));
523  // get the raw data
524  double currentR = cylBounds->r();
525  double centerZ = (layerIter->surfaceRepresentation()).center().z();
526  // check for min/max in the cylinder bounds case
527  if (bType == Trk::biequidistant){
528  currentRmin = currentR; currentRmax = currentR;
529  } else {
530  currentRmin = currentR-(0.5*(layerIter)->thickness());
531  currentRmax = currentR+(0.5*(layerIter)->thickness());
532  }
533  currentZmin = centerZ - cylBounds->halflengthZ();
534  currentZmax = centerZ + cylBounds->halflengthZ();
535  }
536  // dynamic cast to the DiscBounds
537  const Trk::DiscBounds* discBounds =
538  dynamic_cast<const Trk::DiscBounds*>(&(layerIter->surfaceRepresentation()).bounds());
539  if (discBounds) {
540  // fill it into the discLayer vector
541  discLayers.push_back(dynamic_cast<Trk::DiscLayer*>(layerIter));
542  // check for min/max in the cylinder bounds case
543  double centerZ = (layerIter->surfaceRepresentation()).center().z();
544  currentRmin = discBounds->rMin();
545  currentRmax = discBounds->rMax();
546  if (bType == Trk::biequidistant){
547  currentZmin = centerZ; currentZmax = centerZ;
548  } else {
549  currentZmin = centerZ - (0.5*(layerIter)->thickness());
550  currentZmax = centerZ + (0.5*(layerIter)->thickness());
551  }
552  }
553  // the raw data
554  rMinClean = std::min(rMinClean, currentRmin);
555  rMaxClean = std::max(rMaxClean, currentRmax);
556  zMinClean = std::min(zMinClean, currentZmin);
557  zMaxClean = std::max(zMaxClean, currentZmax);
558  // assign if they overrule the minima/maxima (with layers thicknesses)
559 
560  layerRmin = std::min(layerRmin,currentRmin);
561  layerRmax = std::max(layerRmax, currentRmax);
562  layerZmin = std::min(layerZmin,currentZmin);
563  layerZmax = std::max(layerZmax, currentZmax);
564  }
565 
566  // special for biequidistant binning - navigation layers are added before / after
567  if (bType == Trk::biequidistant){
568  if (radial){
569  double rStepHalf = 0.5*(layerRmax-layerRmin)/(layers.size()-1);
570  layerRmin -= rStepHalf;
571  layerRmax += rStepHalf;
572  } else {
573  double zStepHalf = 0.5*(layerZmax-layerZmin)/(layers.size()-1);
574  layerZmin -= zStepHalf;
575  layerZmax += zStepHalf;
576  }
577  }
578 
579  ATH_MSG_VERBOSE( "Estimate/check CylinderVolumeBounds from/w.r.t. enclosed layers + envelope covers" );
580  // the z from the layers w and w/o envelopes
581  double zEstFromLayerEnv = 0.5*((layerZmax)+(layerZmin));
582  double halflengthFromLayer = 0.5*fabs((layerZmax)-(layerZmin));
583 
584  bool concentric = (zEstFromLayerEnv*zEstFromLayerEnv < 0.001);
585 
586  // no CylinderBounds and Translation given - make it
587  if (!cylinderVolumeBounds && !transform) {
588  // create the CylinderBounds from parsed layer inputs
589  cylinderVolumeBounds = new Trk::CylinderVolumeBounds(layerRmin,layerRmax,halflengthFromLayer);
590  // and the transform
591  transform = concentric ? new Amg::Transform3D : nullptr;
592  if (transform)
593  (*transform) = Amg::Translation3D(0.,0.,zEstFromLayerEnv);
594  } else if (cylinderVolumeBounds && !transform &&!concentric){
596  (*transform) = Amg::Translation3D(0.,0.,zEstFromLayerEnv);
597  }
598  else if (transform && !cylinderVolumeBounds) {
599  // create the CylinderBounds from parsed layer inputs
600  double halflengthFromLayer = 0.5*fabs((layerZmax)-(layerZmin));
601  cylinderVolumeBounds = new Trk::CylinderVolumeBounds(layerRmin,
602  layerRmax,
603  halflengthFromLayer);
604  }
605 
606  ATH_MSG_VERBOSE( " -> dimensions from layers (rMin/rMax/zMin/zMax) = "
607  << layerRmin << " / " << layerRmax << " / " << layerZmin << " / " << layerZmax );
608  double zFromTransform = transform ? transform->translation().z() : 0.;
609  ATH_MSG_VERBOSE( " -> while created bounds are (rMin/rMax/zMin/zMax) = "
610  << cylinderVolumeBounds->innerRadius() << " / " << cylinderVolumeBounds->outerRadius() << " / "
611  << zFromTransform-cylinderVolumeBounds->halflengthZ() << " / " << zFromTransform+cylinderVolumeBounds->halflengthZ() );
612 
613 
614  // both is NOW given --- check it -----------------------------
615  if (cylinderVolumeBounds) {
616  // only check
617  if (zFromTransform-cylinderVolumeBounds->halflengthZ() <= layerZmin &&
618  zFromTransform+cylinderVolumeBounds->halflengthZ() >= layerZmax &&
619  cylinderVolumeBounds->innerRadius() <= layerRmin &&
620  cylinderVolumeBounds->outerRadius() >= layerRmax)
621  return StatusCode::SUCCESS;
622  else {
623  ATH_MSG_WARNING( "Provided layers are not contained by volume ! Bailing out. " );
624  return StatusCode::FAILURE;
625  }
626  ATH_MSG_VERBOSE( "Created/Checked " << *cylinderVolumeBounds );
627  }
628 
629 
630  return StatusCode::SUCCESS;
631 }

◆ 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

◆ glueTrackingVolumes()

void Trk::CylinderVolumeCreator::glueTrackingVolumes ( Trk::TrackingVolume tvolOne,
Trk::BoundarySurfaceFace  faceOne,
Trk::TrackingVolume tvolTwo,
Trk::BoundarySurfaceFace  faceTwo,
bool  buildBoundaryLayers,
bool  replaceBoundaryFace = false 
) const
private

Private method - glue volume to the other – use trackingVolume helper.

private helper method to fill the glue volumes (or the volume itself in)

Definition at line 742 of file CylinderVolumeCreator.cxx.

748 {
749 
750  // get the two gluevolume descriptors
751  Trk::GlueVolumesDescriptor& gvDescriptorOne = tvolOne.glueVolumesDescriptor();
752  Trk::GlueVolumesDescriptor& gvDescriptorTwo = tvolTwo.glueVolumesDescriptor();
753 
754  ATH_MSG_VERBOSE( "Glue method called with " << (replaceBoundaryFace ? "joint boundaries." : "individual boundaries." ) );
755 
756  size_t volOneGlueVols = gvDescriptorOne.glueVolumes(faceOne).size();
757  ATH_MSG_VERBOSE( "GlueVolumeDescriptor of volume '" << tvolOne.volumeName() <<"' has "
758  << volOneGlueVols << " @ " << faceOne );
759  size_t volTwoGlueVols = gvDescriptorTwo.glueVolumes(faceTwo).size();
760  ATH_MSG_VERBOSE( "GlueVolumeDescriptor of volume '" << tvolTwo.volumeName() <<"' has "
761  << volTwoGlueVols << " @ " << faceTwo );
762 
763  // they could still be a container though
764  TrackingVolume* glueVolOne = volOneGlueVols ?
765  gvDescriptorOne.glueVolumes(faceOne)[0] : &tvolOne;
766 
767  TrackingVolume* glueVolTwo = volTwoGlueVols ?
768  gvDescriptorTwo.glueVolumes(faceTwo)[0] : &tvolTwo;
769 
770  // check the cases
771  // (i) easy volume to volume
772  if ( volOneGlueVols <= 1 && volTwoGlueVols <= 1) {
773  // now glue it
774  ATH_MSG_VERBOSE( " glue : one[ "<< glueVolOne->volumeName() << " @ " << faceOne
775  << " ]-to-one[ "<< glueVolTwo->volumeName() << " @ " << faceTwo << " ]" );
776  m_trackingVolumeHelper->glueTrackingVolumes(*glueVolOne,
777  faceOne,
778  *glueVolTwo,
779  faceTwo,
780  createBoundaryLayers);
781  } else if (volOneGlueVols <= 1) { // (ii) one -> many
782  ATH_MSG_VERBOSE( " glue : one[ "<< glueVolOne->volumeName() << " @ " << faceOne
783  << " ]-to-many[ "<< tvolTwo.volumeName() << " @ " << faceTwo << " ]" );
784  m_trackingVolumeHelper->glueTrackingVolumes(*glueVolOne,
785  faceOne,
786  gvDescriptorTwo.glueVolumes(faceTwo),
787  faceTwo,
788  createBoundaryLayers,
789  replaceBoundaryFace);
790  } else if (volTwoGlueVols <= 1 ) { // (iii) many -> two
791  ATH_MSG_VERBOSE( " glue : many[ "<< tvolOne.volumeName() << " @ " << faceOne
792  << " ]-to-one[ "<< glueVolTwo->volumeName() << " @ " << faceTwo << " ]" );
793  m_trackingVolumeHelper->glueTrackingVolumes(*glueVolTwo,
794  faceTwo,
795  gvDescriptorOne.glueVolumes(faceOne),
796  faceOne,
797  createBoundaryLayers,
798  replaceBoundaryFace);
799  } else {
800  // (iv) glue array to array
801  ATH_MSG_VERBOSE( " glue : many[ "<< tvolOne.volumeName() << " @ " << faceOne
802  << " ]-to-many[ "<< tvolTwo.volumeName() << " @ " << faceTwo << " ]" );
803  m_trackingVolumeHelper->glueTrackingVolumes(gvDescriptorOne.glueVolumes(faceOne),
804  faceOne,
805  gvDescriptorTwo.glueVolumes(faceTwo),
806  faceTwo,
807  createBoundaryLayers,
808  replaceBoundaryFace);
809  } // end of case (iv)
810 }

◆ initialize()

StatusCode Trk::CylinderVolumeCreator::initialize ( )
overridevirtual

AlgTool initialize method.

Definition at line 59 of file CylinderVolumeCreator.cxx.

60 {
61 
62  // Retrieve the layer array creator ----------------------------------------------------
63  if (m_layerArrayCreator.retrieve().isFailure())
64  {
65  ATH_MSG_FATAL( "Failed to retrieve tool " << m_layerArrayCreator );
66  return StatusCode::FAILURE;
67  } else
68  ATH_MSG_DEBUG( "Retrieved tool " << m_layerArrayCreator );
69 
70 
71  // Retrieve the volume array creator ----------------------------------------------------
72  if (m_trackingVolumeArrayCreator.retrieve().isFailure())
73  {
74  ATH_MSG_FATAL( "Failed to retrieve tool " << m_trackingVolumeArrayCreator );
75  return StatusCode::FAILURE;
76  } else
77  ATH_MSG_DEBUG( "Retrieved tool " << m_trackingVolumeArrayCreator );
78 
79 
80  // Retrieve the volume array creator ----------------------------------------------------
81  if (m_trackingVolumeHelper.retrieve().isFailure())
82  {
83  ATH_MSG_FATAL( "Failed to retrieve tool " << m_trackingVolumeHelper );
84  return StatusCode::FAILURE;
85  } else
86  ATH_MSG_DEBUG( "Retrieved tool " << m_trackingVolumeHelper );
87 
88  ATH_MSG_DEBUG( "initialize() successful" );
89 
90  return StatusCode::SUCCESS;
91 }

◆ 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.

◆ interGlueTrackingVolume()

StatusCode Trk::CylinderVolumeCreator::interGlueTrackingVolume ( Trk::TrackingVolume tVolume,
bool  rBinned,
bool  buildBoundaryLayers,
bool  replaceBoundaryFace = false 
) const
private

Private method - interglue all volumes contained by a TrackingVolume and set the outside glue volumes in the descriptor.

Definition at line 634 of file CylinderVolumeCreator.cxx.

638 {
639 
640  ATH_MSG_VERBOSE( "Glue contained TrackingVolumes of container '" << tVolume.volumeName() << "'." );
641 
642  // get the glueVolumes descriptor of the top volume to register the outside volumes
643  Trk::GlueVolumesDescriptor& glueDescr = tVolume.glueVolumesDescriptor();
644 
645  // so far we know that we can do that (private method)
646  BinnedArraySpan<Trk::TrackingVolume * const> volumes = tVolume.confinedVolumes()->arrayObjects();
647 
648  // the needed iterators
649  auto tVolIter = volumes.begin();
650  auto tVolFirst = volumes.begin();
651  auto tVolLast = volumes.end(); --tVolLast;
652  auto tVolEnd = volumes.end();
653 
654  // the glue volumes for the description
655  std::vector<Trk::TrackingVolume*> glueVolumesInnerTube;
656  std::vector<Trk::TrackingVolume*> glueVolumesOuterTube;
657  std::vector<Trk::TrackingVolume*> glueVolumesNegativeFace;
658  std::vector<Trk::TrackingVolume*> glueVolumesPositiveFace;
659 
660  // volumes of increasing r
661  if (rBinned) {
662  // loop over the volumes -------------------------------
663  for ( ; tVolIter != tVolEnd; ) {
664  // screen output
665  ATH_MSG_VERBOSE("r-binning: Processing volume '" << (*tVolIter)->volumeName() << "'.");
666  // for the first one
667  if (tVolIter == tVolFirst)
668  addFaceVolumes((**tVolIter),Trk::tubeInnerCover,glueVolumesInnerTube);
669  // add this or the subvolumes to the negativeFace and positiveFace
670  addFaceVolumes((**tVolIter),Trk::negativeFaceXY,glueVolumesNegativeFace);
671  addFaceVolumes((**tVolIter),Trk::positiveFaceXY,glueVolumesPositiveFace);
672  if (tVolIter == tVolLast) {
673  addFaceVolumes((**tVolIter),Trk::tubeOuterCover,glueVolumesOuterTube);
674  ++tVolIter;
675  } else {
676  Trk::TrackingVolume* tVol1 = (*tVolIter);
677  Trk::TrackingVolume* tVol2 = (*(++tVolIter));
678  glueTrackingVolumes(*tVol1,Trk::tubeOuterCover, *tVol2, Trk::tubeInnerCover, createBoundaryLayers, replaceBoundaryFace);
679  }
680  }
681  } else {
682  // volumes in increasing z
683  // loop over the volumes
684  for ( ; tVolIter != tVolEnd; ) {
685  // screen output
686  ATH_MSG_VERBOSE("z-binning: Processing volume '" << (*tVolIter)->volumeName() << "'.");
687  if (tVolIter == tVolFirst)
688  addFaceVolumes((**tVolIter),Trk::negativeFaceXY,glueVolumesNegativeFace);
689  addFaceVolumes((**tVolIter),Trk::tubeInnerCover,glueVolumesInnerTube);
690  addFaceVolumes((**tVolIter),Trk::tubeOuterCover,glueVolumesOuterTube);
691  if (tVolIter == tVolLast) {
692  addFaceVolumes((**tVolIter),Trk::positiveFaceXY,glueVolumesPositiveFace);
693  ++tVolIter;
694  } else {
695  Trk::TrackingVolume* tVol1 = (*tVolIter);
696  Trk::TrackingVolume* tVol2 = (*(++tVolIter));
697  glueTrackingVolumes(*tVol1,Trk::positiveFaceXY,*tVol2,Trk::negativeFaceXY, createBoundaryLayers, replaceBoundaryFace);
698  }
699  }
700  }
701 
702  // register it with the glueVolumeDescriptor
703  glueDescr.registerGlueVolumes(Trk::negativeFaceXY,glueVolumesNegativeFace);
704  glueDescr.registerGlueVolumes(Trk::positiveFaceXY,glueVolumesPositiveFace);
705  glueDescr.registerGlueVolumes(Trk::tubeInnerCover,glueVolumesInnerTube);
706  glueDescr.registerGlueVolumes(Trk::tubeOuterCover,glueVolumesOuterTube);
707 
708  // return success
709  return StatusCode::SUCCESS;
710 }

◆ 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.

◆ 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  }

◆ 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.

◆ 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_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_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_layerArrayCreator

ToolHandle<ILayerArrayCreator> Trk::CylinderVolumeCreator::m_layerArrayCreator
private

< A Tool for coherent LayerArray creation

Helper Tool to create TrackingVolume Arrays

Definition at line 186 of file CylinderVolumeCreator.h.

◆ m_passiveLayerPhiBins

int Trk::CylinderVolumeCreator::m_passiveLayerPhiBins
private

bins in phi for the passive layer

Definition at line 193 of file CylinderVolumeCreator.h.

◆ m_passiveLayerRzBins

int Trk::CylinderVolumeCreator::m_passiveLayerRzBins
private

bins in r/z for the passive layer

Definition at line 194 of file CylinderVolumeCreator.h.

◆ m_passiveLayerThickness

double Trk::CylinderVolumeCreator::m_passiveLayerThickness
private

thickness of passive layers

Definition at line 192 of file CylinderVolumeCreator.h.

◆ m_trackingVolumeArrayCreator

ToolHandle<ITrackingVolumeArrayCreator> Trk::CylinderVolumeCreator::m_trackingVolumeArrayCreator
private

TrackingVolume helper.

Definition at line 188 of file CylinderVolumeCreator.h.

◆ m_trackingVolumeHelper

ToolHandle<ITrackingVolumeHelper> Trk::CylinderVolumeCreator::m_trackingVolumeHelper
private

Definition at line 190 of file CylinderVolumeCreator.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:
PlotCalibFromCool.il
il
Definition: PlotCalibFromCool.py:381
beamspotman.r
def r
Definition: beamspotman.py:676
Trk::TrackingVolume::glueVolumesDescriptor
GlueVolumesDescriptor & glueVolumesDescriptor()
Definition: TrackingVolume.cxx:1205
Trk::CylinderVolumeCreator::addFaceVolumes
void addFaceVolumes(TrackingVolume &tvol, Trk::BoundarySurfaceFace bsf, std::vector< Trk::TrackingVolume * > &vols) const
Private method - helper method not to duplicate code.
Definition: CylinderVolumeCreator.cxx:714
Trk::CylinderVolumeCreator::createDiscLayer
DiscLayer * createDiscLayer(double z, double rMin, double rMax, double thickness, int binsPhi, int binsR) const
Private method - helper method to save some code.
Definition: CylinderVolumeCreator.cxx:867
Trk::CylinderVolumeCreator::createCylinderLayer
CylinderLayer * createCylinderLayer(double z, double r, double halflength, double thickness, int binsPhi, int binsZ) const
Private method - helper method to save some code.
Definition: CylinderVolumeCreator.cxx:812
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:57
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Trk::binZ
@ binZ
Definition: BinningType.h:49
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
module_driven_slicing.layers
layers
Definition: module_driven_slicing.py:114
M_PI
#define M_PI
Definition: ActiveFraction.h:11
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
Trk::biequidistant
@ biequidistant
Definition: BinningType.h:33
ChangeHistoRange.binsZ
list binsZ
Definition: ChangeHistoRange.py:63
Trk::closed
@ closed
Definition: BinningType.h:41
Trk::positiveFaceXY
@ positiveFaceXY
Definition: BoundarySurfaceFace.h:33
Trk::CylinderVolumeCreator::m_passiveLayerPhiBins
int m_passiveLayerPhiBins
bins in phi for the passive layer
Definition: CylinderVolumeCreator.h:193
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Trk::CylinderVolumeCreator::m_trackingVolumeArrayCreator
ToolHandle< ITrackingVolumeArrayCreator > m_trackingVolumeArrayCreator
TrackingVolume helper.
Definition: CylinderVolumeCreator.h:188
Trk::CylinderVolumeCreator::estimateAndCheckDimension
StatusCode estimateAndCheckDimension(const std::vector< Layer * > &layers, Trk::CylinderVolumeBounds *&cylBounds, Amg::Transform3D *&translation, std::vector< CylinderLayer * > &cylLayers, std::vector< DiscLayer * > &discLayers, double &rMinClean, double &rMaxClean, double &zMinClean, double &zMaxClean, BinningType bType=arbitrary) const
Private method - it estimates the CylinderBounds and Translation of layers, if given,...
Definition: CylinderVolumeCreator.cxx:472
Trk::DiscBounds::rMax
double rMax() const
This method returns outer radius.
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
Trk::passive
@ passive
Definition: Layer.h:48
Trk::arbitrary
@ arbitrary
Definition: BinningType.h:34
Trk::CylinderVolumeCreator::glueTrackingVolumes
void glueTrackingVolumes(TrackingVolume &volumeOne, BoundarySurfaceFace faceOne, TrackingVolume &volumeTwo, BoundarySurfaceFace faceTwo, bool buildBoundaryLayers, bool replaceBoundaryFace=false) const
Private method - glue volume to the other – use trackingVolume helper.
Definition: CylinderVolumeCreator.cxx:742
Trk::DiscBounds::rMin
double rMin() const
This method returns inner radius.
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
AthCommonDataStore
Definition: AthCommonDataStore.h:52
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
beamspotman.n
n
Definition: beamspotman.py:731
Trk::GlueVolumesDescriptor::registerGlueVolumes
void registerGlueVolumes(BoundarySurfaceFace, std::vector< TrackingVolume * > &)
register the volumes
Definition: GlueVolumesDescriptor.cxx:28
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Trk::CylinderBounds
Definition: CylinderBounds.h:46
Trk::LayerMaterialProperties
Definition: LayerMaterialProperties.h:62
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
Trk::CylinderVolumeBounds::halflengthZ
double halflengthZ() const
This method returns the halflengthZ.
Definition: CylinderVolumeBounds.h:207
Trk::negativeFaceXY
@ negativeFaceXY
Definition: BoundarySurfaceFace.h:32
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
Trk::BinnedLayerMaterial
Definition: BinnedLayerMaterial.h:33
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
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::CylinderLayer
Definition: CylinderLayer.h:43
Trk::CylinderVolumeBounds
Definition: CylinderVolumeBounds.h:70
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::TrackingVolume::volumeName
const std::string & volumeName() const
Returns the VolumeName - for debug reason, might be depreciated later.
Trk::CylinderVolumeCreator::createGapTrackingVolume
virtual TrackingVolume * createGapTrackingVolume(Material &matprop, double rMin, double rMax, double zMin, double zMax, unsigned int materialLayers, bool cylinder=true, const std::string &volumeName="UndefinedVolume") const override final
Definition: CylinderVolumeCreator.cxx:244
Trk::GlueVolumesDescriptor::glueVolumes
const std::vector< TrackingVolume * > & glueVolumes(BoundarySurfaceFace)
retrieve them again
Definition: GlueVolumesDescriptor.cxx:40
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
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.
Trk::CylinderVolumeCreator::m_trackingVolumeHelper
ToolHandle< ITrackingVolumeHelper > m_trackingVolumeHelper
Definition: CylinderVolumeCreator.h:190
Trk::GlueVolumesDescriptor
Definition: GlueVolumesDescriptor.h:40
Trk::CylinderVolumeCreator::createTrackingVolume
virtual TrackingVolume * createTrackingVolume(const std::vector< Layer * > &layers, Material &matprop, VolumeBounds *volBounds=0, Amg::Transform3D *transform=0, const std::string &volumeName="UndefinedVolume", BinningType btype=arbitrary) const override final
Definition: CylinderVolumeCreator.cxx:94
Trk::open
@ open
Definition: BinningType.h:40
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
Trk::binR
@ binR
Definition: BinningType.h:50
a
TList * a
Definition: liststreamerinfos.cxx:10
h
Trk::CylinderVolumeCreator::m_layerArrayCreator
ToolHandle< ILayerArrayCreator > m_layerArrayCreator
< A Tool for coherent LayerArray creation
Definition: CylinderVolumeCreator.h:186
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::binRPhi
@ binRPhi
Definition: BinningType.h:52
Trk::CylinderVolumeBounds::innerRadius
double innerRadius() const
This method returns the inner radius.
Definition: CylinderVolumeBounds.h:187
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
Trk::TrackingVolume::confinedVolumes
const TrackingVolumeArray * confinedVolumes() const
Return the subLayer array.
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
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:623
LArCellBinning.step
step
Definition: LArCellBinning.py:158
Trk::CylinderVolumeCreator::m_passiveLayerThickness
double m_passiveLayerThickness
thickness of passive layers
Definition: CylinderVolumeCreator.h:192
Trk::CylinderVolumeCreator::m_passiveLayerRzBins
int m_passiveLayerRzBins
bins in r/z for the passive layer
Definition: CylinderVolumeCreator.h:194
Trk::tubeOuterCover
@ tubeOuterCover
Definition: BoundarySurfaceFace.h:40
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
Trk::tubeInnerCover
@ tubeInnerCover
Definition: BoundarySurfaceFace.h:39
Trk::BinnedArray
Definition: BinnedArray.h:38
Trk::TrackingVolume
Definition: TrackingVolume.h:121
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
Trk::CylinderVolumeCreator::interGlueTrackingVolume
StatusCode interGlueTrackingVolume(TrackingVolume &tVolume, bool rBinned, bool buildBoundaryLayers, bool replaceBoundaryFace=false) const
Private method - interglue all volumes contained by a TrackingVolume and set the outside glue volumes...
Definition: CylinderVolumeCreator.cxx:634
fitman.k
k
Definition: fitman.py:528
Trk::DiscBounds
Definition: DiscBounds.h:44
Trk::CylinderBounds::halflengthZ
double halflengthZ() const
This method returns the halflengthZ.
Trk::CylinderBounds::r
virtual double r() const override final
This method returns the radius.
Trk::binPhi
@ binPhi
Definition: BinningType.h:51