ATLAS Offline Software
MuonNRPC_CablingAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "MuonNRPC_CablingAlg.h"
6 
7 #include <stdlib.h>
8 
9 #include <fstream>
10 #include <map>
11 #include <string>
12 
16 #include "CoralBase/Attribute.h"
17 #include "CoralBase/AttributeListSpecification.h"
21 
23  ISvcLocator* pSvcLocator)
24  : AthReentrantAlgorithm(name, pSvcLocator) {}
25 
27  ATH_MSG_DEBUG("initialize " << name());
29  ATH_CHECK(m_idHelperSvc.retrieve());
30  const bool ext_json = !m_extJSONFile.value().empty();
32  ATH_CHECK(m_readKeyMap.initialize(!ext_json));
33  return StatusCode::SUCCESS;
34 }
35 
36 StatusCode MuonNRPC_CablingAlg::execute(const EventContext& ctx) const {
37  ATH_MSG_VERBOSE("MuonNRPC_CablingAlg::execute()");
38 
39  // Write Cond Handle
41  ctx};
42 
43  if (writeCablingHandle.isValid()) {
44  ATH_MSG_DEBUG("CondHandle "
45  << writeCablingHandle.fullKey() << " is already valid."
46  << ". In theory this should not be called, but may happen"
47  << " if multiple concurrent events are being processed "
48  "out of order.");
49  return StatusCode::SUCCESS;
50  }
51  writeCablingHandle.addDependency(EventIDRange(IOVInfiniteRange::infiniteRunLB()));
52 
53  ATH_MSG_INFO("Load the Nrpc cabling");
54  std::unique_ptr<MuonNRPC_CablingMap> writeCdo{
55  std::make_unique<MuonNRPC_CablingMap>()};
56 
58  if (!m_extJSONFile.value().empty()) {
59  std::ifstream in_json{m_extJSONFile};
60  if (!in_json.good()) {
61  ATH_MSG_FATAL("Failed to open external JSON file "
62  << m_extJSONFile);
63  return StatusCode::FAILURE;
64  }
66  in_json>>payload;
67  ATH_CHECK(payLoadJSON(*writeCdo, payload));
68  } else {
70  ctx};
71  if (!coolHandle.isValid()) {
72  ATH_MSG_FATAL("Failed to load cabling map from COOL "
73  << m_readKeyMap.fullKey());
74  return StatusCode::FAILURE;
75  }
76  writeCablingHandle.addDependency(coolHandle);
77  for (const auto& itr : **coolHandle) {
78  const coral::AttributeList& atr = itr.second;
79  nlohmann::json payload = nlohmann::json::parse(*(static_cast<const std::string*>((atr["data"]).addressOfData())));
80  ATH_CHECK(payLoadJSON(*writeCdo, payload));
81  }
82  }
83  if (!writeCdo->finalize(msgStream()))
84  return StatusCode::FAILURE;
85 
86  ATH_CHECK(writeCablingHandle.record(std::move(writeCdo)));
87 
88  return StatusCode::SUCCESS;
89 }
91  const nlohmann::json& payload) const {
92 
93  constexpr int8_t phiBit = CablingData::measPhiBit;
94  constexpr int8_t sideBit = CablingData::stripSideBit;
95  for (const auto& cabl_chan : payload.items()) {
96  nlohmann::json cabl_payload = cabl_chan.value();
97  CablingData cabl_data{};
98  cabl_data.stationIndex = cabl_payload["station"];
99  cabl_data.eta = cabl_payload["eta"];
100  cabl_data.phi = cabl_payload["phi"];
101  cabl_data.doubletR = cabl_payload["doubletR"];
102  cabl_data.doubletPhi = cabl_payload["doubletPhi"];
103  cabl_data.doubletZ = cabl_payload["doubletZ"];
104  const int8_t phiAndStrip = cabl_payload["measPhi"];
105  cabl_data.setMeasPhiAndSide(phiAndStrip & phiBit, phiAndStrip & sideBit);
106  cabl_data.gasGap = cabl_payload["gasGap"];
108  cabl_data.subDetector = cabl_payload["subDetector"];
109  cabl_data.tdcSector = cabl_payload["tdcSector"];
110  cabl_data.tdc = cabl_payload["tdc"];
111  cabl_data.firstStrip = cabl_payload["firstStrip"];
112  cabl_data.lastStrip = cabl_payload["lastStrip"];
113  cabl_data.firstChannel = cabl_payload["firstTdcChan"];
114  cabl_data.lastChannel = cabl_payload["lastTdcChan"];
115  if (!cabling_map.insertChannels(cabl_data, msgStream())) {
116  return StatusCode::FAILURE;
117  }
118  }
119  return StatusCode::SUCCESS;
120 }
MuonNRPC_CablingAlg::MuonNRPC_CablingAlg
MuonNRPC_CablingAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: MuonNRPC_CablingAlg.cxx:22
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
CondAttrListCollection.h
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
MuonNRPC_CablingAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: MuonNRPC_CablingAlg.cxx:36
json
nlohmann::json json
Definition: HistogramDef.cxx:9
NrpcCablingCoolData
Struct to represent all cabling information coming from the cabling database per channel.
Definition: NrpcCablingData.h:140
parse
std::map< std::string, std::string > parse(const std::string &list)
Definition: egammaLayerRecalibTool.cxx:1040
MuonNRPC_CablingAlg::m_writeKey
SG::WriteCondHandleKey< MuonNRPC_CablingMap > m_writeKey
Definition: MuonNRPC_CablingAlg.h:36
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MuonNRPC_CablingMap
Definition: MuonNRPC_CablingMap.h:21
MuonNRPC_CablingMap::insertChannels
bool insertChannels(const NrpcCablingCoolData &cabling_data, MsgStream &log)
Inserts a cabling object into the map.
Definition: MuonNRPC_CablingMap.cxx:118
AthenaAttributeList.h
RpcIdHelper.h
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
MuonNRPC_CablingAlg::m_extJSONFile
Gaudi::Property< std::string > m_extJSONFile
Definition: MuonNRPC_CablingAlg.h:41
MuonNRPC_CablingAlg::initialize
virtual StatusCode initialize() override
Definition: MuonNRPC_CablingAlg.cxx:26
NrpcCablingOfflineID::measPhiBit
static constexpr int8_t measPhiBit
gas gap -> 1-3
Definition: NrpcCablingData.h:50
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
IOVInfiniteRange::infiniteRunLB
static EventIDRange infiniteRunLB()
Produces an EventIDRange that is infinite in RunLumi and invalid in Time.
Definition: IOVInfiniteRange.h:39
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
NrpcCablingOfflineID::stationIndex
int8_t & stationIndex
Definition: NrpcCablingData.h:37
MuonNRPC_CablingAlg::m_readKeyMap
SG::ReadCondHandleKey< CondAttrListCollection > m_readKeyMap
Definition: MuonNRPC_CablingAlg.h:38
MuonNRPC_CablingAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonNRPC_CablingAlg.h:35
IOVInfiniteRange.h
PathResolver.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
PixelModuleFeMask_create_db.payload
string payload
Definition: PixelModuleFeMask_create_db.py:69
NrpcCablingOfflineID::stripSideBit
static constexpr int8_t stripSideBit
Definition: NrpcCablingData.h:51
MuonNRPC_CablingAlg.h
TransientAddress.h
MuonNRPC_CablingAlg::payLoadJSON
StatusCode payLoadJSON(MuonNRPC_CablingMap &cabling_map, const nlohmann::json &payload) const
Definition: MuonNRPC_CablingAlg.cxx:90
SG::WriteCondHandle
Definition: WriteCondHandle.h:26