ATLAS Offline Software
Loading...
Searching...
No Matches
AsgElectronEfficiencyCorrectionTool Class Referencefinal

#include <AsgElectronEfficiencyCorrectionTool.h>

Inheritance diagram for AsgElectronEfficiencyCorrectionTool:

Classes

struct  Accessors
struct  SystConf

Public Types

Definition of the StoreGate-like object's definition
typedef ServiceHandle< StoreGateSvcMetaStore_t
 Type of the metadata store object in Athena.
typedef const ServiceHandle< StoreGateSvc > & MetaStorePtr_t
 Type of the metadata store pointer in standalone mode.

Public Member Functions

void callSingleEvent (columnar::ElectronRange electrons, columnar::EventInfoId event) const
void callEvents (columnar::EventContextRange events) const override
virtual StatusCode sysInitialize ()
 Function initialising the tool in the correct way in Athena.
virtual void print () const
 Print the state of the tool.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
Functions providing access to the input/output metadata
MetaStorePtr_t inputMetaStore () const
 Accessor for the input metadata store.
MetaStorePtr_t outputMetaStore () const
 Accessor for the output metadata store.
Additional helper functions, not directly mimicking Athena
template<class T>
const T * getProperty (const std::string &name) const
 Get one of the tool's properties.
const std::string & msg_level_name () const __attribute__((deprecated))
 A deprecated function for getting the message level's name.
const std::string & getName (const void *ptr) const
 Get the name of an object that is / should be in the event store.
SG::sgkey_t getKey (const void *ptr) const
 Get the (hashed) key of an object that is in the event store.

Public Attributes

std::unique_ptr< Accessorsm_accessors

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.
Callback functions helping in metadata reading/writing
void setUseIncidents (const bool flag)
virtual void handle (const Incident &inc)
 Function receiving incidents from IncidentSvc/TEvent.
virtual StatusCode endInputFile ()
 Function called when the currently open input file got completely processed.
virtual StatusCode metaDataStop ()
 Function called when the tool should write out its metadata.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

virtual ASG_TOOL_CLASS(AsgElectronEfficiencyCorrectionTool, IAsgElectronEfficiencyCorrectionTool) public ~AsgElectronEfficiencyCorrectionTool () override final
 Standard destructor.
virtual StatusCode initialize () override final
 Gaudi Service Interface method implementations.
virtual StatusCode beginInputFile () override final
 Function called when a new input file is opened.
virtual StatusCode beginEvent () override final
 Function called when a new events is loaded.
virtual CP::SystematicSet affectingSystematics () const override final
 returns: the list of all systematics this tool can be affected by
virtual CP::SystematicSet recommendedSystematics () const override final
 returns: the list of all systematics this tool recommends to use
virtual bool isAffectedBySystematic (const CP::SystematicVariation &systematic) const override final
 returns: whether this tool is affected by the given systematis
virtual StatusCode applySystematicVariation (const CP::SystematicSet &systConfig) override final
 Configure this tool for the given systematics.
virtual CP::CorrectionCode getEfficiencyScaleFactor (const xAOD::Electron &inputObject, double &efficiencyScaleFactor) const override final
CP::CorrectionCode getEfficiencyScaleFactor (columnar::ElectronId inputObject, double &efficiencyScaleFactor, columnar::EventInfoId info) const
virtual CP::CorrectionCode getEfficiencyScaleFactor (const double et, const double cluster_eta, const unsigned int runNumber, double &efficiencyScaleFactor) const override final
virtual CP::CorrectionCode applyEfficiencyScaleFactor (const xAOD::Electron &inputObject) const override final
virtual int getNumberOfToys () const override final
virtual void printCorrelationModels () const override final
 print available/implemented correlation models
virtual const CP::SystematicSetappliedSystematics () const override final
 returns: the currently applied systematics
virtual int systUncorrVariationIndex (const xAOD::Electron &inputObject) const override final
int systUncorrVariationIndex (columnar::ElectronId inputObject) const
StatusCode registerSystematics ()
int currentSimplifiedUncorrSystRegion (const double cluster_eta, const double et) const
int currentUncorrSystRegion (const double cluster_eta, const double et) const
StatusCode InitSystematics ()
 initialize the systematics
virtual StatusCode getFile (const std::string &recokey, const std::string &idkey, const std::string &isokey, const std::string &trigkey)
 Gets the correction filename from map.
StatusCode get_simType_from_metadata (PATCore::ParticleDataType::DataType &result) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

bool m_metadata_retrieved = false
 To check if the metadata can be retrieved.
std::unique_ptr< Root::TElectronEfficiencyCorrectionToolm_rootTool = nullptr
 Pointer to the underlying ROOT based tool.
std::unordered_map< CP::SystematicSet, CP::SystematicSetm_systFilter
 Systematics filter map.
CP::SystematicSet m_affectedSys
 Affected systematic, should be done only once.
CP::SystematicSetm_appliedSystematics
 Currently applied systematics.
std::string m_correlation_model_name
int m_correlation_model
std::string m_mapFile
std::string m_recoKey
std::string m_idKey
std::string m_isoKey
std::string m_trigKey
std::vector< std::string > m_corrFileNameList
 The list of file names.
std::string m_resultPrefix
 The prefix string for the result.
std::string m_resultName
 The string for the result.
std::string m_sysSubstring
std::string m_eventInfoCollectionName
 The Event info collection name.
bool m_useRandomRunNumber
int m_defaultRandomRunNumber
PATCore::ParticleDataType::DataType m_dataType
int m_dataTypeOverwrite
 Force the data type to a given value.
int m_number_of_toys
int m_seed_toys
double m_scale_toys
int m_nCorrSyst
int m_nUncorrSyst
std::vector< std::pair< float, std::vector< float > > > m_pteta_bins
std::vector< float > m_uncorrSimplfEtaBinsUser
std::vector< float > m_uncorrSimplfEtBinsUser
TH2F * m_UncorrRegions
int m_nSimpleUncorrSyst
std::string m_toysBasename
std::vector< CP::SystematicVariationm_corrVarUp
std::vector< CP::SystematicVariationm_corrVarDown
std::vector< CP::SystematicVariationm_uncorrVarUp
std::vector< CP::SystematicVariationm_uncorrVarDown
MetaStore_t m_inputMetaStore
 Object accessing the input metadata store.
MetaStore_t m_outputMetaStore
 Object accessing the output metadata store.
bool m_beginInputFileCalled
 Flag helping to discover when the tool misses the opening of the first input file.
bool m_useIncidents
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 41 of file AsgElectronEfficiencyCorrectionTool.h.

Member Typedef Documentation

◆ MetaStore_t

Type of the metadata store object in Athena.

Definition at line 66 of file AsgMetadataTool.h.

◆ MetaStorePtr_t

Type of the metadata store pointer in standalone mode.

Definition at line 68 of file AsgMetadataTool.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Function Documentation

◆ affectingSystematics()

CP::SystematicSet AsgElectronEfficiencyCorrectionTool::affectingSystematics ( ) const
finaloverrideprivatevirtual

returns: the list of all systematics this tool can be affected by

Implements CP::IReentrantSystematicsTool.

Definition at line 572 of file AsgElectronEfficiencyCorrectionTool.cxx.

573{
574 return m_affectedSys;
575}
CP::SystematicSet m_affectedSys
Affected systematic, should be done only once.

◆ appliedSystematics()

virtual const CP::SystematicSet & AsgElectronEfficiencyCorrectionTool::appliedSystematics ( ) const
inlinefinaloverrideprivatevirtual

returns: the currently applied systematics

Implements IAsgElectronEfficiencyCorrectionTool.

Definition at line 115 of file AsgElectronEfficiencyCorrectionTool.h.

116 {
117 return *m_appliedSystematics;
118 }
CP::SystematicSet * m_appliedSystematics
Currently applied systematics.

◆ applyEfficiencyScaleFactor()

CP::CorrectionCode AsgElectronEfficiencyCorrectionTool::applyEfficiencyScaleFactor ( const xAOD::Electron & inputObject) const
finaloverrideprivatevirtual

Implements IAsgElectronEfficiencyCorrectionTool.

Definition at line 539 of file AsgElectronEfficiencyCorrectionTool.cxx.

541{
542 double efficiencyScaleFactor = 1.0;
543 CP::CorrectionCode result =
544 getEfficiencyScaleFactor(inputObject, efficiencyScaleFactor);
545 const static SG::AuxElement::Decorator<float> dec(m_resultPrefix +
546 m_resultName + "SF");
547 dec(inputObject) = efficiencyScaleFactor;
548 return result;
549}
virtual CP::CorrectionCode getEfficiencyScaleFactor(const xAOD::Electron &inputObject, double &efficiencyScaleFactor) const override final
std::string m_resultName
The string for the result.
std::string m_resultPrefix
The prefix string for the result.

◆ applySystematicVariation()

StatusCode AsgElectronEfficiencyCorrectionTool::applySystematicVariation ( const CP::SystematicSet & systConfig)
finaloverrideprivatevirtual

Configure this tool for the given systematics.

Apply one variation at a time.

Implements CP::ISystematicsTool.

Definition at line 598 of file AsgElectronEfficiencyCorrectionTool.cxx.

600{
601 // First, check if this configuration exists in the filtered map/registy
602 auto itr = m_systFilter.find(systConfig);
603
604 if (itr != m_systFilter.end()) {
605 CP::SystematicSet& mySysConf = itr->second;
606 m_appliedSystematics = &mySysConf;
607 }
608 // if not, we should register it, after it passes sanity checks
609 else {
610 // If it's a new input set, we need to filter it
611 CP::SystematicSet affectingSys = affectingSystematics();
612 CP::SystematicSet filteredSys;
614 systConfig, affectingSys, filteredSys)) {
616 "Unsupported combination of systematic variations passed to the tool!");
617 return StatusCode::FAILURE;
618 }
619 // Does filtered make sense, only one per time
620 if (filteredSys.size() > 1) {
622 "More than one systematic variation passed at the same time");
623 return StatusCode::FAILURE;
624 }
625
626 if (filteredSys.empty() && !systConfig.empty()) {
627 ATH_MSG_DEBUG("systematics : ");
628 for (const auto& syst : systConfig) {
629 ATH_MSG_DEBUG(syst.name());
630 }
631 ATH_MSG_DEBUG(" Not supported ");
632 }
633 // insert to the registy
634 itr = m_systFilter.insert(std::make_pair(systConfig, filteredSys)).first;
635 // And return directly
636 CP::SystematicSet& mySysConf = itr->second;
637 m_appliedSystematics = &mySysConf;
638 }
639 return StatusCode::SUCCESS;
640}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
std::unordered_map< CP::SystematicSet, CP::SystematicSet > m_systFilter
Systematics filter map.
virtual CP::SystematicSet affectingSystematics() const override final
returns: the list of all systematics this tool can be affected by
bool empty() const
returns: whether the set is empty
size_t size() const
returns: size of the set
static StatusCode filterForAffectingSystematics(const SystematicSet &systConfig, const SystematicSet &affectingSystematics, SystematicSet &filteredSystematics)
description: filter the systematics for the affected systematics returns: success guarantee: strong f...

◆ beginEvent()

StatusCode AsgElectronEfficiencyCorrectionTool::beginEvent ( )
finaloverrideprivatevirtual

Function called when a new events is loaded.

Dummy implementation that can be overridden by the derived tool.

Reimplemented from asg::AsgMetadataTool.

Definition at line 933 of file AsgElectronEfficiencyCorrectionTool.cxx.

934{
935
936 if (m_dataTypeOverwrite != -1)
937 return StatusCode::SUCCESS;
939 return StatusCode::SUCCESS;
940
942 return StatusCode::SUCCESS;
943}
int m_dataTypeOverwrite
Force the data type to a given value.
bool m_metadata_retrieved
To check if the metadata can be retrieved.

◆ beginInputFile()

StatusCode AsgElectronEfficiencyCorrectionTool::beginInputFile ( )
finaloverrideprivatevirtual

Function called when a new input file is opened.

Dummy implementation that can be overridden by the derived tool.

Reimplemented from asg::AsgMetadataTool.

Definition at line 898 of file AsgElectronEfficiencyCorrectionTool.cxx.

899{
900
901 // User forced a particular dataType
902 if (m_dataTypeOverwrite != -1)
903 return StatusCode::SUCCESS;
904
905 PATCore::ParticleDataType::DataType dataType_metadata;
906 const StatusCode status = get_simType_from_metadata(dataType_metadata);
907 // Metadata got retrieved
908 if (status == StatusCode::SUCCESS) {
910 ATH_MSG_DEBUG("metadata from new file: "
911 << (dataType_metadata == PATCore::ParticleDataType::Data
912 ? "data"
913 : (dataType_metadata == PATCore::ParticleDataType::Full
914 ? "full simulation"
915 : "fast simulation")));
916
917 if (dataType_metadata != PATCore::ParticleDataType::Data) {
918 if (m_dataTypeOverwrite == -1) {
919 m_dataType = dataType_metadata;
920 } else {
922 "Applying SF corrections to data while they make sense only for MC");
923 }
924 }
925 } else { // not able to retrieve metadata
926 m_metadata_retrieved = false;
927 ATH_MSG_DEBUG("not able to retrieve metadata");
928 }
929 return StatusCode::SUCCESS;
930}
StatusCode get_simType_from_metadata(PATCore::ParticleDataType::DataType &result) const
::StatusCode StatusCode
StatusCode definition for legacy code.
status
Definition merge.py:16

◆ callEvents()

void AsgElectronEfficiencyCorrectionTool::callEvents ( columnar::EventContextRange events) const
override

Definition at line 1026 of file AsgElectronEfficiencyCorrectionTool.cxx.

1027{
1028 const Accessors& acc = *m_accessors;
1029 for (columnar::EventContextId event : events)
1030 {
1031 auto eventInfo = acc.m_eventInfo(event);
1032 callSingleEvent (acc.m_electrons(event), eventInfo);
1033 }
1034}
void callSingleEvent(columnar::ElectronRange electrons, columnar::EventInfoId event) const
ObjectId< ContainerId::eventContext > EventContextId

◆ callSingleEvent()

void AsgElectronEfficiencyCorrectionTool::callSingleEvent ( columnar::ElectronRange electrons,
columnar::EventInfoId event ) const

Definition at line 1004 of file AsgElectronEfficiencyCorrectionTool.cxx.

1005{
1006 const Accessors& acc = *m_accessors;
1007 for (columnar::ElectronId electron : electrons)
1008 {
1009 double sf = 0;
1010 switch (getEfficiencyScaleFactor(electron, sf, event).code())
1011 {
1013 acc.m_sfDec(electron) = sf;
1014 acc.m_validDec(electron) = true;
1015 break;
1017 acc.m_sfDec(electron) = sf;
1018 acc.m_validDec(electron) = false;
1019 break;
1020 default:
1021 throw std::runtime_error("Error in getEfficiencyScaleFactor");
1022 }
1023 }
1024}
@ OutOfValidityRange
Input object is out of validity range.
@ Ok
The correction was done successfully.
ObjectId< ContainerId::electron > ElectronId
Definition EgammaDef.h:38

◆ currentSimplifiedUncorrSystRegion()

int AsgElectronEfficiencyCorrectionTool::currentSimplifiedUncorrSystRegion ( const double cluster_eta,
const double et ) const
private

Definition at line 716 of file AsgElectronEfficiencyCorrectionTool.cxx.

719{
720 int ptbin = std::as_const(*m_UncorrRegions).GetXaxis()->FindBin(et) - 1;
721 if (ptbin < 0 ||
722 ptbin >= std::as_const(*m_UncorrRegions).GetXaxis()->GetNbins()) {
724 " Found electron with Et = "
725 << et / 1000. << " GeV, where you specified boundaries of ["
726 << std::as_const(*m_UncorrRegions).GetXaxis()->GetBinLowEdge(1) << ","
727 << std::as_const(*m_UncorrRegions)
728 .GetXaxis()
729 ->GetBinUpEdge(
730 std::as_const(*m_UncorrRegions).GetXaxis()->GetNbins())
731 << "] for the SIMPLIFIED correlation model ");
732 return -1;
733 }
734 int etabin =
735 std::as_const(*m_UncorrRegions).GetYaxis()->FindBin(std::abs(cluster_eta)) -
736 1;
737 if (etabin < 0 ||
738 etabin >= std::as_const(*m_UncorrRegions).GetYaxis()->GetNbins()) {
740 " Found electron with |eta| = "
741 << std::abs(cluster_eta) << ", where you specified boundaries of ["
742 << std::as_const(*m_UncorrRegions).GetYaxis()->GetBinLowEdge(1) << ","
743 << std::as_const(*m_UncorrRegions)
744 .GetYaxis()
745 ->GetBinUpEdge(
746 std::as_const(*m_UncorrRegions).GetYaxis()->GetNbins())
747 << "] for the SIMPLIFIED correlation model ");
748 return -1;
749 }
750 int reg = ((etabin)*m_UncorrRegions->GetNbinsX() + ptbin);
751 return reg;
752}
#define ATH_MSG_WARNING(x)
float et(const xAOD::jFexSRJetRoI *j)

◆ currentUncorrSystRegion()

int AsgElectronEfficiencyCorrectionTool::currentUncorrSystRegion ( const double cluster_eta,
const double et ) const
private

Definition at line 755 of file AsgElectronEfficiencyCorrectionTool.cxx.

758{
759 int etabin = 0;
760 int reg = 0;
761 bool found = false;
762 float cluster_eta_electron = 0;
763 auto itr_ptBEGIN = m_pteta_bins.begin();
764 auto itr_ptEND = m_pteta_bins.end();
765 for (; itr_ptBEGIN != itr_ptEND; ++itr_ptBEGIN) {
766 auto itr_ptBEGINplusOne = itr_ptBEGIN;
767 ++itr_ptBEGINplusOne;
768 // Find the pt bin : Larger or equal from the current and the next one is
769 // the last or the next one is larger.
770 if (et >= itr_ptBEGIN->first &&
771 (itr_ptBEGINplusOne == itr_ptEND || et < itr_ptBEGINplusOne->first)) {
772 if ((itr_ptBEGIN->second).at(0) >= 0) {
773 cluster_eta_electron = std::abs(cluster_eta);
774 } else {
775 cluster_eta_electron = (cluster_eta);
776 };
777 for (unsigned int etab = 0; etab < ((itr_ptBEGIN->second).size());
778 ++etab) {
779 unsigned int etabnext = etab + 1;
780 // Find the eta bin : Larger or equal from the current and the next one
781 // is the last or the next one is larger:.
782 if ((cluster_eta_electron) >= (itr_ptBEGIN->second).at(etab) &&
783 (etabnext == itr_ptBEGIN->second.size() ||
784 cluster_eta_electron < itr_ptBEGIN->second.at(etabnext))) {
785 found = true;
786 break;
787 }
788 // We did not find it. Increment eta and continue looking
789 etabin++;
790 }
791 }
792 if (found) {
793 break;
794 }
795 // Add the full size of the "passed" eta row
796 reg += (itr_ptBEGIN->second).size();
797 }
798 if (!found) {
799 ATH_MSG_WARNING("No index for the uncorrelated systematic was found, "
800 "returning the maximum index");
801 return m_nCorrSyst;
802 }
803 reg = reg + etabin;
804 return reg;
805}
std::vector< std::pair< float, std::vector< float > > > m_pteta_bins

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ endInputFile()

StatusCode asg::AsgMetadataTool::endInputFile ( )
protectedvirtualinherited

Function called when the currently open input file got completely processed.

Dummy implementation that can be overridden by the derived tool.

Reimplemented in BookkeeperDumperTool, BookkeeperTool, xAODMaker::TriggerMenuMetaDataTool, and xAODMaker::TruthMetaDataTool.

Definition at line 193 of file AsgMetadataTool.cxx.

193 {
194
195 // Return gracefully:
196 return StatusCode::SUCCESS;
197 }

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ get_simType_from_metadata()

StatusCode AsgElectronEfficiencyCorrectionTool::get_simType_from_metadata ( PATCore::ParticleDataType::DataType & result) const
private

Definition at line 946 of file AsgElectronEfficiencyCorrectionTool.cxx.

948{
949
950#ifndef XAOD_STANDALONE
951 // Determine MC/Data
952 std::string dataType("");
954 "/TagInfo", "project_name", dataType, inputMetaStore()))
955 .isSuccess()) {
956 if (!(dataType == "IS_SIMULATION")) {
958 ATH_MSG_DEBUG("Running on data");
959 return StatusCode::SUCCESS;
960 }
961 // Determine Fast/FullSim
962 if (dataType == "IS_SIMULATION") {
963 std::string simType("");
964 ATH_CHECK(AthAnalysisHelper::retrieveMetadata("/Simulation/Parameters",
965 "SimulationFlavour",
966 simType,
967 inputMetaStore()));
968 std::transform(simType.begin(), simType.end(), simType.begin(), ::toupper);
969 result = (simType.find("ATLFAST") == std::string::npos)
972 return StatusCode::SUCCESS;
973 }
974 }
975#endif
976 // Here's how things will work dual use, when file metadata is available in
977 // files
978 if (inputMetaStore()->contains<xAOD::FileMetaData>("FileMetaData")) {
979 const xAOD::FileMetaData* fmd = nullptr;
980 ATH_CHECK(inputMetaStore()->retrieve(fmd, "FileMetaData"));
981
982 std::string simType("");
983 const bool s = fmd->value(xAOD::FileMetaData::simFlavour, simType);
984 if (!s) {
985 ATH_MSG_DEBUG("no sim flavour from metadata: must be data");
987 return StatusCode::SUCCESS;
988 } else {
989 ATH_MSG_DEBUG("sim type = " + simType);
990 std::transform(simType.begin(), simType.end(), simType.begin(), ::toupper);
991 result = (simType.find("ATLFAST") == std::string::npos)
994 return StatusCode::SUCCESS;
995 }
996 } else { // no metadata in the file
997 ATH_MSG_DEBUG("no metadata found in the file");
998 return StatusCode::FAILURE;
999 }
1000}
#define ATH_CHECK
Evaluate an expression and check for errors.
static std::string retrieveMetadata(const std::string &folder, const std::string &key, const ServiceHandle< StoreGateSvc > &inputMetaStore)
method that always returns as a string you can use from, e.g, pyROOT with evt = ROOT....
MetaStorePtr_t inputMetaStore() const
Accessor for the input metadata store.
@ simFlavour
Fast or Full sim [string].
bool value(MetaDataType type, std::string &val) const
Get a pre-defined string value out of the object.
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
retrieve(aClass, aKey=None)
Definition PyKernel.py:110
FileMetaData_v1 FileMetaData
Declare the latest version of the class.

◆ getEfficiencyScaleFactor() [1/3]

CP::CorrectionCode AsgElectronEfficiencyCorrectionTool::getEfficiencyScaleFactor ( columnar::ElectronId inputObject,
double & efficiencyScaleFactor,
columnar::EventInfoId info ) const
private

Definition at line 347 of file AsgElectronEfficiencyCorrectionTool.cxx.

351{
352 const Accessors& acc = *m_accessors;
353
354 efficiencyScaleFactor = 1;
355 // Retrieve the proper random Run Number
356 unsigned int runNumber = m_defaultRandomRunNumber;
358 if (!acc.randomrunnumber.isAvailable(eventInfo)) {
360 "Pileup tool not run before using ElectronEfficiencyTool! SFs do not "
361 "reflect PU distribution in data");
363 }
364 runNumber = acc.randomrunnumber(eventInfo);
365 }
366 //
367 // Get the result
368 //
369 double cluster_eta(-9999.9);
370
371 auto cluster = acc.caloClusterAcc (inputObject) [0].value();
372
373 // we need to use different variables for central and forward electrons
374 if (acc.accAuthor.isAvailable(inputObject) &&
375 acc.accAuthor(inputObject) == xAOD::EgammaParameters::AuthorFwdElectron) {
376 cluster_eta = acc.clusterEtaAcc (cluster);
377 } else {
378 cluster_eta = acc.clusterEtaBEAcc (cluster, 2);
379 }
380
381 // use et from cluster because it is immutable under syst variations of
382 // electron energy scale
383 const double energy = acc.clusterEAcc(cluster);
384 const double parEta = acc.m_eta(inputObject);
385 const double coshEta = std::cosh(parEta);
386 double et = (coshEta != 0.) ? energy / coshEta : 0.;
387 // allow for a 5% margin at the lowest pT bin boundary (i.e. increase et by 5%
388 // for sub-threshold electrons). This assures that electrons that pass the
389 // threshold only under syst variations of energy get a scale factor assigned.
390 auto itr_pt = m_pteta_bins.begin();
391 if (itr_pt != m_pteta_bins.end() && et < itr_pt->first) {
392 et = et * 1.05;
393 }
394 return getEfficiencyScaleFactor(et, cluster_eta, runNumber,
395 efficiencyScaleFactor);
396}
@ Error
Some error happened during the object correction.
const uint16_t AuthorFwdElectron
Electron reconstructed by the Forward cluster-based algorithm.
Definition EgammaDefs.h:30

◆ getEfficiencyScaleFactor() [2/3]

CP::CorrectionCode AsgElectronEfficiencyCorrectionTool::getEfficiencyScaleFactor ( const double et,
const double cluster_eta,
const unsigned int runNumber,
double & efficiencyScaleFactor ) const
finaloverrideprivatevirtual

Implements IAsgElectronEfficiencyCorrectionTool.

Definition at line 399 of file AsgElectronEfficiencyCorrectionTool.cxx.

404{
405 // We pass only one variation per time
406 // The applied systematic is always one systematic.
407 // Either is relevant and acquires a value
408 // or stays 0.
409 double sys(0);
410
411 // Let's try to figure already what we are to do
412 bool doSFOnly = appliedSystematics().empty();
417 bool isSimplified = (m_correlation_model == correlationModel::SIMPLIFIED);
418
419 // Lets see if we have an uncorrelated syst variation passed
420 int unCorrSign = 0;
421 // or a correlated one
422 int indexCorrelated = -999;
423 int correlatedSign = 0;
424 if (!(doSFOnly || doToys || isTotal) && (isFull || isSimplified)) {
425 const auto& sysName = appliedSystematics().begin()->name();
426 bool isUncorr = (sysName.find("UncorrUnc") != std::string::npos);
427 int currentUncorReg = -999;
428 if (isUncorr) {
429 // Can we find an uncorrelated region?
430 if (isFull) {
431 currentUncorReg = currentUncorrSystRegion(cluster_eta, et);
432 } else if (isSimplified) {
433 currentUncorReg = currentSimplifiedUncorrSystRegion(cluster_eta, et);
434 }
435 if (currentUncorReg < 0) {
437 }
438 // And use it to if we got the "right" syst variation
439 if (appliedSystematics().matchSystematic(
440 m_uncorrVarDown[currentUncorReg])) {
441 unCorrSign = -1;
442 } else if (appliedSystematics().matchSystematic(
443 m_uncorrVarUp[currentUncorReg])) {
444 unCorrSign = 1;
445 }
446 } else if (m_nCorrSyst != 0) {//if we have 0 we do not care ...
447 if (sysName.find("CorrUnc") != std::string::npos) {
448 // given the name convention we
449 const auto varNumEnd = sysName.rfind("__");
450 const auto varNumBegin = sysName.rfind("NP") + 2;
451 const int varIndex =
452 std::stoi(sysName.substr(varNumBegin, (varNumEnd - varNumBegin)));
453 if (appliedSystematics().matchSystematic(m_corrVarUp[varIndex])) {
454 indexCorrelated = varIndex;
455 correlatedSign = 1;
456 } else if (appliedSystematics().matchSystematic(
457 m_corrVarDown[varIndex])) {
458 indexCorrelated = varIndex;
459 correlatedSign = -1;
460 }
461 } // find CorrUncertainty in name
462 } // not Uncorr and we have CorrSyst
463 } // Not (SF or toys or total)
464
465 // Now lets do the call
466 // For now we more or less calculate on demand only
467 // the Correlated and the toys we can see if we want
468 // top opt also the "TOTAL"
469 Root::TElectronEfficiencyCorrectionTool::Result result;
470 const int status =
471 m_rootTool->calculate(m_dataType, runNumber, cluster_eta, et, /* in MeV */
472 result, isTotal);
473
474 // if status 0 something went wrong
475 if (!status) {
476 efficiencyScaleFactor = 1;
478 }
479 // At this point we have the SF
480 efficiencyScaleFactor = result.SF;
481 //And if all we need we can return
482 if (doSFOnly) {
484 }
485
486 // First the logic if the user requested toys
487 if (doToys) {
489 toy.second = m_scale_toys;
490 sys = result.toys[toy.first - 1] * m_scale_toys;
491 // return here for Toy variations
492 efficiencyScaleFactor = sys;
494 }
495 // The "TOTAL" single uncertainty uncorrelated+correlated
496 else if (isTotal) {
497 sys = result.Total;
498 if (appliedSystematics().matchSystematic(m_uncorrVarUp[0])) {
499 return HelperFunc(efficiencyScaleFactor, sys);
500 }
501 if (appliedSystematics().matchSystematic(m_uncorrVarDown[0])) {
502 return HelperFunc(efficiencyScaleFactor, -1 * sys);
503 }
504 }
505 // Then the uncorrelated part for the SiMPLIFIED/FULL models
506 else if (unCorrSign!=0) {
507 sys = unCorrSign * result.UnCorr;
508 return HelperFunc(efficiencyScaleFactor, sys);
509 }
510
511 // If we reach this point
512 // it means we need to do the correlated part
513 // for the FULL/SIMPLIFIED models.
514 // First if there are not correlated systematic
515 if (m_nCorrSyst == 0) {
516
517 if (appliedSystematics().matchSystematic(m_corrVarUp[0])) {
518 sys = std::sqrt(result.Total * result.Total -
519 result.UnCorr * result.UnCorr); // total
520 // -stat
521 return HelperFunc(efficiencyScaleFactor, sys);
522 }
523 if (appliedSystematics().matchSystematic(m_corrVarDown[0])) {
524 sys = -1 * std::sqrt(result.Total * result.Total -
525 result.UnCorr * result.UnCorr); // total
526 // -stat
527 return HelperFunc(efficiencyScaleFactor, sys);
528 }
529 }
530 //or if we had
531 if (correlatedSign != 0) {
532 sys = correlatedSign * result.Corr[indexCorrelated];
533 return HelperFunc(efficiencyScaleFactor, sys);
534 }
536}
int currentSimplifiedUncorrSystRegion(const double cluster_eta, const double et) const
std::vector< CP::SystematicVariation > m_uncorrVarDown
std::vector< CP::SystematicVariation > m_corrVarDown
std::vector< CP::SystematicVariation > m_corrVarUp
std::unique_ptr< Root::TElectronEfficiencyCorrectionTool > m_rootTool
Pointer to the underlying ROOT based tool.
virtual const CP::SystematicSet & appliedSystematics() const override final
returns: the currently applied systematics
std::vector< CP::SystematicVariation > m_uncorrVarUp
int currentUncorrSystRegion(const double cluster_eta, const double et) const
std::pair< unsigned, float > getToyVariationByBaseName(const std::string &basename) const
the toy variation for the given basename
const_iterator begin() const
description: const iterator to the beginning of the set

◆ getEfficiencyScaleFactor() [3/3]

CP::CorrectionCode AsgElectronEfficiencyCorrectionTool::getEfficiencyScaleFactor ( const xAOD::Electron & inputObject,
double & efficiencyScaleFactor ) const
finaloverrideprivatevirtual

Implements IAsgElectronEfficiencyCorrectionTool.

Definition at line 334 of file AsgElectronEfficiencyCorrectionTool.cxx.

337{
338 const xAOD::EventInfo* eventInfo = nullptr;
339 if (evtStore()->retrieve(eventInfo, m_eventInfoCollectionName).isFailure()) {
340 ATH_MSG_ERROR("Could not retrieve EventInfo object!");
342 }
343 return getEfficiencyScaleFactor(columnar::ElectronId(inputObject), efficiencyScaleFactor, columnar::EventInfoId (*eventInfo));
344}
std::string m_eventInfoCollectionName
The Event info collection name.
ServiceHandle< StoreGateSvc > & evtStore()
ObjectId< ContainerId::eventInfo > EventInfoId
EventInfo_v1 EventInfo
Definition of the latest event info version.

◆ getFile()

StatusCode AsgElectronEfficiencyCorrectionTool::getFile ( const std::string & recokey,
const std::string & idkey,
const std::string & isokey,
const std::string & trigkey )
privatevirtual

Gets the correction filename from map.

Definition at line 845 of file AsgElectronEfficiencyCorrectionTool.cxx.

849{
850
851 std::string mapFileName = PathResolverFindCalibFile(m_mapFile);
852 std::string key =
853 ElRecomFileHelpers::convertToOneKey(recokey, idkey, isokey, trigkey);
854 std::string value = ElRecomFileHelpers::getValueByKey(mapFileName, key);
855
856 if (!value.empty()) {
857 m_corrFileNameList.push_back(value);
858 } else {
859 if (mapFileName.empty()) {
861 "Map file does not exist, Please set the path and version properly..");
862 } else {
864 "Key "
865 << key
866 << " does not exist in the map file, Please configure it properly..");
867 }
868 return StatusCode::FAILURE;
869 }
870
871 ATH_MSG_DEBUG("Full File Name is " + value);
872 return StatusCode::SUCCESS;
873}
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
std::vector< std::string > m_corrFileNameList
The list of file names.
std::string getValueByKey(const std::string &mapFile, const std::string &key)
std::string convertToOneKey(const std::string &recokey, const std::string &idkey, const std::string &isokey, const std::string &trigkey)

◆ getKey()

SG::sgkey_t asg::AsgTool::getKey ( const void * ptr) const
inherited

Get the (hashed) key of an object that is in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::TEvent both provide ways for getting the SG::sgkey_t key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getName
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The hashed key of the object in the store. If not found, an invalid (zero) key.

Definition at line 119 of file AsgTool.cxx.

119 {
120
121#ifdef XAOD_STANDALONE
122 // In case we use @c xAOD::TEvent, we have a direct function call
123 // for this.
124 return evtStore()->event()->getKey( ptr );
125#else
126 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
127 return ( proxy == nullptr ? 0 : proxy->sgkey() );
128#endif // XAOD_STANDALONE
129 }

◆ getName()

const std::string & asg::AsgTool::getName ( const void * ptr) const
inherited

Get the name of an object that is / should be in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::TEvent both provide ways for getting the std::string name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getKey
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The string name of the object in the store. If not found, an empty string.

Definition at line 106 of file AsgTool.cxx.

106 {
107
108#ifdef XAOD_STANDALONE
109 // In case we use @c xAOD::TEvent, we have a direct function call
110 // for this.
111 return evtStore()->event()->getName( ptr );
112#else
113 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
114 static const std::string dummy = "";
115 return ( proxy == nullptr ? dummy : proxy->name() );
116#endif // XAOD_STANDALONE
117 }

◆ getNumberOfToys()

virtual int AsgElectronEfficiencyCorrectionTool::getNumberOfToys ( ) const
inlinefinaloverrideprivatevirtual

◆ getProperty()

template<class T>
const T * asg::AsgTool::getProperty ( const std::string & name) const
inherited

Get one of the tool's properties.

◆ handle()

void asg::AsgMetadataTool::handle ( const Incident & inc)
protectedvirtualinherited

Function receiving incidents from IncidentSvc/TEvent.

Reimplemented in Trig::TrigDecisionTool.

Definition at line 135 of file AsgMetadataTool.cxx.

135 {
136
137 // Tell the user what's happening:
138 ATH_MSG_VERBOSE( "Callback received with incident: " << inc.type() );
139
140 // Call the appropriate member function:
141 if( inc.type() == IncidentType::BeginInputFile ) {
143 if( beginInputFile().isFailure() ) {
144 ATH_MSG_FATAL( "Failed to call beginInputFile()" );
145 throw std::runtime_error( "Couldn't call beginInputFile()" );
146 }
147 } else if( inc.type() == IncidentType::EndInputFile ) {
148 if( endInputFile().isFailure() ) {
149 ATH_MSG_FATAL( "Failed to call endInputFile()" );
150 throw std::runtime_error( "Couldn't call endInputFile()" );
151 }
152 } else if( inc.type() == IncidentType::BeginEvent ) {
153 // If the tool didn't catch the begin input file incident for the
154 // first input file of the job, then call the appropriate function
155 // now.
156 if( ! m_beginInputFileCalled ) {
158 if( beginInputFile().isFailure() ) {
159 ATH_MSG_FATAL( "Failed to call beginInputFile()" );
160 throw std::runtime_error( "Couldn't call beginInputFile()" );
161 }
162 }
163 if( beginEvent().isFailure() ) {
164 ATH_MSG_FATAL( "Failed to call beginEvent()" );
165 throw std::runtime_error( "Couldn't call beginEvent()" );
166 }
167
168 #ifdef XAOD_STANDALONE
169 } else if( inc.type() == IncidentType::MetaDataStop ) {
170 if( metaDataStop().isFailure() ) {
171 ATH_MSG_FATAL( "Failed to call metaDataStop()" );
172 throw std::runtime_error( "Couldn't call metaDataStop()" );
173 }
174
175 #endif // XAOD_STANDALONE
176 } else {
177 ATH_MSG_WARNING( "Unknown incident type received in AsgMetaDataTool: " << inc.type() );
178 }
179
180 return;
181 }
#define ATH_MSG_FATAL(x)
#define ATH_MSG_VERBOSE(x)
virtual StatusCode beginInputFile()
Function called when a new input file is opened.
virtual StatusCode beginEvent()
Function called when a new events is loaded.
bool m_beginInputFileCalled
Flag helping to discover when the tool misses the opening of the first input file.
virtual StatusCode endInputFile()
Function called when the currently open input file got completely processed.
virtual StatusCode metaDataStop()
Function called when the tool should write out its metadata.

◆ initialize()

StatusCode AsgElectronEfficiencyCorrectionTool::initialize ( void )
finaloverrideprivatevirtual

Gaudi Service Interface method implementations.

Reimplemented from asg::AsgTool.

Definition at line 150 of file AsgElectronEfficiencyCorrectionTool.cxx.

151{
152 // Forward the message level
153 m_rootTool->msg().setLevel(this->msg().level());
154
155 if (m_corrFileNameList.empty() && m_recoKey.empty() && m_idKey.empty() &&
156 m_trigKey.empty() && m_isoKey.empty()) {
157 ATH_MSG_ERROR("CorrectionFileNameList as well as SFKeys are empty! Please "
158 "configure it properly...");
159 return StatusCode::FAILURE;
160 }
161 /*
162 * When metadata are available
163 * m_dataType will be whatever the metadata says i.e Full or Fast
164 * Its default value is Full.
165 * The user can overwrite all these ,using a flag,
166 * and force a specific dataType
167 */
168 if (m_dataTypeOverwrite != -1) {
170 static_cast<int>(PATCore::ParticleDataType::Full) &&
172 static_cast<int>(PATCore::ParticleDataType::Fast)) {
173 ATH_MSG_ERROR("Unsupported Particle Data Type Overwrite"
175 return StatusCode::FAILURE;
176 }
177 m_dataType =
179 }
180 // Find the relevant input files
181 // Fill the vector with filename using keys if the user
182 // has not passed the full filename as a property
183 if (m_corrFileNameList.empty()) {
184 if (getFile(m_recoKey, m_idKey, m_isoKey, m_trigKey).isFailure()) {
185 ATH_MSG_ERROR("No Root file input specified, and not available map file");
186 return StatusCode::FAILURE;
187 }
188 }
189 // Resolve the paths to the input files for the full Geant4 simualtion
190 // corrections
191 for (auto& ifile : m_corrFileNameList) {
192
193 std::string filename = PathResolverFindCalibFile(ifile);
194 if (filename.empty()) {
195 ATH_MSG_ERROR("Could NOT resolve file name " << ifile);
196 return StatusCode::FAILURE;
197 } else {
198 ATH_MSG_DEBUG(" Path found = " << filename);
199 }
200 m_rootTool->addFileName(filename);
201 // Determine the systematics substring according to the name of the input
202 // file
203 if (ifile.find("efficiencySF.") != std::string::npos) {
204 m_sysSubstring = "Trigger_";
205 }
206 if (ifile.find("efficiencySF.offline") != std::string::npos) {
207 m_sysSubstring = "ID_";
208 }
209 if (ifile.find("efficiencySF.offline.RecoTrk") != std::string::npos) {
210 m_sysSubstring = "Reco_";
211 }
212 if (ifile.find("efficiencySF.offline.Fwd") != std::string::npos) {
213 m_sysSubstring = "FwdID_";
214 }
215 if (ifile.find("efficiencySF.Isolation") != std::string::npos) {
216 m_sysSubstring = "Iso_";
217 }
218 if (ifile.find("efficiency.") != std::string::npos) {
219 m_sysSubstring = "TriggerEff_";
220 }
221 if (ifile.find("efficiencySF.ChargeID") != std::string::npos) {
222 m_sysSubstring = "ChargeIDSel_";
223 }
224 if (m_sysSubstring.empty()) {
225 ATH_MSG_ERROR("Could NOT find systematics Substring file name "
226 << m_sysSubstring);
227 return StatusCode::FAILURE;
228 }
229 }
230 //
231 // Find the proper correlation Model
232 if (m_correlation_model_name == "COMBMCTOYS") {
234 } else if (m_correlation_model_name == "MCTOYS") {
236 } else if (m_correlation_model_name == "FULL") {
238 } else if (m_correlation_model_name == "SIMPLIFIED") {
240 // a few checks on the binning that the user might have specified
242 m_uncorrSimplfEtBinsUser.size() < 2 ||
243 m_uncorrSimplfEtaBinsUser.size() < 2) {
244 ATH_MSG_ERROR("Something went wrong when specifying bins for the "
245 "SIMPLIFIED correlation model ");
246 return StatusCode::FAILURE;
247 }
248 } else if (m_correlation_model_name == "TOTAL") {
250 } else if (m_correlation_model_name == "SYST") {
252 } else {
253 ATH_MSG_ERROR("Unknown correlation model " + m_correlation_model_name);
254 return StatusCode::FAILURE;
255 }
256 ATH_MSG_DEBUG("Correlation model: " + m_correlation_model_name
257 << " Enum " << m_correlation_model);
258
259 // Histogram of simplified uncorrelated regions
261 m_UncorrRegions = new TH2F("UncorrRegions",
262 "UncorrRegions",
263 m_uncorrSimplfEtBinsUser.size() - 1,
265 m_uncorrSimplfEtaBinsUser.size() - 1,
267 m_UncorrRegions->SetDirectory(nullptr);
268
269 // bins not entries here
271 (m_uncorrSimplfEtBinsUser.size() - 1);
272 }
273 // Finish the preaparation of the underlying tool
274 if (m_seed_toys != 0) {
275 m_rootTool->setSeed(m_seed_toys);
276 }
277 //
279 m_rootTool->bookCombToyMCScaleFactors(m_number_of_toys);
280 }
281 //
283 m_rootTool->bookToyMCScaleFactors(m_number_of_toys);
284 }
285 // We need to initialize the underlying ROOT TSelectorTool
286 if (0 == m_rootTool->initialize()) {
288 "Could not initialize the TElectronEfficiencyCorrectionTool!");
289 return StatusCode::FAILURE;
290 }
291
292 // get Nsyst
293 m_nCorrSyst = m_rootTool->getNSyst();
294 std::map<float, std::vector<float>> tmp;
295 m_nUncorrSyst = m_rootTool->getNbins(tmp);
296 // copy over to vector for better access
297 for (const auto& i : tmp) {
298 m_pteta_bins.emplace_back(i.first, i.second);
299 }
300
301 // Check if the input contains uncorr/stat necessary
302 // to run non-total systematic model
304 m_rootTool->uncorrEmpty(m_dataType) ) {
305 ATH_MSG_ERROR("Called correlation model "+m_correlation_model_name+
306 " but input does not contain necessary histograms.");
307 return StatusCode::FAILURE;
308 }
309
310 // Initialize the systematics
311 if (InitSystematics() != StatusCode::SUCCESS) {
312 ATH_MSG_ERROR("(InitSystematics() != StatusCode::SUCCESS)");
313 return StatusCode::FAILURE;
314 }
315 // Add the recommended systematics to the registry
316 if (registerSystematics() != StatusCode::SUCCESS) {
317 ATH_MSG_ERROR("(registerSystematics() != StatusCode::SUCCESS)");
318 return StatusCode::FAILURE;
319 }
320 // Configure for nominal systematics
321 if (applySystematicVariation(CP::SystematicSet()) != StatusCode::SUCCESS) {
322 ATH_MSG_ERROR("Could not configure for nominal settings");
323 return StatusCode::FAILURE;
324 }
325
327 resetAccessor (m_accessors->randomrunnumber, *this, "RandomRunNumber");
328 }
329 ATH_CHECK (initializeColumns());
330 return StatusCode::SUCCESS;
331}
StatusCode InitSystematics()
initialize the systematics
virtual StatusCode applySystematicVariation(const CP::SystematicSet &systConfig) override final
Configure this tool for the given systematics.
virtual StatusCode getFile(const std::string &recokey, const std::string &idkey, const std::string &isokey, const std::string &trigkey)
Gets the correction filename from map.
void resetAccessor(AccessorTemplate< CI, CT, CAM, CM > &accessor, ColumnarTool< CM > &columnBase, const std::string &name, ColumnInfo &&info={})
reset a column accessor to point to a new column
TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
MsgStream & msg
Definition testRead.cxx:32

◆ InitSystematics()

StatusCode AsgElectronEfficiencyCorrectionTool::InitSystematics ( )
private

initialize the systematics

Definition at line 646 of file AsgElectronEfficiencyCorrectionTool.cxx.

647{
648 const std::string prefix = "EL_EFF_" + m_sysSubstring;
649 const std::string prefixUncorr = prefix + m_correlation_model_name + "_";
650 // Toys
652 m_toysBasename = prefix + "COMBMCTOY";
653 m_affectedSys.insert(
656 m_toysBasename = prefix + "MCTOY";
657 m_affectedSys.insert(
659 // Correlated for the different models (1 or Full set)
661 if (m_nCorrSyst == 0) {
662 auto varUp = CP::SystematicVariation(prefix + "CorrUncertainty", 1);
663 auto varDown = CP::SystematicVariation(prefix + "CorrUncertainty", -1);
664 m_corrVarUp.push_back(varUp);
665 m_corrVarDown.push_back(varDown);
666 m_affectedSys.insert(varUp);
667 m_affectedSys.insert(varDown);
668 } else
669 for (int i = 0; i < m_nCorrSyst; ++i) {
670 auto varUp =
671 CP::SystematicVariation(prefix + Form("CorrUncertaintyNP%d", i), 1);
672 auto varDown =
673 CP::SystematicVariation(prefix + Form("CorrUncertaintyNP%d", i), -1);
674 m_corrVarUp.push_back(varUp);
675 m_corrVarDown.push_back(varDown);
676 m_affectedSys.insert(varUp);
677 m_affectedSys.insert(varDown);
678 }
679 }
680 // Different tratement for the uncorrelated per model
682 auto varUp = CP::SystematicVariation(prefixUncorr + "1NPCOR_PLUS_UNCOR", 1);
683 auto varDown =
684 CP::SystematicVariation(prefixUncorr + "1NPCOR_PLUS_UNCOR", -1);
685 m_uncorrVarUp.push_back(varUp);
686 m_uncorrVarDown.push_back(varDown);
687 m_affectedSys.insert(varUp);
688 m_affectedSys.insert(varDown);
690 for (int i = 0; i < m_nUncorrSyst; ++i) {
691 auto varUp = CP::SystematicVariation(
692 prefixUncorr + Form("UncorrUncertaintyNP%d", i), 1);
693 auto varDown = CP::SystematicVariation(
694 prefixUncorr + Form("UncorrUncertaintyNP%d", i), -1);
695 m_uncorrVarUp.push_back(varUp);
696 m_uncorrVarDown.push_back(varDown);
697 m_affectedSys.insert(varUp);
698 m_affectedSys.insert(varDown);
699 }
701 for (int i = 0; i < m_nSimpleUncorrSyst; ++i) {
702 auto varUp = CP::SystematicVariation(
703 prefixUncorr + Form("UncorrUncertaintyNP%d", i), 1);
704 auto varDown = CP::SystematicVariation(
705 prefixUncorr + Form("UncorrUncertaintyNP%d", i), -1);
706 m_uncorrVarUp.push_back(varUp);
707 m_uncorrVarDown.push_back(varDown);
708 m_affectedSys.insert(varUp);
709 m_affectedSys.insert(varDown);
710 }
711 }
712 return StatusCode::SUCCESS;
713}
static SystematicVariation makeToyEnsemble(const std::string &basename)
constructor for toy systematics ensemble

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ inputMetaStore()

AsgMetadataTool::MetaStorePtr_t asg::AsgMetadataTool::inputMetaStore ( ) const
inherited

Accessor for the input metadata store.

Definition at line 93 of file AsgMetadataTool.cxx.

93 {
94
95#ifdef XAOD_STANDALONE
96 return &m_inputMetaStore;
97#else // XAOD_STANDALONE
98 return m_inputMetaStore;
99#endif // XAOD_STANDALONE
100 }
MetaStore_t m_inputMetaStore
Object accessing the input metadata store.

◆ isAffectedBySystematic()

bool AsgElectronEfficiencyCorrectionTool::isAffectedBySystematic ( const CP::SystematicVariation & systematic) const
finaloverrideprivatevirtual

returns: whether this tool is affected by the given systematis

returns: bool indicating if affected by the variation

Implements CP::ISystematicsTool.

Definition at line 556 of file AsgElectronEfficiencyCorrectionTool.cxx.

558{
559 if (systematic.empty()) {
560 return false;
561 }
562 CP::SystematicSet sys = affectingSystematics();
565 return (sys.begin()->ensembleContains(systematic));
566 } else {
567 return (sys.find(systematic) != sys.end());
568 }
569}
bool empty() const
returns: whether this is an empty systematic, i.e.

◆ metaDataStop()

StatusCode asg::AsgMetadataTool::metaDataStop ( )
protectedvirtualinherited

Function called when the tool should write out its metadata.

Dummy implementation that can be overridden by the derived tool.

Reimplemented in BookkeeperDumperTool, BookkeeperTool, xAODMaker::TriggerMenuMetaDataTool, and xAODMaker::TruthMetaDataTool.

Definition at line 209 of file AsgMetadataTool.cxx.

209 {
210
211 // Return gracefully:
212 return StatusCode::SUCCESS;
213 }

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msg_level_name()

const std::string & asg::AsgTool::msg_level_name ( ) const
inherited

A deprecated function for getting the message level's name.

Instead of using this, weirdly named function, user code should get the string name of the current minimum message level (in case they really need it...), with:

MSG::name( msg().level() )

This function's name doesn't follow the ATLAS coding rules, and as such will be removed in the not too distant future.

Returns
The string name of the current minimum message level that's printed

Definition at line 101 of file AsgTool.cxx.

101 {
102
103 return MSG::name( msg().level() );
104 }
MsgStream & msg() const
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
Definition MsgLevel.cxx:19

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ outputMetaStore()

AsgMetadataTool::MetaStorePtr_t asg::AsgMetadataTool::outputMetaStore ( ) const
inherited

Accessor for the output metadata store.

Definition at line 102 of file AsgMetadataTool.cxx.

102 {
103
104#ifdef XAOD_STANDALONE
105 return &m_outputMetaStore;
106#else // XAOD_STANDALONE
107 return m_outputMetaStore;
108#endif // XAOD_STANDALONE
109 }
MetaStore_t m_outputMetaStore
Object accessing the output metadata store.

◆ print()

◆ printCorrelationModels()

virtual void AsgElectronEfficiencyCorrectionTool::printCorrelationModels ( ) const
inlinefinaloverrideprivatevirtual

print available/implemented correlation models

Implements IAsgElectronEfficiencyCorrectionTool.

Definition at line 102 of file AsgElectronEfficiencyCorrectionTool.h.

103 {
105 " Available Correlation Models for the ElectronEfficiencyCorrectionTool");
106 ATH_MSG_INFO("FULL");
107 ATH_MSG_INFO("SIMPLIFIED");
108 ATH_MSG_INFO("MCTOYS");
109 ATH_MSG_INFO("SYST");
110 ATH_MSG_INFO("COMBMCTOYS");
111 ATH_MSG_INFO("TOTAL");
112 };

◆ recommendedSystematics()

CP::SystematicSet AsgElectronEfficiencyCorrectionTool::recommendedSystematics ( ) const
finaloverrideprivatevirtual

returns: the list of all systematics this tool recommends to use

Implements CP::IReentrantSystematicsTool.

Definition at line 592 of file AsgElectronEfficiencyCorrectionTool.cxx.

593{
594 return affectingSystematics();
595}

◆ registerSystematics()

StatusCode AsgElectronEfficiencyCorrectionTool::registerSystematics ( )
private

Definition at line 579 of file AsgElectronEfficiencyCorrectionTool.cxx.

580{
581 CP::SystematicRegistry& registry = CP::SystematicRegistry::getInstance();
582
583 if (registry.registerSystematics(*this) != StatusCode::SUCCESS) {
585 "Failed to add systematic to list of recommended systematics.");
586 return StatusCode::FAILURE;
587 }
588 return StatusCode::SUCCESS;
589}
static SystematicRegistry & getInstance()
Get the singleton instance of the registry for the curren thread.
StatusCode registerSystematics(const IReentrantSystematicsTool &tool)
effects: register all the systematics from the tool

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setUseIncidents()

void asg::AsgMetadataTool::setUseIncidents ( const bool flag)
inlineprotectedinherited

Definition at line 132 of file AsgMetadataTool.h.

133 {
135 }
bool flag
Definition master.py:29

◆ sysInitialize()

StatusCode asg::AsgMetadataTool::sysInitialize ( )
virtualinherited

Function initialising the tool in the correct way in Athena.

This function is used to set up the callbacks from IncidentSvc in Athena at the right time during initialisation, without the user having to do anything special in his/her code.

Reimplemented from AthCommonDataStore< AthCommonMsg< AlgTool > >.

Definition at line 115 of file AsgMetadataTool.cxx.

115 {
116
117#ifndef XAOD_STANDALONE
118 if (m_useIncidents) {
119 // Connect to the IncidentSvc:
120 ServiceHandle< IIncidentSvc > incSvc( "IncidentSvc", name() );
121 ATH_CHECK( incSvc.retrieve() );
122
123 // Set up the right callbacks: don't rethrow exceptions, any failure and we should end
124 incSvc->addListener( this, IncidentType::BeginEvent, 0, false );
125 }
126 // Let the base class do its thing:
127 ATH_CHECK( AlgTool::sysInitialize() );
128
129#endif // not XAOD_STANDALONE
130
131 // Return gracefully:
132 return StatusCode::SUCCESS;
133 }

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ systUncorrVariationIndex() [1/2]

int AsgElectronEfficiencyCorrectionTool::systUncorrVariationIndex ( columnar::ElectronId inputObject) const
private

Definition at line 815 of file AsgElectronEfficiencyCorrectionTool.cxx.

817{
818 const Accessors& acc = *m_accessors;
819 int currentSystRegion = -999;
820 double cluster_eta(-9999.9);
821 double et(0.0);
822
823 et = acc.m_pt(inputObject);
824 const auto cluster = acc.caloClusterAcc (inputObject) [0].value();
825 cluster_eta = acc.clusterEtaBEAcc (cluster, 2);
826 switch (m_correlation_model) {
828 currentSystRegion = currentSimplifiedUncorrSystRegion(cluster_eta, et);
829 break;
830 }
832 currentSystRegion = currentUncorrSystRegion(cluster_eta, et);
833 break;
834 }
835 default: {
836 // not there for the other models
837 break;
838 }
839 }
840 return currentSystRegion;
841}

◆ systUncorrVariationIndex() [2/2]

int AsgElectronEfficiencyCorrectionTool::systUncorrVariationIndex ( const xAOD::Electron & inputObject) const
finaloverrideprivatevirtual

Implements IAsgElectronEfficiencyCorrectionTool.

Definition at line 808 of file AsgElectronEfficiencyCorrectionTool.cxx.

810{
811 return systUncorrVariationIndex (columnar::ElectronId (inputObject));
812}
virtual int systUncorrVariationIndex(const xAOD::Electron &inputObject) const override final

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

◆ ~AsgElectronEfficiencyCorrectionTool()

AsgElectronEfficiencyCorrectionTool::~AsgElectronEfficiencyCorrectionTool ( )
finaloverrideprivatevirtual

Standard destructor.

Definition at line 142 of file AsgElectronEfficiencyCorrectionTool.cxx.

143{
144 if (m_UncorrRegions) {
145 delete m_UncorrRegions;
146 }
147}

Member Data Documentation

◆ m_accessors

std::unique_ptr<Accessors> AsgElectronEfficiencyCorrectionTool::m_accessors

Definition at line 256 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_affectedSys

CP::SystematicSet AsgElectronEfficiencyCorrectionTool::m_affectedSys
private

Affected systematic, should be done only once.

Definition at line 162 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_appliedSystematics

CP::SystematicSet* AsgElectronEfficiencyCorrectionTool::m_appliedSystematics
private

Currently applied systematics.

Definition at line 165 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_beginInputFileCalled

bool asg::AsgMetadataTool::m_beginInputFileCalled
privateinherited

Flag helping to discover when the tool misses the opening of the first input file.

Definition at line 126 of file AsgMetadataTool.h.

◆ m_correlation_model

int AsgElectronEfficiencyCorrectionTool::m_correlation_model
private

Definition at line 169 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_correlation_model_name

std::string AsgElectronEfficiencyCorrectionTool::m_correlation_model_name
private

Definition at line 168 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_corrFileNameList

std::vector<std::string> AsgElectronEfficiencyCorrectionTool::m_corrFileNameList
private

The list of file names.

Definition at line 181 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_corrVarDown

std::vector<CP::SystematicVariation> AsgElectronEfficiencyCorrectionTool::m_corrVarDown
private

Definition at line 230 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_corrVarUp

std::vector<CP::SystematicVariation> AsgElectronEfficiencyCorrectionTool::m_corrVarUp
private

Definition at line 229 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_dataType

PATCore::ParticleDataType::DataType AsgElectronEfficiencyCorrectionTool::m_dataType
private

Definition at line 200 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_dataTypeOverwrite

int AsgElectronEfficiencyCorrectionTool::m_dataTypeOverwrite
private

Force the data type to a given value.

Definition at line 203 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_defaultRandomRunNumber

int AsgElectronEfficiencyCorrectionTool::m_defaultRandomRunNumber
private

Definition at line 197 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_eventInfoCollectionName

std::string AsgElectronEfficiencyCorrectionTool::m_eventInfoCollectionName
private

The Event info collection name.

Definition at line 193 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_idKey

std::string AsgElectronEfficiencyCorrectionTool::m_idKey
private

Definition at line 176 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_inputMetaStore

MetaStore_t asg::AsgMetadataTool::m_inputMetaStore
privateinherited

Object accessing the input metadata store.

Definition at line 119 of file AsgMetadataTool.h.

◆ m_isoKey

std::string AsgElectronEfficiencyCorrectionTool::m_isoKey
private

Definition at line 177 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_mapFile

std::string AsgElectronEfficiencyCorrectionTool::m_mapFile
private

Definition at line 172 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_metadata_retrieved

bool AsgElectronEfficiencyCorrectionTool::m_metadata_retrieved = false
private

To check if the metadata can be retrieved.

Definition at line 153 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_nCorrSyst

int AsgElectronEfficiencyCorrectionTool::m_nCorrSyst
private

Definition at line 215 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_nSimpleUncorrSyst

int AsgElectronEfficiencyCorrectionTool::m_nSimpleUncorrSyst
private

Definition at line 225 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_number_of_toys

int AsgElectronEfficiencyCorrectionTool::m_number_of_toys
private

Definition at line 206 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_nUncorrSyst

int AsgElectronEfficiencyCorrectionTool::m_nUncorrSyst
private

Definition at line 216 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_outputMetaStore

MetaStore_t asg::AsgMetadataTool::m_outputMetaStore
privateinherited

Object accessing the output metadata store.

Definition at line 121 of file AsgMetadataTool.h.

◆ m_pteta_bins

std::vector<std::pair<float, std::vector<float> > > AsgElectronEfficiencyCorrectionTool::m_pteta_bins
private

Definition at line 217 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_recoKey

std::string AsgElectronEfficiencyCorrectionTool::m_recoKey
private

Definition at line 175 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_resultName

std::string AsgElectronEfficiencyCorrectionTool::m_resultName
private

The string for the result.

Definition at line 187 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_resultPrefix

std::string AsgElectronEfficiencyCorrectionTool::m_resultPrefix
private

The prefix string for the result.

Definition at line 184 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_rootTool

std::unique_ptr<Root::TElectronEfficiencyCorrectionTool> AsgElectronEfficiencyCorrectionTool::m_rootTool = nullptr
private

Pointer to the underlying ROOT based tool.

Definition at line 156 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_scale_toys

double AsgElectronEfficiencyCorrectionTool::m_scale_toys
private

Definition at line 212 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_seed_toys

int AsgElectronEfficiencyCorrectionTool::m_seed_toys
private

Definition at line 209 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_sysSubstring

std::string AsgElectronEfficiencyCorrectionTool::m_sysSubstring
private

Definition at line 190 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_systFilter

std::unordered_map<CP::SystematicSet, CP::SystematicSet> AsgElectronEfficiencyCorrectionTool::m_systFilter
private

Systematics filter map.

Definition at line 159 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_toysBasename

std::string AsgElectronEfficiencyCorrectionTool::m_toysBasename
private

Definition at line 228 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_trigKey

std::string AsgElectronEfficiencyCorrectionTool::m_trigKey
private

Definition at line 178 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_UncorrRegions

TH2F* AsgElectronEfficiencyCorrectionTool::m_UncorrRegions
private

Definition at line 224 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_uncorrSimplfEtaBinsUser

std::vector<float> AsgElectronEfficiencyCorrectionTool::m_uncorrSimplfEtaBinsUser
private

Definition at line 220 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_uncorrSimplfEtBinsUser

std::vector<float> AsgElectronEfficiencyCorrectionTool::m_uncorrSimplfEtBinsUser
private

Definition at line 221 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_uncorrVarDown

std::vector<CP::SystematicVariation> AsgElectronEfficiencyCorrectionTool::m_uncorrVarDown
private

Definition at line 232 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_uncorrVarUp

std::vector<CP::SystematicVariation> AsgElectronEfficiencyCorrectionTool::m_uncorrVarUp
private

Definition at line 231 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_useIncidents

bool asg::AsgMetadataTool::m_useIncidents
privateinherited

Definition at line 128 of file AsgMetadataTool.h.

◆ m_useRandomRunNumber

bool AsgElectronEfficiencyCorrectionTool::m_useRandomRunNumber
private

Definition at line 196 of file AsgElectronEfficiencyCorrectionTool.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: