ATLAS Offline Software
Public Member Functions | Protected Attributes | List of all members
MdtCalibrationT0ShiftTool Class Reference

#include <MdtCalibrationT0ShiftTool.h>

Inheritance diagram for MdtCalibrationT0ShiftTool:
Collaboration diagram for MdtCalibrationT0ShiftTool:

Public Member Functions

 MdtCalibrationT0ShiftTool (const std::string &type, const std::string &name, const IInterface *parent)
 constructor More...
 
 ~MdtCalibrationT0ShiftTool ()=default
 destructor More...
 
StatusCode initializeMap () override final
 
float getValue (const Identifier &id) const override
 
virtual StatusCode initialize () override
 
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 a per-tube smearing of the T0 value.

Author
Andreas Hoenle

Definition at line 16 of file MdtCalibrationT0ShiftTool.h.

Constructor & Destructor Documentation

◆ MdtCalibrationT0ShiftTool()

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

constructor

Definition at line 11 of file MdtCalibrationT0ShiftTool.cxx.

11  :
13 }

◆ ~MdtCalibrationT0ShiftTool()

MdtCalibrationT0ShiftTool::~MdtCalibrationT0ShiftTool ( )
default

destructor

Member Function Documentation

◆ dumpMapAsFile()

StatusCode MdtCalibrationShiftMapBase::dumpMapAsFile ( )
inherited

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
overrideinherited

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 ( )
overridevirtualinherited

Definition at line 15 of file MdtCalibrationShiftMapBase.cxx.

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

◆ initializeMap()

StatusCode MdtCalibrationT0ShiftTool::initializeMap ( )
finaloverridevirtual

Loop over all tdc channels

Implements MdtCalibrationShiftMapBase.

Definition at line 15 of file MdtCalibrationT0ShiftTool.cxx.

16 {
17  if (m_mapIsInitialized) {
18  ATH_MSG_WARNING("Map already initalized. Multiple calls of initalizeMap should not happen.");
19  return StatusCode::SUCCESS;
20  }
21 
22  /* First try loading the map from its default location */
23  if (!m_forceMapRecreate) {
25  return StatusCode::SUCCESS;
26  }
27 
28  /* map was not found as a file or needs to be recreated */
29  // TODO: What if multiple jobs started in parallel?
30  // (DataRace on MapFile because of parallel jobs)
31 
32  /* initialize random number generator that creates the shift values */
33  TRandom3 rng(/*seed*/ 20120704);
34 
35  SG::ReadCondHandle<MuonMDT_CablingMap> readHandle{m_mdtCab, Gaudi::Hive::currentContext()};
36  const MuonMDT_CablingMap* mdtCabling{*readHandle};
37  if(!mdtCabling){
38  ATH_MSG_ERROR("Null pointer to the MDT cabling conditions object");
39  return StatusCode::FAILURE;
40  }
41 
42  for (const auto& onl_cab : mdtCabling->getOnlineConvMap()) {
44  cabling_data.MdtCablingOnData::operator=(onl_cab.first);
46  for (const auto& tdc : onl_cab.second) {
47  if (!tdc) continue;
48  cabling_data.tdcId = tdc->moduleId();
49  for (cabling_data.channelId = 0; cabling_data.channelId < 24; ++cabling_data.channelId) {
50  /* Get the offline ID, given the current detector element */
51  if (!mdtCabling->getOfflineId(cabling_data, msgStream())) {
53  continue;
54  }
55  Identifier channelIdentifier;
56  bool isValid = mdtCabling->convert(cabling_data,channelIdentifier);
57  // this debug msg can be removed eventually
58  ATH_MSG_DEBUG("Trying to set from online IDs "<<
59  std::endl<<
60  cabling_data<<
61  " .. with channelID"<<
62  std::endl <<
63  " Identifier " <<
64  channelIdentifier <<std::endl<<" Identifier32 " << channelIdentifier.get_identifier32());
65 
66  if (!isValid) {
67  ATH_MSG_FATAL(cabling_data<<" --- Conversion to Identifier is NOT valid.");
68  return StatusCode::FAILURE;
69  }
70 
71  double rn = rng.Gaus(m_centralValue, m_sigma);
72  // Fatal if entry exists
73  if (m_shiftValues.find(channelIdentifier) != m_shiftValues.end()) {
74  ATH_MSG_FATAL("Double counting in initialization of map");
75  return StatusCode::FAILURE;
76  }
77  m_shiftValues[channelIdentifier] = rn;
78 
79  }
80  }
81  }
82  /* initalization was successful */
83  m_mapIsInitialized = true;
84 
85  /* write map to the default location */
87 
88  return StatusCode::SUCCESS;
89 }

◆ loadMapFromFile()

StatusCode MdtCalibrationShiftMapBase::loadMapFromFile ( )
inherited

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

Definition at line 53 of file MdtCalibrationShiftMapBase.h.

◆ m_forceMapRecreate

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

Definition at line 55 of file MdtCalibrationShiftMapBase.h.

◆ m_idHelperSvc

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

Definition at line 60 of file MdtCalibrationShiftMapBase.h.

◆ m_mapFileName

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

Definition at line 52 of file MdtCalibrationShiftMapBase.h.

◆ m_mapIsInitialized

bool MdtCalibrationShiftMapBase::m_mapIsInitialized {false}
protectedinherited

Definition at line 58 of file MdtCalibrationShiftMapBase.h.

◆ m_mdtCab

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

Definition at line 61 of file MdtCalibrationShiftMapBase.h.

◆ m_shiftValues

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

Definition at line 57 of file MdtCalibrationShiftMapBase.h.

◆ m_sigma

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

Definition at line 54 of file MdtCalibrationShiftMapBase.h.


The documentation for this class was generated from the following files:
MdtCalibrationShiftMapBase::dumpMapAsFile
StatusCode dumpMapAsFile()
Definition: MdtCalibrationShiftMapBase.cxx:22
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
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
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
Identifier::get_identifier32
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
createCablingJSON.cabling_data
dictionary cabling_data
Definition: createCablingJSON.py:46
MdtCalibrationShiftMapBase::MdtCalibrationShiftMapBase
MdtCalibrationShiftMapBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition: MdtCalibrationShiftMapBase.cxx:12
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:620
D3PDTest::rng
uint32_t rng()
Definition: FillerAlg.cxx:40
MdtCalibrationShiftMapBase::m_sigma
Gaudi::Property< float > m_sigma
Definition: MdtCalibrationShiftMapBase.h:54
MdtCalibrationShiftMapBase::m_forceMapRecreate
Gaudi::Property< bool > m_forceMapRecreate
Definition: MdtCalibrationShiftMapBase.h:55
MuonMDT_CablingMap
Definition: MuonMDT_CablingMap.h:28
MdtCalibrationShiftMapBase::loadMapFromFile
StatusCode loadMapFromFile()
Definition: MdtCalibrationShiftMapBase.cxx:60
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
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
file
TFile * file
Definition: tile_monitor.h:29
python.BunchSpacingUtils.rn
rn
Definition: BunchSpacingUtils.py:87
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MdtCablingData
Definition: MdtCablingData.h:82
beamspotman.stat
stat
Definition: beamspotman.py:266
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:227
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
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
MdtCalibrationShiftMapBase::m_centralValue
Gaudi::Property< float > m_centralValue
Definition: MdtCalibrationShiftMapBase.h:53
compute_lumi.fin
fin
Definition: compute_lumi.py:19
MdtCalibrationShiftMapBase::m_mdtCab
SG::ReadCondHandleKey< MuonMDT_CablingMap > m_mdtCab
Definition: MdtCalibrationShiftMapBase.h:61
Identifier::value_type
unsigned long long value_type
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:27
MdtCalibrationShiftMapBase::m_mapIsInitialized
bool m_mapIsInitialized
Definition: MdtCalibrationShiftMapBase.h:58
Identifier
Definition: IdentifierFieldParser.cxx:14