Back to home page

Project CMSSW displayed by LXR

 
 

    


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     // config for material effects in cmssw
0012     constexpr float rangeZME = 300.;
0013     constexpr int nBinsZME = 300;
0014     constexpr float rangeRME = 120.;
0015     constexpr int nBinsRME = 120;
0016   }  // namespace Config
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     /// (z,r) grid to material bin/det mapping for Rad length (Rl) and Xi arrays
0032     // see https://indico.cern.ch/event/924564/contributions/3885164/attachments/2097314/
0033     int getDetId(const float zin, const float r) const {
0034       const float z = std::abs(zin);
0035 
0036       //pixel
0037       if (r < 17) {
0038         //pixel barrel
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         //pixel endcap
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       //TIB & TID
0086       if (r < 55) {
0087         //TIB
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         //TID
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       //TOB
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       //TEC
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   };  // class MaterialEffects
0442 
0443   namespace Config {
0444     extern const MaterialEffects materialEff;
0445   }
0446 }  // end namespace mkfit
0447 #endif