76 return StatusCode::FAILURE;
83 m_autoRetrieveTools =
false;
84 m_checkToolDeps =
false;
87 << Acts::VersionMajor <<
"." << Acts::VersionMinor <<
"."
88 << Acts::VersionPatch <<
" [" << Acts::CommitHash <<
"]");
93 ATH_MSG_INFO(
"Configured to build " << buildSubdet.size()
95 for (
const auto &
s : buildSubdet) {
100 if (buildSubdet.find(
"Pixel") != buildSubdet.end()) {
103 if (buildSubdet.find(
"SCT") != buildSubdet.end()) {
106 if (buildSubdet.find(
"TRT") != buildSubdet.end()) {
110 if (buildSubdet.find(
"ITkPixel") != buildSubdet.end()) {
113 if (buildSubdet.find(
"ITkStrip") != buildSubdet.end()) {
116 if (buildSubdet.find(
"HGTD") != buildSubdet.end()) {
128 ATH_MSG_FATAL(
"Consistency check for ITk inner pixel barrel passive layer construction failed. Please check your inputs! ");
129 return StatusCode::FAILURE;
134 ATH_MSG_FATAL(
"Consistency check for ITk outer pixel barrel passive layer construction failed. Please check your inputs! ");
135 return StatusCode::FAILURE;
140 ATH_MSG_FATAL(
"Consistency check for ITk strip barrel passive layer construction failed. Please check your inputs! ");
141 return StatusCode::FAILURE;
146 Acts::LayerArrayCreator::Config lacCfg;
147 auto layerArrayCreator = std::make_shared<const Acts::LayerArrayCreator>(
150 Acts::TrackingVolumeArrayCreator::Config tvcCfg;
151 auto trackingVolumeArrayCreator =
152 std::make_shared<const Acts::TrackingVolumeArrayCreator>(
155 Acts::CylinderVolumeHelper::Config cvhConfig;
156 cvhConfig.layerArrayCreator = layerArrayCreator;
157 cvhConfig.trackingVolumeArrayCreator = trackingVolumeArrayCreator;
159 auto cylinderVolumeHelper =
160 std::make_shared<const Acts::CylinderVolumeHelper>(
163 Acts::TrackingGeometryBuilder::Config tgbConfig;
164 tgbConfig.trackingVolumeHelper = cylinderVolumeHelper;
167 std::shared_ptr<const Acts::IMaterialDecorator> matDeco =
nullptr;
170 if (matFileFullPath.empty()) {
172 return StatusCode::FAILURE;
174 ATH_MSG_INFO(
"Configured to use material input: " << matFileFullPath);
176 if (matFileFullPath.find(
".json") != std::string::npos) {
178 Acts::MaterialMapJsonConverter::Config jsonGeoConvConfig;
180 matDeco = std::make_shared<const Acts::JsonMaterialDecorator>(
183 tgbConfig.materialDecorator = matDeco;
186 std::array<double, 2> sctECEnvelopeZ{20_mm, 20_mm};
191 tgbConfig.trackingVolumeBuilders.push_back([&](
const auto &gctx,
195 Acts::CylinderVolumeBuilder::Config bpvConfig =
198 Acts::CylinderVolumeBuilder beamPipeVolumeBuilder {
201 return beamPipeVolumeBuilder.trackingVolume(gctx, inner);
208 if (buildSubdet.count(
"Pixel") > 0) {
209 tgbConfig.trackingVolumeBuilders.push_back([&](
const auto &gctx,
214 auto lb = std::make_shared<ActsLayerBuilder>(
216 Acts::CylinderVolumeBuilder::Config cvbConfig;
217 cvbConfig.layerEnvelopeR = {3_mm, 3_mm};
218 cvbConfig.layerEnvelopeZ = 1_mm;
219 cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
220 cvbConfig.volumeName =
"Pixel";
221 cvbConfig.layerBuilder =
lb;
224 Acts::CylinderVolumeBuilder cvb(
227 return cvb.trackingVolume(gctx, inner);
232 if (buildSubdet.count(
"ITkPixel") > 0) {
233 tgbConfig.trackingVolumeBuilders.push_back(
234 [&](
const auto &gctx,
const auto &inner,
const auto &) {
238 cfg.doEndcapLayerMerging =
true;
242 auto lb = std::make_shared<ActsLayerBuilder>(
245 Acts::CylinderVolumeBuilder::Config cvbConfig;
246 cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
247 cvbConfig.layerEnvelopeZ = 1_mm;
248 cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
249 cvbConfig.volumeName =
"ITkPixelInner";
250 cvbConfig.layerBuilder =
lb;
253 Acts::CylinderVolumeBuilder cvb(
257 return cvb.trackingVolume(gctx, inner);
260 tgbConfig.trackingVolumeBuilders.push_back(
261 [&](
const auto &gctx,
const auto &inner,
const auto &) {
265 cfg.doEndcapLayerMerging =
false;
269 auto lb = std::make_shared<ActsLayerBuilder>(
272 Acts::CylinderVolumeBuilder::Config cvbConfig;
273 cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
274 cvbConfig.layerEnvelopeZ = 1_mm;
275 cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
276 cvbConfig.volumeName =
"ITkPixelOuter";
277 cvbConfig.layerBuilder =
lb;
278 cvbConfig.buildToRadiusZero =
false;
279 cvbConfig.checkRingLayout =
true;
280 cvbConfig.ringTolerance = 10_mm;
282 Acts::CylinderVolumeBuilder cvb(
286 return cvb.trackingVolume(gctx, inner);
291 if (buildSubdet.count(
"ITkStrip") > 0) {
292 tgbConfig.trackingVolumeBuilders.push_back(
293 [&](
const auto &gctx,
const auto &inner,
const auto &) {
300 auto lb = std::make_shared<ActsLayerBuilder>(
303 Acts::CylinderVolumeBuilder::Config cvbConfig;
304 cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
305 cvbConfig.layerEnvelopeZ = 1_mm;
306 cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
307 cvbConfig.volumeName =
"ITkStrip";
308 cvbConfig.layerBuilder =
lb;
309 cvbConfig.buildToRadiusZero =
312 Acts::CylinderVolumeBuilder cvb(
316 return cvb.trackingVolume(gctx, inner);
320 bool buildSCT = buildSubdet.count(
"SCT") > 0;
321 bool buildTRT = buildSubdet.count(
"TRT") > 0;
323 if (buildSCT && buildTRT) {
325 tgbConfig.trackingVolumeBuilders.push_back(
326 [&](
const auto &gctx,
const auto &inner,
const auto &) {
329 cfg.endcapEnvelopeZ = sctECEnvelopeZ;
330 auto sct_lb = std::make_shared<ActsLayerBuilder>(
336 *cylinderVolumeHelper, inner);
339 }
else if (buildSCT) {
340 tgbConfig.trackingVolumeBuilders.push_back(
341 [&](
const auto &gctx,
const auto &inner,
const auto &) {
344 lbCfg.endcapEnvelopeZ = sctECEnvelopeZ;
345 auto lb = std::make_shared<ActsLayerBuilder>(
349 Acts::CylinderVolumeBuilder::Config cvbConfig;
350 cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
351 cvbConfig.layerEnvelopeZ = 2_mm;
352 cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
353 cvbConfig.volumeName =
"SCT";
354 cvbConfig.layerBuilder =
lb;
355 cvbConfig.buildToRadiusZero =
false;
357 Acts::CylinderVolumeBuilder cvb(
361 return cvb.trackingVolume(gctx, inner);
363 }
else if (buildTRT) {
364 tgbConfig.trackingVolumeBuilders.push_back(
365 [&](
const auto &gctx,
const auto &inner,
const auto &) {
367 Acts::CylinderVolumeBuilder::Config cvbConfig;
368 cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
369 cvbConfig.layerEnvelopeZ = 2_mm;
370 cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
371 cvbConfig.volumeName =
"TRT";
372 cvbConfig.layerBuilder =
lb;
373 cvbConfig.buildToRadiusZero =
false;
375 Acts::CylinderVolumeBuilder cvb(
379 return cvb.trackingVolume(gctx, inner);
384 if(buildSubdet.count(
"HGTD") > 0) {
385 tgbConfig.trackingVolumeBuilders.push_back(
386 [&](
const auto &gctx,
const auto &inner,
const auto &) {
388 Acts::CylinderVolumeBuilder::Config cvbConfig;
389 cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
390 cvbConfig.layerEnvelopeZ = 1_mm;
391 cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
392 cvbConfig.volumeName =
"HGTD";
393 cvbConfig.layerBuilder =
lb;
394 cvbConfig.buildToRadiusZero =
false;
396 Acts::CylinderVolumeBuilder cvb(
400 return cvb.trackingVolume(gctx, inner);
405 if (buildSubdet.count(
"Calo") > 0) {
406 tgbConfig.trackingVolumeBuilders.push_back(
407 [&](
const auto &gctx,
const auto &inner,
const auto &) {
412 ATH_MSG_ERROR(
"Encountered error when building Acts tracking geometry");
414 return StatusCode::FAILURE;
417 auto trackingGeometryBuilder =
418 std::make_shared<const Acts::TrackingGeometryBuilder>(
427 ATH_MSG_ERROR(
"No ACTS tracking geometry was built. Cannot proceeed");
428 return StatusCode::FAILURE;
433 ATH_MSG_INFO(
"Running extra consistency check! (this is SLOW)");
435 ATH_MSG_ERROR(
"Consistency check has failed! Geometry is not consistent");
436 return StatusCode::FAILURE;
440 ATH_MSG_INFO(
"Acts TrackingGeometry construction completed");
442 return StatusCode::SUCCESS;