File indexing completed on 2023-03-17 11:22:33
0001 #ifndef RecoTracker_MkFitCore_src_MaterialEffects_h
0002 #define RecoTracker_MkFitCore_src_MaterialEffects_h
0003
0004 #include "RecoTracker/MkFitCore/interface/Config.h"
0005
0006 #include <cmath>
0007
0008 namespace mkfit {
0009
0010 namespace Config {
0011
0012 constexpr float rangeZME = 300.;
0013 constexpr int nBinsZME = 300;
0014 constexpr float rangeRME = 120.;
0015 constexpr int nBinsRME = 120;
0016 }
0017
0018 class MaterialEffects {
0019 public:
0020 MaterialEffects();
0021
0022 int __attribute__((optimize("no-inline"))) getZbin(const float z) const {
0023 return (std::abs(z) * Config::nBinsZME) / (Config::rangeZME);
0024 }
0025 int __attribute__((optimize("no-inline"))) getRbin(const float r) const {
0026 return (r * Config::nBinsRME) / (Config::rangeRME);
0027 }
0028 float getRlVal(const int zb, const int rb) const { return mRlgridME[zb][rb]; }
0029 float getXiVal(const int zb, const int rb) const { return mXigridME[zb][rb]; }
0030
0031
0032
0033 int getDetId(const float zin, const float r) const {
0034 const float z = std::abs(zin);
0035
0036
0037 if (r < 17) {
0038
0039 if (z < 28) {
0040 if (r < 4) {
0041 if (z < 20)
0042 return 0;
0043 else
0044 return 1;
0045 }
0046 if (r < 8) {
0047 if (z < 20)
0048 return 2;
0049 else
0050 return 3;
0051 }
0052 if (r < 12) {
0053 if (z < 20)
0054 return 4;
0055 else
0056 return 5;
0057 }
0058 if (z < 20)
0059 return 6;
0060 else
0061 return 7;
0062 }
0063
0064
0065 if (z < 36) {
0066 if (r > 9.5 && z < 32.5)
0067 return 8;
0068 else
0069 return 9;
0070 }
0071 if (z < 45) {
0072 if (r > 9.5 && z < 40)
0073 return 10;
0074 else
0075 return 11;
0076 }
0077 if (z >= 45) {
0078 if (r > 9.5 && z < 49)
0079 return 12;
0080 else
0081 return 13;
0082 }
0083 }
0084
0085
0086 if (r < 55) {
0087
0088 if (z < 70) {
0089 if (r < 29) {
0090 if (z < 22)
0091 return 14;
0092 else
0093 return 15;
0094 }
0095 if (r < 38) {
0096 if (z < 25)
0097 return 16;
0098 else
0099 return 17;
0100 }
0101 if (r < 46) {
0102 if (z < 44)
0103 return 18;
0104 else
0105 return 19;
0106 }
0107 if (z < 50)
0108 return 20;
0109 else
0110 return 21;
0111 }
0112
0113
0114 if (z > 70 && z < 120) {
0115 if (r > 35 && z < 80)
0116 return 22;
0117 else if (z < 86)
0118 return 23;
0119 else if (r > 35 && z < 92)
0120 return 24;
0121 else if (z < 98)
0122 return 25;
0123 else if (r > 35 && z < 104)
0124 return 26;
0125 else
0126 return 27;
0127 }
0128 }
0129
0130
0131 if (r < 120 && z < 120) {
0132 if (r < 65) {
0133 if (z < 17)
0134 return 28;
0135 else if (z < 70)
0136 return 29;
0137 else
0138 return 30;
0139 }
0140 if (r < 75) {
0141 if (z < 17)
0142 return 31;
0143 else if (z < 70)
0144 return 32;
0145 else
0146 return 33;
0147 }
0148 if (r < 82) {
0149 if (z < 17)
0150 return 34;
0151 else if (z < 70)
0152 return 35;
0153 else
0154 return 36;
0155 }
0156 if (r < 90) {
0157 if (z < 17)
0158 return 37;
0159 else if (z < 70)
0160 return 38;
0161 else
0162 return 39;
0163 }
0164 if (r < 100) {
0165 if (z < 17)
0166 return 40;
0167 else if (z < 70)
0168 return 41;
0169 else
0170 return 42;
0171 }
0172 if (z < 17)
0173 return 43;
0174 else if (z < 70)
0175 return 44;
0176 else
0177 return 45;
0178 }
0179
0180
0181 if (z > 120 && r < 120) {
0182 if (z < 128) {
0183 if (r < 35)
0184 return 46;
0185 else if (r < 55)
0186 return 47;
0187 else if (r < 80)
0188 return 48;
0189 else
0190 return 49;
0191 }
0192 if (z < 132) {
0193 if (r < 45)
0194 return 50;
0195 else if (r < 70)
0196 return 51;
0197 else
0198 return 52;
0199 }
0200 if (z < 136) {
0201 if (r < 35)
0202 return 53;
0203 else if (r < 55)
0204 return 54;
0205 else if (r < 80)
0206 return 55;
0207 else
0208 return 56;
0209 }
0210 if (z < 138) {
0211 if (r < 45)
0212 return 57;
0213 else if (r < 70)
0214 return 58;
0215 else
0216 return 59;
0217 }
0218 if (z < 142) {
0219 if (r < 35)
0220 return 60;
0221 else if (r < 55)
0222 return 61;
0223 else if (r < 80)
0224 return 62;
0225 else
0226 return 63;
0227 }
0228 if (z < 146) {
0229 if (r < 45)
0230 return 64;
0231 else
0232 return 65;
0233 }
0234 if (z < 150) {
0235 if (r < 35)
0236 return 66;
0237 else if (r < 55)
0238 return 67;
0239 else if (r < 80)
0240 return 68;
0241 else
0242 return 69;
0243 }
0244 if (z < 153) {
0245 if (r < 45)
0246 return 70;
0247 else
0248 return 71;
0249 }
0250 if (z < 156) {
0251 if (r < 35)
0252 return 72;
0253 else if (r < 55)
0254 return 73;
0255 else if (r < 80)
0256 return 74;
0257 else
0258 return 75;
0259 }
0260 if (z < 160) {
0261 if (r < 45)
0262 return 76;
0263 else
0264 return 77;
0265 }
0266 if (z < 164) {
0267 if (r < 35)
0268 return 78;
0269 else if (r < 55)
0270 return 79;
0271 else if (r < 80)
0272 return 80;
0273 else
0274 return 81;
0275 }
0276 if (z < 167) {
0277 if (r < 45)
0278 return 82;
0279 else
0280 return 83;
0281 }
0282
0283 if (z < 170) {
0284 if (r < 55)
0285 return 84;
0286 else if (r < 80)
0287 return 85;
0288 else
0289 return 86;
0290 }
0291 if (z < 174) {
0292 if (r < 45)
0293 return 87;
0294 else
0295 return 88;
0296 }
0297
0298 if (z < 177.3) {
0299 if (r < 55)
0300 return 89;
0301 else if (r < 80)
0302 return 90;
0303 else
0304 return 91;
0305 }
0306 if (z < 181) {
0307 if (r < 45)
0308 return 92;
0309 else
0310 return 93;
0311 }
0312
0313 if (z < 185) {
0314 if (r < 55)
0315 return 94;
0316 else if (r < 80)
0317 return 95;
0318 else
0319 return 96;
0320 }
0321 if (z < 188.5) {
0322 if (r < 45)
0323 return 97;
0324 else
0325 return 98;
0326 }
0327
0328 if (z < 192) {
0329 if (r < 55)
0330 return 99;
0331 else if (r < 80)
0332 return 100;
0333 else
0334 return 101;
0335 }
0336 if (z < 195) {
0337 if (r < 45)
0338 return 102;
0339 else
0340 return 103;
0341 }
0342
0343 if (z < 202) {
0344 if (r < 55)
0345 return 104;
0346 else if (r < 80)
0347 return 105;
0348 else
0349 return 106;
0350 }
0351 if (z < 206) {
0352 if (r < 45)
0353 return 107;
0354 else
0355 return 108;
0356 }
0357
0358 if (z < 210) {
0359 if (r < 55)
0360 return 109;
0361 else if (r < 80)
0362 return 110;
0363 else
0364 return 111;
0365 }
0366 if (z < 212) {
0367 if (r < 45)
0368 return 112;
0369 else
0370 return 113;
0371 }
0372
0373 if (z < 222) {
0374 if (r < 55)
0375 return 114;
0376 else if (r < 80)
0377 return 115;
0378 else
0379 return 116;
0380 }
0381 if (z < 224)
0382 return 117;
0383
0384 if (z < 228) {
0385 if (r < 55)
0386 return 118;
0387 else if (r < 80)
0388 return 119;
0389 else
0390 return 120;
0391 }
0392 if (z < 232)
0393 return 121;
0394
0395 if (z < 241) {
0396 if (r < 55)
0397 return 122;
0398 else if (r < 80)
0399 return 123;
0400 else
0401 return 124;
0402 }
0403 if (z < 245)
0404 return 125;
0405
0406 if (z < 248) {
0407 if (r < 55)
0408 return 126;
0409 else if (r < 80)
0410 return 127;
0411 else
0412 return 128;
0413 }
0414 if (z < 252)
0415 return 129;
0416
0417 if (z < 264) {
0418 if (r < 80)
0419 return 130;
0420 else
0421 return 131;
0422 }
0423 if (z < 267)
0424 return 132;
0425
0426 if (z < 270) {
0427 if (r < 80)
0428 return 133;
0429 else
0430 return 134;
0431 }
0432 if (z < 280)
0433 return 135;
0434 }
0435 return -1;
0436 }
0437
0438 private:
0439 float mRlgridME[Config::nBinsZME][Config::nBinsRME];
0440 float mXigridME[Config::nBinsZME][Config::nBinsRME];
0441 };
0442
0443 namespace Config {
0444 extern const MaterialEffects materialEff;
0445 }
0446 }
0447 #endif