Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MuonDetectorBuilderTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
5 
13 #include "GeoModelHelpers/TransformToStringConverter.h"
14 
15 #include "Acts/ActsVersion.hpp"
16 #include "Acts/Geometry/CutoutCylinderVolumeBounds.hpp"
17 #include "Acts/Geometry/CylinderVolumeBounds.hpp"
18 #include "Acts/Geometry/TrapezoidVolumeBounds.hpp"
19 #include "Acts/Visualization/GeometryView3D.hpp"
20 #include "Acts/Detector/DetectorVolume.hpp"
21 #include "Acts/Detector/PortalGenerators.hpp"
22 #include "Acts/Material/HomogeneousVolumeMaterial.hpp"
23 #include "Acts/Material/HomogeneousSurfaceMaterial.hpp"
24 #include "Acts/Material/MaterialSlab.hpp"
25 #include "Acts/Navigation/DetectorVolumeFinders.hpp"
26 #include "Acts/Navigation/InternalNavigation.hpp"
27 #include "Acts/Navigation/NavigationDelegates.hpp"
28 #include "Acts/Navigation/NavigationState.hpp"
29 #include "Acts/Visualization/ObjVisualization3D.hpp"
30 #include "Acts/Detector/MultiWireStructureBuilder.hpp"
31 #include "Acts/Geometry/GeometryIdentifier.hpp"
32 #include "Acts/Plugins/GeoModel/GeoModelMaterialConverter.hpp"
33 #include "Acts/Plugins/GeoModel/GeoModelToDetectorVolume.hpp"
34 #include "Acts/Surfaces/TrapezoidBounds.hpp"
35 #include "Acts/Surfaces/RectangleBounds.hpp"
36 #include "Acts/Surfaces/ConvexPolygonBounds.hpp"
37 #include "Acts/Surfaces/PlaneSurface.hpp"
38 
39 #include <GeoModelKernel/GeoSimplePolygonBrep.h>
40 #include <GeoModelKernel/GeoShapeSubtraction.h>
41 #include <GeoModelKernel/GeoBox.h>
42 #include <GeoModelKernel/GeoTrd.h>
43 #include "GeoModelHelpers/getChildNodesWithTrf.h"
45 #include <Acts/Utilities/AxisDefinitions.hpp>
46 #include <set>
47 #include <climits>
48 #include <format>
49 #include <GeoModelHelpers/StringUtils.h>
50 
51 
52 
55 namespace ActsTrk {
56 
57  inline std::string objFileName(std::string str) {
58  str = GeoStrUtils::replaceExpInString(str, " ", "_");
59  str = GeoStrUtils::replaceExpInString(str, "-", "M");
60  return std::format("{:}.obj", str);
61  }
62 
63  using volumePtr= std::shared_ptr<DetectorVolume>;
64  using surfacePtr = std::shared_ptr<Acts::Surface>;
66 
67  MuonDetectorBuilderTool::MuonDetectorBuilderTool( const std::string& type, const std::string& name, const IInterface* parent ):
68  base_class(type, name, parent){}
69 
72  ATH_CHECK(m_idHelperSvc.retrieve());
73  ATH_MSG_DEBUG("ACTS version is: v"<< Acts::VersionMajor << "." << Acts::VersionMinor << "." << Acts::VersionPatch << " [" << Acts::CommitHash << "]");
74 
75  return StatusCode::SUCCESS;
76  }
77 
78  Acts::Experimental::DetectorComponent MuonDetectorBuilderTool::construct(const Acts::GeometryContext& context) const{
79  ATH_MSG_DEBUG("Building Muon Detector Volume");
80  const MuonChamberSet chambers = m_detMgr->getAllChambers();
81  const ActsGeometryContext* gctx = context.get<const ActsGeometryContext* >();
82  std::vector< volumePtr > detectorVolumeBoundingVolumes{};
83  std::vector< volumePtr > detectorVolumePassiveVolumes{};
84 
85  detectorVolumeBoundingVolumes.reserve(chambers.size());
86  std::vector<surfacePtr> surfaces{};
87  std::vector<surfacePtr> materialSurfaces{};
88 
89  auto portalGenerator = Acts::Experimental::defaultPortalAndSubPortalGenerator();
90  unsigned int numChambers = chambers.size();
91 
92  BlendedBoundSet materialBounds{};
93  for(const MuonGMR4::Chamber* chamber : chambers){
94  unsigned int num = 0;
95  //Gather the passives in each chamber
96  surfacePtr material{getChamberMaterial(*chamber, chamber->localToGlobalTrans(*gctx), materialSurfaces.size(), materialBounds)};
97  std::shared_ptr<Acts::TrapezoidVolumeBounds> bounds = chamber->bounds();
98  materialSurfaces.push_back(material);
99  std::pair<std::vector<volumePtr>, std::vector<surfacePtr>> readoutElements =
100  constructElements(*gctx, *chamber, std::make_pair(numChambers,num));
101  readoutElements.second.push_back(material);
102  volumePtr detectorVolume = Acts::Experimental::DetectorVolumeFactory::construct(portalGenerator,
103  gctx->context(),
104  chamber->identString(),
105  chamber->localToGlobalTrans(*gctx),
106  bounds, readoutElements.second,
107  readoutElements.first,
108  Acts::Experimental::tryAllSubVolumes(),
109  Acts::Experimental::tryAllPortalsAndSurfaces());
110 
111  detectorVolume->assignGeometryId(Acts::GeometryIdentifier{}.withLayer(numChambers--));
113  //If we want to view each volume independently
114  Acts::ObjVisualization3D helper;
115  Acts::GeometryView3D::drawDetectorVolume(helper, *detectorVolume, gctx->context());
116  helper.write(objFileName(chamber->identString()));
117  helper.clear();
118  }
119  detectorVolumeBoundingVolumes.push_back(std::move(detectorVolume));
120  readoutElements.first.clear();
121  readoutElements.second.clear();
122  }
123 
125  Acts::ObjVisualization3D helper;
126  for (const auto& surf : materialSurfaces){
127  Acts::GeometryView3D::drawSurface(helper, *surf, gctx->context());
128  }
129  helper.write("materialSurfaces.obj");
130  helper.clear();
131  }
132 
133  ATH_MSG_VERBOSE("Number of detector volumes: "<< detectorVolumeBoundingVolumes.size());
134  ATH_MSG_VERBOSE("Number of chamber passives volumes: "<< detectorVolumePassiveVolumes.size());
135  std::vector<GeoChildNodeWithTrf> childNodes = getChildrenWithRef(m_detMgr->getTreeTop(0), false);
136  std::set<std::string> skipNodes{"MuonBarrel", "NSW", "MuonEndcap_sideA", "MuonEndcap_sideC","TGCSystem"};
137  for (const GeoChildNodeWithTrf& node : childNodes){
138  //These are taken care of in the chambers
139  if(skipNodes.count(node.nodeName)) {
140  ATH_MSG_VERBOSE("Skipping volume "<<node.nodeName);
141  continue;
142  }
143  ATH_MSG_VERBOSE("Processing passive node "<<node.nodeName);
144  // processPassiveNodes(*gctx, node, node.nodeName, detectorVolumePassiveVolumes, node.transform);
145  }
146  ATH_MSG_VERBOSE("Number of total passive volumes: "<< detectorVolumePassiveVolumes.size());
147 
148  if (m_dumpPassive){
149  ATH_MSG_VERBOSE("Writing passiveVolumes.obj");
150  Acts::ObjVisualization3D helper;
151  for (const auto& vol : detectorVolumePassiveVolumes){
152  Acts::GeometryView3D::drawDetectorVolume(helper, *vol, gctx->context());
153  }
154  helper.write(objFileName("passiveVolumes"));
155  helper.clear();
156  }
157 
158  //Add the passive volumes to the end of detectorVolumeBoundingVolumes
159  detectorVolumeBoundingVolumes.insert(detectorVolumeBoundingVolumes.end(), detectorVolumePassiveVolumes.begin(), detectorVolumePassiveVolumes.end());
160 
161  std::unique_ptr<Acts::CutoutCylinderVolumeBounds> msBounds = std::make_unique<Acts::CutoutCylinderVolumeBounds>(0, 4000, 14500, 22500, 3200);
162  volumePtr msDetectorVolume = Acts::Experimental::DetectorVolumeFactory::construct(
163  portalGenerator, gctx->context(), "Muon Spectrometer Envelope",
164  Acts::Transform3::Identity(), std::move(msBounds), surfaces,
165  detectorVolumeBoundingVolumes, Acts::Experimental::tryAllSubVolumes(),
166  Acts::Experimental::tryAllPortalsAndSurfaces());
167  msDetectorVolume->assignGeometryId(Acts::GeometryIdentifier{}.withVolume(15));
168 
169  if (m_dumpDetector) {
170  ATH_MSG_VERBOSE("Writing detector.obj");
171  Acts::ObjVisualization3D helper;
172  Acts::GeometryView3D::drawDetectorVolume(helper, *msDetectorVolume, gctx->context());
173  helper.write(objFileName("detector"));
174  helper.clear();
175  }
176 
177  Acts::Experimental::DetectorComponent::PortalContainer portalContainer;
178  for (auto [ip, p] : Acts::enumerate(msDetectorVolume->portalPtrs())) {
179  portalContainer[ip] = p;
180  }
181  detectorVolumeBoundingVolumes.push_back(msDetectorVolume);
182  return Acts::Experimental::DetectorComponent{
183  {detectorVolumeBoundingVolumes},
184  portalContainer,
185  {{msDetectorVolume}, Acts::Experimental::tryAllSubVolumes()}};
186  }
187 
188 std::pair<std::vector<volumePtr>,std::vector<surfacePtr>>
190  const MuonGMR4::Chamber& mChamber,
191  std::pair<unsigned int, unsigned int> chId) const{
192 
193  std::vector<volumePtr> readoutDetectorVolumes{};
194  std::vector<surfacePtr> readoutSurfaces{};
195  if(!m_buildSensitives) return std::make_pair(readoutDetectorVolumes, readoutSurfaces);
196  Acts::GeometryIdentifier::Value surfId{1};
197  Acts::GeometryIdentifier::Value mdtId{1};
198 
199  const MuonGMR4::Chamber::ReadoutSet& readoutElements = mChamber.readoutEles();
200 
201  for(const MuonGMR4::MuonReadoutElement* ele : readoutElements){
202  switch (ele->detectorType()) {
203  case DetectorType::Mdt: {
204  ATH_MSG_VERBOSE("Building MultiLayer for MDT Detector Volume");
205  const auto* mdtReadoutEle = static_cast<const MuonGMR4::MdtReadoutElement*>(ele);
206  const MuonGMR4::MdtReadoutElement::parameterBook& parameters{mdtReadoutEle->getParameters()};
207  std::vector<surfacePtr> surfaces{};
208  //loop over the tubes to get the surfaces
209  for(unsigned int lay=1; lay<=mdtReadoutEle->numLayers(); ++lay){
210  for(unsigned int tube=1; tube<=mdtReadoutEle->numTubesInLay(); ++tube){
211  const IdentifierHash measHash{mdtReadoutEle->measurementHash(lay,tube)};
212  if (!mdtReadoutEle->isValid(measHash)) continue;
213  surfacePtr surface = mdtReadoutEle->surfacePtr(measHash);
214  surface->assignGeometryId(Acts::GeometryIdentifier{}.withLayer(chId.first).withVolume(chId.second).withBoundary(mdtId).withSensitive(++surfId));
215  surfaces.push_back(surface);
216  }
217  }
218 
219  //Get the transformation to the chamber's frame
220  const Amg::Vector3D toChamber = mChamber.globalToLocalTrans(gctx)*mdtReadoutEle->center(gctx);
221  const Acts::Transform3 mdtTransform = mChamber.localToGlobalTrans(gctx) * Amg::getTranslate3D(toChamber);
222 
223  Acts::Experimental::MultiWireStructureBuilder::Config mlCfg{};
224  mlCfg.name = m_idHelperSvc->toStringDetEl(mdtReadoutEle->identify());
225  mlCfg.mlSurfaces = std::move(surfaces);
226  mlCfg.transform = mdtTransform;
227  auto mdtBounds = std::make_unique<Acts::TrapezoidVolumeBounds>(parameters.shortHalfX, parameters.longHalfX, parameters.halfY, parameters.halfHeight);
228  using BoundsV = Acts::TrapezoidVolumeBounds::BoundValues;
229  mlCfg.mlBounds= mdtBounds->values();
230 
231  mlCfg.mlBinning = {{{Acts::AxisDirection::AxisY, Acts::AxisBoundaryType::Bound,
232  -mdtBounds->get(BoundsV::eHalfLengthY),
233  mdtBounds->get(BoundsV::eHalfLengthY),
234  static_cast<std::size_t>(std::lround(2*mdtBounds->get(BoundsV::eHalfLengthY)/parameters.tubePitch))}, 2u},
235  {{Acts::AxisDirection::AxisZ, Acts::AxisBoundaryType::Bound,
236  -mdtBounds->get(BoundsV::eHalfLengthZ),
237  mdtBounds->get(BoundsV::eHalfLengthZ),
238  static_cast<std::size_t>(std::lround(2*mdtBounds->get(BoundsV::eHalfLengthZ)/parameters.tubePitch))}, 1u}};
239 
240  Acts::Experimental::MultiWireStructureBuilder mdtBuilder(mlCfg);
241  volumePtr mdtVolume = mdtBuilder.construct(gctx.context()).volumes[0];
242  mdtVolume->assignGeometryId(Acts::GeometryIdentifier{}.withLayer(chId.first).withVolume(chId.second).withBoundary(mdtId++));
243  readoutDetectorVolumes.push_back(mdtVolume);
244  break;
245  } case DetectorType::Rpc:
246  case DetectorType::Tgc:
247  case DetectorType::sTgc:
248  case DetectorType::Mm: {
249  ATH_MSG_VERBOSE("Building plane surfaces "<<m_idHelperSvc->toStringDetEl(ele->identify()));
250  std::vector<surfacePtr> detSurfaces = ele->getSurfaces();
251  for (surfacePtr& surf : detSurfaces) {
252  surf->assignGeometryId(Acts::GeometryIdentifier{}.withLayer(chId.first).withVolume(chId.second).withSensitive(++surfId));
253  readoutSurfaces.push_back(std::move(surf));
254  }
255  break;
256  } default:
257  THROW_EXCEPTION("Unknown detector type "<<ActsTrk::to_string(ele->detectorType()));
258  }
259  }
260 
261  return std::make_pair(std::move(readoutDetectorVolumes), std::move(readoutSurfaces));
262 
263  }
264 
266  const Amg::Transform3D& chamberTransform,
267  const int totalMaterials,
268  BlendedBoundSet& boundSet) const {
269  std::shared_ptr<const Acts::PlanarBounds> bounds = boundSet.make_bounds(chamber.halfXShort(), chamber.halfXLong(), chamber.halfY());
270  const float thickness = chamber.halfZ() * 2;
271  PVConstLink parentVolume = chamber.readoutEles().front()->getMaterialGeom()->getParent();
272  std::pair<MaterialPtr, double> geoMaterials = getMaterial(parentVolume);
273  const Acts::Material aMat = Acts::GeoModel::geoMaterialConverter(*geoMaterials.first);
274  //rotate about the z axis
275  std::shared_ptr<Acts::PlaneSurface> surface = Acts::Surface::makeShared<Acts::PlaneSurface>(chamberTransform, bounds);
276  Acts::MaterialSlab slab{aMat, thickness};
277  std::shared_ptr<Acts::HomogeneousSurfaceMaterial> material = std::make_shared<Acts::HomogeneousSurfaceMaterial>(slab);
278  surface->assignSurfaceMaterial(material);
279  surface->assignGeometryId(Acts::GeometryIdentifier{}.withVolume(29).withSensitive(totalMaterials));
280  return surface;
281  }
282 
283  std::pair<MuonDetectorBuilderTool::MaterialPtr, double>
284  MuonDetectorBuilderTool::getMaterial(const PVConstLink& vol) const {
285  std::vector<std::pair<MaterialPtr, double>> materialContent{};
286  getMaterialContent(vol, materialContent);
287 
288  //blend the material
289  double totalVolume{0.};
290  double totalMass{0.};
291  for(const auto& [material, volume] : materialContent){
292  totalVolume += volume;
293  totalMass += volume * material->getDensity();
294  }
295 
296  //create the new GeoMaterial object
297  auto blendedMaterial = make_intrusive<GeoMaterial>("BlendedMaterial", totalMass/totalVolume);
298  for(const auto& [material, volume] : materialContent){
299  blendedMaterial->add(material, material->getDensity() * volume / totalMass);
300  }
301  blendedMaterial->lock();
302  return {blendedMaterial, totalVolume};
303  }
304 
305  void MuonDetectorBuilderTool::getMaterialContent(const PVConstLink& vol, std::vector<std::pair<MaterialPtr, double>>& materialContent) const {
306  double volume{0.};
307  if(!checkDummyMaterial(vol)) volume = vol->getLogVol()->getShape()->volume();
308  for(std::size_t c=0; c < vol->getNChildVols(); ++c){
309  const PVConstLink child = vol->getChildVol(c);
310  double childVol = child->getLogVol()->getShape()->volume();
311  //dummy material does not contribute
312  if(!checkDummyMaterial(child)) volume -= childVol;
313  getMaterialContent(child, materialContent);
314  }
315  //skip dummy materials
316  if(!checkDummyMaterial(vol)) materialContent.emplace_back(vol->getLogVol()->getMaterial(), volume);
317  }
318 
319  bool MuonDetectorBuilderTool::checkDummyMaterial(const PVConstLink& vol) const {
320  static const std::unordered_set<std::string> dummyMaterials{
321  "special::Ether",
322  "WorldLog::Air",
323  "std::Air",
324  "Air"
325  };
326  const std::string materialName = vol->getLogVol()->getMaterial()->getName();
327  return dummyMaterials.find(materialName) != dummyMaterials.end();
328  }
329 
331  const GeoChildNodeWithTrf& node,
332  const std::string& name,
333  std::vector<volumePtr>& passiveVolumes,
334  const GeoTrf::Transform3D& transform) const {
335  std::vector<GeoChildNodeWithTrf> children = getChildrenWithRef(node.volume, false);
336  for(const GeoChildNodeWithTrf& childNode : children){
337  ATH_MSG_DEBUG("Child transform " << GeoTrf::toString(childNode.transform) << " Parent transform " << GeoTrf::toString(transform));
338  ATH_MSG_DEBUG("Combined transform " << GeoTrf::toString(transform * childNode.transform));
339  ATH_MSG_DEBUG("Child name " << name+"/"+childNode.nodeName);
340  processPassiveNodes(gctx, childNode, name+"/"+childNode.nodeName, passiveVolumes, transform * childNode.transform);
341  }
342  if (!children.empty()) return;
343  ATH_MSG_VERBOSE("Drawing volume named "<<name);
344  const GeoShape* shape = node.volume->getLogVol()->getShape();
345  const GeoMaterial* geoMaterial = node.volume->getLogVol()->getMaterial();
346  const Acts::Material aMat = Acts::GeoModel::geoMaterialConverter(*geoMaterial);
347  std::shared_ptr<Acts::HomogeneousVolumeMaterial> material = std::make_shared<Acts::HomogeneousVolumeMaterial>(aMat);
348  ATH_MSG_DEBUG("FINAL TRANSFORM " << GeoTrf::toString(transform));
349  volumePtr volume = Acts::GeoModel::convertDetectorVolume(gctx.context(), *shape, name + "_" + std::to_string(passiveVolumes.size()), transform, {});
350  volume->assignGeometryId(Acts::GeometryIdentifier{}.withVolume(30).withSensitive(passiveVolumes.size()));
351  volume->assignVolumeMaterial(material);
352  passiveVolumes.push_back(volume);
353  }
354 
355 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ActsTrk::MuonDetectorBuilderTool::construct
Acts::Experimental::DetectorComponent construct(const Acts::GeometryContext &context) const override final
Definition: MuonDetectorBuilderTool.cxx:78
GeoModel::TransientConstSharedPtr
The TransientConstSharedPtr allows non-const access if the pointer itself is non-const but in the con...
Definition: TransientConstSharedPtr.h:13
vtune_athena.format
format
Definition: vtune_athena.py:14
calibdata.chamber
chamber
Definition: calibdata.py:32
ActsTrk::MuonDetectorBuilderTool::processPassiveNodes
void processPassiveNodes(const ActsGeometryContext &gctx, const GeoChildNodeWithTrf &node, const std::string &name, std::vector< std::shared_ptr< Acts::Experimental::DetectorVolume >> &passiveVolumes, const GeoTrf::Transform3D &transform) const
Definition: MuonDetectorBuilderTool.cxx:330
DetectorVolume
Acts::Experimental::DetectorVolume DetectorVolume
Definition: MuonDetectorBuilderTool.cxx:54
ActsTrk::MuonDetectorBuilderTool::getMaterialContent
void getMaterialContent(const PVConstLink &vol, std::vector< std::pair< MaterialPtr, double >> &materialContent) const
Definition: MuonDetectorBuilderTool.cxx:305
ActsTrk::MuonDetectorBuilderTool::getMaterial
std::pair< MaterialPtr, double > getMaterial(const PVConstLink &vol) const
Definition: MuonDetectorBuilderTool.cxx:284
ActsTrk::DetectorType::Tgc
@ Tgc
Resitive Plate Chambers.
MuonGMR4::MuonReadoutElement
The MuonReadoutElement is an abstract class representing the geometry representing the muon detector.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:38
ActsTrk::MuonDetectorBuilderTool::constructElements
std::pair< std::vector< std::shared_ptr< Acts::Experimental::DetectorVolume > >, std::vector< std::shared_ptr< Acts::Surface > > > constructElements(const ActsGeometryContext &gctx, const MuonGMR4::Chamber &mChamber, std::pair< unsigned int, unsigned int > chId) const
Definition: MuonDetectorBuilderTool.cxx:189
ActsTrk::surfacePtr
std::shared_ptr< Acts::Surface > surfacePtr
Definition: MuonDetectorBuilderTool.cxx:64
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
ActsTrk::DetectorType::sTgc
@ sTgc
Micromegas (NSW)
SpectrometerSector.h
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
runBeamSpotCalibration.helper
helper
Definition: runBeamSpotCalibration.py:112
ActsTrk::MuonDetectorBuilderTool::MuonDetectorBuilderTool
MuonDetectorBuilderTool(const std::string &type, const std::string &name, const IInterface *parent)
Standard tool constructor.
Definition: MuonDetectorBuilderTool.cxx:67
MuonDetectorBuilderTool.h
ActsGeometryContext::context
Acts::GeometryContext context() const
Definition: ActsGeometryContext.h:45
MuonGMR4::Chamber
Definition: Chamber.h:22
sTgcReadoutElement.h
ActsTrk::MuonDetectorBuilderTool::initialize
StatusCode initialize() override final
Definition: MuonDetectorBuilderTool.cxx:70
ActsTrk::MuonDetectorBuilderTool::m_dumpPassive
Gaudi::Property< bool > m_dumpPassive
Definition: MuonDetectorBuilderTool.h:51
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
ActsTrk::DetectorType::Mm
@ Mm
Maybe not needed in the migration.
MuonGMR4::MdtReadoutElement::parameterBook
Set of parameters to describe a MDT chamber.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MdtReadoutElement.h:26
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonGMR4::MuonDetectorManager::MuonChamberSet
std::set< const Chamber *, MSEnvelopeSorter > MuonChamberSet
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonDetectorManager.h:114
ActsTrk::MuonDetectorBuilderTool::m_dumpMaterialSurfaces
Gaudi::Property< bool > m_dumpMaterialSurfaces
Definition: MuonDetectorBuilderTool.h:55
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
ActsTrk::MuonDetectorBuilderTool::m_buildSensitives
Gaudi::Property< bool > m_buildSensitives
Definition: MuonDetectorBuilderTool.h:57
MuonGMR4::Chamber::ReadoutSet
std::vector< const MuonReadoutElement * > ReadoutSet
Define the list of read out elements of the chamber.
Definition: Chamber.h:25
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
ActsTrk::volumePtr
std::shared_ptr< DetectorVolume > volumePtr
Definition: MuonDetectorBuilderTool.cxx:63
MuonGMR4::Chamber::localToGlobalTrans
const Amg::Transform3D & localToGlobalTrans(const ActsGeometryContext &gctx) const
Returns the transformation chamber frame -> global transformation.
Definition: Chamber.cxx:75
test_pyathena.parent
parent
Definition: test_pyathena.py:15
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
GeometryDefs.h
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
ActsTrk::objFileName
std::string objFileName(std::string str)
Definition: MuonDetectorBuilderTool.cxx:57
MuonChamberSet
MuonGMR4::MuonDetectorManager::MuonChamberSet MuonChamberSet
Definition: MuonDetectorBuilderTool.cxx:53
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
ActsTrk::SurfaceBoundSet
Definition: Tracking/Acts/ActsGeoUtils/ActsGeoUtils/Defs.h:17
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
MuonGMR4::MuonDetectorManager::getTreeTop
PVConstLink getTreeTop(unsigned int i) const override final
Returns the i-th top node of the MuonSystem trees.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonDetectorManager.cxx:133
ActsTrk::SurfaceBoundSet::make_bounds
std::shared_ptr< BoundType > make_bounds(argList... args)
Factory method to create new SurfaceBounds.
Definition: SurfaceBoundSet.h:20
ActsTrk::DetectorType::Mdt
@ Mdt
MuonSpectrometer.
MuonGMR4::Chamber::readoutEles
const ReadoutSet & readoutEles() const
Returns the list of contained readout elements.
Definition: Chamber.cxx:72
ActsTrk::MuonDetectorBuilderTool::m_dumpDetector
Gaudi::Property< bool > m_dumpDetector
Definition: MuonDetectorBuilderTool.h:49
MuonGMR4::MdtReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MdtReadoutElement.h:22
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
THROW_EXCEPTION
#define THROW_EXCEPTION(MESSAGE)
Definition: throwExcept.h:10
RpcReadoutElement.h
ActsTrk::MuonDetectorBuilderTool::checkDummyMaterial
bool checkDummyMaterial(const PVConstLink &vol) const
Definition: MuonDetectorBuilderTool.cxx:319
ActsTrk::MuonDetectorBuilderTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonDetectorBuilderTool.h:47
ActsTrk::MuonDetectorBuilderTool::m_dumpDetectorVolumes
Gaudi::Property< bool > m_dumpDetectorVolumes
Definition: MuonDetectorBuilderTool.h:53
MdtReadoutElement.h
ActsTrk::DetectorType::Rpc
@ Rpc
Monitored Drift Tubes.
python.DecayParser.children
children
Definition: DecayParser.py:32
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
IDetectorElement.h
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
str
Definition: BTagTrackIpAccessor.cxx:11
ActsTrk::MuonDetectorBuilderTool::m_detMgr
const MuonGMR4::MuonDetectorManager * m_detMgr
Definition: MuonDetectorBuilderTool.h:46
MuonGMR4::Chamber::globalToLocalTrans
Amg::Transform3D globalToLocalTrans(const ActsGeometryContext &gctx) const
Returns the global -> local transformation.
Definition: Chamber.cxx:78
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
MuonGMR4::MuonDetectorManager::getAllChambers
MuonChamberSet getAllChambers() const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonDetectorManager.cxx:176
Material
@ Material
Definition: MaterialTypes.h:8
python.compressB64.c
def c
Definition: compressB64.py:93
TgcReadoutElement.h
calibdata.tube
tube
Definition: calibdata.py:31
ActsTrk::MuonDetectorBuilderTool::getChamberMaterial
std::shared_ptr< Acts::Surface > getChamberMaterial(const MuonGMR4::Chamber &chamber, const Amg::Transform3D &chamberTransform, const int totalMaterials, BlendedBoundSet &boundSet) const
Definition: MuonDetectorBuilderTool.cxx:265
node
Definition: node.h:21
MmReadoutElement.h
Amg::getTranslate3D
Amg::Transform3D getTranslate3D(const double X, const double Y, const double Z)
: Returns a shift transformation along an arbitrary axis
Definition: GeoPrimitivesHelpers.h:289