ATLAS Offline Software
Public Member Functions | Protected Attributes | List of all members
MdtCalibrationShiftMapBase Class Referenceabstract

#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 }

◆ 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 }

◆ initialize()

StatusCode MdtCalibrationShiftMapBase::initialize ( )
overridevirtual

Definition at line 15 of file MdtCalibrationShiftMapBase.cxx.

15  {
16  ATH_CHECK(m_idHelperSvc.retrieve());
19  return StatusCode::SUCCESS;
20 }

◆ 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 */
62  if (m_mapIsInitialized) {
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 }

Member Data Documentation

◆ m_centralValue

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

Definition at line 53 of file MdtCalibrationShiftMapBase.h.

◆ m_forceMapRecreate

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

Definition at line 55 of file MdtCalibrationShiftMapBase.h.

◆ m_idHelperSvc

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

Definition at line 60 of file MdtCalibrationShiftMapBase.h.

◆ m_mapFileName

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

Definition at line 52 of file MdtCalibrationShiftMapBase.h.

◆ m_mapIsInitialized

bool MdtCalibrationShiftMapBase::m_mapIsInitialized {false}
protected

Definition at line 58 of file MdtCalibrationShiftMapBase.h.

◆ m_mdtCab

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

Definition at line 61 of file MdtCalibrationShiftMapBase.h.

◆ 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.


The documentation for this class was generated from the following files:
Identifier::value_type
IDENTIFIER_TYPE value_type
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:39
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
checkFileSG.line
line
Definition: checkFileSG.py:75
MdtCalibrationShiftMapBase::initializeMap
virtual StatusCode initializeMap()=0
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PathResolver::find_file
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
Definition: PathResolver.cxx:251
MdtCalibrationShiftMapBase::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MdtCalibrationShiftMapBase.h:60
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
createCoolChannelIdFile.buffer
buffer
Definition: createCoolChannelIdFile.py:12
MdtCalibrationShiftMapBase::m_mapFileName
Gaudi::Property< std::string > m_mapFileName
Definition: MdtCalibrationShiftMapBase.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
MdtCalibrationShiftMapBase::m_shiftValues
std::map< Identifier, float > m_shiftValues
Definition: MdtCalibrationShiftMapBase.h:57
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
file
TFile * file
Definition: tile_monitor.h:29
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
beamspotman.stat
stat
Definition: beamspotman.py:266
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
compute_lumi.fin
fin
Definition: compute_lumi.py:19
MdtCalibrationShiftMapBase::m_mdtCab
SG::ReadCondHandleKey< MuonMDT_CablingMap > m_mdtCab
Definition: MdtCalibrationShiftMapBase.h:61
MdtCalibrationShiftMapBase::m_mapIsInitialized
bool m_mapIsInitialized
Definition: MdtCalibrationShiftMapBase.h:58