51 ACTS_VERBOSE(
"Building central Straw layers");
53 using LBBV = Acts::LineBounds::BoundValues;
54 using enum Acts::AxisDirection;
61 ACTS_VERBOSE(
"- Numerology reports: - " << nBarrelRings <<
" barrel rings");
62 ACTS_VERBOSE(
" - " << nBarrelPhiSectors <<
" barrel phi sectors");
64 Acts::LayerVector layers;
66 std::vector<Acts::ProtoLayer> protoLayers;
68 for(
size_t iring=0; iring < nBarrelRings;iring++) {
69 ACTS_VERBOSE(
"- Collecting elements for ring " << iring);
73 auto& ext = pl.extent;
74 ext.range(AxisR).setMin( std::numeric_limits<double>::max() );
75 ext.range(AxisR).setMax( std::numeric_limits<double>::lowest() );
76 ext.range(AxisZ).setMin( std::numeric_limits<double>::max() );
77 ext.range(AxisZ).setMax( std::numeric_limits<double>::lowest() );
78 ext.range(AxisPhi).setMin( -
M_PI );
79 ext.range(AxisPhi).setMax(
M_PI );
81 pl.envelope[AxisZ] = {1_mm, 1_mm};
82 pl.envelope[AxisR] = {0_mm, 0_mm};
86 std::vector<std::shared_ptr<const Acts::Surface>> layerSurfaces;
89 ACTS_VERBOSE(
" - Numerology reports: " << nBarrelLayers <<
" layers in ring " << iring);
90 for (
size_t ilayer=0;ilayer < nBarrelLayers;ilayer++) {
91 for (
size_t iphisec=0;iphisec < nBarrelPhiSectors;iphisec++) {
93 for (
size_t iposneg=0;iposneg<2;iposneg++) {
96 =
m_cfg.mng->getBarrelElement(iposneg, iring, iphisec, ilayer);
98 unsigned int nStraws = brlElem->
nStraws();
100 for(
unsigned int istraw=0;istraw<nStraws;istraw++) {
104 trf.translation() *= 1_mm;
105 auto code = brlElem->
getCode();
106 Identifier straw_id =
m_cfg.idHelper->straw_id(code.isPosZ() == 1 ? 1 : -1,
108 code.getModuleIndex(),
109 code.getStrawLayerIndex(),
112 auto elem = std::make_shared<const ActsDetectorElement>(
113 trf, *brlElem, straw_id);
115 m_cfg.elementStore->push_back(elem);
117 auto straw =
dynamic_cast<const Acts::StrawSurface*
>(&elem->surface());
118 if (not straw)
continue;
119 auto strawBounds =
dynamic_cast<const Acts::LineBounds*
>(&straw->bounds());
120 if (not strawBounds)
continue;
122 double radius = strawBounds->get(LBBV::eR);
123 double length = strawBounds->get(LBBV::eHalfLengthZ);
127 Acts::Vector3 ctr = straw->center(gctx);
128 ext.range(AxisR).setMax( std::max(ext.max(AxisR), ctr.perp() + radius) );
129 ext.range(AxisR).setMin( std::min(ext.min(AxisR), ctr.perp() - radius) );
130 ext.range(AxisZ).setMax( std::max(ext.max(AxisZ), ctr.z() +
length) );
131 ext.range(AxisZ).setMin( std::min(ext.min(AxisZ), ctr.z() -
length) );
133 layerSurfaces.push_back(straw->getSharedPtr());
139 ACTS_VERBOSE(
" - Collected " << layerSurfaces.size() <<
" straws");
143 const Acts::ProtoLayer &prev = protoLayers.at(iring-1);
144 ext.range(AxisR).setMin( prev.extent.max(AxisR) + prev.envelope[AxisR][1] + pl.envelope[AxisR][0] + fudge );
147 std::shared_ptr<Acts::Layer> layer
148 =
m_cfg.layerCreator->cylinderLayer(gctx, std::move(layerSurfaces), 100, 1, pl);
149 layers.push_back(layer);
151 protoLayers.push_back(pl);
161 ACTS_VERBOSE(
"Building endcap Straw layers");
162 using LBBV = Acts::LineBounds::BoundValues;
163 using enum Acts::AxisDirection;
169 ACTS_VERBOSE(
"- Numerology reports: - " << nEndcapWheels<<
" endcap wheels");
170 ACTS_VERBOSE(
" - " << nEndcapPhiSectors <<
" endcap phi sectors");
172 Acts::LayerVector layers;
174 for(
size_t iwheel=0;iwheel<nEndcapWheels;++iwheel) {
175 ACTS_VERBOSE(
"- Collecting elements for wheel " << iwheel);
179 ACTS_VERBOSE(
" - Numerology reports: " << nEndcapLayers <<
" layers in wheel " << iwheel);
180 for(
size_t ilayer=0;ilayer<nEndcapLayers;++ilayer) {
181 std::vector<std::shared_ptr<const Acts::Surface>> wheelSurfaces;
185 auto& ext = pl.extent;;
186 ext.range(AxisR).setMin( std::numeric_limits<double>::max() );
187 ext.range(AxisR).setMax( std::numeric_limits<double>::lowest() );
188 ext.range(AxisZ).setMin( std::numeric_limits<double>::max() );
189 ext.range(AxisZ).setMax( std::numeric_limits<double>::lowest() );
190 ext.range(AxisPhi).setMin( -
M_PI );
191 ext.range(AxisPhi).setMax(
M_PI );
192 pl.envelope[AxisR] = {0_mm, 0_mm};
194 for (
unsigned int iphisec=0; iphisec<nEndcapPhiSectors; ++iphisec) {
196 size_t iposneg = side < 0 ? 0 : 1;
198 unsigned int nStraws = ecElem->
nStraws();
200 for(
unsigned int istraw=0;istraw<nStraws;istraw++) {
204 trf.translation() *= 1_mm;
207 Identifier straw_id =
m_cfg.idHelper->straw_id(code.isPosZ() == 1 ? 2 : -2,
209 code.getWheelIndex(),
210 code.getStrawLayerIndex(),
214 auto elem = std::make_shared<const ActsDetectorElement>(
215 trf, *ecElem, straw_id);
217 m_cfg.elementStore->push_back(elem);
219 auto straw =
dynamic_cast<const Acts::StrawSurface*
>(&elem->surface());
221 auto strawBounds =
dynamic_cast<const Acts::LineBounds*
>(&straw->bounds());
223 double radius = strawBounds->get(LBBV::eR);
224 double length = strawBounds->get(LBBV::eHalfLengthZ);
226 Acts::Vector3 ctr = straw->center(gctx);
227 ext.range(AxisZ).setMax( std::max(ext.max(AxisZ), ctr.z() + radius) );
228 ext.range(AxisZ).setMin( std::min(ext.min(AxisZ), ctr.z() - radius) );
229 ext.range(AxisR).setMax( std::max(ext.max(AxisR), ctr.perp() +
length) );
230 ext.range(AxisR).setMin( std::min(ext.min(AxisR), ctr.perp() -
length) );
231 pl.envelope[AxisZ] = {radius/2., radius/2.};
233 wheelSurfaces.push_back(straw->getSharedPtr());
239 std::shared_ptr<Acts::Layer> layer
240 =
m_cfg.layerCreator->discLayer(gctx, std::move(wheelSurfaces), 1, 100, pl);
241 layers.push_back(layer);
242 ACTS_VERBOSE(
" - Collected " << wheelSurfaces.size() <<
" straws");
247 ACTS_VERBOSE(
" - Built " << layers.size() <<
" straw endcap layers");