54 {
55 ldmx_log(trace) << "Building layout for the " << pvol->GetName()
56 << " tracker";
57 getAllDaughters(pvol);
58
59
60 Acts::Transform3 tracker_transform = getTransform(*pvol);
61
62 G4LogicalVolume* l_vol = pvol->GetLogicalVolume();
63 for (G4int i = 0; i < l_vol->GetNoDaughters(); i++) {
64 std::string sln = l_vol->GetDaughter(i)->GetName();
65 if (sln.find(surfacename) != std::string::npos) {
66 G4VPhysicalVolume* component0_volume{nullptr};
67 G4VPhysicalVolume* active_sensor{nullptr};
68 Acts::Transform3 ref1_transform = getTransform(*(l_vol->GetDaughter(i)));
69 int sensor_copy_nr = -999;
70
71
72
73 if (sln.find("axial") != std::string::npos ||
74 sln.find("stereo") != std::string::npos) {
75 component0_volume =
76 findDaughterByName(l_vol->GetDaughter(i),
77 "LDMXRecoilL14ModuleVolume_component0_physvol");
78 if (!component0_volume)
79 EXCEPTION_RAISE("BadGeometry",
80 "Could not find component0 volume for L14 Recoil");
81 active_sensor = findDaughterByName(
82 component0_volume,
83 "LDMXRecoilL14ModuleVolume_component0Sensor0_physvol");
84
85 }
86
87
88
89 else if (sln.find("l5_sensor") != std::string::npos ||
90 sln.find("l6_sensor") != std::string::npos) {
91 component0_volume =
92 findDaughterByName(l_vol->GetDaughter(i),
93 "LDMXRecoilL56ModuleVolume_component0_physvol");
94 if (!component0_volume)
95 EXCEPTION_RAISE("BadGeometry",
96 "Could not find component0 volume for L56 Recoil");
97 active_sensor = findDaughterByName(
98 component0_volume,
99 "LDMXRecoilL56ModuleVolume_component0Sensor0_physvol");
100 }
101
102
103
104 else if (sln.find("sensor_vol")) {
105 active_sensor =
106 findDaughterByName(l_vol->GetDaughter(i), "active_sensor");
107 sensor_copy_nr = l_vol->GetDaughter(i)->GetCopyNo();
108 }
109
110 else
111 EXCEPTION_RAISE("BadGeometry", "Could not build recoil layout");
112
113 if (!active_sensor)
114 EXCEPTION_RAISE("BadGeometry",
115 "Could not find ActiveSensor for recoil volume");
116
117 Acts::Transform3 ref2_transform = Acts::Transform3::Identity();
118
119 if (component0_volume)
120 ref2_transform = getTransform(*(component0_volume));
121
122 std::shared_ptr<Acts::PlaneSurface> sensor_surface = getSurfacePtr(
123 active_sensor, tracker_transform * ref1_transform * ref2_transform);
124
125
126 if (sln == "recoil_l1_axial" || sln == "recoil_l1_stereo" ||
127 sensor_copy_nr == 10 || sensor_copy_nr == 20)
128 recoil_layout_["recoil_tracker_L1"].push_back(sensor_surface);
129
130 if (sln == "recoil_l2_axial" || sln == "recoil_l2_stereo" ||
131 sensor_copy_nr == 30 || sensor_copy_nr == 40)
132 recoil_layout_["recoil_tracker_L2"].push_back(sensor_surface);
133
134 if (sln == "recoil_l3_axial" || sln == "recoil_l3_stereo" ||
135 sensor_copy_nr == 50 || sensor_copy_nr == 60)
136 recoil_layout_["recoil_tracker_L3"].push_back(sensor_surface);
137
138 if (sln == "recoil_l4_axial" || sln == "recoil_l4_stereo" ||
139 sensor_copy_nr == 70 || sensor_copy_nr == 80)
140 recoil_layout_["recoil_tracker_L4"].push_back(sensor_surface);
141
142 if (sln == "recoil_l5_sensor1" || sln == "recoil_l5_sensor2" ||
143 sln == "recoil_l5_sensor3" || sln == "recoil_l5_sensor4" ||
144 sln == "recoil_l5_sensor5" || sln == "recoil_l5_sensor6" ||
145 sln == "recoil_l5_sensor7" || sln == "recoil_l5_sensor8" ||
146 sln == "recoil_l5_sensor9" || sln == "recoil_l5_sensor10" ||
147 (sensor_copy_nr >= 90 && sensor_copy_nr <= 99))
148
149 recoil_layout_["recoil_tracker_L5"].push_back(sensor_surface);
150
151 if (sln == "recoil_l6_sensor1" || sln == "recoil_l6_sensor2" ||
152 sln == "recoil_l6_sensor3" || sln == "recoil_l6_sensor4" ||
153 sln == "recoil_l6_sensor5" || sln == "recoil_l6_sensor6" ||
154 sln == "recoil_l6_sensor7" || sln == "recoil_l6_sensor8" ||
155 sln == "recoil_l6_sensor9" || sln == "recoil_l6_sensor10" ||
156 (sensor_copy_nr >= 100 && sensor_copy_nr <= 109))
157 recoil_layout_["recoil_tracker_L6"].push_back(sensor_surface);
158
159 }
160 }
161}