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