File indexing completed on 2024-07-16 02:43:03
0001 #ifndef L1Trigger_Phase2L1GMT_KMTFLUTS_h
0002 #define L1Trigger_Phase2L1GMT_KMTFLUTS_h
0003 #include <cstdlib>
0004 #include "TH1.h"
0005 #include "TFile.h"
0006 #include <map>
0007 #include "FWCore/ParameterSet/interface/FileInPath.h"
0008
0009 namespace Phase2L1GMT {
0010
0011 class KMTFLUTs {
0012 public:
0013 KMTFLUTs(const std::string &filename) {
0014 edm::FileInPath path(filename);
0015 lutFile_ = new TFile(path.fullPath().c_str());
0016 lut_[3 * 64 + 8] = (TH1 *)lutFile_->Get("gain_8_3");
0017 lut_[2 * 64 + 8] = (TH1 *)lutFile_->Get("gain_8_2");
0018 lut_[2 * 64 + 12] = (TH1 *)lutFile_->Get("gain_12_2");
0019 lut_[2 * 64 + 4] = (TH1 *)lutFile_->Get("gain_4_2");
0020 lut_[1 * 64 + 12] = (TH1 *)lutFile_->Get("gain_12_1");
0021 lut_[1 * 64 + 10] = (TH1 *)lutFile_->Get("gain_10_1");
0022 lut_[1 * 64 + 6] = (TH1 *)lutFile_->Get("gain_6_1");
0023 lut_[1 * 64 + 14] = (TH1 *)lutFile_->Get("gain_14_1");
0024 lut_[3] = (TH1 *)lutFile_->Get("gain_3_0");
0025 lut_[5] = (TH1 *)lutFile_->Get("gain_5_0");
0026 lut_[6] = (TH1 *)lutFile_->Get("gain_6_0");
0027 lut_[7] = (TH1 *)lutFile_->Get("gain_7_0");
0028 lut_[9] = (TH1 *)lutFile_->Get("gain_9_0");
0029 lut_[10] = (TH1 *)lutFile_->Get("gain_10_0");
0030 lut_[11] = (TH1 *)lutFile_->Get("gain_11_0");
0031 lut_[12] = (TH1 *)lutFile_->Get("gain_12_0");
0032 lut_[13] = (TH1 *)lutFile_->Get("gain_13_0");
0033 lut_[14] = (TH1 *)lutFile_->Get("gain_14_0");
0034 lut_[15] = (TH1 *)lutFile_->Get("gain_15_0");
0035
0036 lut2HH_[3 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_3_HH");
0037 lut2HH_[2 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_2_HH");
0038 lut2HH_[2 * 64 + 4] = (TH1 *)lutFile_->Get("gain2_4_2_HH");
0039 lut2HH_[1 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_1_HH");
0040 lut2HH_[1 * 64 + 4] = (TH1 *)lutFile_->Get("gain2_4_1_HH");
0041 lut2HH_[1 * 64 + 2] = (TH1 *)lutFile_->Get("gain2_2_1_HH");
0042
0043 lut2LH_[3 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_3_LH");
0044 lut2LH_[2 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_2_LH");
0045 lut2LH_[2 * 64 + 4] = (TH1 *)lutFile_->Get("gain2_4_2_LH");
0046 lut2LH_[1 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_1_LH");
0047 lut2LH_[1 * 64 + 4] = (TH1 *)lutFile_->Get("gain2_4_1_LH");
0048 lut2LH_[1 * 64 + 2] = (TH1 *)lutFile_->Get("gain2_2_1_LH");
0049
0050 lut2HL_[3 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_3_HL");
0051 lut2HL_[2 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_2_HL");
0052 lut2HL_[2 * 64 + 4] = (TH1 *)lutFile_->Get("gain2_4_2_HL");
0053 lut2HL_[1 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_1_HL");
0054 lut2HL_[1 * 64 + 4] = (TH1 *)lutFile_->Get("gain2_4_1_HL");
0055 lut2HL_[1 * 64 + 2] = (TH1 *)lutFile_->Get("gain2_2_1_HL");
0056
0057 lut2LL_[3 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_3_LL");
0058 lut2LL_[2 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_2_LL");
0059 lut2LL_[2 * 64 + 4] = (TH1 *)lutFile_->Get("gain2_4_2_LL");
0060 lut2LL_[1 * 64 + 8] = (TH1 *)lutFile_->Get("gain2_8_1_LL");
0061 lut2LL_[1 * 64 + 4] = (TH1 *)lutFile_->Get("gain2_4_1_LL");
0062 lut2LL_[1 * 64 + 2] = (TH1 *)lutFile_->Get("gain2_2_1_LL");
0063
0064 coarseEta_ = (TH1 *)lutFile_->Get("coarseETALUT");
0065 }
0066
0067 ~KMTFLUTs() {
0068 lutFile_->Close();
0069 if (lutFile_ != nullptr)
0070 delete lutFile_;
0071 }
0072
0073 std::vector<float> trackGain(uint step, uint bitmask, uint K) {
0074 std::vector<float> gain(4, 0.0);
0075 const TH1 *h = lut_[64 * step + bitmask];
0076 gain[0] = h->GetBinContent(K + 1);
0077 gain[2] = h->GetBinContent(1024 + K + 1);
0078 return gain;
0079 }
0080
0081 std::vector<float> trackGain2(uint step, uint bitmask, uint K, uint qual1, uint qual2) {
0082 std::vector<float> gain(4, 0.0);
0083 const TH1 *h;
0084 if (qual1 < 6) {
0085 if (qual2 < 6)
0086 h = lut2LL_[64 * step + bitmask];
0087 else
0088 h = lut2LH_[64 * step + bitmask];
0089 } else {
0090 if (qual2 < 6)
0091 h = lut2HL_[64 * step + bitmask];
0092 else
0093 h = lut2HH_[64 * step + bitmask];
0094 }
0095 gain[0] = h->GetBinContent(K + 1);
0096 gain[1] = h->GetBinContent(512 + K + 1);
0097 gain[2] = h->GetBinContent(2 * 512 + K + 1);
0098 gain[3] = h->GetBinContent(3 * 512 + K + 1);
0099 return gain;
0100 }
0101
0102 std::pair<float, float> vertexGain(uint bitmask, uint K) {
0103 const TH1 *h = lut_[bitmask];
0104 std::pair<float, float> gain(-h->GetBinContent(K + 1), -h->GetBinContent(1024 + K + 1));
0105 return gain;
0106 }
0107
0108 uint coarseEta(uint mask) {
0109 return uint((1 << 12) * coarseEta_->GetBinContent(coarseEta_->GetXaxis()->FindBin(mask)) / M_PI);
0110 }
0111
0112 TFile *lutFile_;
0113 std::map<uint, const TH1 *> lut_;
0114 std::map<uint, const TH1 *> lut2HH_;
0115 std::map<uint, const TH1 *> lut2LH_;
0116 std::map<uint, const TH1 *> lut2HL_;
0117 std::map<uint, const TH1 *> lut2LL_;
0118 const TH1 *coarseEta_;
0119 };
0120
0121 }
0122 #endif