ATLAS Offline Software
TgcDigitJitterCondAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 #include <fstream>
10 
11 // constructor
12 TgcDigitJitterCondAlg::TgcDigitJitterCondAlg(const std::string& name, ISvcLocator* pSvcLocator) :
13  AthReentrantAlgorithm(name, pSvcLocator) {}
14 
15 // Initialize
17  ATH_MSG_DEBUG("initializing " << name());
20  if (m_readKeyDb.empty() && m_readFromJSON.value().empty()){
21  ATH_MSG_FATAL("No data source is given to load the jitter constants from. Please provide either a COOL folder or a json file");
22  return StatusCode::FAILURE;
23  } else if (m_readKeyDb.empty()) {
24  ATH_MSG_INFO("Load jitter constants from a JSON file "<<m_readFromJSON);
25  } else {
26  ATH_MSG_INFO("Load the jitter constants list from COOL "<<m_readKeyDb.fullKey());
27  }
28  return StatusCode::SUCCESS;
29 }
30 
31 // execute
32 StatusCode TgcDigitJitterCondAlg::execute(const EventContext& ctx) const {
33  ATH_MSG_DEBUG("execute " << name());
34  // launching Write Cond Handle
36  if (writeHandle.isValid()) {
37  ATH_MSG_DEBUG("CondHandle " << writeHandle.fullKey() << " is already valid."
38  << " In theory this should not be called, but may happen"
39  << " if multiple concurrent events are being processed out of order.");
40  return StatusCode::SUCCESS;
41  }
42  writeHandle.addDependency(EventIDRange(IOVInfiniteRange::infiniteTime()));
43  std::unique_ptr<TgcDigitJitterData> writeCdo{std::make_unique<TgcDigitJitterData>()};
44  if (!m_readKeyDb.empty()) {
46  if (!readHandle.isValid()) {
47  ATH_MSG_FATAL("Failed to initialize the COOL folder "<<m_readKeyDb.fullKey());
48  return StatusCode::FAILURE;
49  }
50  writeHandle.addDependency(readHandle);
51  for (CondAttrListCollection::const_iterator itr = readHandle->begin(); itr != readHandle->end(); ++itr) {
52  const coral::AttributeList& atr = itr->second;
53  const std::string& data{*(static_cast<const std::string*>((atr["data"]).addressOfData()))};
55  ATH_CHECK(parseDataFromJSON(lines, *writeCdo));
56  }
57  } else {
58  std::ifstream inStream{PathResolverFindCalibFile(m_readFromJSON)};
59  if (!inStream.good()) {
60  ATH_MSG_FATAL("No such file or directory");
61  return StatusCode::FAILURE;
62  }
64  inStream >> lines;
65  ATH_CHECK(parseDataFromJSON(lines, *writeCdo));
66  }
67  ATH_CHECK(writeCdo->initialize());
68  ATH_CHECK(writeHandle.record(std::move(writeCdo)));
69  ATH_MSG_DEBUG("Recorded new " << writeHandle.key() << " with range " << writeHandle.getRange() << " into Conditions Store");
70  return StatusCode::SUCCESS;
71 }
72 
74  TgcDigitJitterData& jitterData) const {
75  for (auto& corr : lines.items()) {
76  nlohmann::json line = corr.value();
77  const double angle = line["angle"];
78  std::vector<double> values = line["values"];
79  jitterData.cacheAngleInterval(angle, std::move(values));
80  }
81  return StatusCode::SUCCESS;
82 }
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
checkFileSG.line
line
Definition: checkFileSG.py:75
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
json
nlohmann::json json
Definition: HistogramDef.cxx:9
parse
std::map< std::string, std::string > parse(const std::string &list)
Definition: egammaLayerRecalibTool.cxx:983
TgcDigitJitterCondAlg::m_readKeyDb
SG::ReadCondHandleKey< CondAttrListCollection > m_readKeyDb
Definition: TgcDigitJitterCondAlg.h:37
TgcDigitJitterCondAlg::parseDataFromJSON
StatusCode parseDataFromJSON(const nlohmann::json &lines, TgcDigitJitterData &jitterChannels) const
Load the Jitter constants from the JSON format.
Definition: TgcDigitJitterCondAlg.cxx:73
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
TgcDigitJitterCondAlg::m_writeKey
SG::WriteCondHandleKey< TgcDigitJitterData > m_writeKey
Definition: TgcDigitJitterCondAlg.h:36
TgcDigitJitterCondAlg::TgcDigitJitterCondAlg
TgcDigitJitterCondAlg(const std::string &name, ISvcLocator *svc)
Definition: TgcDigitJitterCondAlg.cxx:12
python.Bindings.values
values
Definition: Control/AthenaPython/python/Bindings.py:797
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
CaloCondBlobAlgs_fillNoiseFromASCII.lines
lines
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:104
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
WriteCondHandle.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TgcDigitJitterCondAlg.h
IOVInfiniteRange.h
PathResolver.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
TgcDigitJitterCondAlg::m_readFromJSON
Gaudi::Property< std::string > m_readFromJSON
Use an external JSON file to load the Jitter constants from.
Definition: TgcDigitJitterCondAlg.h:34
CondAttrListCollection::const_iterator
ChanAttrListMap::const_iterator const_iterator
Definition: CondAttrListCollection.h:63
TgcDigitJitterCondAlg::initialize
virtual StatusCode initialize() override
Definition: TgcDigitJitterCondAlg.cxx:16
TgcDigitJitterData::cacheAngleInterval
void cacheAngleInterval(const double minAngle, std::vector< double > &&timeProbs)
Definition: TgcDigitJitterData.cxx:41
TgcDigitJitterCondAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TgcDigitJitterCondAlg.cxx:32
IOVInfiniteRange::infiniteTime
static EventIDRange infiniteTime()
Produces an EventIDRange that is inifinite in Time and invalid in RunLumi.
Definition: IOVInfiniteRange.h:47
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
TgcDigitJitterData
Definition: TgcDigitJitterData.h:24