ATLAS Offline Software
Loading...
Searching...
No Matches
MdtCalibrationShiftMapBase Class Referenceabstract

Provides the base class for the per-tube shifting tools, like MdtCalibT0ShiftTool & MdtCalibTMaxShiftTool. More...

#include <MdtCalibrationShiftMapBase.h>

Inheritance diagram for MdtCalibrationShiftMapBase:
Collaboration diagram for MdtCalibrationShiftMapBase:

Public Member Functions

 MdtCalibrationShiftMapBase (const std::string &type, const std::string &name, const IInterface *parent)
 ~MdtCalibrationShiftMapBase ()=default
float getValue (const Identifier &id) const override
virtual StatusCode initialize () override
virtual StatusCode initializeMap ()=0
StatusCode dumpMapAsFile ()
StatusCode loadMapFromFile ()

Protected Attributes

Gaudi::Property< std::string > m_mapFileName {this,"MapFile",""}
Gaudi::Property< float > m_centralValue {this,"CentralValue",0}
Gaudi::Property< float > m_sigma {this,"Sigma",10}
Gaudi::Property< bool > m_forceMapRecreate {this,"ForceMapRecreate",false}
std::map< Identifier, float > m_shiftValues
bool m_mapIsInitialized {false}
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
SG::ReadCondHandleKey< MuonMDT_CablingMapm_mdtCab {this, "MdtCabling", "MuonMDT_CablingMap"}

Detailed Description

Provides the base class for the per-tube shifting tools, like MdtCalibT0ShiftTool & MdtCalibTMaxShiftTool.

Author
Andreas Hoenle

Definition at line 24 of file MdtCalibrationShiftMapBase.h.

Constructor & Destructor Documentation

◆ MdtCalibrationShiftMapBase()

MdtCalibrationShiftMapBase::MdtCalibrationShiftMapBase ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 12 of file MdtCalibrationShiftMapBase.cxx.

13 : base_class (type, name, parent) {}

◆ ~MdtCalibrationShiftMapBase()

MdtCalibrationShiftMapBase::~MdtCalibrationShiftMapBase ( )
default

Member Function Documentation

◆ dumpMapAsFile()

StatusCode MdtCalibrationShiftMapBase::dumpMapAsFile ( )

Definition at line 22 of file MdtCalibrationShiftMapBase.cxx.

22 {
23 /* initialize map if it's not there */
24 if (!m_mapIsInitialized) {
26 }
27
28 /* write the map to a file */
29 {
30 std::ofstream file(m_mapFileName.value().c_str(), std::ios::out | std::ios::trunc);
31
32 /* see if opening the file was successful */
33 if (!file.is_open()) {
35 "Cannot open map output file for writing. Tried accessing file at \"./"
36 << m_mapFileName << "\"");
37 return StatusCode::FAILURE;
38 }
39
40 /* write header, comments can start with '#' or '//' */
41 file << "# This file contains shift values for MDT tubes\n";
42 file << "# Each Identifier is mapped to a float\n";
43 file << "# Below are comma separated values with formatting\n";
44 file << "# Identifier.get_compact(),float\n";
45 file << "# ------------------------------------------------\n";
46
47 /* dump map contents */
48 for (auto shift : m_shiftValues) {
49 Identifier::value_type identifierCompact = shift.first.get_compact();
50 float shiftValue = shift.second;
51 file << identifierCompact;
52 file << ",";
53 file << shiftValue;
54 file << "\n";
55 }
56 } // '}' flushes file
57 return StatusCode::SUCCESS;
58}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
Gaudi::Property< std::string > m_mapFileName
std::map< Identifier, float > m_shiftValues
virtual StatusCode initializeMap()=0
TFile * file

◆ getValue()

float MdtCalibrationShiftMapBase::getValue ( const Identifier & id) const
override

Definition at line 130 of file MdtCalibrationShiftMapBase.cxx.

130 {
131 std::map<Identifier, float>::const_iterator itr = m_shiftValues.find(id);
132 if (itr == m_shiftValues.end()){
133 ATH_MSG_FATAL("The identifier "<<m_idHelperSvc->toString(id)<<" is not known for a T0 smearing");
134 throw std::runtime_error("MdtT0Calibration - Invalid identifier");
135 }
136 return itr->second;
137}
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc

◆ initialize()

StatusCode MdtCalibrationShiftMapBase::initialize ( )
overridevirtual

Definition at line 15 of file MdtCalibrationShiftMapBase.cxx.

15 {
16 ATH_CHECK(m_idHelperSvc.retrieve());
17 ATH_CHECK(m_mdtCab.initialize());
19 return StatusCode::SUCCESS;
20}
SG::ReadCondHandleKey< MuonMDT_CablingMap > m_mdtCab

◆ initializeMap()

virtual StatusCode MdtCalibrationShiftMapBase::initializeMap ( )
pure virtual

◆ loadMapFromFile()

StatusCode MdtCalibrationShiftMapBase::loadMapFromFile ( )

Definition at line 60 of file MdtCalibrationShiftMapBase.cxx.

60 {
61 /* check if map was already initialized */
63 ATH_MSG_WARNING("Map already initialized, won't overwrite it.");
64 return StatusCode::SUCCESS;
65 }
66
67 /* resolve path */
68 std::string fileWithPath = PathResolver::find_file(m_mapFileName, "DATAPATH");
69 if (fileWithPath.empty()) {
70 ATH_MSG_ERROR("Cannot find file " << m_mapFileName << " in $DATAPATH");
71 return StatusCode::FAILURE;
72 }
73
74 /* check if the file exists */
75 struct stat buffer{};
76 if (stat(fileWithPath.c_str(), &buffer) != 0) {
77 ATH_MSG_ERROR("Cannot stat the file \""
78 << fileWithPath.c_str()
79 << "\" -> map can not be initialized from this file.");
80 return StatusCode::FAILURE;
81 }
82
83 /* check if the map is already stored */
84 std::ifstream fin(fileWithPath.c_str(), std::ios::in);
85 std::string line;
86 bool initializedWithWarnings = false;
87 // get all lines in file
88 while (std::getline(fin, line)) {
89 // check if file is empty, begins with '#', or '//'
90 if (line.empty() || line.compare(0, 1, "#") == 0 ||
91 line.compare(0, 2, "//")) {
92 continue;
93 }
94 // need a stringstream for readline
95 std::stringstream lineStream(line);
96 // get all csv tokens in line
97 std::string token;
98 std::vector<std::string> tokenVector;
99 while (std::getline(lineStream, token, ',')) {
100 tokenVector.push_back(token);
101 }
102 // expect exactly two tokens: identifier and value
103 if (tokenVector.size() == 2) {
104 // we are careful about the type here
105 // watch out for compiler warnings warning about casting ull to value_type
106 // they might occur of Identifier::value_type is changed at some point
107 Identifier::value_type identifierCompact = std::stoull(tokenVector[0]);
108 Identifier id(identifierCompact);
109 float shift = std::stof(tokenVector[1]);
110 m_shiftValues[id] = shift;
111 } else {
112 ATH_MSG_WARNING("Unexpected input format in shift map file "
113 << fileWithPath.c_str());
114 ATH_MSG_WARNING("Expected 2 tokens, got " << tokenVector.size());
115 ATH_MSG_WARNING("Broken line: \"" << line.c_str() << "\"");
116 initializedWithWarnings = true;
117 }
118 }
119 m_mapIsInitialized = true;
120 if (initializedWithWarnings) {
121 ATH_MSG_WARNING("Initialized shift map WITH WARNINGS from file \""
122 << fileWithPath.c_str() << "\"");
123 } else {
124 ATH_MSG_INFO("Successfully initialized shift map from file \""
125 << fileWithPath.c_str() << "\"");
126 }
127 return StatusCode::SUCCESS;
128}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)

Member Data Documentation

◆ m_centralValue

Gaudi::Property<float> MdtCalibrationShiftMapBase::m_centralValue {this,"CentralValue",0}
protected

Definition at line 53 of file MdtCalibrationShiftMapBase.h.

53{this,"CentralValue",0};

◆ m_forceMapRecreate

Gaudi::Property<bool> MdtCalibrationShiftMapBase::m_forceMapRecreate {this,"ForceMapRecreate",false}
protected

Definition at line 55 of file MdtCalibrationShiftMapBase.h.

55{this,"ForceMapRecreate",false};

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MdtCalibrationShiftMapBase::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
protected

Definition at line 60 of file MdtCalibrationShiftMapBase.h.

60{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

◆ m_mapFileName

Gaudi::Property<std::string> MdtCalibrationShiftMapBase::m_mapFileName {this,"MapFile",""}
protected

Definition at line 52 of file MdtCalibrationShiftMapBase.h.

52{this,"MapFile",""};

◆ m_mapIsInitialized

bool MdtCalibrationShiftMapBase::m_mapIsInitialized {false}
protected

Definition at line 58 of file MdtCalibrationShiftMapBase.h.

58{false};

◆ m_mdtCab

SG::ReadCondHandleKey<MuonMDT_CablingMap> MdtCalibrationShiftMapBase::m_mdtCab {this, "MdtCabling", "MuonMDT_CablingMap"}
protected

Definition at line 61 of file MdtCalibrationShiftMapBase.h.

61{this, "MdtCabling", "MuonMDT_CablingMap"};

◆ m_shiftValues

std::map<Identifier, float> MdtCalibrationShiftMapBase::m_shiftValues
protected

Definition at line 57 of file MdtCalibrationShiftMapBase.h.

◆ m_sigma

Gaudi::Property<float> MdtCalibrationShiftMapBase::m_sigma {this,"Sigma",10}
protected

Definition at line 54 of file MdtCalibrationShiftMapBase.h.

54{this,"Sigma",10};

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