Skip to content

Commit 8538d86

Browse files
committed
centralize constant lookup
1 parent c204f23 commit 8538d86

File tree

2 files changed

+22
-31
lines changed

2 files changed

+22
-31
lines changed

Examples/Detectors/DD4hepDetector/src/OpenDataDetector.cpp

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
#include <utility>
3232

3333
#include <DD4hep/DetElement.h>
34-
#include <DD4hep/Detector.h>
3534

3635
namespace {
3736

@@ -46,9 +45,8 @@ const std::regex kLongStripLayerFilter{
4645
/// The callback is invoked once per layer during blueprint construction.
4746
auto makeLayerCustomizer(ActsPlugins::DD4hep::BlueprintBuilder& builder,
4847
const Acts::ExtentEnvelope& layerEnvelope,
49-
auto constant, std::string det,
50-
std::regex layerFilter) {
51-
return [&builder, layerEnvelope, constant, det = std::move(det),
48+
std::string det, std::regex layerFilter) {
49+
return [&builder, layerEnvelope, det = std::move(det),
5250
layerFilter = std::move(layerFilter)](
5351
const std::optional<dd4hep::DetElement>& elem,
5452
Acts::Experimental::LayerBlueprintNode& layer) {
@@ -73,20 +71,21 @@ auto makeLayerCustomizer(ActsPlugins::DD4hep::BlueprintBuilder& builder,
7371
using SrfArrayNavPol = Acts::SurfaceArrayNavigationPolicy;
7472
using enum SrfArrayNavPol::LayerType;
7573

74+
const auto& backend = builder.backend();
7675
SrfArrayNavPol::Config navCfg;
7776
const bool isBarrelLayer =
7877
elem.has_value()
79-
? builder.backend().isBarrel(*elem)
78+
? backend.isBarrel(*elem)
8079
: layer.layerType() ==
8180
Acts::Experimental::LayerBlueprintNode::LayerType::Cylinder;
8281
if (isBarrelLayer) {
8382
navCfg.layerType = Cylinder;
84-
navCfg.bins = {constant("{}_b{}_sf_b_phi", det, layerIdx),
85-
constant("{}_b_sf_b_z", det)};
83+
navCfg.bins = {backend.constant("{}_b{}_sf_b_phi", det, layerIdx),
84+
backend.constant("{}_b_sf_b_z", det)};
8685
} else {
8786
navCfg.layerType = Disc;
88-
navCfg.bins = {constant("{}_e_sf_b_r", det),
89-
constant("{}_e_sf_b_phi", det)};
87+
navCfg.bins = {backend.constant("{}_e_sf_b_r", det),
88+
backend.constant("{}_e_sf_b_phi", det)};
9089
}
9190

9291
layer.setNavigationPolicyFactory(Acts::NavigationPolicyFactory{}
@@ -156,12 +155,6 @@ void OpenDataDetector::constructBarrelEndcap(
156155

157156
outer.addChild(builder.backend().makeBeampipe());
158157

159-
auto constant = [this]<typename... Args>(std::format_string<Args...> fmt,
160-
Args&&... values) -> int {
161-
return dd4hepDetector().constant<int>(
162-
std::format(fmt, std::forward<Args>(values)...));
163-
};
164-
165158
auto addSubsystem = [&](std::string assembly, std::string det,
166159
const std::regex& layerFilter) {
167160
const auto assemblyElement = builder.findDetElementByName(assembly);
@@ -174,7 +167,7 @@ void OpenDataDetector::constructBarrelEndcap(
174167
.setAssembly(*assemblyElement)
175168
.setSensorAxes("XYZ", "XZY")
176169
.setLayerFilter(layerFilter)
177-
.onLayer(makeLayerCustomizer(builder, m_cfg.layerEnvelope, constant,
170+
.onLayer(makeLayerCustomizer(builder, m_cfg.layerEnvelope,
178171
std::move(det), layerFilter))
179172
.onContainer(
180173
[](const auto&,
@@ -216,12 +209,6 @@ void OpenDataDetector::constructDirectLayer(const Acts::GeometryContext& gctx) {
216209

217210
outer.addChild(builder.backend().makeBeampipe());
218211

219-
auto constant = [this]<typename... Args>(std::format_string<Args...> fmt,
220-
Args&&... values) -> int {
221-
return dd4hepDetector().constant<int>(
222-
std::format(fmt, std::forward<Args>(values)...));
223-
};
224-
225212
auto addSubsystem = [&](std::string assembly, std::string det,
226213
const std::regex& layerFilter) {
227214
const auto assemblyElement = builder.findDetElementByName(assembly);
@@ -239,7 +226,7 @@ void OpenDataDetector::constructDirectLayer(const Acts::GeometryContext& gctx) {
239226
assemblyName, Acts::AxisDirection::AxisZ);
240227

241228
auto layerCustomizer = makeLayerCustomizer(
242-
builder, m_cfg.layerEnvelope, constant, std::move(det), layerFilter);
229+
builder, m_cfg.layerEnvelope, std::move(det), layerFilter);
243230

244231
for (const auto& barrel : barrels) {
245232
auto barrelNode = builder.layers()
@@ -303,12 +290,6 @@ void OpenDataDetector::constructDirectLayerGrouped(
303290

304291
outer.addChild(builder.backend().makeBeampipe());
305292

306-
auto constant = [this]<typename... Args>(std::format_string<Args...> fmt,
307-
Args&&... values) -> int {
308-
return dd4hepDetector().constant<int>(
309-
std::format(fmt, std::forward<Args>(values)...));
310-
};
311-
312293
auto addSubsystem = [&](std::string assembly, std::string det,
313294
const std::regex& layerFilter) {
314295
const auto assemblyElement = builder.findDetElementByName(assembly);
@@ -326,7 +307,7 @@ void OpenDataDetector::constructDirectLayerGrouped(
326307
assemblyName, Acts::AxisDirection::AxisZ);
327308

328309
auto layerCustomizer = makeLayerCustomizer(
329-
builder, m_cfg.layerEnvelope, constant, std::move(det), layerFilter);
310+
builder, m_cfg.layerEnvelope, std::move(det), layerFilter);
330311

331312
// Walks the parent chain of a sensor element and returns the name of the
332313
// first ancestor whose name matches layerFilter, formatted as "layerN".

Plugins/DD4hep/include/ActsPlugins/DD4hep/BlueprintBuilder.hpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,18 @@
1414
#include "ActsPlugins/DD4hep/DD4hepDetectorElement.hpp"
1515
#include "ActsPlugins/Root/TGeoAxes.hpp"
1616

17+
#include <format>
1718
#include <functional>
1819
#include <memory>
1920
#include <optional>
2021
#include <span>
2122
#include <string>
2223
#include <vector>
2324

25+
#include <DD4hep/Detector.h>
26+
2427
namespace dd4hep {
2528
class DetElement;
26-
class Detector;
2729
} // namespace dd4hep
2830

2931
namespace ActsPlugins::DD4hep {
@@ -79,6 +81,14 @@ class DD4hepBackend {
7981
bool isEndcap(const Element& element) const;
8082
bool isTracker(const Element& element) const;
8183

84+
/// Retrieves a named integer constant from the DD4hep detector description.
85+
/// The name is constructed by formatting @p fmt with @p args.
86+
template <typename... Args>
87+
int constant(std::format_string<Args...> fmt, Args&&... args) const {
88+
return m_cfg.dd4hepDetector->constant<int>(
89+
std::format(fmt, std::forward<Args>(args)...));
90+
}
91+
8292
const Acts::Logger& logger() const { return *m_logger; }
8393

8494
private:

0 commit comments

Comments
 (0)