Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-06-04 04:35:10

0001 /*
0002 Track Quality Header file
0003 C.Brown 28/07/20
0004 */
0005 
0006 #ifndef L1Trigger_TrackTrigger_interface_L1TrackQuality_h
0007 #define L1Trigger_TrackTrigger_interface_L1TrackQuality_h
0008 
0009 #include <iostream>
0010 #include <set>
0011 #include <vector>
0012 #include <memory>
0013 #include <string>
0014 
0015 #include "FWCore/Framework/interface/Event.h"
0016 #include "FWCore/Framework/interface/EventSetup.h"
0017 #include "FWCore/Framework/interface/Frameworkfwd.h"
0018 #include "FWCore/Framework/interface/MakerMacros.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0020 #include "DataFormats/L1TrackTrigger/interface/TTTrack.h"
0021 #include "DataFormats/L1TrackTrigger/interface/TTTrack_TrackWord.h"
0022 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0023 #include <memory>
0024 
0025 #include "conifer.h"
0026 #include "ap_fixed.h"
0027 
0028 class L1TrackQuality {
0029 public:
0030   //Default Constructor
0031   L1TrackQuality();
0032 
0033   L1TrackQuality(const edm::ParameterSet& qualityParams);
0034 
0035   //Default Destructor
0036   ~L1TrackQuality() = default;
0037 
0038   // Controls the conversion between TTTrack features and ML model training features
0039   std::vector<float> featureTransform(TTTrack<Ref_Phase2TrackerDigi_>& aTrack,
0040                                       std::vector<std::string> const& featureNames);
0041 
0042   // Passed by reference a track without MVA filled, method fills the track's MVA field
0043   void setL1TrackQuality(TTTrack<Ref_Phase2TrackerDigi_>& aTrack);
0044   // Function to run the BDT in isolation allowing a feature vector in the ap_fixed datatype to be passed
0045   // and a single output to be returned which is then used to fill the bits in the Track Word for situations
0046   // where a TTTrack datatype is unavailable to be passed to the track quality
0047   float runEmulatedTQ(std::vector<ap_fixed<10, 5>> inputFeatures);
0048 
0049   void setModel(edm::FileInPath const& model, std::vector<std::string> const& featureNames);
0050 
0051   void setBonusFeatures(std::vector<float> bonusFeatures);
0052 
0053   // TQ MVA bin conversions
0054   static constexpr double invSigmoid(double value) { return -log(1. / value - 1.); }
0055   static constexpr std::array<double, 1 << TTTrack_TrackWord::TrackBitWidths::kMVAQualitySize> getTqMVAPreSigBins() {
0056     return {{-16.,
0057              invSigmoid(TTTrack_TrackWord::tqMVABins[1]),
0058              invSigmoid(TTTrack_TrackWord::tqMVABins[2]),
0059              invSigmoid(TTTrack_TrackWord::tqMVABins[3]),
0060              invSigmoid(TTTrack_TrackWord::tqMVABins[4]),
0061              invSigmoid(TTTrack_TrackWord::tqMVABins[5]),
0062              invSigmoid(TTTrack_TrackWord::tqMVABins[6]),
0063              invSigmoid(TTTrack_TrackWord::tqMVABins[7])}};
0064   }
0065 
0066 private:
0067   // Private Member Data
0068   edm::FileInPath model_;
0069   std::vector<std::string> featureNames_;
0070   bool useHPH_;
0071   std::vector<float> bonusFeatures_;
0072 };
0073 #endif