ATLAS Offline Software
Loading...
Searching...
No Matches
InDetTrackSystematicsTool.h
Go to the documentation of this file.
1// -*- c++ -*-
2/*
3 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
4*/
5
6#ifndef INDETTRACKSYSTEMATICSTOOLS_INDETTRACKSYSTEMATICSTOOL_H
7#define INDETTRACKSYSTEMATICSTOOLS_INDETTRACKSYSTEMATICSTOOL_H
8
9#include <string>
10#include <map>
11#include <memory>
12
14#include "AsgTools/AsgTool.h"
17
18#include <TFile.h>
19#include <TH2.h>
20
21namespace InDet {
22
24
27 public:
28 InDetTrackSystematicsTool( const std::string& );
29 virtual ~InDetTrackSystematicsTool() = default;
30
31 virtual StatusCode initialize() override;
32
34 virtual bool isAffectedBySystematic( const CP::SystematicVariation& ) const override;
36 virtual CP::SystematicSet affectingSystematics() const override = 0;
38 virtual CP::SystematicSet recommendedSystematics() const override;
40 virtual StatusCode applySystematicVariation( const CP::SystematicSet& ) override;
41
42
43 protected:
45 std::unique_ptr<TFile> getFile( const std::string& ) const;
46
48 template <class T> StatusCode initObject(std::unique_ptr<T>& obj, const std::string& rootFileName, const std::string& objName) const;
49
50 // a map from a general set to a set that is filtered for the ones we use
51 // note that SystematicSet caches its hashes so this is probably not as slow as it might seem
52 std::unordered_map< CP::SystematicSet, CP::SystematicSet > m_sysFilterMap;
53
55
56 bool isActive( TrackSystematic ) const;
57
58 };
59
60}
61
62// must define template function in header
63template <class T>
64StatusCode InDet::InDetTrackSystematicsTool::initObject(std::unique_ptr<T>& obj, const std::string& rootFileName, const std::string& objName) const
65{
66 if (obj != nullptr) ATH_MSG_WARNING( obj->GetName() << " is not null, yet we are now attempting to initialize from " << rootFileName );
67 std::unique_ptr<TFile> F = getFile(rootFileName);
68 if(!F || F->IsZombie()) {
69 ATH_MSG_ERROR( "Could not open file " << rootFileName );
70 return StatusCode::FAILURE;
71 }
72 T* tempObj = nullptr;
73 F->GetObject(objName.data(), tempObj);
74 if(tempObj==nullptr) {
75 ATH_MSG_ERROR( "Could not retrieve " << objName << " from file " << rootFileName );
76 return StatusCode::FAILURE;
77 }
78 obj = std::unique_ptr<T>(static_cast<T*>(tempObj->Clone()));
79 obj->SetDirectory(0);
80 F->Clear();
81 F->Close();
82 return StatusCode::SUCCESS;
83}
84
85#endif
#define ASG_TOOL_CLASS2(CLASSNAME, INT1, INT2)
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define F(x, y, z)
Definition MD5.cxx:112
interface for all CP tools supporting systematic variations within a reentrant algorithm
Interface for all CP tools supporting systematic variations.
Class to wrap a set of SystematicVariations.
virtual bool isAffectedBySystematic(const CP::SystematicVariation &) const override
returns: whether the tool is affected by the systematic
virtual CP::SystematicSet recommendedSystematics() const override
returns: list of recommended systematics to use with this tool
std::unique_ptr< TFile > getFile(const std::string &) const
open and return a file with the given name.
StatusCode initObject(std::unique_ptr< T > &obj, const std::string &rootFileName, const std::string &objName) const
a function to initialize an object from a root file
virtual CP::SystematicSet affectingSystematics() const override=0
returns: list of systematics this tool can be affected by
virtual ASG_TOOL_CLASS2(InDetTrackSystematicsTool, CP::ISystematicsTool, CP::IReentrantSystematicsTool) public ~InDetTrackSystematicsTool()=default
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
virtual StatusCode applySystematicVariation(const CP::SystematicSet &) override
configure the tool to apply a given list of systematic variations
std::unordered_map< CP::SystematicSet, CP::SystematicSet > m_sysFilterMap
Base class for the dual-use tool implementation classes.
Definition AsgTool.h:47
Primary Vertex Finder.