ATLAS Offline Software
MuonStationTypeBuilder.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUONTRACKINGGEOMETRY_MUONSTATIONTYPEBUILDER_H
6 #define MUONTRACKINGGEOMETRY_MUONSTATIONTYPEBUILDER_H
7 // Amg
8 #include "GeoPrimitives/GeoPrimitives.h" //Amg stuff
9 // Trk
12 #include "TrkDetDescrInterfaces/ITrackingVolumeArrayCreator.h" //in tool handle template
13 #include "TrkDetDescrUtils/SharedObject.h" //see the typedef for LayTr
14 #include "TrkGeometry/TrackingVolume.h" //also for LayerArray typedef
15 
16 // Gaudi
17 #include "AthenaBaseComps/AthAlgTool.h" //base class
19 
20 // stl
21 #include <memory> //std::unique_ptr
22 #include <string>
23 #include <utility> //for std::pair
24 #include <vector>
25 
26 
27 namespace Trk {
28 class Volume;
29 class Layer;
30 class CuboidVolumeBounds;
31 class TrapezoidVolumeBounds;
32 class DoubleTrapezoidVolumeBounds;
33 class PlaneLayer;
34 class Material;
35 class GeoMaterialConverter;
36 class MaterialProperties;
37 } // namespace Trk
38 
39 namespace MuonGM{
40  class MuonDetectorManager;
41 }
42 namespace Muon {
43 
53  public:
54  struct Cache {
55  std::unique_ptr<Trk::MaterialProperties> m_mdtTubeMat{};
56  std::unique_ptr<Trk::MaterialProperties> m_rpcLayer{};
57  std::vector<std::unique_ptr<Trk::MaterialProperties>> m_mdtFoamMat{};
58  std::unique_ptr<Trk::MaterialProperties> m_rpc46{};
59  std::vector<std::unique_ptr<Trk::MaterialProperties>> m_rpcDed{};
60  std::unique_ptr<Trk::MaterialProperties> m_rpcExtPanel{};
61  std::unique_ptr<Trk::MaterialProperties> m_rpcMidPanel{};
62  std::unique_ptr<Trk::MaterialProperties> m_matCSC01{};
63  std::unique_ptr<Trk::MaterialProperties> m_matCSCspacer1{};
64  std::unique_ptr<Trk::MaterialProperties> m_matCSC02{};
65  std::unique_ptr<Trk::MaterialProperties> m_matCSCspacer2{};
66  std::unique_ptr<Trk::MaterialProperties> m_matTGC01{};
67  std::unique_ptr<Trk::MaterialProperties> m_matTGC06{};
68  };
70  MuonStationTypeBuilder(const std::string&, const std::string&,
71  const IInterface*);
73  virtual ~MuonStationTypeBuilder() = default;
79  static const InterfaceID& interfaceID();
81  std::unique_ptr<Trk::TrackingVolumeArray> processBoxStationComponents(const GeoVPhysVol* cv,
82  const Trk::CuboidVolumeBounds& envBounds,
83  Cache&) const;
84  std::vector<std::unique_ptr<Trk::Layer>> processBoxComponentsArbitrary(const GeoVPhysVol* mv,
85  const Trk::CuboidVolumeBounds& envBounds,
86  Cache& cache) const;
87 
88  std::unique_ptr<Trk::TrackingVolumeArray> processTrdStationComponents(const GeoVPhysVol* cv,
89  const Trk::TrapezoidVolumeBounds& envBounds,
90  Cache&) const;
91 
92  std::unique_ptr<Trk::TrackingVolume> processCscStation(const GeoVPhysVol* cv,
93  const std::string& name,
94  Cache&) const;
95 
96  std::unique_ptr<Trk::TrackingVolume> processTgcStation(const GeoVPhysVol* cv, Cache&) const;
97 
98  std::unique_ptr<Trk::DetachedTrackingVolume> process_sTGC(const Identifier& id,
99  const GeoVPhysVol* gv,
100  const Amg::Transform3D& transf) const;
101 
102  std::unique_ptr<Trk::DetachedTrackingVolume> process_MM(const Identifier& id,
103  const GeoVPhysVol* gv,
104  const Amg::Transform3D& transf) const;
105 
107  std::unique_ptr<Trk::TrackingVolume> processMdtBox(const Trk::Volume& trkVol,
108  const GeoVPhysVol*,
109  const Amg::Transform3D&,
110  double, Cache&) const;
111 
112  std::unique_ptr<Trk::TrackingVolume> processMdtTrd(const Trk::Volume& trkVol,
113  const GeoVPhysVol*,
114  const Amg::Transform3D&, Cache&) const;
115 
116  std::unique_ptr<Trk::TrackingVolume> processRpc(const Trk::Volume& inVol,
117  const std::vector<const GeoVPhysVol*>& childVols,
118  const std::vector<Amg::Transform3D>& childVolsTrf,
119  Cache&) const;
120 
121  std::unique_ptr<Trk::TrackingVolume> processSpacer(const Trk::Volume&,
122  std::vector<const GeoVPhysVol*>,
123  std::vector<Amg::Transform3D>) const;
124 
125  std::unique_ptr<Trk::LayerArray> processCSCTrdComponent(const GeoVPhysVol*,
127  const Amg::Transform3D& ,
128  Cache&) const;
129 
130  std::unique_ptr<Trk::LayerArray> processCSCDiamondComponent(const GeoVPhysVol*,
132  const Amg::Transform3D&, Cache&) const;
133 
134  std::unique_ptr<Trk::LayerArray> processTGCComponent(const GeoVPhysVol*,
136  const Amg::Transform3D&, Cache&) const;
137 
138  std::pair<std::unique_ptr<Trk::Layer>,
139  std::vector<std::unique_ptr<Trk::Layer>>> createLayerRepresentation(Trk::TrackingVolume& trVol) const;
140 
141 
142  Identifier identifyNSW(const std::string&, const Amg::Transform3D&) const;
143 
144  // used to be private ..
145  double get_x_size(const GeoVPhysVol*) const;
146  double decodeX(const GeoShape*) const;
147  double envelopeThickness(const Trk::VolumeBounds& vb) const;
148  Trk::MaterialProperties getAveragedLayerMaterial(const GeoVPhysVol*, double,
149  double) const;
151 
152  private:
153  void printVolumeBounds(std::string comment,
154  const Trk::VolumeBounds& vb) const;
155 
156  // derive layer bounds from the station envelope
157  std::unique_ptr<Trk::SurfaceBounds> getLayerBoundsFromEnvelope(const Trk::Volume& envelope) const;
158 
159  // calculate area defined by (planar) surface bounds
160  double area(const Trk::SurfaceBounds& sb) const;
161 
162 
163  Gaudi::Property<bool> m_multilayerRepresentation{this, "BuildMultilayerRepresentation", true};
164  Gaudi::Property<bool> m_resolveSpacer{this, "ResolveSpacerBeams", false};
165 
166  ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
167 
168  // Helper tool to create TrackingVolume Arrays
169  ToolHandle<Trk::ITrackingVolumeArrayCreator> m_trackingVolumeArrayCreator{this, "TrackingVolumeArrayCreator",
170  "Trk::TrackingVolumeArrayCreator/TrackingVolumeArrayCreator"};
171 
172  std::unique_ptr<const Trk::Material> m_muonMaterial;
176 };
177 
178 } // namespace Muon
179 
180 #endif // MUONTRACKINGGEOMETRY_MUONSTATIONTYPEBUILDER_H
Muon::MuonStationTypeBuilder::interfaceID
static const InterfaceID & interfaceID()
Interface methode.
Definition: MuonStationTypeBuilder.cxx:71
Muon::MuonStationTypeBuilder::process_MM
std::unique_ptr< Trk::DetachedTrackingVolume > process_MM(const Identifier &id, const GeoVPhysVol *gv, const Amg::Transform3D &transf) const
Definition: MuonStationTypeBuilder.cxx:1677
Muon::MuonStationTypeBuilder::collectStationMaterial
Trk::MaterialProperties collectStationMaterial(const Trk::TrackingVolume &trVol, double) const
Definition: MuonStationTypeBuilder.cxx:2365
MuonGM
Ensure that the Athena extensions are properly loaded.
Definition: GeoMuonHits.h:27
Muon::MuonStationTypeBuilder::processCscStation
std::unique_ptr< Trk::TrackingVolume > processCscStation(const GeoVPhysVol *cv, const std::string &name, Cache &) const
Definition: MuonStationTypeBuilder.cxx:1388
Muon::MuonStationTypeBuilder::processCSCDiamondComponent
std::unique_ptr< Trk::LayerArray > processCSCDiamondComponent(const GeoVPhysVol *, const Trk::DoubleTrapezoidVolumeBounds &, const Amg::Transform3D &, Cache &) const
Definition: MuonStationTypeBuilder.cxx:1908
Muon::MuonStationTypeBuilder::processMdtTrd
std::unique_ptr< Trk::TrackingVolume > processMdtTrd(const Trk::Volume &trkVol, const GeoVPhysVol *, const Amg::Transform3D &, Cache &) const
Definition: MuonStationTypeBuilder.cxx:867
Muon::MuonStationTypeBuilder::processCSCTrdComponent
std::unique_ptr< Trk::LayerArray > processCSCTrdComponent(const GeoVPhysVol *, const Trk::TrapezoidVolumeBounds &, const Amg::Transform3D &, Cache &) const
Definition: MuonStationTypeBuilder.cxx:1790
Muon::MuonStationTypeBuilder::Cache::m_rpc46
std::unique_ptr< Trk::MaterialProperties > m_rpc46
Definition: MuonStationTypeBuilder.h:58
Muon::MuonStationTypeBuilder::envelopeThickness
double envelopeThickness(const Trk::VolumeBounds &vb) const
Definition: MuonStationTypeBuilder.cxx:2484
Trk::CuboidVolumeBounds
Definition: CuboidVolumeBounds.h:52
Muon::MuonStationTypeBuilder::Cache::m_mdtFoamMat
std::vector< std::unique_ptr< Trk::MaterialProperties > > m_mdtFoamMat
Definition: MuonStationTypeBuilder.h:57
Trk::SurfaceBounds
Definition: SurfaceBounds.h:47
Muon::MuonStationTypeBuilder::initialize
StatusCode initialize()
AlgTool initailize method.
Definition: MuonStationTypeBuilder.cxx:88
Muon::MuonStationTypeBuilder::get_x_size
double get_x_size(const GeoVPhysVol *) const
Definition: MuonStationTypeBuilder.cxx:1741
Muon::MuonStationTypeBuilder::Cache::m_rpcExtPanel
std::unique_ptr< Trk::MaterialProperties > m_rpcExtPanel
Definition: MuonStationTypeBuilder.h:60
Muon::MuonStationTypeBuilder::Cache::m_rpcLayer
std::unique_ptr< Trk::MaterialProperties > m_rpcLayer
Definition: MuonStationTypeBuilder.h:56
Muon::MuonStationTypeBuilder::m_volumeConverter
Trk::VolumeConverter m_volumeConverter
Definition: MuonStationTypeBuilder.h:175
Muon::MuonStationTypeBuilder::m_geoShapeConverter
Trk::GeoShapeConverter m_geoShapeConverter
Definition: MuonStationTypeBuilder.h:174
Muon::MuonStationTypeBuilder::processMdtBox
std::unique_ptr< Trk::TrackingVolume > processMdtBox(const Trk::Volume &trkVol, const GeoVPhysVol *, const Amg::Transform3D &, double, Cache &) const
components
Definition: MuonStationTypeBuilder.cxx:714
Muon::MuonStationTypeBuilder::getLayerBoundsFromEnvelope
std::unique_ptr< Trk::SurfaceBounds > getLayerBoundsFromEnvelope(const Trk::Volume &envelope) const
Definition: MuonStationTypeBuilder.cxx:2506
ITrackingVolumeArrayCreator.h
Trk::VolumeConverter
Definition: VolumeConverter.h:60
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Muon::MuonStationTypeBuilder::m_muonMaterial
std::unique_ptr< const Trk::Material > m_muonMaterial
the material
Definition: MuonStationTypeBuilder.h:172
python.RingerConstants.Layer
Layer
Definition: RingerConstants.py:42
Muon::MuonStationTypeBuilder::processTGCComponent
std::unique_ptr< Trk::LayerArray > processTGCComponent(const GeoVPhysVol *, const Trk::TrapezoidVolumeBounds &, const Amg::Transform3D &, Cache &) const
Definition: MuonStationTypeBuilder.cxx:2028
Muon::MuonStationTypeBuilder::decodeX
double decodeX(const GeoShape *) const
Definition: MuonStationTypeBuilder.cxx:2136
GeoPrimitives.h
Trk::VolumeBounds
Definition: VolumeBounds.h:45
Muon::MuonStationTypeBuilder::processTrdStationComponents
std::unique_ptr< Trk::TrackingVolumeArray > processTrdStationComponents(const GeoVPhysVol *cv, const Trk::TrapezoidVolumeBounds &envBounds, Cache &) const
Definition: MuonStationTypeBuilder.cxx:462
Muon::MuonStationTypeBuilder::Cache::m_matCSC02
std::unique_ptr< Trk::MaterialProperties > m_matCSC02
Definition: MuonStationTypeBuilder.h:64
Muon::MuonStationTypeBuilder::MuonStationTypeBuilder
MuonStationTypeBuilder(const std::string &, const std::string &, const IInterface *)
Constructor.
Definition: MuonStationTypeBuilder.cxx:79
Muon::MuonStationTypeBuilder::Cache
Definition: MuonStationTypeBuilder.h:54
Trk::GeoShapeConverter
Definition: GeoShapeConverter.h:42
Muon::MuonStationTypeBuilder::processTgcStation
std::unique_ptr< Trk::TrackingVolume > processTgcStation(const GeoVPhysVol *cv, Cache &) const
Definition: MuonStationTypeBuilder.cxx:1573
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Muon::MuonStationTypeBuilder::Cache::m_matTGC06
std::unique_ptr< Trk::MaterialProperties > m_matTGC06
Definition: MuonStationTypeBuilder.h:67
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
AthAlgTool.h
Muon::MuonStationTypeBuilder::area
double area(const Trk::SurfaceBounds &sb) const
Definition: MuonStationTypeBuilder.cxx:2527
Muon::MuonStationTypeBuilder::Cache::m_matCSCspacer1
std::unique_ptr< Trk::MaterialProperties > m_matCSCspacer1
Definition: MuonStationTypeBuilder.h:63
Muon::MuonStationTypeBuilder::m_trackingVolumeArrayCreator
ToolHandle< Trk::ITrackingVolumeArrayCreator > m_trackingVolumeArrayCreator
Definition: MuonStationTypeBuilder.h:169
SharedObject.h
Muon::MuonStationTypeBuilder::processRpc
std::unique_ptr< Trk::TrackingVolume > processRpc(const Trk::Volume &inVol, const std::vector< const GeoVPhysVol * > &childVols, const std::vector< Amg::Transform3D > &childVolsTrf, Cache &) const
Definition: MuonStationTypeBuilder.cxx:1001
Muon::MuonStationTypeBuilder::createLayerRepresentation
std::pair< std::unique_ptr< Trk::Layer >, std::vector< std::unique_ptr< Trk::Layer > > > createLayerRepresentation(Trk::TrackingVolume &trVol) const
Definition: MuonStationTypeBuilder.cxx:2193
Muon::MuonStationTypeBuilder::Cache::m_matTGC01
std::unique_ptr< Trk::MaterialProperties > m_matTGC01
Definition: MuonStationTypeBuilder.h:66
CaloCondBlobAlgs_fillNoiseFromASCII.comment
string comment
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:27
Muon::MuonStationTypeBuilder::process_sTGC
std::unique_ptr< Trk::DetachedTrackingVolume > process_sTGC(const Identifier &id, const GeoVPhysVol *gv, const Amg::Transform3D &transf) const
Definition: MuonStationTypeBuilder.cxx:1608
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
keylayer_zslicemap.sb
sb
Definition: keylayer_zslicemap.py:192
Muon::MuonStationTypeBuilder::Cache::m_matCSCspacer2
std::unique_ptr< Trk::MaterialProperties > m_matCSCspacer2
Definition: MuonStationTypeBuilder.h:65
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Muon::MuonStationTypeBuilder::~MuonStationTypeBuilder
virtual ~MuonStationTypeBuilder()=default
Destructor.
Muon::MuonStationTypeBuilder::Cache::m_matCSC01
std::unique_ptr< Trk::MaterialProperties > m_matCSC01
Definition: MuonStationTypeBuilder.h:62
Trk::TrapezoidVolumeBounds
Definition: TrapezoidVolumeBounds.h:57
Muon::MuonStationTypeBuilder::Cache::m_rpcMidPanel
std::unique_ptr< Trk::MaterialProperties > m_rpcMidPanel
Definition: MuonStationTypeBuilder.h:61
Muon::MuonStationTypeBuilder::m_materialConverter
Trk::GeoMaterialConverter m_materialConverter
Definition: MuonStationTypeBuilder.h:173
Muon::MuonStationTypeBuilder::finalize
StatusCode finalize()
AlgTool finalize method.
Definition: MuonStationTypeBuilder.cxx:709
Muon::MuonStationTypeBuilder::getAveragedLayerMaterial
Trk::MaterialProperties getAveragedLayerMaterial(const GeoVPhysVol *, double, double) const
Definition: MuonStationTypeBuilder.cxx:1759
Muon::MuonStationTypeBuilder::processBoxComponentsArbitrary
std::vector< std::unique_ptr< Trk::Layer > > processBoxComponentsArbitrary(const GeoVPhysVol *mv, const Trk::CuboidVolumeBounds &envBounds, Cache &cache) const
Definition: MuonStationTypeBuilder.cxx:107
Trk::MaterialProperties
Definition: MaterialProperties.h:40
TrackingVolume.h
Muon::MuonStationTypeBuilder::identifyNSW
Identifier identifyNSW(const std::string &, const Amg::Transform3D &) const
Definition: MuonStationTypeBuilder.cxx:2319
Muon::MuonStationTypeBuilder
Definition: MuonStationTypeBuilder.h:52
Muon::MuonStationTypeBuilder::printVolumeBounds
void printVolumeBounds(std::string comment, const Trk::VolumeBounds &vb) const
Definition: MuonStationTypeBuilder.cxx:2443
Trk::GeoMaterialConverter
Definition: GeoMaterialConverter.h:30
Muon::MuonStationTypeBuilder::m_resolveSpacer
Gaudi::Property< bool > m_resolveSpacer
Definition: MuonStationTypeBuilder.h:164
Muon::MuonStationTypeBuilder::Cache::m_rpcDed
std::vector< std::unique_ptr< Trk::MaterialProperties > > m_rpcDed
Definition: MuonStationTypeBuilder.h:59
Trk::DoubleTrapezoidVolumeBounds
Definition: DoubleTrapezoidVolumeBounds.h:66
GeoShapeConverter.h
VolumeConverter.h
Muon::MuonStationTypeBuilder::m_multilayerRepresentation
Gaudi::Property< bool > m_multilayerRepresentation
Definition: MuonStationTypeBuilder.h:163
Muon::MuonStationTypeBuilder::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonStationTypeBuilder.h:166
Muon::MuonStationTypeBuilder::Cache::m_mdtTubeMat
std::unique_ptr< Trk::MaterialProperties > m_mdtTubeMat
Definition: MuonStationTypeBuilder.h:55
AthAlgTool
Definition: AthAlgTool.h:26
Trk::Volume
Definition: Volume.h:35
Trk::TrackingVolume
Definition: TrackingVolume.h:121
Material
@ Material
Definition: MaterialTypes.h:8
Muon::MuonStationTypeBuilder::processSpacer
std::unique_ptr< Trk::TrackingVolume > processSpacer(const Trk::Volume &, std::vector< const GeoVPhysVol * >, std::vector< Amg::Transform3D >) const
Definition: MuonStationTypeBuilder.cxx:1186
IMuonIdHelperSvc.h
ServiceHandle< Muon::IMuonIdHelperSvc >
Muon::MuonStationTypeBuilder::processBoxStationComponents
std::unique_ptr< Trk::TrackingVolumeArray > processBoxStationComponents(const GeoVPhysVol *cv, const Trk::CuboidVolumeBounds &envBounds, Cache &) const
steering routine
Definition: MuonStationTypeBuilder.cxx:134