Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-06 01:33:36

0001 #ifndef RecoTracker_LSTCore_interface_alpaka_Common_h
0002 #define RecoTracker_LSTCore_interface_alpaka_Common_h
0003 
0004 #include <numbers>
0005 
0006 #include "FWCore/Utilities/interface/HostDeviceConstant.h"
0007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0008 #include "RecoTracker/LSTCore/interface/Common.h"
0009 
0010 namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
0011 
0012   using namespace ::lst;
0013 
0014   ALPAKA_FN_HOST ALPAKA_FN_INLINE void lstWarning(std::string_view warning) {
0015 #ifdef LST_STANDALONE
0016     printf("%s\n", warning.data());
0017 #else
0018     edm::LogWarning("LST") << warning;
0019 #endif
0020   }
0021 
0022   // The constants below are usually used in functions like alpaka::math::min(),
0023   // expecting a reference (T const&) in the arguments. Hence,
0024   // HOST_DEVICE_CONSTANT needs to be used instead of constexpr.
0025 
0026   HOST_DEVICE_CONSTANT float kPi = std::numbers::pi_v<float>;
0027   // 15 MeV constant from the approximate Bethe-Bloch formula
0028   HOST_DEVICE_CONSTANT float kMulsInGeV = 0.015;
0029   HOST_DEVICE_CONSTANT float kMiniMulsPtScaleBarrel[6] = {0.0052, 0.0038, 0.0034, 0.0034, 0.0032, 0.0034};
0030   HOST_DEVICE_CONSTANT float kMiniMulsPtScaleEndcap[5] = {0.006, 0.006, 0.006, 0.006, 0.006};
0031   HOST_DEVICE_CONSTANT float kMiniRminMeanBarrel[6] = {
0032       25.007152356, 37.2186993757, 52.3104270826, 68.6658656666, 85.9770373007, 108.301772384};
0033   HOST_DEVICE_CONSTANT float kMiniRminMeanEndcap[5] = {
0034       130.992832231, 154.813883559, 185.352604327, 221.635123002, 265.022076742};
0035   HOST_DEVICE_CONSTANT float k2Rinv1GeVf = (2.99792458e-3 * 3.8) / 2;
0036   HOST_DEVICE_CONSTANT float kR1GeVf = 1. / (2.99792458e-3 * 3.8);
0037   HOST_DEVICE_CONSTANT float kSinAlphaMax = 0.95;
0038   HOST_DEVICE_CONSTANT float kDeltaZLum = 15.0;
0039   HOST_DEVICE_CONSTANT float kPixelPSZpitch = 0.15;
0040   HOST_DEVICE_CONSTANT float kStripPSZpitch = 2.4;
0041   HOST_DEVICE_CONSTANT float kStrip2SZpitch = 5.0;
0042   HOST_DEVICE_CONSTANT float kWidth2S = 0.009;
0043   HOST_DEVICE_CONSTANT float kWidthPS = 0.01;
0044   HOST_DEVICE_CONSTANT float kPt_betaMax = 7.0;
0045   // To be updated with std::numeric_limits<float>::infinity() in the code and data files
0046   HOST_DEVICE_CONSTANT float kVerticalModuleSlope = 123456789.0;
0047 
0048   HOST_DEVICE_CONSTANT float kMiniDeltaTilted[3] = {0.26f, 0.26f, 0.26f};
0049   HOST_DEVICE_CONSTANT float kMiniDeltaFlat[6] = {0.26f, 0.16f, 0.16f, 0.18f, 0.18f, 0.18f};
0050   HOST_DEVICE_CONSTANT float kMiniDeltaLooseTilted[3] = {0.4f, 0.4f, 0.4f};
0051   HOST_DEVICE_CONSTANT float kMiniDeltaEndcap[5][15] = {
0052       {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f},
0053       {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f},
0054       {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f},
0055       {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f},
0056       {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}};
0057 
0058   namespace dnn {
0059 
0060     // Common constants for both DNNs
0061     HOST_DEVICE_CONSTANT float kPhi_norm = kPi;
0062     HOST_DEVICE_CONSTANT float kEtaSize = 0.25f;  // Bin size in eta.
0063     constexpr unsigned int kPtBins = 2;
0064     constexpr unsigned int kEtaBins = 10;
0065 
0066     namespace plsembdnn {
0067       HOST_DEVICE_CONSTANT float kEta_norm = 4.0f;
0068       HOST_DEVICE_CONSTANT float kEtaErr_norm = 0.00139f;
0069       HOST_DEVICE_CONSTANT float kWP[kEtaBins] = {
0070           0.9235f, 0.8974f, 0.9061f, 0.9431f, 0.8262f, 0.7998f, 0.7714f, 0.7017f, 0.6749f, 0.6624f};
0071     }  // namespace plsembdnn
0072 
0073     namespace t3dnn {
0074       HOST_DEVICE_CONSTANT float kEta_norm = 2.5f;
0075       HOST_DEVICE_CONSTANT float kZ_max = 224.149505f;
0076       HOST_DEVICE_CONSTANT float kR_max = 98.932365f;
0077       HOST_DEVICE_CONSTANT unsigned int kOutputFeatures = 3;
0078       HOST_DEVICE_CONSTANT float kWp_prompt[kPtBins][kEtaBins] = {
0079           {0.4957f, 0.5052f, 0.5201f, 0.5340f, 0.4275f, 0.4708f, 0.4890f, 0.4932f, 0.5400f, 0.5449f},
0080           {0.0302f, 0.0415f, 0.0994f, 0.1791f, 0.1960f, 0.2467f, 0.3227f, 0.3242f, 0.2367f, 0.2187f}};
0081       HOST_DEVICE_CONSTANT float kWp_displaced[kPtBins][kEtaBins] = {
0082           {0.0334f, 0.0504f, 0.0748f, 0.0994f, 0.1128f, 0.1123f, 0.1118f, 0.1525f, 0.1867f, 0.1847f},
0083           {0.0091f, 0.0075f, 0.0350f, 0.0213f, 0.0435f, 0.0676f, 0.1957f, 0.1649f, 0.1080f, 0.1046f}};
0084     }  // namespace t3dnn
0085 
0086     namespace t5dnn {
0087       HOST_DEVICE_CONSTANT float kEta_norm = 2.5f;
0088       HOST_DEVICE_CONSTANT float kZ_max = 267.2349854f;
0089       HOST_DEVICE_CONSTANT float kR_max = 110.1099396f;
0090       HOST_DEVICE_CONSTANT float kWp[kPtBins][kEtaBins] = {
0091           {0.4493f, 0.4939f, 0.5715f, 0.6488f, 0.5709f, 0.5938f, 0.7164f, 0.7565f, 0.8103f, 0.8593f},
0092           {0.4488f, 0.4448f, 0.5067f, 0.5929f, 0.4836f, 0.4112f, 0.4968f, 0.4403f, 0.5597f, 0.5067f}};
0093     }  // namespace t5dnn
0094 
0095     namespace pt3dnn {
0096       HOST_DEVICE_CONSTANT float kEta_norm = 2.5f;
0097       HOST_DEVICE_CONSTANT float kWp[kEtaBins] = {
0098           0.189f, 0.1805f, 0.2267f, 0.3104f, 0.4719f, 0.3159f, 0.1372f, 0.1571f, 0.3198f, 0.186f};
0099       HOST_DEVICE_CONSTANT float kWpHigh = 0.0473f;
0100     }  // namespace pt3dnn
0101 
0102   }  // namespace dnn
0103 
0104 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst
0105 #endif