17 double radius,
double zStagger,
double moduleHalfLength,
double lOverlap,
18 const std::pair<int, int>& binningSchema) {
19 int nPhiBins = binningSchema.first;
20 int nZbins = binningSchema.second;
22 std::vector<Acts::Vector3D> mPositions;
23 mPositions.reserve(nPhiBins * nZbins);
25 double phiStep = 2 *
M_PI / (nPhiBins);
27 double zStart = -0.5 * (nZbins - 1) * (2 * moduleHalfLength - lOverlap);
28 double zStep = 2 *
std::abs(zStart) / (nZbins - 1);
30 for (
size_t zBin = 0; zBin < size_t(nZbins); ++zBin) {
32 double moduleZ = zStart + zBin * zStep;
34 (zBin % 2) ? radius - 0.5 * zStagger : radius + 0.5 * zStagger;
35 for (
size_t phiBin = 0; phiBin < size_t(nPhiBins); ++phiBin) {
37 double modulePhi = minPhi + phiBin * phiStep;
39 moduleR * sin(modulePhi), moduleZ));
47 double z,
double ringStagger, std::vector<double> phiStagger,
48 std::vector<double> phiSubStagger,
double innerRadius,
double outerRadius,
49 const std::vector<size_t>& discBinning,
50 const std::vector<double>& moduleHalfLength) {
52 std::vector<double> radii;
54 std::vector<double> radialBoarders;
56 double deltaR = outerRadius - innerRadius;
58 if (discBinning.size() == 1) {
59 radii.push_back(0.5 * (innerRadius + outerRadius));
60 radialBoarders = {innerRadius, outerRadius};
62 double totalLength = 0;
64 for (
auto& mhlength : moduleHalfLength)
65 totalLength += 2 * mhlength;
67 double rOverlap = (totalLength -
deltaR) / (moduleHalfLength.size() - 1);
69 double lastR = innerRadius;
73 radialBoarders.push_back(innerRadius);
75 for (
auto& mhlength : moduleHalfLength) {
77 radii.push_back(lastR + lastHl - lastOl + mhlength);
78 lastR = radii[radii.size() - 1];
82 radialBoarders.push_back(lastR + 2 * lastHl - 0.5 * lastOl);
86 std::vector<std::vector<Acts::Vector3D>> mPositions;
87 for (
size_t ir = 0; ir < radii.size(); ++ir) {
90 double rz = radii.size() == 1
92 : (ir % 2 ? z + 0.5 * ringStagger : z - 0.5 * ringStagger);
94 double psStagger = phiSubStagger.size() ? phiSubStagger[ir] : 0.;
96 psStagger, discBinning[ir]));
104 double phiSubStagger,
107 std::vector<Acts::Vector3D> rPositions;
108 rPositions.reserve(nPhiBins);
110 double phiStep = 2 *
M_PI / (nPhiBins);
113 for (
size_t iphi = 0; iphi < size_t(nPhiBins); ++iphi) {
119 if (phiSubStagger != 0. && !(nPhiBins % 4)) {
123 }
else if (!((iphi + 1) % 4)) {
124 rzs = -phiSubStagger;
128 double phi = minPhi + iphi * phiStep;
130 double rz = iphi % 2 ? z - 0.5 * phiStagger : z + 0.5 * phiStagger;
131 rPositions.push_back(