File indexing completed on 2023-03-17 11:13:19
0001 #include "L1Trigger/Phase2L1ParticleFlow/interface/HGC3DClusterEgID.h"
0002 #include "CommonTools/MVAUtils/interface/TMVAZipReader.h"
0003
0004 l1tpf::HGC3DClusterEgID::HGC3DClusterEgID(const edm::ParameterSet &pset)
0005 : isPUFilter_(pset.getParameter<bool>("isPUFilter")),
0006 preselection_(pset.getParameter<std::string>("preselection")),
0007 method_(pset.getParameter<std::string>("method")),
0008 weightsFile_(pset.getParameter<std::string>("weightsFile")),
0009 reader_(new TMVA::Reader()),
0010 wp_(pset.getParameter<std::string>("wp")) {
0011
0012 for (const auto &psvar : pset.getParameter<std::vector<edm::ParameterSet>>("variables")) {
0013 variables_.emplace_back(psvar.getParameter<std::string>("name"), psvar.getParameter<std::string>("value"));
0014 }
0015 }
0016
0017 void l1tpf::HGC3DClusterEgID::prepareTMVA() {
0018
0019 for (auto &var : variables_)
0020 var.declare(*reader_);
0021
0022 if (weightsFile_[0] != '/' && weightsFile_[0] != '.') {
0023 weightsFile_ = edm::FileInPath(weightsFile_).fullPath();
0024 }
0025 reco::details::loadTMVAWeights(&*reader_, method_, weightsFile_);
0026 }
0027
0028 float l1tpf::HGC3DClusterEgID::passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf) {
0029 if (preselection_(c)) {
0030 for (auto &var : variables_)
0031 var.fill(c);
0032 float mvaOut = reader_->EvaluateMVA(method_);
0033 if (isPUFilter_)
0034 cpf.setEgVsPUMVAOut(mvaOut);
0035 else
0036 cpf.setEgVsPionMVAOut(mvaOut);
0037 return (mvaOut > wp_(c) ? 1 : 0);
0038 } else {
0039 if (isPUFilter_)
0040 cpf.setEgVsPUMVAOut(-100.0);
0041 else
0042 cpf.setEgVsPionMVAOut(-100.0);
0043 return 0;
0044 }
0045 }