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 };
0050 };
0051
0052 #endif