LDMX Software
TrackersTrackingGeometry.h
1#ifndef TRACKING_RECO_TRACKERSTRACKINGGEOMETRY_H_
2#define TRACKING_RECO_TRACKERSTRACKINGGEOMETRY_H_
3
4// Acts
5
6// geometry
7#include <Acts/Geometry/TrackingGeometry.hpp>
8
9#include "Acts/Geometry/CuboidVolumeBuilder.hpp"
10#include "Acts/Geometry/GeometryContext.hpp"
11#include "Acts/Geometry/TrackingGeometryBuilder.hpp"
12#include "Acts/Geometry/TrackingVolume.hpp"
13#include "Acts/Surfaces/RectangleBounds.hpp"
14
15// Material
16#include "Acts/Material/HomogeneousSurfaceMaterial.hpp"
17#include "Acts/Material/Material.hpp"
18#include "Acts/Material/MaterialSlab.hpp"
19
21#include <Acts/Visualization/GeometryView3D.hpp>
22#include <Acts/Visualization/ObjVisualization3D.hpp>
23#include <Acts/Visualization/ViewConfig.hpp>
24
25// G4
26#include <G4GDMLParser.hh>
27#include <G4LogicalVolume.hh>
28#include <G4Material.hh>
29#include <G4Polyhedra.hh>
30#include <G4Types.hh>
31#include <G4VPhysicalVolume.hh>
32
33// Tracking
34#include <boost/filesystem.hpp>
35#include <string>
36
37#include "Tracking/geo/TrackingGeometry.h"
38
39namespace tracking::geo {
40
44class TrackersTrackingGeometryProvider;
45
47 public:
48 static const std::string NAME;
49 void BuildTaggerLayoutMap(G4VPhysicalVolume* pvol, std::string surfacename);
50
51 void BuildRecoilLayoutMap(G4VPhysicalVolume* pvol, std::string surfacename);
52
53 // Provided a physical volume, extract a silicon rectangular plane surface
54 std::shared_ptr<Acts::PlaneSurface> GetSurface(G4VPhysicalVolume* pvol,
55 Acts::Transform3 ref_trans);
56
57 Acts::CuboidVolumeBuilder::VolumeConfig buildTrackerVolume();
58 Acts::CuboidVolumeBuilder::VolumeConfig buildRecoilVolume();
59
60 // TODO Implement these
61 Acts::CuboidVolumeBuilder::VolumeConfig buildTSVolume() { return {}; }
62 Acts::CuboidVolumeBuilder::VolumeConfig buildTargetVolume() { return {}; }
63
64 private:
66 TrackersTrackingGeometry(const Acts::GeometryContext& gctx,
67 const std::string& gdml, bool debug);
68
69 G4VPhysicalVolume* Tagger_;
70 G4VPhysicalVolume* Recoil_;
71
72 // I store the layout as a map to distinguish layers/sides
73 // They are not too many modules, so it should be ok to use this data
74 // structure
75
76 // Tracker mapping.
77 // Each key represent the layer index and each entry is the vector of surfaces
78 // that one wants to add to the same layer In this way we can pass multiple
79 // surfaces to the same layer to the builder.
80 std::map<std::string, std::vector<std::shared_ptr<const Acts::Surface>>>
81 tagger_layout;
82 std::map<std::string, std::vector<std::shared_ptr<const Acts::Surface>>>
83 recoil_layout;
84
85 float TrackerYLength_{480.};
86 float TrackerZLength_{240.};
87};
88
89} // namespace tracking::geo
90
91#endif
This class is a abstract base class (ABC) doing common tasks that tracking geometries need done.
Visualization.