50{
51 ACTS_VERBOSE("Building central Straw layers");
52
53 using LBBV = Acts::LineBounds::BoundValues;
54 using enum Acts::AxisDirection;
55
56 const InDetDD::TRT_Numerology* trtNums =
m_cfg.mng->getNumerology();
59
60
61 ACTS_VERBOSE("- Numerology reports: - " << nBarrelRings << " barrel rings");
62 ACTS_VERBOSE(" - " << nBarrelPhiSectors << " barrel phi sectors");
63
65
66 std::vector<Acts::ProtoLayer> protoLayers;
67
68 for(size_t iring=0; iring < nBarrelRings;iring++) {
69 ACTS_VERBOSE("- Collecting elements for ring " << iring);
70
71
72 Acts::ProtoLayer pl;
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 );
80
81 pl.envelope[AxisZ] = {1_mm, 1_mm};
82 pl.envelope[AxisR] = {0_mm, 0_mm};
83
84 double fudge = 0_mm;
85
86 std::vector<std::shared_ptr<const Acts::Surface>> layerSurfaces;
87
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++) {
92
93 for (size_t iposneg=0;iposneg<2;iposneg++) {
94
95 const InDetDD::TRT_BarrelElement* brlElem
96 =
m_cfg.mng->getBarrelElement(iposneg, iring, iphisec, ilayer);
97
98 unsigned int nStraws = brlElem->
nStraws();
99
100 for(unsigned int istraw=0;istraw<nStraws;istraw++) {
101
103
104 trf.translation() *= 1_mm;
106 Identifier straw_id =
m_cfg.idHelper->straw_id(
code.isPosZ() == 1 ? 1 : -1,
108 code.getModuleIndex(),
109 code.getStrawLayerIndex(),
110 istraw);
111
112 auto elem = std::make_shared<const ActsDetectorElement>(
113 trf, *brlElem, straw_id);
114
115 m_cfg.elementStore->push_back(elem);
116
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;
121
122 double radius = strawBounds->get(LBBV::eR);
123 double length = strawBounds->get(LBBV::eHalfLengthZ);
125
126
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) );
132
133 layerSurfaces.push_back(
straw->getSharedPtr());
134 }
135 }
136 }
137 }
138
139 ACTS_VERBOSE(" - Collected " << layerSurfaces.size() << " straws");
140
141 if(iring > 0) {
142
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 );
145 }
146
147 std::shared_ptr<Acts::Layer>
layer
148 =
m_cfg.layerCreator->cylinderLayer(gctx, std::move(layerSurfaces), 100, 1, pl);
150
151 protoLayers.push_back(pl);
152
153 }
154
156}
const TRT_BarrelCode & getCode() const
Doomed (?):
unsigned int nStraws() const
Number of straws in the element.
const Amg::Transform3D & strawTransform(unsigned int straw) const
Straw transform - fast access in array, in Tracking frame: Amg.
unsigned int getNBarrelPhi() const
unsigned int getNBarrelRings() const
unsigned int getNBarrelLayers(unsigned int iMod) const
layers(flags, cells_name, *args, **kw)
Here we define wrapper functions to set up all of the standard corrections.