106 {
109 throw std::runtime_error("HGTD manager not available");
110 }
111
113 <<
m_hgtdMgr->getDetectorElementCollection()->size()
114 << " elements");
115
116 std::vector<std::shared_ptr<ActsDetectorElement>> elements;
117
118 for (
const auto* element : *
m_hgtdMgr->getDetectorElementCollection()) {
119 const InDetDD::HGTD_DetectorElement* hgtdDetElement =
120 dynamic_cast<const InDetDD::HGTD_DetectorElement*>(element);
121 if (hgtdDetElement == nullptr) {
123 throw std::runtime_error{"Corrupt detector element collection"};
124 }
125 elements.push_back(std::make_shared<ActsDetectorElement>(
126 *hgtdDetElement, hgtdDetElement->
identify()));
127 }
129
131 elements.begin(), elements.end());
132
133 for (int bec : {-2, 2}) {
134 const std::string
s =
bec > 0 ?
"p" :
"n";
135
136 std::map<int, std::vector<std::shared_ptr<Acts::Surface>>>
layers{};
137
138 for (auto& element : elements) {
139 IdentityHelper id = element->identityHelper();
140
142 <<
id.
bec() <<
", layer/disk " <<
id.layer_disk()
143 << ", eta_module " << id.eta_module() << ", phi_module "
144 << id.phi_module());
145
146 if (
id.
bec() * bec <= 0) {
147 continue;
148 }
149
150 layers[
id.layer_disk()].push_back(element->surface().getSharedPtr());
151 }
152
154 for (auto& [key, surfaces] : layers) {
156 << " surfaces");
157 }
158
159 node.withGeometryIdentifier([&layers, bec, s, this](auto& geoId) {
160 std::string ecName =
"HGTD_" +
s +
"EC";
162 .incrementLayerIds(1);
163
164 geoId.addCylinderContainer(ecName, AxisR, [&](auto& hgtd) {
165 hgtd.setAttachmentStrategy(AttachmentStrategy::Gap);
166 hgtd.setResizeStrategy(ResizeStrategy::Gap);
167
168 hgtd.addCylinderContainer(
169 ecName + "_Container", AxisZ, [&](auto& hgtdContainer) {
170
171
172
173 hgtdContainer.setAttachmentStrategy(
174 bec > 0 ? AttachmentStrategy::Second
175 : AttachmentStrategy::First);
176 hgtdContainer.setResizeStrategy(ResizeStrategy::Gap);
177
178 const int innermostLayer =
layers.begin()->first;
179 for (auto& [key, surfaces] : layers) {
180 std::string
layerName = ecName +
"_" + std::to_string(key);
181
183 << surfaces.size()
184 << " surfaces");
185
187 key == innermostLayer);
188 }
189 });
190 });
191 });
192 }
193}
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_VERBOSE(x,...)
void addHgtdLayers(Acts::BlueprintNode &parent, int bec, int layer, const std::string &name, std::vector< std::shared_ptr< Acts::Surface > > &surfaces, bool isInnermost)
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.
const std::string & layerName(LayerIndex index)
convert LayerIndex into a string