100 {
101 ldmx_log(trace) << "Building layout for the " << pvol->GetName()
102 << " tracker";
103 getAllDaughters(pvol);
104
105
106 Acts::Transform3 tracker_transform = getTransform(*pvol);
107
108 G4LogicalVolume* l_vol = pvol->GetLogicalVolume();
109 for (G4int i = 0; i < l_vol->GetNoDaughters(); i++) {
110 std::string sln = l_vol->GetDaughter(i)->GetName();
111 if (sln.find(surfacename) != std::string::npos) {
112 G4VPhysicalVolume* component0_volume{nullptr};
113 G4VPhysicalVolume* active_sensor{nullptr};
114 Acts::Transform3 ref1_transform = getTransform(*(l_vol->GetDaughter(i)));
115 int sensor_copy_nr = -999;
116
117
118
119 if (sln.find("axial") != std::string::npos ||
120 sln.find("stereo") != std::string::npos) {
121 component0_volume =
122 findDaughterByName(l_vol->GetDaughter(i),
123 "LDMXRecoilL14ModuleVolume_component0_physvol");
124 if (!component0_volume)
125 EXCEPTION_RAISE("BadGeometry",
126 "Could not find component0 volume for L14 Recoil");
127 active_sensor = findDaughterByName(
128 component0_volume,
129 "LDMXRecoilL14ModuleVolume_component0Sensor0_physvol");
130
131 }
132
133
134
135 else if (sln.find("l5_sensor") != std::string::npos ||
136 sln.find("l6_sensor") != std::string::npos) {
137 component0_volume =
138 findDaughterByName(l_vol->GetDaughter(i),
139 "LDMXRecoilL56ModuleVolume_component0_physvol");
140 if (!component0_volume)
141 EXCEPTION_RAISE("BadGeometry",
142 "Could not find component0 volume for L56 Recoil");
143 active_sensor = findDaughterByName(
144 component0_volume,
145 "LDMXRecoilL56ModuleVolume_component0Sensor0_physvol");
146 }
147
148
149
150 else if (sln.find("sensor_vol")) {
151 active_sensor =
152 findDaughterByName(l_vol->GetDaughter(i), "active_sensor");
153 sensor_copy_nr = l_vol->GetDaughter(i)->GetCopyNo();
154 }
155
156 else
157 EXCEPTION_RAISE("BadGeometry", "Could not build recoil layout");
158
159 if (!active_sensor)
160 EXCEPTION_RAISE("BadGeometry",
161 "Could not find ActiveSensor for recoil volume");
162
163 Acts::Transform3 ref2_transform = Acts::Transform3::Identity();
164
165 if (component0_volume)
166 ref2_transform = getTransform(*(component0_volume));
167
168 std::shared_ptr<Acts::PlaneSurface> sensor_surface = getSurfacePtr(
169 active_sensor, tracker_transform * ref1_transform * ref2_transform);
170
171
172 if (sln == "recoil_l1_axial" || sln == "recoil_l1_stereo" ||
173 sensor_copy_nr == 10 || sensor_copy_nr == 20)
174 recoil_layout_["recoil_tracker_L1"].push_back(sensor_surface);
175
176 if (sln == "recoil_l2_axial" || sln == "recoil_l2_stereo" ||
177 sensor_copy_nr == 30 || sensor_copy_nr == 40)
178 recoil_layout_["recoil_tracker_L2"].push_back(sensor_surface);
179
180 if (sln == "recoil_l3_axial" || sln == "recoil_l3_stereo" ||
181 sensor_copy_nr == 50 || sensor_copy_nr == 60)
182 recoil_layout_["recoil_tracker_L3"].push_back(sensor_surface);
183
184 if (sln == "recoil_l4_axial" || sln == "recoil_l4_stereo" ||
185 sensor_copy_nr == 70 || sensor_copy_nr == 80)
186 recoil_layout_["recoil_tracker_L4"].push_back(sensor_surface);
187
188 if (sln == "recoil_l5_sensor1" || sln == "recoil_l5_sensor2" ||
189 sln == "recoil_l5_sensor3" || sln == "recoil_l5_sensor4" ||
190 sln == "recoil_l5_sensor5" || sln == "recoil_l5_sensor6" ||
191 sln == "recoil_l5_sensor7" || sln == "recoil_l5_sensor8" ||
192 sln == "recoil_l5_sensor9" || sln == "recoil_l5_sensor10" ||
193 (sensor_copy_nr >= 90 && sensor_copy_nr <= 99))
194
195 recoil_layout_["recoil_tracker_L5"].push_back(sensor_surface);
196
197 if (sln == "recoil_l6_sensor1" || sln == "recoil_l6_sensor2" ||
198 sln == "recoil_l6_sensor3" || sln == "recoil_l6_sensor4" ||
199 sln == "recoil_l6_sensor5" || sln == "recoil_l6_sensor6" ||
200 sln == "recoil_l6_sensor7" || sln == "recoil_l6_sensor8" ||
201 sln == "recoil_l6_sensor9" || sln == "recoil_l6_sensor10" ||
202 (sensor_copy_nr >= 100 && sensor_copy_nr <= 109))
203 recoil_layout_["recoil_tracker_L6"].push_back(sensor_surface);
204
205 }
206 }
207}