ATLAS Offline Software
Loading...
Searching...
No Matches
InDetTrackSystematicsTool.h
Go to the documentation of this file.
1// -*- c++ -*-
2/*
3 Copyright (C) 2002-2023 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
20namespace InDet {
21
23
26 public:
27 InDetTrackSystematicsTool( const std::string& );
28 virtual ~InDetTrackSystematicsTool() = default;
29
30 virtual StatusCode initialize() override;
31
33 virtual bool isAffectedBySystematic( const CP::SystematicVariation& ) const override;
35 virtual CP::SystematicSet affectingSystematics() const override = 0;
37 virtual CP::SystematicSet recommendedSystematics() const override;
39 virtual StatusCode applySystematicVariation( const CP::SystematicSet& ) override;
40
41
42 protected:
44 std::unique_ptr<TFile> getFile( const std::string& ) const;
45
47 template <class T> StatusCode initObject(std::unique_ptr<T>& obj, const std::string& rootFileName, const std::string& objName) const;
48
49 // a map from a general set to a set that is filtered for the ones we use
50 // note that SystematicSet caches its hashes so this is probably not as slow as it might seem
51 std::unordered_map< CP::SystematicSet, CP::SystematicSet > m_sysFilterMap;
52
54
55 bool isActive( TrackSystematic ) const;
56
57 };
58
59}
60
61// must define template function in header
62template <class T>
63StatusCode InDet::InDetTrackSystematicsTool::initObject(std::unique_ptr<T>& obj, const std::string& rootFileName, const std::string& objName) const
64{
65 if (obj != nullptr) ATH_MSG_WARNING( obj->GetName() << " is not null, yet we are now attempting to initialize from " << rootFileName );
66 std::unique_ptr<TFile> F = getFile(rootFileName);
67 if(!F || F->IsZombie()) {
68 ATH_MSG_ERROR( "Could not open file " << rootFileName );
69 return StatusCode::FAILURE;
70 }
71 T* tempObj = nullptr;
72 F->GetObject(objName.data(), tempObj);
73 if(tempObj==nullptr) {
74 ATH_MSG_ERROR( "Could not retrieve " << objName << " from file " << rootFileName );
75 return StatusCode::FAILURE;
76 }
77 obj = std::unique_ptr<T>(static_cast<T*>(tempObj->Clone()));
78 obj->SetDirectory(0);
79 F->Clear();
80 F->Close();
81 return StatusCode::SUCCESS;
82}
83
84#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.