File indexing completed on 2025-06-03 00:12:14
0001
0002
0003
0004
0005
0006 #ifndef L1Trigger_TrackerTFP_TrackQuality_h
0007 #define L1Trigger_TrackerTFP_TrackQuality_h
0008
0009 #include "FWCore/Framework/interface/data_default_record_trait.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0012 #include "L1Trigger/TrackerTFP/interface/DataFormats.h"
0013
0014 #include <vector>
0015 #include <string>
0016 #include <cmath>
0017 #include "ap_fixed.h"
0018
0019 namespace trackerTFP {
0020
0021
0022 static constexpr int widthMVA_ = TTTrack_TrackWord::TrackBitWidths::kMVAQualitySize;
0023
0024 static constexpr int numBinsMVA_ = 1 << widthMVA_;
0025
0026 static constexpr int numBinsChi2B_ = 1 << TTTrack_TrackWord::TrackBitWidths::kBendChi2Size;
0027
0028 static constexpr int numBinschi2rphi_ = 1 << TTTrack_TrackWord::TrackBitWidths::kChi2RPhiSize;
0029
0030 static constexpr int numBinschi2rz_ = 1 << TTTrack_TrackWord::TrackBitWidths::kChi2RZSize;
0031
0032
0033 enum class VariableTQ { begin, m20 = begin, m21, invV0, invV1, chi2rphi, chi2rz, end, x };
0034
0035 inline constexpr int operator+(VariableTQ v) { return static_cast<int>(v); }
0036
0037 inline constexpr VariableTQ operator+(VariableTQ v, int i) { return VariableTQ(+v + i); }
0038
0039
0040 struct ConfigTQ {
0041 edm::FileInPath model_;
0042 std::vector<std::string> featureNames_;
0043 double baseShiftCot_;
0044 double baseShiftZ0_;
0045 double baseShiftAPfixed_;
0046 int chi2rphiConv_;
0047 int chi2rzConv_;
0048 int weightBinFraction_;
0049 int dzTruncation_;
0050 int dphiTruncation_;
0051 int widthM20_;
0052 int widthM21_;
0053 int widthInvV0_;
0054 int widthInvV1_;
0055 int widthchi2rphi_;
0056 int widthchi2rz_;
0057 int baseShiftchi2rphi_;
0058 int baseShiftchi2rz_;
0059 };
0060
0061
0062 template <VariableTQ v>
0063 DataFormat makeDataFormat(const DataFormats* dataFormats, const ConfigTQ& iConfig);
0064
0065
0066
0067 template <>
0068 DataFormat makeDataFormat<VariableTQ::m20>(const DataFormats* dataFormats, const ConfigTQ& iConfig);
0069 template <>
0070 DataFormat makeDataFormat<VariableTQ::m21>(const DataFormats* dataFormats, const ConfigTQ& iConfig);
0071 template <>
0072 DataFormat makeDataFormat<VariableTQ::invV0>(const DataFormats* dataFormats, const ConfigTQ& iConfig);
0073 template <>
0074 DataFormat makeDataFormat<VariableTQ::invV1>(const DataFormats* dataFormats, const ConfigTQ& iConfig);
0075 template <>
0076 DataFormat makeDataFormat<VariableTQ::chi2rphi>(const DataFormats* dataFormats, const ConfigTQ& iConfig);
0077 template <>
0078 DataFormat makeDataFormat<VariableTQ::chi2rz>(const DataFormats* dataFormats, const ConfigTQ& iConfig);
0079
0080
0081
0082
0083
0084
0085
0086
0087 class TrackQuality {
0088 public:
0089 TrackQuality() {}
0090 TrackQuality(const ConfigTQ& iConfig, const DataFormats* dataFormats);
0091 ~TrackQuality() = default;
0092
0093 struct Track {
0094 Track(const tt::FrameTrack& frameTrack, const tt::StreamStub& streamStub, const TrackQuality* tq);
0095
0096 tt::FrameTrack frameTrack_;
0097
0098 tt::Frame frame_;
0099
0100 tt::StreamStub streamStub_;
0101 };
0102
0103 const DataFormats* dataFormats() const { return dataFormats_; }
0104
0105 std::vector<float> featureTransform(TTTrack<Ref_Phase2TrackerDigi_>& aTrack,
0106 const std::vector<std::string>& featureNames) const;
0107
0108 void setL1TrackQuality(TTTrack<Ref_Phase2TrackerDigi_>& aTrack) const;
0109
0110 int toBinMVA(double mva) const;
0111
0112 int toBinChi2B(double chi2B) const;
0113
0114 int toBinchi2rphi(double chi2rphi) const;
0115
0116 int toBinchi2rz(double chi2rz) const;
0117
0118 double scaleCot(int cot) const { return scaleAP(scale(cot, baseShiftCot_)); }
0119
0120 double scaleZ0(int z0) const { return scaleAP(scale(z0, baseShiftZ0_)); }
0121
0122 const DataFormat& format(VariableTQ v) const { return dataFormatsTQ_[+v]; }
0123
0124 double base(VariableTQ v) const { return dataFormatsTQ_[+v].base(); }
0125
0126 double range(VariableTQ v) const { return dataFormatsTQ_[+v].range(); }
0127
0128 const edm::FileInPath& model() const { return model_; }
0129
0130 private:
0131
0132 template <VariableTQ v = VariableTQ::begin>
0133 void fillDataFormats(const ConfigTQ& iConfig);
0134
0135 constexpr std::array<double, numBinsMVA_> mvaPreSigBins() const;
0136
0137 static constexpr double invSigmoid(double value) { return -log(1. / value - 1.); }
0138
0139 template <class T>
0140 int toBin(const T& bins, double d) const;
0141
0142 int scale(int i, int shift) const { return floor(i * pow(2., shift)); }
0143
0144 double scaleAP(int i) const { return i * pow(2., baseShiftAPfixed_); }
0145
0146 const DataFormats* dataFormats_;
0147
0148 ConfigTQ iConfig_;
0149
0150 edm::FileInPath model_;
0151
0152 std::vector<std::string> featureNames_;
0153
0154 double baseShiftCot_;
0155
0156 double baseShiftZ0_;
0157
0158 double baseShiftAPfixed_;
0159
0160 int chi2rphiConv_;
0161
0162 int chi2rzConv_;
0163
0164 int weightBinFraction_;
0165
0166 int dzTruncation_;
0167
0168 int dphiTruncation_;
0169
0170 std::vector<DataFormat> dataFormatsTQ_;
0171 };
0172
0173 }
0174
0175 EVENTSETUP_DATA_DEFAULT_RECORD(trackerTFP::TrackQuality, trackerTFP::DataFormatsRcd);
0176
0177 #endif