98 {
101 throw std::runtime_error("HGTD manager not available");
102 }
103
105 <<
m_hgtdMgr->getDetectorElementCollection()->size()
106 << " elements");
107
108 std::vector<std::shared_ptr<ActsDetectorElement>> elements;
109
110 for (
const auto* element : *
m_hgtdMgr->getDetectorElementCollection()) {
111 const InDetDD::HGTD_DetectorElement* hgtdDetElement =
112 dynamic_cast<const InDetDD::HGTD_DetectorElement*>(element);
113 if (hgtdDetElement == nullptr) {
115 throw std::runtime_error{"Corrupt detector element collection"};
116 }
117 elements.push_back(std::make_shared<ActsDetectorElement>(
118 *hgtdDetElement, hgtdDetElement->
identify()));
119 }
121
123 elements.begin(), elements.end());
124
125 for (int bec : {-2, 2}) {
126 const std::string
s =
bec > 0 ?
"p" :
"n";
127
128 std::map<int, std::vector<std::shared_ptr<Acts::Surface>>>
layers{};
129
130 for (auto& element : elements) {
131 IdentityHelper id = element->identityHelper();
132
134 <<
id.
bec() <<
", layer/disk " <<
id.layer_disk()
135 << ", eta_module " << id.eta_module() << ", phi_module "
136 << id.phi_module());
137
138 if (
id.
bec() * bec <= 0) {
139 continue;
140 }
141
142 layers[
id.layer_disk()].push_back(element->surface().getSharedPtr());
143 }
144
146 for (auto& [key, surfaces] : layers) {
148 << " surfaces");
149 }
150
151 node.withGeometryIdentifier([&layers, bec, s, this](auto& geoId) {
152 std::string ecName =
"HGTD_" +
s +
"EC";
154 .incrementLayerIds(1);
155
156 geoId.addCylinderContainer(ecName, AxisR, [&](auto& hgtd) {
157 hgtd.setAttachmentStrategy(AttachmentStrategy::Gap);
158 hgtd.setResizeStrategy(ResizeStrategy::Gap);
159
160 hgtd.addCylinderContainer(
161 ecName + "_Container", AxisZ, [&](auto& hgtdContainer) {
162 hgtdContainer.setAttachmentStrategy(AttachmentStrategy::Gap);
163 hgtdContainer.setResizeStrategy(ResizeStrategy::Gap);
164
165 for (auto& [key, surfaces] : layers) {
166 std::string
layerName = ecName +
"_" + std::to_string(key);
167
169 << surfaces.size()
170 << " surfaces");
171
173 }
174 });
175 });
176 });
177 }
178}
#define ATH_MSG_VERBOSE(x)
void addHgtdLayers(Acts::Experimental::BlueprintNode &parent, int bec, int layer, const std::string &name, std::vector< std::shared_ptr< Acts::Surface > > &surfaces)
const HGTD_DetectorManager * m_hgtdMgr
std::shared_ptr< ActsElementVector > m_elementStore
virtual Identifier identify() const override final
identifier of this detector element (inline)
constexpr std::size_t s_hgtdNegVolumeId
constexpr std::size_t s_hgtdPosVolumeId
HGTD volume IDs.
layers(flags, cells_name, *args, **kw)
Here we define wrapper functions to set up all of the standard corrections.
const std::string & layerName(LayerIndex index)
convert LayerIndex into a string