99 {
102 throw std::runtime_error("HGTD manager not available");
103 }
104
106 <<
m_hgtdMgr->getDetectorElementCollection()->size()
107 << " elements");
108
109 std::vector<std::shared_ptr<ActsDetectorElement>> elements;
110
111 for (
const auto* element : *
m_hgtdMgr->getDetectorElementCollection()) {
112 const InDetDD::HGTD_DetectorElement* hgtdDetElement =
113 dynamic_cast<const InDetDD::HGTD_DetectorElement*>(element);
114 if (hgtdDetElement == nullptr) {
116 throw std::runtime_error{"Corrupt detector element collection"};
117 }
118 elements.push_back(std::make_shared<ActsDetectorElement>(
119 *hgtdDetElement, hgtdDetElement->
identify()));
120 }
122
124 elements.begin(), elements.end());
125
126 for (int bec : {-2, 2}) {
127 const std::string
s =
bec > 0 ?
"p" :
"n";
128
129 std::map<int, std::vector<std::shared_ptr<Acts::Surface>>>
layers{};
130
131 for (auto& element : elements) {
132 IdentityHelper id = element->identityHelper();
133
135 <<
id.
bec() <<
", layer/disk " <<
id.layer_disk()
136 << ", eta_module " << id.eta_module() << ", phi_module "
137 << id.phi_module());
138
139 if (
id.
bec() * bec <= 0) {
140 continue;
141 }
142
143 layers[
id.layer_disk()].push_back(element->surface().getSharedPtr());
144 }
145
147 for (auto& [key, surfaces] : layers) {
149 << " surfaces");
150 }
151
152 node.withGeometryIdentifier([&layers, bec, s, this](auto& geoId) {
153 std::string ecName =
"HGTD_" +
s +
"EC";
155 .incrementLayerIds(1);
156
157 geoId.addCylinderContainer(ecName, AxisR, [&](auto& hgtd) {
158 hgtd.setAttachmentStrategy(AttachmentStrategy::Gap);
159 hgtd.setResizeStrategy(ResizeStrategy::Gap);
160
161 hgtd.addCylinderContainer(
162 ecName + "_Container", AxisZ, [&](auto& hgtdContainer) {
163
164
165
166 hgtdContainer.setAttachmentStrategy(
167 bec > 0 ? AttachmentStrategy::Second
168 : AttachmentStrategy::First);
169 hgtdContainer.setResizeStrategy(ResizeStrategy::Gap);
170
171 const int innermostLayer =
layers.begin()->first;
172 for (auto& [key, surfaces] : layers) {
173 std::string
layerName = ecName +
"_" + std::to_string(key);
174
176 << surfaces.size()
177 << " surfaces");
178
180 key == innermostLayer);
181 }
182 });
183 });
184 });
185 }
186}
#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