TrackingGeometry Interface method.
87 double enclosedOuterRadius = 0.;
88 double enclosedInnerRadius = 0.;
97 if (!innerDetectorBounds) std::abort();
99 enclosedInnerSectorHalflength = innerDetectorBounds->
halflengthZ();
100 enclosedOuterRadius = innerDetectorBounds->
outerRadius();
101 enclosedInnerRadius = innerDetectorBounds->
innerRadius();
107 if (std::abs(bounds.second) < enclosedOuterSectorHalflength) {
108 enclosedOuterSectorHalflength = std::abs(bounds.second);
117 if (std::abs(bounds.second) < enclosedInnerSectorHalflength) {
118 enclosedInnerSectorHalflength = std::abs(bounds.second);
123 if (std::abs(bounds.second) == enclosedOuterSectorHalflength) {
124 if (bounds.first>enclosedOuterRadius)
125 enclosedOuterRadius=bounds.first;
131 << enclosedInnerSectorHalflength <<
"/" << enclosedInnerRadius
132 <<
" - " << enclosedOuterSectorHalflength <<
"/"
133 << enclosedOuterRadius);
136 std::vector<Trk::Layer*> negativeLayers;
137 std::vector<Trk::Layer*> positiveLayers;
139 std::unique_ptr<const std::vector<Trk::DiscLayer*> > discLayers =
m_layerBuilder->discLayers(ctx, whandle);
143 float thickness = -9999;
146 if (discLayers && !discLayers->empty()){
148 for (
const auto & discLayer : (*discLayers) ){
150 float zpos = discLayer->surfaceRepresentation().center().z();
152 positiveLayers.push_back(discLayer);
157 thickness =
std::max(thickness,
float(discLayer->thickness()));
160 negativeLayers.push_back(discLayer);
165 float envelope = thickness*0.5;
166 float minZ_HGTD = minZ-envelope;
167 float maxZ_HGTD = maxZ+envelope;
168 float maxZ_HGTDEnclosure = enclosedOuterSectorHalflength;
171 auto materialProperties = std::make_unique<Trk::Material>();
173 float zGapPos = 0.5*(minZ_HGTD+enclosedInnerSectorHalflength);
174 float gapHalfLengthZ = 0.5*(minZ_HGTD-enclosedInnerSectorHalflength);
182 negativeInnerGapBounds,
192 positiveInnerGapBounds,
200 enclosedInnerSectorHalflength);
207 dummyLayers, dummyVolumes,
208 "HGTD::GapVolumes::DummyID");
211 std::vector<Trk::TrackingVolume*> inBufferVolumes;
212 inBufferVolumes.push_back(negativeInnerGapVolume);
213 inBufferVolumes.push_back(innerVol);
214 inBufferVolumes.push_back(positiveInnerGapVolume);
219 "HGTD::Container::EnclosedInnerDetector");
226 enclosedInnerRadius, enclosedOuterRadius,
227 -maxZ_HGTD, -minZ_HGTD,
235 enclosedInnerRadius, enclosedOuterRadius,
236 minZ_HGTD, maxZ_HGTD,
241 ATH_MSG_VERBOSE(
'\t' <<
'\t'<<
"Volumes have been created, now pack them into a triple.");
247 std::vector<Trk::TrackingVolume*> tripleVolumes;
248 tripleVolumes.push_back(negativeVolume);
249 tripleVolumes.push_back(inDetEnclosed);
250 tripleVolumes.push_back(positiveVolume);
271 "HGTD::Gaps::NegativeEnclosure" +
m_layerBuilder->identification());
282 "HGTD::Gaps::PositiveEnclosure" +
m_layerBuilder->identification());
284 std::vector<Trk::TrackingVolume*> enclosedVolumes;
285 enclosedVolumes.push_back(negativeEnclosure);
286 enclosedVolumes.push_back(tripleContainer);
287 enclosedVolumes.push_back(positiveEnclosure);
299 auto hgtdTrackingGeometry = std::make_unique<Trk::TrackingGeometry>(enclosedDetector);
306 return hgtdTrackingGeometry;