CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
PhotonMVAEstimator Class Reference
Inheritance diagram for PhotonMVAEstimator:
AnyMVAEstimatorRun2Base

Public Member Functions

int findCategory (const reco::Candidate *candPtr) const override
 
float mvaValue (const reco::Candidate *candPtr, std::vector< float > const &auxVars, int &iCategory) const override
 
 PhotonMVAEstimator (const edm::ParameterSet &conf)
 
 ~PhotonMVAEstimator () override
 
- Public Member Functions inherited from AnyMVAEstimatorRun2Base
 AnyMVAEstimatorRun2Base (const ::std::string &mvaName, const ::std::string &mvaTag, int nCategories, bool debug)
 
 AnyMVAEstimatorRun2Base (const edm::ParameterSet &conf)
 
const std::string & getName () const
 
int getNCategories () const
 
const std::string & getTag () const
 
bool isDebug () const
 
float mvaValue (const reco::Candidate *candidate, std::vector< float > const &auxVariables) const
 
virtual ~AnyMVAEstimatorRun2Base ()
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

int findCategory (reco::Photon const &photon) const
 

Private Attributes

std::vector< ThreadSafeFunctor< StringCutObjectSelector< reco::Photon > > > categoryFunctions_
 
std::unique_ptr< EffectiveAreaseffectiveAreas_
 
std::vector< std::unique_ptr< const GBRForest > > gbrForests_
 
MVAVariableManager< reco::PhotonmvaVarMngr_
 
int nCategories_
 
std::vector< int > nVariables_
 
double phoIsoCutoff_
 
std::vector< double > phoIsoPtScalingCoeff_
 
std::vector< std::vector< int > > variables_
 

Detailed Description

Definition at line 15 of file PhotonMVAEstimator.cc.

Constructor & Destructor Documentation

◆ PhotonMVAEstimator()

PhotonMVAEstimator::PhotonMVAEstimator ( const edm::ParameterSet conf)

Definition at line 52 of file PhotonMVAEstimator.cc.

54  mvaVarMngr_(conf.getParameter<std::string>("variableDefinition"), MVAVariableHelper::indexMap()) {
55  //
56  // Construct the MVA estimators
57  //
58  if (getTag() == "Run2Spring16NonTrigV1") {
60  std::make_unique<EffectiveAreas>((conf.getParameter<edm::FileInPath>("effAreasConfigFile")).fullPath());
61  phoIsoPtScalingCoeff_ = conf.getParameter<std::vector<double>>("phoIsoPtScalingCoeff");
62  phoIsoCutoff_ = conf.getParameter<double>("phoIsoCutoff");
63  }
64 
65  const auto weightFileNames = conf.getParameter<std::vector<std::string>>("weightFileNames");
66  const auto categoryCutStrings = conf.getParameter<std::vector<std::string>>("categoryCuts");
67 
68  if ((int)(categoryCutStrings.size()) != getNCategories())
69  throw cms::Exception("MVA config failure: ")
70  << "wrong number of category cuts in PhotonMVAEstimator" << getTag() << std::endl;
71 
72  for (auto const& cut : categoryCutStrings)
73  categoryFunctions_.emplace_back(cut);
74 
75  // Initialize GBRForests
76  if (static_cast<int>(weightFileNames.size()) != getNCategories())
77  throw cms::Exception("MVA config failure: ")
78  << "wrong number of weightfiles in PhotonMVAEstimator" << getTag() << std::endl;
79 
80  gbrForests_.clear();
81  // Create a TMVA reader object for each category
82  for (int i = 0; i < getNCategories(); i++) {
83  std::vector<int> variablesInCategory;
84 
85  std::vector<std::string> variableNamesInCategory;
86  gbrForests_.push_back(createGBRForest(weightFileNames[i], variableNamesInCategory));
87 
88  nVariables_.push_back(variableNamesInCategory.size());
89 
90  variables_.push_back(variablesInCategory);
91 
92  for (int j = 0; j < nVariables_[i]; ++j) {
93  int index = mvaVarMngr_.getVarIndex(variableNamesInCategory[j]);
94  if (index == -1) {
95  throw cms::Exception("MVA config failure: ")
96  << "Concerning PhotonMVAEstimator" << getTag() << std::endl
97  << "Variable " << variableNamesInCategory[j] << " not found in variable definition file!" << std::endl;
98  }
99  variables_[i].push_back(index);
100  }
101  }
102 }

References categoryFunctions_, createGBRForest(), TkAlMuonSelectors_cfi::cut, effectiveAreas_, Exception, gbrForests_, AnyMVAEstimatorRun2Base::getNCategories(), edm::ParameterSet::getParameter(), AnyMVAEstimatorRun2Base::getTag(), MVAVariableManager< ParticleType >::getVarIndex(), mps_fire::i, dqmiolumiharvest::j, mvaVarMngr_, nVariables_, phoIsoCutoff_, phoIsoPtScalingCoeff_, variables_, and mvaElectronID_Fall17_iso_V1_cff::weightFileNames.

◆ ~PhotonMVAEstimator()

PhotonMVAEstimator::~PhotonMVAEstimator ( )
inlineoverride

Definition at line 19 of file PhotonMVAEstimator.cc.

19 {};

Member Function Documentation

◆ fillDescriptions()

static void PhotonMVAEstimator::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

◆ findCategory() [1/2]

int PhotonMVAEstimator::findCategory ( const reco::Candidate candPtr) const
overridevirtual

Implements AnyMVAEstimatorRun2Base.

Definition at line 149 of file PhotonMVAEstimator.cc.

149  {
150  const reco::Photon* phoPtr = dynamic_cast<const reco::Photon*>(candPtr);
151  if (phoPtr == nullptr) {
152  throw cms::Exception("MVA failure: ")
153  << " given particle is expected to be reco::Photon or pat::Photon," << std::endl
154  << " but appears to be neither" << std::endl;
155  }
156 
157  return findCategory(*phoPtr);
158 }

References Exception.

Referenced by mvaValue().

◆ findCategory() [2/2]

int PhotonMVAEstimator::findCategory ( reco::Photon const &  photon) const
private

Definition at line 160 of file PhotonMVAEstimator.cc.

160  {
161  for (int i = 0; i < getNCategories(); ++i) {
163  return i;
164  }
165 
166  edm::LogWarning("MVA warning") << "category not defined for particle with pt " << photon.pt() << " GeV, eta "
167  << photon.superCluster()->eta() << " in PhotonMVAEstimator" << getTag();
168 
169  return -1;
170 }

References categoryFunctions_, AnyMVAEstimatorRun2Base::getNCategories(), AnyMVAEstimatorRun2Base::getTag(), mps_fire::i, and muons2muons_cfi::photon.

◆ mvaValue()

float PhotonMVAEstimator::mvaValue ( const reco::Candidate candPtr,
std::vector< float > const &  auxVars,
int &  iCategory 
) const
overridevirtual

Implements AnyMVAEstimatorRun2Base.

Definition at line 104 of file PhotonMVAEstimator.cc.

106  {
107  const reco::Photon* phoPtr = dynamic_cast<const reco::Photon*>(candPtr);
108  if (phoPtr == nullptr) {
109  throw cms::Exception("MVA failure: ")
110  << " given particle is expected to be reco::Photon or pat::Photon," << std::endl
111  << " but appears to be neither" << std::endl;
112  }
113 
114  iCategory = findCategory(phoPtr);
115 
116  std::vector<float> vars;
117 
118  vars.reserve(nVariables_[iCategory]);
119  for (int i = 0; i < nVariables_[iCategory]; ++i) {
120  vars.push_back(mvaVarMngr_.getValue(variables_[iCategory][i], *phoPtr, auxVars));
121  }
122 
123  // Special case for Spring16!
124  if (getTag() == "Run2Spring16NonTrigV1" and iCategory == 1) { // Endcap category
125  // Raw value for EB only, because of loss of transparency in EE
126  // for endcap MVA only in 2016
127  double eA = effectiveAreas_->getEffectiveArea(std::abs(phoPtr->superCluster()->eta()));
128  double phoIsoCorr = vars[10] - eA * (double)vars[9] - phoIsoPtScalingCoeff_.at(1) * phoPtr->pt();
129  vars[10] = TMath::Max(phoIsoCorr, phoIsoCutoff_);
130  }
131 
132  if (isDebug()) {
133  std::cout << " *** Inside PhotonMVAEstimator" << getTag() << std::endl;
134  std::cout << " category " << iCategory << std::endl;
135  for (int i = 0; i < nVariables_[iCategory]; ++i) {
136  std::cout << " " << mvaVarMngr_.getName(variables_[iCategory][i]) << " " << vars[i] << std::endl;
137  }
138  }
139 
140  const float response = gbrForests_.at(iCategory)->GetResponse(vars.data());
141 
142  if (isDebug()) {
143  std::cout << " ### MVA " << response << std::endl << std::endl;
144  }
145 
146  return response;
147 }

References funct::abs(), gather_cfg::cout, effectiveAreas_, Exception, findCategory(), gbrForests_, MVAVariableManager< ParticleType >::getName(), AnyMVAEstimatorRun2Base::getTag(), MVAVariableManager< ParticleType >::getValue(), mps_fire::i, AnyMVAEstimatorRun2Base::isDebug(), Max(), mvaVarMngr_, nVariables_, phoIsoCutoff_, phoIsoPtScalingCoeff_, reco::LeafCandidate::pt(), reco::Photon::superCluster(), and variables_.

Member Data Documentation

◆ categoryFunctions_

std::vector<ThreadSafeFunctor<StringCutObjectSelector<reco::Photon> > > PhotonMVAEstimator::categoryFunctions_
private

Definition at line 33 of file PhotonMVAEstimator.cc.

Referenced by findCategory(), and PhotonMVAEstimator().

◆ effectiveAreas_

std::unique_ptr<EffectiveAreas> PhotonMVAEstimator::effectiveAreas_
private

Definition at line 47 of file PhotonMVAEstimator.cc.

Referenced by mvaValue(), and PhotonMVAEstimator().

◆ gbrForests_

std::vector<std::unique_ptr<const GBRForest> > PhotonMVAEstimator::gbrForests_
private

Definition at line 37 of file PhotonMVAEstimator.cc.

Referenced by mvaValue(), and PhotonMVAEstimator().

◆ mvaVarMngr_

MVAVariableManager<reco::Photon> PhotonMVAEstimator::mvaVarMngr_
private

Definition at line 44 of file PhotonMVAEstimator.cc.

Referenced by mvaValue(), and PhotonMVAEstimator().

◆ nCategories_

int PhotonMVAEstimator::nCategories_
private

Definition at line 32 of file PhotonMVAEstimator.cc.

◆ nVariables_

std::vector<int> PhotonMVAEstimator::nVariables_
private

Definition at line 34 of file PhotonMVAEstimator.cc.

Referenced by mvaValue(), and PhotonMVAEstimator().

◆ phoIsoCutoff_

double PhotonMVAEstimator::phoIsoCutoff_
private

Definition at line 49 of file PhotonMVAEstimator.cc.

Referenced by mvaValue(), and PhotonMVAEstimator().

◆ phoIsoPtScalingCoeff_

std::vector<double> PhotonMVAEstimator::phoIsoPtScalingCoeff_
private

Definition at line 48 of file PhotonMVAEstimator.cc.

Referenced by mvaValue(), and PhotonMVAEstimator().

◆ variables_

std::vector<std::vector<int> > PhotonMVAEstimator::variables_
private

Definition at line 41 of file PhotonMVAEstimator.cc.

Referenced by mvaValue(), and PhotonMVAEstimator().

AnyMVAEstimatorRun2Base::AnyMVAEstimatorRun2Base
AnyMVAEstimatorRun2Base(const edm::ParameterSet &conf)
Definition: AnyMVAEstimatorRun2Base.h:14
muons2muons_cfi.photon
photon
Definition: muons2muons_cfi.py:28
mps_fire.i
i
Definition: mps_fire.py:428
reco::Photon::superCluster
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
PhotonMVAEstimator::variables_
std::vector< std::vector< int > > variables_
Definition: PhotonMVAEstimator.cc:41
TkAlMuonSelectors_cfi.cut
cut
Definition: TkAlMuonSelectors_cfi.py:5
MVAVariableManager::getValue
float getValue(int index, const ParticleType &particle, const std::vector< float > &auxVariables) const
Definition: MVAVariableManager.h:50
PhotonMVAEstimator::gbrForests_
std::vector< std::unique_ptr< const GBRForest > > gbrForests_
Definition: PhotonMVAEstimator.cc:37
gather_cfg.cout
cout
Definition: gather_cfg.py:144
createGBRForest
std::unique_ptr< const GBRForest > createGBRForest(const std::string &weightsFile)
Definition: GBRForestTools.cc:244
reco::LeafCandidate::pt
double pt() const final
transverse momentum
Definition: LeafCandidate.h:146
PhotonMVAEstimator::phoIsoPtScalingCoeff_
std::vector< double > phoIsoPtScalingCoeff_
Definition: PhotonMVAEstimator.cc:48
PhotonMVAEstimator::phoIsoCutoff_
double phoIsoCutoff_
Definition: PhotonMVAEstimator.cc:49
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
MVAVariableManager::getName
const std::string & getName(int index) const
Definition: MVAVariableManager.h:46
edm::FileInPath
Definition: FileInPath.h:64
vars
vars
Definition: DeepTauId.cc:163
AnyMVAEstimatorRun2Base::isDebug
bool isDebug() const
Definition: AnyMVAEstimatorRun2Base.h:46
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
MVAVariableManager::getVarIndex
int getVarIndex(const std::string &name)
Definition: MVAVariableManager.h:37
MVAVariableHelper::indexMap
static std::unordered_map< std::string, int > indexMap()
Definition: MVAVariableHelper.h:22
PhotonMVAEstimator::effectiveAreas_
std::unique_ptr< EffectiveAreas > effectiveAreas_
Definition: PhotonMVAEstimator.cc:47
AnyMVAEstimatorRun2Base::getNCategories
int getNCategories() const
Definition: AnyMVAEstimatorRun2Base.h:39
AnyMVAEstimatorRun2Base::getTag
const std::string & getTag() const
Definition: AnyMVAEstimatorRun2Base.h:44
Max
T Max(T a, T b)
Definition: MathUtil.h:44
PhotonMVAEstimator::categoryFunctions_
std::vector< ThreadSafeFunctor< StringCutObjectSelector< reco::Photon > > > categoryFunctions_
Definition: PhotonMVAEstimator.cc:33
PhotonMVAEstimator::mvaVarMngr_
MVAVariableManager< reco::Photon > mvaVarMngr_
Definition: PhotonMVAEstimator.cc:44
reco::Photon
Definition: Photon.h:21
mvaElectronID_Fall17_iso_V1_cff.weightFileNames
weightFileNames
Definition: mvaElectronID_Fall17_iso_V1_cff.py:89
Exception
Definition: hltDiff.cc:246
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
PhotonMVAEstimator::nVariables_
std::vector< int > nVariables_
Definition: PhotonMVAEstimator.cc:34
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
PhotonMVAEstimator::findCategory
int findCategory(const reco::Candidate *candPtr) const override
Definition: PhotonMVAEstimator.cc:149