Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-20 01:53:33

0001 #ifndef L1Trigger_Phase2L1ParticleFlow_HGC3DClusterEgID_h
0002 #define L1Trigger_Phase2L1ParticleFlow_HGC3DClusterEgID_h
0003 #include "FWCore/Framework/interface/Frameworkfwd.h"
0004 #include "FWCore/Framework/interface/stream/EDProducer.h"
0005 #include "FWCore/Framework/interface/Event.h"
0006 #include "FWCore/Framework/interface/MakerMacros.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 
0009 #include "DataFormats/L1THGCal/interface/HGCalMulticluster.h"
0010 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
0011 #include "CommonTools/Utils/interface/StringObjectFunction.h"
0012 
0013 #include "TMVA/Factory.h"
0014 #include "TMVA/Reader.h"
0015 
0016 #include <vector>
0017 #include <cmath>
0018 
0019 namespace l1tpf {
0020   class HGC3DClusterEgID {
0021   public:
0022     HGC3DClusterEgID(const edm::ParameterSet &pset);
0023 
0024     void prepareTMVA();
0025 
0026     bool passID(const l1t::HGCalMulticluster c, float &mvaOut);
0027 
0028     std::string method() { return method_; }
0029 
0030   private:
0031     class Var {
0032     public:
0033       Var(const std::string &name, const std::string &expr) : name_(name), expr_(expr) {}
0034       void declare(TMVA::Reader &r) { r.AddVariable(name_, &val_); }
0035       void fill(const l1t::HGCalMulticluster &c) { val_ = expr_(c); }
0036 
0037     private:
0038       std::string name_;
0039       StringObjectFunction<l1t::HGCalMulticluster> expr_;
0040       float val_;
0041     };
0042 
0043     bool isPUFilter_;
0044     StringCutObjectSelector<l1t::HGCalMulticluster> preselection_;
0045     std::vector<Var> variables_;
0046     std::string method_, weightsFile_;
0047     std::unique_ptr<TMVA::Reader> reader_;
0048     StringObjectFunction<l1t::HGCalMulticluster> wp_;
0049   };  //class
0050 };  // namespace l1tpf
0051 
0052 #endif