xAH::Algorithm¶
-
class Algorithm : public EL::Algorithm
This is used by all algorithms within xAODAnaHelpers.
The main goal of this algorithm class is to standardize how everyone defines an algorithm that plugs into xAODAnaHelpers. A series of common utilities are provided such as
m_className
which defines the class name so we can manage a registrym_instanceRegistry
to keep xAODAnaHelpers as flexible as possible to our users.We expect the user to create a new algorithm, such as a selector for jets:
class JetSelector : public xAH::Algorithm { // ... };
The above example is taken from our implementation in
JetSelector
. Just remember that when you write your initializer, you will be expected to do something like:// this is needed to distribute the algorithm to the workers ClassImp(JetSelector) JetSelector :: JetSelector () : Algorithm("JetSelector"), ... { // ... }
which this class will automatically register all instances of for you. Each instance can have a different algorithm name but will have the same
m_className
so we can track how many references have been made. This is useful for selectors to deal with cutflows, but can be useful for other algorithms that need to know how many times they’ve been instantiated in a single job.Note
The expectation is that the user does not directly use this class but rather inherits from it.
Subclassed by BJetEfficiencyCorrector, BasicEventSelection, ClusterHistsAlgo, DebugTool, ElectronCalibrator, ElectronEfficiencyCorrector, ElectronSelector, HLTJetGetter, IParticleHistsAlgo, IsoCloseByCorr, JetCalibrator, JetSelector, METConstructor, MessagePrinterAlgo, MetHistsAlgo, MinixAOD, MuonCalibrator, MuonEfficiencyCorrector, MuonInFatJetCorrector, MuonSelector, OverlapRemover, PhotonCalibrator, PhotonSelector, TauCalibrator, TauEfficiencyCorrector, TauJetMatching, TauSelector, TrackHistsAlgo, TrackSelector, TreeAlgo, TrigMatcher, TruthSelector, Writer
Public Functions
-
Algorithm(std::string className = "Algorithm")
Initialization.
- Parameters
className – This is the name of the class that inherits from :cpp:namespace:
~xAH::Algorithm
-
~Algorithm()
-
StatusCode algInitialize()
Run any initializations commmon to all xAH Algorithms (such as registerInstance). Call this inside
histInitialize
for best results.
-
StatusCode algFinalize()
Run any finalizations common to all xAH Algorithms (such as unregisterInstance). Call this inside
histFinalize
for best results.
-
StatusCode parseSystValVector()
Parse string of systematic sigma levels in m_systValVectorString into m_systValVector.
Public Members
-
std::string m_name = "UnnamedAlgorithm"
All algorithms initialized should have a unique name, to differentiate them at the TObject level.
Note,
GetName()
returns achar*
while this returns astd::string
.
-
bool m_debug = false
m_debug is being deprecated
-
bool m_verbose = false
m_verbose is being deprecated
-
MSG::Level m_msgLevel = MSG::INFO
debug level
-
std::string m_cutFlowStreamName = "cutflow"
-
std::string m_systName = ""
If running systematics, the name of the systematic
-
float m_systVal = 0.0
If running systematics, the value to set the systematic to
Note
This will set the systematic to the value \(\pm x\).
-
std::string m_systValVectorString = ""
If running systematics, you can run multiple points and store them in here. A comma separated list of working points should be given to m_systValVectorString, and then parsed by calling parseSystValVector.
-
std::vector<float> m_systValVector
-
std::string m_eventInfoContainerName = "EventInfo"
If the xAOD has a different EventInfo container name, set it here
-
std::string m_vertexContainerName = "PrimaryVertices"
If the xAOD has a different PrimaryVertex container name, set it here
-
int m_isMC = -1
This stores the isMC decision, and can also be used to override at the algorithm level to force analyzing MC or not.
Value
Meaning
-1
Default, use eventInfo object to determine if data or mc
0
Treat the input as data
1
Treat the input as MC
-
int m_isFastSim = -1
This stores the isFastSim decision, and can also be used to override at the algorithm level to force analyzing FastSim or not.
Value
Meaning
-1
Default, use Metadata object to determine if FullSim or FastSim
0
Treat the input as FullSim
1
Treat the input as FastSim
-
int m_isAF3 = -1
This stores the isAF3 decision, and can also be used to override at the algorithm level to force analyzing FastSim with AF3 or not.
Value
Meaning
-1
Default, use Metadata object to determine if AF3 FastSim or not
0
Treat the input as FullSim or AFII
1
Treat the input as FastSim with AF3
Flag to use Run 3 trigger navigation (true), or Run 2 navigation (false)
-
std::string m_HLTSummary = "HLTNav_Summary_DAODSlimmed"
String storing the type of HLT navigation info available for Run 3 samples. For AODs or unslimmed DAODs: HLTNav_Summary_AODSlimmed
-
bool m_forceFastSim = false
Flags to force a specific data-type, even if it disagrees with your input
-
bool m_forceFullSim = false
-
bool m_forceData = false
-
bool m_setAFII = false
Backwards compatibility, same as m_forceFastSim
-
bool m_setAF3 = false
Protected Functions
-
bool isMC()
- to fix the return value. Otherwise the
\verbatim embed:rst:leading-asterisk Try to determine if we are running over data or MC. The :cpp:member:`xAH::Algorithm::m_isMC` can be used
EventInfo
object is queried.An exception is thrown if the type cannot be determined.
============ ======= Return Value Meaning ============ ======= 0 Data 1 MC ============ =======
-
bool isFastSim()
- to fix the return value. Otherwise the metadata is queried.
\verbatim embed:rst:leading-asterisk Try to determine if we are running over data or MC. The :cpp:member:`xAH::Algorithm::m_isFastSim` can be used
An exception is thrown if the type cannot be determined.
============ ======= Return Value Meaning ============ ======= 0 FullSim (or Data) 1 FastSim ============ =======
-
bool isAF3()
If the name includes ATLFASTII or ATLFAST3 then set to AFII or AF3, if deemed fullSim then FS else leave as empty string and complain
-
bool isPHYS()
Determines if using DAOD_PHYS or not.
-
void registerInstance()
Register the given instance under the moniker
xAH::Algorithm::m_className
This will increase the reference count by 1.
-
int numInstances()
Return number of instances registered under the moniker
xAH::Algorithm::m_className
This will return the reference count.
Warning
If for some reason the instance wasn’t registered, we spit out a warning.
-
void unregisterInstance()
Unregister the given instance under the moniker
xAH::Algorithm::m_className
This will decrease the reference count by 1.
Warning
If for some reason the instance wasn’t registered, we spit out a warning.
-
template<typename T>
inline StatusCode checkToolStore(const std::string &tool_name) - Depending on the outcome, the content of the map :cpp:member:
\verbatim embed:rst:leading-asterisk Check whether the input CP tool already exists with *this* name in the asg::ToolStore
xAH::Algorithm::m_toolAlreadyUsed
wll be set accordingly.
-
inline bool isToolAlreadyUsed(const std::string &tool_name)
Check whether the input CP tool has been already used by any
xAH::Algorithm
in the current job by scanningxAH::Algorithm::m_toolAlreadyUsed
.
-
template<typename T>
inline void setToolName(__attribute__((unused)) asg::AnaToolHandle<T> &handle, __attribute__((unused)) const std::string &name = "") const Sets the name of a tool. If no name is needed, the tool will use the name of the algorithm plus a unique identifier (
xAH::Algorithm::getAddress()
) appended to ensure the tool is unique and effectively private.The tool will not be guaranteed unique if two tools of the same type are created without a name passed in. But this is, at this point, up to the user and a more complex scenario than what this function tries to simplify on its own.
-
inline std::string getAddress() const
Return a
std::string
representation ofthis
Protected Attributes
-
std::string m_className = "Algorithm"
The moniker by which all instances are tracked in
xAH::Algorithm::m_instanceRegistry
-
xAOD::TEvent *m_event = nullptr
The TEvent object
-
xAOD::TStore *m_store = nullptr
The TStore object
Private Members
-
bool m_registered = false¶
A boolean to keep track of whether this instance was registered or not.
Calling
xAH::Algorithm::registerInstance()
multiple times won’t inflate the number of instances of a class made because of me.
-
std::map<std::string, bool> m_toolAlreadyUsed¶
Map containing info about whether a CP Tool of a given name has been already used or not by this
xAH::Algorithm
.Its content gets set through
xAH::Algorithm::checkToolStore()
, depending on whether the tool it’s created from scratch, or retrieved fromasg::ToolStore
Private Static Attributes
-
static std::map<std::string, int> m_instanceRegistry = {}¶
Bookkeeps the number of times
xAH::Algorithm::m_className
has been used in a variable shared among all classes/instances that inherit from me
-
Algorithm(std::string className = "Algorithm")