27 #include "GaudiKernel/SystemOfUnits.h"
41 declareInterface<IMuidCaloMaterialParam>(
this);
71 return StatusCode::FAILURE;
76 if (lay->Z() > 0.) { lay->print(); }
80 return StatusCode::SUCCESS;
88 <<
" innerSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" backwards bin " <<
bin);
90 }
else if (eta > 0.) {
95 <<
" innerSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" forward bin " <<
bin);
100 <<
" innerSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" forward bin 0");
111 <<
" middleSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" backwards bin " <<
bin);
113 }
else if (eta > 0.) {
118 <<
" middleSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" forward bin " <<
bin);
123 <<
" middleSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" forward bin 0");
134 <<
" outerSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" backwards bin " <<
bin);
136 }
else if (eta > 0.) {
141 <<
" outerSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" forward bin " <<
bin);
146 <<
" outerSurface: eta " << std::setw(7) << std::setprecision(3) << eta <<
" forward bin 0");
157 }
else if (eta > 0.) {
171 std::unique_ptr<Trk::TrackParameters> param_clone = trackParameters.
uniqueClone();
173 auto materialEffects =
174 std::make_unique<Trk::MaterialEffectsOnTrack>(thickness, param_clone->
associatedSurface());
177 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes>
pattern(0);
180 ATH_MSG_VERBOSE(
" trackStateOnSurface::Scatterer with radiationThickness " << thickness);
182 return std::make_unique<Trk::TrackStateOnSurface>(
184 std::move(param_clone),
185 std::move(materialEffects),
195 double halfZLength = cotThetaWidth *
r;
196 if (std::abs(eta) < 1.4) {
197 std::unique_ptr<Trk::CylinderSurface> surf = std::make_unique<Trk::CylinderSurface>(
transform,
r, halfZLength);
201 double halfRLength = halfZLength *
r / std::abs(
z);
202 std::unique_ptr<Trk::DiscSurface> surf = std::make_unique<Trk::DiscSurface>(
transform,
r - halfRLength,
r + halfRLength);
206 ATH_MSG_ERROR(
"The code should actually never reach this branch");
212 constexpr
int N = 277;
213 if (
static_cast<int>(
m_numberBins) !=
N)
return StatusCode::FAILURE;
219 const double mean[
N] = {
220 2.90896, 2.85532, 2.83093, 2.8064, 2.76147, 2.77842, 2.84819, 2.85462, 2.84207, 2.8698, 2.85196, 2.85928, 2.86565, 2.85887,
221 2.86074, 2.86888, 2.87614, 2.88714, 2.89461, 2.88509, 2.89893, 2.90348, 2.9149, 2.92062, 2.93808, 2.93909, 2.95316, 2.96446,
222 2.95808, 2.9744, 2.98252, 2.99579, 3.0031, 3.00655, 3.01533, 3.02955, 3.0375, 3.04185, 3.04363, 3.06828, 3.07989, 3.08877,
223 3.10764, 3.11947, 3.14111, 3.14608, 3.16545, 3.1774, 3.19129, 3.20832, 3.21966, 3.2294, 3.2477, 3.26422, 3.28213, 3.29407,
224 3.31355, 3.31759, 3.33572, 3.36416, 3.38337, 3.40047, 3.42178, 3.44093, 3.46112, 3.469, 3.48594, 3.50981, 3.49446, 3.48858,
225 3.47374, 3.5025, 3.53872, 3.53273, 3.47625, 3.44053, 3.44348, 3.49941, 3.54464, 3.60332, 3.71618, 3.75569, 3.80481, 3.84988,
226 3.88482, 3.90896, 3.93518, 3.96212, 3.98705, 4.03085, 4.0863, 4.1386, 4.18874, 4.24235, 4.28526, 4.33191, 4.37922, 4.42264,
227 4.47627, 4.52819, 4.58994, 4.64149, 4.69026, 4.74336, 4.78171, 4.81408, 4.84981, 4.88344, 4.9096, 4.94122, 4.96842, 4.99079,
228 5.02283, 5.06858, 5.08828, 5.12193, 5.15831, 5.1959, 5.22796, 5.26302, 5.28034, 5.31236, 5.30035, 5.28938, 5.30971, 5.30201,
229 5.3224, 5.33088, 5.27099, 5.21831, 5.23592, 5.24828, 5.26303, 5.26884, 5.29259, 5.30454, 5.32996, 5.34636, 5.34636, 5.36077,
230 5.36379, 5.3704, 5.37932, 5.38896, 5.39967, 5.40373, 5.41283, 5.44188, 5.42873, 5.43097, 5.4239, 5.40874, 5.41333, 5.40596,
231 5.39171, 5.37567, 5.35638, 5.31926, 5.29116, 5.26111, 5.23343, 5.20337, 5.17801, 5.15636, 5.14166, 5.16448, 5.16522, 5.13663,
232 5.11057, 5.09843, 5.14826, 5.11023, 5.11505, 5.13523, 5.15454, 5.17912, 5.21404, 5.246, 5.27176, 5.29481, 5.31911, 5.33475,
233 5.35133, 5.34602, 5.33701, 5.3328, 5.32425, 5.32026, 5.31533, 5.31104, 5.30473, 5.30016, 5.29413, 5.28658, 5.28047, 5.27475,
234 5.2677, 5.26156, 5.25584, 5.24831, 5.24262, 5.23702, 5.23091, 5.22422, 5.21841, 5.21265, 5.2077, 5.20334, 5.19879, 5.19395,
235 5.18991, 5.18564, 5.18073, 5.17633, 5.17276, 5.16907, 5.1658, 5.29633, 5.29401, 5.29103, 5.29047, 5.2896, 5.28996, 5.2899,
236 5.28791, 5.28734, 5.28593, 5.28437, 5.28506, 5.28519, 5.28436, 5.2837, 5.28259, 5.28195, 5.28128, 5.28153, 5.28072, 5.28068,
237 5.28069, 5.27997, 5.27685, 5.27733, 5.27693, 5.27541, 5.27407, 5.27409, 5.27443, 5.27419, 5.27407, 5.27377, 5.27264, 5.34869,
238 5.3483, 5.34923, 5.34963, 5.34951, 5.34925, 5.34931, 5.34959, 5.34892, 5.34872, 5.34848, 5.34837, 5.34681, 5.34619, 5.34639,
239 5.34711, 5.34672, 5.34638, 5.34594, 5.3456, 5.34591, 5.34566, 5.34428, 5.33676, 5.3333, 5.33278};
243 const double rms[
N] = {
244 0.823689, 0.805241, 0.817758, 0.805648, 0.802719, 0.829411, 0.808234, 0.796944, 0.813095, 0.826435, 0.811776, 0.819873,
245 0.823283, 0.818004, 0.819796, 0.820846, 0.82749, 0.822357, 0.818303, 0.822916, 0.834238, 0.821518, 0.835878, 0.826969,
246 0.83787, 0.835485, 0.837178, 0.842465, 0.839582, 0.850781, 0.847032, 0.848794, 0.849601, 0.85978, 0.85481, 0.86164,
247 0.866302, 0.866074, 0.869195, 0.874239, 0.880656, 0.881667, 0.888438, 0.886809, 0.89286, 0.892054, 0.903708, 0.900372,
248 0.904276, 0.912044, 0.917285, 0.92219, 0.927522, 0.931037, 0.935044, 0.938616, 0.941711, 0.946958, 0.950666, 0.95474,
249 0.967182, 0.970128, 0.975676, 0.97931, 0.984179, 0.988279, 0.995269, 1.00143, 0.999232, 0.998867, 0.999908, 1.02241,
250 1.0462, 1.05131, 1.03541, 1.02535, 1.03805, 1.07367, 1.09972, 1.12079, 1.13208, 1.15175, 1.17083, 1.18699,
251 1.20095, 1.22169, 1.24418, 1.26595, 1.28708, 1.30303, 1.31279, 1.32175, 1.329, 1.33418, 1.34, 1.34675,
252 1.35284, 1.36086, 1.368, 1.37633, 1.39387, 1.40353, 1.40547, 1.40902, 1.40658, 1.40523, 1.40309, 1.40089,
253 1.40122, 1.40212, 1.40281, 1.40877, 1.40972, 1.41208, 1.41789, 1.42165, 1.42453, 1.42954, 1.43856, 1.44613,
254 1.44894, 1.45408, 1.4347, 1.41351, 1.41201, 1.40167, 1.39811, 1.38846, 1.34956, 1.29556, 1.28353, 1.27768,
255 1.26644, 1.25752, 1.24987, 1.23723, 1.22353, 1.20934, 1.19558, 1.18253, 1.17099, 1.15867, 1.15074, 1.13651,
256 1.12275, 1.10774, 1.09431, 1.06622, 1.06609, 1.06611, 1.06505, 1.05314, 1.0261, 1.00457, 0.990423, 0.968341,
257 0.964148, 0.959084, 0.956413, 0.943587, 0.935617, 0.923163, 0.913453, 0.903224, 0.896578, 0.925755, 0.95124, 0.939449,
258 0.925327, 0.898027, 0.91426, 0.875688, 0.862338, 0.858283, 0.857438, 0.86037, 0.862203, 0.870719, 0.876149, 0.887925,
259 0.895045, 0.898852, 0.90329, 0.895159, 0.892505, 0.893056, 0.900081, 0.896356, 0.895693, 0.891834, 0.893339, 0.888931,
260 0.888282, 0.890026, 0.888641, 0.886521, 0.887356, 0.885548, 0.882484, 0.88512, 0.882618, 0.88119, 0.880995, 0.88102,
261 0.88134, 0.88315, 0.8824, 0.880437, 0.879697, 0.879628, 0.878431, 0.877552, 0.878481, 0.878691, 0.877373, 0.876806,
262 0.875456, 0.978556, 0.981988, 0.985465, 0.985556, 0.986936, 0.984079, 0.982189, 0.984073, 0.984913, 0.987486, 0.989538,
263 0.987139, 0.985936, 0.987119, 0.988206, 0.990297, 0.991416, 0.992575, 0.991251, 0.992607, 0.992754, 0.993668, 0.994706,
264 0.996367, 0.996439, 0.997143, 1.0003, 1.00234, 1.0024, 1.00091, 1.00194, 1.00287, 1.00385, 1.00475, 0.986361,
265 0.988892, 0.989372, 0.989529, 0.989478, 0.990144, 0.9908, 0.990212, 0.991309, 0.992435, 0.993439, 0.994017, 0.997914,
266 0.99955, 0.999073, 0.997491, 0.99844, 0.999279, 1.00009, 1.00086, 1.0004, 1.00093, 1.00345, 1.01321, 1.01864,
270 const double eta[
N] = {
271 0.005, 0.015, 0.025, 0.035, 0.045, 0.055, 0.065, 0.075, 0.085, 0.095, 0.105, 0.115, 0.125, 0.135, 0.145, 0.155, 0.165, 0.175,
272 0.185, 0.195, 0.205, 0.215, 0.225, 0.235, 0.245, 0.255, 0.265, 0.275, 0.285, 0.295, 0.305, 0.315, 0.325, 0.335, 0.345, 0.355,
273 0.365, 0.375, 0.385, 0.395, 0.405, 0.415, 0.425, 0.435, 0.445, 0.455, 0.465, 0.475, 0.485, 0.495, 0.505, 0.515, 0.525, 0.535,
274 0.545, 0.555, 0.565, 0.575, 0.585, 0.595, 0.605, 0.615, 0.625, 0.635, 0.645, 0.655, 0.665, 0.675, 0.685, 0.695, 0.705, 0.715,
275 0.725, 0.735, 0.745, 0.755, 0.765, 0.775, 0.785, 0.795, 0.805, 0.815, 0.825, 0.835, 0.845, 0.855, 0.865, 0.875, 0.885, 0.895,
276 0.905, 0.915, 0.925, 0.935, 0.945, 0.955, 0.965, 0.975, 0.985, 0.995, 1.005, 1.015, 1.025, 1.035, 1.045, 1.055, 1.065, 1.075,
277 1.085, 1.095, 1.105, 1.115, 1.125, 1.135, 1.145, 1.155, 1.165, 1.175, 1.185, 1.195, 1.205, 1.215, 1.225, 1.235, 1.245, 1.255,
278 1.265, 1.275, 1.285, 1.295, 1.305, 1.315, 1.325, 1.335, 1.345, 1.355, 1.365, 1.375, 1.385, 1.395, 1.405, 1.415, 1.425, 1.435,
279 1.445, 1.455, 1.465, 1.475, 1.485, 1.495, 1.505, 1.515, 1.525, 1.535, 1.545, 1.555, 1.565, 1.575, 1.585, 1.595, 1.605, 1.615,
280 1.625, 1.635, 1.645, 1.655, 1.665, 1.675, 1.685, 1.695, 1.705, 1.715, 1.725, 1.735, 1.745, 1.755, 1.765, 1.775, 1.785, 1.795,
281 1.805, 1.815, 1.825, 1.835, 1.845, 1.855, 1.865, 1.875, 1.885, 1.895, 1.905, 1.915, 1.925, 1.935, 1.945, 1.955, 1.965, 1.975,
282 1.985, 1.995, 2.005, 2.015, 2.025, 2.035, 2.045, 2.055, 2.065, 2.075, 2.085, 2.095, 2.105, 2.115, 2.125, 2.135, 2.145, 2.155,
283 2.165, 2.175, 2.185, 2.195, 2.205, 2.215, 2.225, 2.235, 2.245, 2.255, 2.265, 2.275, 2.285, 2.295, 2.305, 2.315, 2.325, 2.335,
284 2.345, 2.355, 2.365, 2.375, 2.385, 2.395, 2.405, 2.415, 2.425, 2.435, 2.445, 2.455, 2.465, 2.475, 2.485, 2.495, 2.505, 2.515,
285 2.525, 2.535, 2.545, 2.555, 2.565, 2.575, 2.585, 2.595, 2.605, 2.615, 2.625, 2.635, 2.645, 2.655, 2.665, 2.675, 2.685, 2.695,
286 2.705, 2.715, 2.725, 2.735, 2.745, 2.755, 2.765};
293 const double X0CaloLayers[
N] = {
294 54.1, 57.1, 51.25, 52.1, 54.4, 50.05, 53.9, 57.4, 55.4, 52.9, 55.95, 54.95, 53.85, 54.45, 54.45, 54.5, 54.1,
295 55.7, 56.7, 57.3, 54.95, 56.3, 54.65, 56.5, 55.25, 56.5, 56.8, 56.05, 57, 55.8, 57.1, 57.65, 57.95, 56.7,
296 58.1, 57.85, 58.25, 59.2, 60, 59.15, 58.85, 58.75, 58.5, 59.9, 59.75, 60.7, 59.75, 61.05, 61.3, 61.3, 61.45,
297 61.25, 61.85, 62.25, 62.65, 63.5, 63.9, 65, 64.9, 65.55, 64.5, 64.9, 65.1, 65.75, 66.5, 66.2, 66.4, 67.15,
298 65.75, 64.7, 63.2, 63.3, 63.85, 62.25, 59.75, 57.9, 57.25, 58.25, 58.75, 58.65, 56.15, 56.7, 58.25, 59.85, 60.9,
299 61, 60.8, 59.95, 58.75, 58.45, 58.95, 59.3, 59.9, 60.75, 61.9, 62.65, 63.35, 63.8, 63.7, 64, 62.9, 63.05,
300 63.55, 63.85, 65.55, 67.6, 69.65, 71.55, 72.95, 75, 76.9, 79, 81, 82.2, 84.05, 85.95, 87.75, 89.35, 90.65,
301 92.5, 93.5, 95.15, 95.35, 93.6, 93.65, 91.85, 89.65, 87.65, 83.25, 78.95, 77.2, 75.05, 73.65, 71.3, 69.85, 68.2,
302 65.95, 64.25, 63.1, 62.15, 60.85, 59.65, 58.55, 57.25, 56, 55.1, 53.95, 51.85, 51.15, 49.96, 49.29, 49.08, 48.515,
303 48.24, 47.92, 47.765, 47.875, 48.095, 48.355, 48.78, 49.015, 49.14, 48.98, 48.77, 49.03, 49.515, 49.245, 49.78, 50.45, 50.45,
304 51.9, 51.65, 53.15, 54.65, 56.5, 58.55, 60.9, 63.3, 65.25, 67.35, 69.4, 71.15, 72.85, 72.75, 72.55, 72.6, 72.6,
305 72.55, 72.55, 72.5, 72.55, 72.55, 72.6, 72.65, 72.75, 72.8, 72.9, 73.1, 73.25, 73.4, 73.5, 73.65, 73.75, 73.9,
306 74, 74.1, 74.2, 74.35, 74.4, 74.45, 74.5, 74.7, 74.95, 75, 75.05, 75.05, 75.1, 75.1, 75.15, 75.25, 75.2,
307 75.25, 75.05, 75.05, 75.3, 75.3, 75.3, 75.25, 75.25, 75.25, 75.3, 75.35, 75.4, 75.4, 75.4, 75.4, 75.45, 75.45,
308 75.5, 75.45, 75.3, 75.3, 75.3, 75.35, 75.4, 75.4, 75.45, 75.45, 75.5, 75.5, 75.6, 70.8, 70.75, 70.7, 70.7,
309 70.7, 70.75, 70.75, 70.7, 70.75, 70.7, 70.75, 70.85, 71.05, 71.1, 71.1, 71.15, 71.15, 71.2, 71.25, 71.25, 71.25,
310 71.3, 71.3, 71.6, 71.65, 71.7};
313 m_binSize = (eta[
N - 1] - eta[0]) / (
static_cast<double>(
N - 1));
318 <<
": expected/found eta " <<
etaBin <<
"/" << eta[
i]);
320 return StatusCode::FAILURE;
324 for (
int i = 0;
i !=
N; ++
i) {
333 double cotThetaWidth = 1. /
std::tan(thetaNext) - cosTheta / sinTheta;
355 double innerR[
N] = {0.};
356 double innerZ[
N] = {0.};
359 double outerR[
N] = {0.};
360 double outerZ[
N] = {0.};
361 for (
int i = 0;
i !=
N; ++
i) {
371 bool barrel = (eta[
i] <= 1.4);
375 std::make_unique<CaloLayer>(
outerSurface(-eta[
i]),
i, outerR[
i], -outerZ[
i], X0CaloLayers[
i], barrel));
377 std::make_unique<CaloLayer>(
outerSurface(eta[
i]),
i +
N, outerR[
i], outerZ[
i], X0CaloLayers[
i], barrel));
381 std::make_unique<CaloLayer>(
innerSurface(-eta[
i]),
i, innerR[
i], -innerZ[
i], X0CaloLayers[
i], barrel));
383 std::make_unique<CaloLayer>(
innerSurface(eta[
i]),
i +
N, innerR[
i], innerZ[
i], X0CaloLayers[
i], barrel));
387 if (std::abs(surfM->
center().z() + innerZ[
i]) > 0.001) {
388 ATH_MSG_ERROR(
" wrong surface " <<
i <<
" at eta " << eta[
i] <<
endmsg <<
": expected/found z " << -innerZ[
i] <<
"/"
390 return StatusCode::FAILURE;
393 if (std::abs(surfP->
center().z() - innerZ[
i]) > 0.001) {
394 ATH_MSG_ERROR(
" wrong surface " <<
i <<
" at eta " << eta[
i] <<
endmsg <<
": expected/found z " << innerZ[
i] <<
"/"
396 return StatusCode::FAILURE;
400 return StatusCode::SUCCESS;