File indexing completed on 2024-04-06 12:25:05
0001 #include "RecoEgamma/EgammaTools/interface/EgammaRegressionContainer.h"
0002
0003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0005 #include "FWCore/Framework/interface/EventSetup.h"
0006 #include "FWCore/Framework/interface/ESHandle.h"
0007 #include "FWCore/Framework/interface/ConsumesCollector.h"
0008
0009 EgammaRegressionContainer::EgammaRegressionContainer(const edm::ParameterSet& iConfig, edm::ConsumesCollector& cc)
0010 : outputTransformerLowEt_(iConfig.getParameter<double>("rangeMinLowEt"),
0011 iConfig.getParameter<double>("rangeMaxLowEt")),
0012 outputTransformerHighEt_(iConfig.getParameter<double>("rangeMinHighEt"),
0013 iConfig.getParameter<double>("rangeMaxHighEt")),
0014 forceHighEnergyTrainingIfSaturated_(iConfig.getParameter<bool>("forceHighEnergyTrainingIfSaturated")),
0015 lowEtHighEtBoundary_(iConfig.getParameter<double>("lowEtHighEtBoundary")),
0016 ebLowEtForestToken_{cc.esConsumes(iConfig.getParameter<edm::ESInputTag>("ebLowEtForestName"))},
0017 ebHighEtForestToken_{cc.esConsumes(iConfig.getParameter<edm::ESInputTag>("ebHighEtForestName"))},
0018 eeLowEtForestToken_{cc.esConsumes(iConfig.getParameter<edm::ESInputTag>("eeLowEtForestName"))},
0019 eeHighEtForestToken_{cc.esConsumes(iConfig.getParameter<edm::ESInputTag>("eeHighEtForestName"))} {}
0020
0021 edm::ParameterSetDescription EgammaRegressionContainer::makePSetDescription() {
0022 edm::ParameterSetDescription desc;
0023 desc.add<double>("rangeMinLowEt", -1.);
0024 desc.add<double>("rangeMaxLowEt", 3.0);
0025 desc.add<double>("rangeMinHighEt", -1.);
0026 desc.add<double>("rangeMaxHighEt", 3.0);
0027 desc.add<double>("lowEtHighEtBoundary", 50.);
0028 desc.add<bool>("forceHighEnergyTrainingIfSaturated", false);
0029 desc.add<edm::ESInputTag>("ebLowEtForestName", edm::ESInputTag{"", "electron_eb_ECALTRK_lowpt"});
0030 desc.add<edm::ESInputTag>("ebHighEtForestName", edm::ESInputTag{"", "electron_eb_ECALTRK"});
0031 desc.add<edm::ESInputTag>("eeLowEtForestName", edm::ESInputTag{"", "electron_ee_ECALTRK_lowpt"});
0032 desc.add<edm::ESInputTag>("eeHighEtForestName", edm::ESInputTag{"", "electron_ee_ECALTRK"});
0033 return desc;
0034 }
0035
0036 void EgammaRegressionContainer::setEventContent(const edm::EventSetup& iSetup) {
0037 ebLowEtForest_ = &iSetup.getData(ebLowEtForestToken_);
0038 ebHighEtForest_ = &iSetup.getData(ebHighEtForestToken_);
0039 eeLowEtForest_ = &iSetup.getData(eeLowEtForestToken_);
0040 eeHighEtForest_ = &iSetup.getData(eeHighEtForestToken_);
0041 }
0042
0043 float EgammaRegressionContainer::operator()(const float et,
0044 const bool isEB,
0045 const bool isSaturated,
0046 const float* data) const {
0047 if (useLowEtBin(et, isSaturated)) {
0048 if (isEB)
0049 return outputTransformerLowEt_(ebLowEtForest_->GetResponse(data));
0050 else
0051 return outputTransformerLowEt_(eeLowEtForest_->GetResponse(data));
0052 } else {
0053 if (isEB)
0054 return outputTransformerHighEt_(ebHighEtForest_->GetResponse(data));
0055 else
0056 return outputTransformerHighEt_(eeHighEtForest_->GetResponse(data));
0057 }
0058 }
0059
0060 bool EgammaRegressionContainer::useLowEtBin(const float et, const bool isSaturated) const {
0061 if (isSaturated && forceHighEnergyTrainingIfSaturated_)
0062 return false;
0063 else
0064 return et < lowEtHighEtBoundary_;
0065 }