5#ifndef __ASGELECTRONEFFICIENCYCORRECTIONTOOL__
6#define __ASGELECTRONEFFICIENCYCORRECTIONTOOL__
25#include <unordered_map>
41namespace ADD_CMODE(CP)
44class AsgElectronEfficiencyCorrectionTool final
54 AsgElectronEfficiencyCorrectionTool(
const std::string& myname);
56 virtual ~AsgElectronEfficiencyCorrectionTool() override final;
58 virtual StatusCode
initialize() override final;
63 virtual StatusCode beginInputFile() override final;
64 virtual StatusCode beginEvent() override final;
74 virtual
bool isAffectedBySystematic(
77 virtual StatusCode applySystematicVariation(
85 double& efficiencyScaleFactor)
const override final;
88 double& efficiencyScaleFactor,
93 const double cluster_eta,
94 const unsigned int runNumber,
95 double& efficiencyScaleFactor)
const override final;
100 virtual
int getNumberOfToys()
const override final
102 return m_number_of_toys;
105 virtual void printCorrelationModels()
const override final
108 " Available Correlation Models for the ElectronEfficiencyCorrectionTool");
118 virtual const CP::SystematicSet& appliedSystematics() const override final
120 return *m_appliedSystematics;
123 virtual int systUncorrVariationIndex(
125 int systUncorrVariationIndex(
131 int currentSimplifiedUncorrSystRegion(
const double cluster_eta,
132 const double et)
const;
133 int currentUncorrSystRegion(
const double cluster_eta,
const double et)
const;
139 StatusCode getFile(
const std::string& recokey,
140 const std::string& idkey,
141 const std::string& isokey,
142 const std::string& trigkey);
151 unsigned m_toy_index;
156 bool m_metadata_retrieved =
false;
159 std::unique_ptr<Root::TElectronEfficiencyCorrectionTool> m_rootTool =
nullptr;
162 std::unordered_map<CP::SystematicSet, CP::SystematicSet> m_systFilter;
165 CP::SystematicSet m_affectedSys;
168 CP::SystematicSet* m_appliedSystematics;
171 std::string m_correlation_model_name;
172 int m_correlation_model;
175 std::string m_mapFile;
178 std::string m_recoKey;
180 std::string m_isoKey;
181 std::string m_trigKey;
184 std::vector<std::string> m_corrFileNameList;
187 std::string m_resultPrefix;
190 std::string m_resultName;
193 std::string m_sysSubstring;
196 std::string m_eventInfoCollectionName;
199 bool m_useRandomRunNumber;
200 int m_defaultRandomRunNumber;
206 int m_dataTypeOverwrite;
209 int m_number_of_toys;
220 std::vector<std::pair<float, std::vector<float>>> m_pteta_bins;
223 std::vector<float> m_uncorrSimplfEtaBinsUser;
224 std::vector<float> m_uncorrSimplfEtBinsUser;
227 TH2F* m_UncorrRegions;
228 int m_nSimpleUncorrSyst;
231 std::string m_toysBasename;
232 std::vector<CP::SystematicVariation> m_corrVarUp;
233 std::vector<CP::SystematicVariation> m_corrVarDown;
234 std::vector<CP::SystematicVariation> m_uncorrVarUp;
235 std::vector<CP::SystematicVariation> m_uncorrVarDown;
239 struct Accessors :
public columnar::ColumnarTool<>
241 Accessors(AsgElectronEfficiencyCorrectionTool& tool) : columnar::ColumnarTool<>(&
tool) {}
257 columnar::ClusterHelpers::EtaBEAccessor<> clusterEtaBEAcc {*
this};
259 std::unique_ptr<Accessors> m_accessors;
TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)