36 std::unique_ptr<const Acts::TrackingGeometry>
41 std::shared_ptr<ActsExamples::Telescope::TelescopeDetectorElement>>&
44 const std::vector<double>& stereoAngles,
45 const std::array<double, 2>& offsets,
const std::array<double, 2>&
bounds,
48 using namespace Acts::UnitLiterals;
52 std::make_shared<const Acts::RectangleBounds>(bounds[0], bounds[1]);
55 std::make_shared<const Acts::RadialBounds>(bounds[0], bounds[1]);
59 9.370_cm, 46.52_cm, 28.0855, 14, 2.329_g / 1_cm3);
61 const auto surfaceMaterial =
62 std::make_shared<Acts::HomogeneousSurfaceMaterial>(matProp);
79 size_t nLayers = positions.size();
80 std::vector<Acts::LayerPtr> layers(nLayers);
81 for (
unsigned int i = 0;
i < nLayers; ++
i) {
89 auto stereo = stereoAngles[
i];
93 std::shared_ptr<TelescopeDetectorElement> detElement =
nullptr;
94 if (surfaceType == TelescopeSurfaceType::Plane) {
95 detElement = std::make_shared<TelescopeDetectorElement>(
96 std::make_shared<const Acts::Transform3>(trafo), pBounds, 1._um,
99 detElement = std::make_shared<TelescopeDetectorElement>(
100 std::make_shared<const Acts::Transform3>(trafo),
rBounds, 1._um,
104 auto surface = detElement->surface().getSharedPtr();
106 detectorStore.push_back(
std::move(detElement));
108 std::unique_ptr<Acts::SurfaceArray> surArray(
111 if (surfaceType == TelescopeSurfaceType::Plane) {
125 (positions.front() + positions.back()) * 0.5);
130 auto length = positions.back() - positions.front();
132 if (surfaceType == TelescopeSurfaceType::Plane) {
133 boundsVol = std::make_shared<const Acts::CuboidVolumeBounds>(
134 bounds[0] + 5._mm, bounds[1] + 5._mm,
length + 10._mm);
136 boundsVol = std::make_shared<const Acts::CylinderVolumeBounds>(
137 std::max(bounds[0] - 5.0_mm, 0.), bounds[1] + 5._mm,
length + 10._mm);
145 for (
unsigned int i = 0;
i < nLayers;
i++) {
146 layVec.push_back(layers[
i]);
150 std::unique_ptr<const Acts::LayerArray> layArr(layArrCreator.layerArray(
151 genGctx, layVec, positions.front() - 2._mm, positions.back() + 2._mm,
157 std::move(layArr),
nullptr, {},
"Telescope");
160 return std::make_unique<Acts::TrackingGeometry>(trackVolume);