ATLAS Offline Software
Loading...
Searching...
No Matches
L1CaloReadoutConfigContainerJSON.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
5
6#include <algorithm>
7#include <memory>
8
9#include "CoralBase/AttributeListSpecification.h"
12
14#include "nlohmann/json.hpp"
15#include "CoralBase/Blob.h"
16
17
18
20 : AbstractL1CaloPersistentCondition("CondAttrListCollection")
21{
22 this->addSpecification(ebaselinePointer, "baselinePointer", "unsigned int");
23 this->addSpecification(enumFadcSlices, "numFadcSlices", "unsigned int");
24 this->addSpecification(el1aFadcSlice, "l1aFadcSlice", "unsigned int");
25 this->addSpecification(enumLutSlices, "numLutSlices", "unsigned int");
26 this->addSpecification(el1aLutSlice, "l1aLutSlice", "unsigned int");
27 this->addSpecification(enumProcSlices, "numProcSlices", "unsigned int");
28 this->addSpecification(el1aProcSlice, "l1aProcSlice", "unsigned int");
29 this->addSpecification(enumTopoSlices, "numTopoSlices", "unsigned int");
30 this->addSpecification(el1aTopoSlice, "l1aTopoSlice", "unsigned int");
31 this->addSpecification(enumFexSlices, "numFexSlices", "unsigned int");
32 this->addSpecification(el1aFexSlice, "l1aFexSlice", "unsigned int");
33 this->addSpecification(elatencyPpmFadc, "latencyPpmFadc", "unsigned int");
34 this->addSpecification(elatencyPpmLut, "latencyPpmLut", "unsigned int");
35 this->addSpecification(elatencyCpmInput, "latencyCpmInput", "unsigned int");
36 this->addSpecification(elatencyCpmHits, "latencyCpmHits", "unsigned int");
37 this->addSpecification(elatencyCpmRoi, "latencyCpmRoi", "unsigned int");
38 this->addSpecification(elatencyJemInput, "latencyJemInput", "unsigned int");
39 this->addSpecification(elatencyJemRoi, "latencyJemRoi", "unsigned int");
40 this->addSpecification(elatencyCpCmxBackplane, "latencyCpCmxBackplane", "unsigned int");
41 this->addSpecification(elatencyCpCmxLocal, "latencyCpCmxLocal", "unsigned int");
42 this->addSpecification(elatencyCpCmxCable, "latencyCpCmxCable", "unsigned int");
43 this->addSpecification(elatencyCpCmxSystem, "latencyCpCmxSystem", "unsigned int");
44 this->addSpecification(elatencyCpCmxInfo, "latencyCpCmxInfo", "unsigned int");
45 this->addSpecification(elatencyJetCmxBackplane, "latencyJetCmxBackplane", "unsigned int");
46 this->addSpecification(elatencyJetCmxLocal, "latencyJetCmxLocal", "unsigned int");
47 this->addSpecification(elatencyJetCmxCable, "latencyJetCmxCable", "unsigned int");
48 this->addSpecification(elatencyJetCmxSystem, "latencyJetCmxSystem", "unsigned int");
49 this->addSpecification(elatencyJetCmxInfo, "latencyJetCmxInfo", "unsigned int");
50 this->addSpecification(elatencyJetCmxRoi, "latencyJetCmxRoi", "unsigned int");
51 this->addSpecification(elatencyEnergyCmxBackplane, "latencyEnergyCmxBackplane", "unsigned int");
52 this->addSpecification(elatencyEnergyCmxLocal, "latencyEnergyCmxLocal", "unsigned int");
53 this->addSpecification(elatencyEnergyCmxCable, "latencyEnergyCmxCable", "unsigned int");
54 this->addSpecification(elatencyEnergyCmxSystem, "latencyEnergyCmxSystem", "unsigned int");
55 this->addSpecification(elatencyEnergyCmxInfo, "latencyEnergyCmxInfo", "unsigned int");
56 this->addSpecification(elatencyEnergyCmxRoi, "latencyEnergyCmxRoi", "unsigned int");
57 this->addSpecification(elatencyTopo, "latencyTopo", "unsigned int");
58 this->addSpecification(einternalLatencyJemJet, "internalLatencyJemJet", "unsigned int");
59 this->addSpecification(einternalLatencyJemSum, "internalLatencyJemSum", "unsigned int");
60 this->addSpecification(ebcOffsetJemJet, "bcOffsetJemJet", "unsigned int");
61 this->addSpecification(ebcOffsetJemSum, "bcOffsetJemSum", "unsigned int");
62 this->addSpecification(ebcOffsetCmx, "bcOffsetCmx", "int");
63 this->addSpecification(ebcOffsetTopo, "bcOffsetTopo", "int");
64 this->addSpecification(eformatTypePpm, "formatTypePpm", "string");
65 this->addSpecification(eformatTypeCpJep, "formatTypeCpJep", "string");
66 this->addSpecification(eformatTypeTopo, "formatTypeTopo", "string");
67 this->addSpecification(ecompressionThresholdPpm, "compressionThresholdPpm", "unsigned int");
68 this->addSpecification(ecompressionThresholdCpJep, "compressionThresholdCpJep", "unsigned int");
69 this->addSpecification(ecompressionThresholdTopo, "compressionThresholdTopo", "unsigned int");
70 this->addSpecification(ecompressionBaselinePpm, "compressionBaselinePpm", "unsigned int");
71 this->addSpecification(ereadout80ModePpm, "readout80ModePpm", "unsigned int");
72 this->addSpecification(einputReadoutModeFex, "inputReadoutModeFex", "string");
73 this->addSpecification(ereadoutOffsetEfex, "readoutOffsetEfex", "unsigned int");
74 this->addSpecification(ereadoutOffsetGfex, "readoutOffsetGfex", "unsigned int");
75 this->addSpecification(ereadoutOffsetJfex, "readoutOffsetJfex", "unsigned int");
76 this->addSpecification(ereadoutOffsetPh1Topo, "readoutOffsetPh1Topo", "unsigned int");
77
78
79}
80
81
82
84{
85
86 auto* attrSpecification = this->createAttributeListSpecification();
87 if(!attrSpecification || !attrSpecification->size()) return nullptr;
88
89 auto attrListCollection = std::make_unique<CondAttrListCollection>(true);
90 for(const auto& item : m_readoutConfigsJSON) {
91 AthenaAttributeList attrList(*attrSpecification);
92 attrList[specificationName(ebaselinePointer)].setValue(item.baselinePointer());
93 attrList[specificationName(enumFadcSlices)].setValue(item.numFadcSlices());
94 attrList[specificationName(el1aFadcSlice)].setValue(item.l1aFadcSlice());
95 attrList[specificationName(enumLutSlices)].setValue(item.numLutSlices());
96 attrList[specificationName(el1aLutSlice)].setValue(item.l1aLutSlice());
97 attrList[specificationName(enumProcSlices)].setValue(item.numProcSlices());
98 attrList[specificationName(el1aProcSlice)].setValue(item.l1aProcSlice());
99 attrList[specificationName(enumTopoSlices)].setValue(item.numTopoSlices());
100 attrList[specificationName(el1aTopoSlice)].setValue(item.l1aTopoSlice());
101 attrList[specificationName(enumFexSlices)].setValue(item.numFexSlices());
102 attrList[specificationName(el1aFexSlice)].setValue(item.l1aFexSlice());
103 attrList[specificationName(elatencyPpmFadc)].setValue(item.latencyPpmFadc());
104 attrList[specificationName(elatencyPpmLut)].setValue(item.latencyPpmLut());
105 attrList[specificationName(elatencyCpmInput)].setValue(item.latencyCpmInput());
106 attrList[specificationName(elatencyCpmHits)].setValue(item.latencyCpmHits());
107 attrList[specificationName(elatencyCpmRoi)].setValue(item.latencyCpmRoi());
108 attrList[specificationName(elatencyJemInput)].setValue(item.latencyJemInput());
109 attrList[specificationName(elatencyJemRoi)].setValue(item.latencyJemRoi());
110 attrList[specificationName(elatencyCpCmxBackplane)].setValue(item.latencyCpCmxBackplane());
111 attrList[specificationName(elatencyCpCmxLocal)].setValue(item.latencyCpCmxLocal());
112 attrList[specificationName(elatencyCpCmxCable)].setValue(item.latencyCpCmxCable());
113 attrList[specificationName(elatencyCpCmxSystem)].setValue(item.latencyCpCmxSystem());
114 attrList[specificationName(elatencyCpCmxInfo)].setValue(item.latencyCpCmxInfo());
115 attrList[specificationName(elatencyJetCmxBackplane)].setValue(item.latencyJetCmxBackplane());
116 attrList[specificationName(elatencyJetCmxLocal)].setValue(item.latencyJetCmxLocal());
117 attrList[specificationName(elatencyJetCmxCable)].setValue(item.latencyJetCmxCable());
118 attrList[specificationName(elatencyJetCmxSystem)].setValue(item.latencyJetCmxSystem());
119 attrList[specificationName(elatencyJetCmxInfo)].setValue(item.latencyJetCmxInfo());
120 attrList[specificationName(elatencyJetCmxRoi)].setValue(item.latencyJetCmxRoi());
121 attrList[specificationName(elatencyEnergyCmxBackplane)].setValue(item.latencyEnergyCmxBackplane());
122 attrList[specificationName(elatencyEnergyCmxLocal)].setValue(item.latencyEnergyCmxLocal());
123 attrList[specificationName(elatencyEnergyCmxCable)].setValue(item.latencyEnergyCmxCable());
124 attrList[specificationName(elatencyEnergyCmxSystem)].setValue(item.latencyEnergyCmxSystem());
125 attrList[specificationName(elatencyEnergyCmxInfo)].setValue(item.latencyEnergyCmxInfo());
126 attrList[specificationName(elatencyEnergyCmxRoi)].setValue(item.latencyEnergyCmxRoi());
127 attrList[specificationName(elatencyTopo)].setValue(item.latencyTopo());
128 attrList[specificationName(einternalLatencyJemJet)].setValue(item.internalLatencyJemJet());
129 attrList[specificationName(einternalLatencyJemSum)].setValue(item.internalLatencyJemSum());
130 attrList[specificationName(ebcOffsetJemJet)].setValue(item.bcOffsetJemJet());
131 attrList[specificationName(ebcOffsetJemSum)].setValue(item.bcOffsetJemSum());
132 attrList[specificationName(ebcOffsetCmx)].setValue(item.bcOffsetCmx());
133 attrList[specificationName(ebcOffsetTopo)].setValue(item.bcOffsetTopo());
134 attrList[specificationName(eformatTypePpm)].setValue(item.formatTypePpm());
135 attrList[specificationName(eformatTypeCpJep)].setValue(item.formatTypeCpJep());
136 attrList[specificationName(eformatTypeTopo)].setValue(item.formatTypeTopo());
137 attrList[specificationName(ecompressionThresholdPpm)].setValue(item.compressionThresholdPpm());
138 attrList[specificationName(ecompressionThresholdCpJep)].setValue(item.compressionThresholdCpJep());
139 attrList[specificationName(ecompressionThresholdTopo)].setValue(item.compressionThresholdTopo());
140 attrList[specificationName(ecompressionBaselinePpm)].setValue(item.compressionBaselinePpm());
141 attrList[specificationName(ereadout80ModePpm)].setValue(item.readout80ModePpm());
142 attrList[specificationName(einputReadoutModeFex)].setValue(item.inputReadoutModeFex());
143 attrList[specificationName(ereadoutOffsetEfex)].setValue(item.readoutOffsetEfex());
144 attrList[specificationName(ereadoutOffsetGfex)].setValue(item.readoutOffsetGfex());
145 attrList[specificationName(ereadoutOffsetJfex)].setValue(item.readoutOffsetJfex());
146 attrList[specificationName(ereadoutOffsetPh1Topo)].setValue(item.readoutOffsetPh1Topo());
147
148 attrListCollection->add(item.channelId(), attrList);
149 }
150 return static_cast<DataObject*>(attrListCollection.release());
151}
152
153void L1CaloReadoutConfigContainerJSON::makeTransient(const std::map<std::string, const CondAttrListCollection*>& condAttrListCollectionMap)
154{
155 clear();
156
157
158 if (condAttrListCollectionMap.empty()) return;
159 auto it = condAttrListCollectionMap.rbegin();
160
161
162
163 auto attrListCollection = it->second;
164 for(const auto& [chanNum, attrListAux] : *attrListCollection) {
165
166 const coral::Blob& blob=attrListAux["json"].data<coral::Blob>();
167 std::string s((char*)blob.startingAddress(),blob.size());
168 nlohmann::json attrList = nlohmann::json::parse(s);
169
170
171 try {
172
173 auto baselinePointer = attrList[specificationName(ebaselinePointer)];
174 auto numFadcSlices = attrList[specificationName(enumFadcSlices)];
175 auto l1aFadcSlice = attrList[specificationName(el1aFadcSlice)];
176 auto numLutSlices = attrList[specificationName(enumLutSlices)];
177 auto l1aLutSlice = attrList[specificationName(el1aLutSlice)];
178 auto numProcSlices = attrList[specificationName(enumProcSlices)];
179 auto l1aProcSlice = attrList[specificationName(el1aProcSlice)];
180 auto numTopoSlices = attrList[specificationName(enumTopoSlices)];
181 auto l1aTopoSlice = attrList[specificationName(el1aTopoSlice)];
182 auto numFexSlices = attrList[specificationName(enumFexSlices)];
183 auto l1aFexSlice = attrList[specificationName(el1aFexSlice)];
184 auto latencyPpmFadc = attrList[specificationName(elatencyPpmFadc)];
185 auto latencyPpmLut = attrList[specificationName(elatencyPpmLut)];
186 auto latencyCpmInput = attrList[specificationName(elatencyCpmInput)];
187 auto latencyCpmHits = attrList[specificationName(elatencyCpmHits)];
188 auto latencyCpmRoi = attrList[specificationName(elatencyCpmRoi)];
189 auto latencyJemInput = attrList[specificationName(elatencyJemInput)];
190 auto latencyJemRoi = attrList[specificationName(elatencyJemRoi)];
191 auto latencyCpCmxBackplane = attrList[specificationName(elatencyCpCmxBackplane)];
192 auto latencyCpCmxLocal = attrList[specificationName(elatencyCpCmxLocal)];
193 auto latencyCpCmxCable = attrList[specificationName(elatencyCpCmxCable)];
194 auto latencyCpCmxSystem = attrList[specificationName(elatencyCpCmxSystem)];
195 auto latencyCpCmxInfo = attrList[specificationName(elatencyCpCmxInfo)];
196 auto latencyJetCmxBackplane = attrList[specificationName(elatencyJetCmxBackplane)];
197 auto latencyJetCmxLocal = attrList[specificationName(elatencyJetCmxLocal)];
198 auto latencyJetCmxCable = attrList[specificationName(elatencyJetCmxCable)];
199 auto latencyJetCmxSystem = attrList[specificationName(elatencyJetCmxSystem)];
200 auto latencyJetCmxInfo = attrList[specificationName(elatencyJetCmxInfo)];
201 auto latencyJetCmxRoi = attrList[specificationName(elatencyJetCmxRoi)];
202 auto latencyEnergyCmxBackplane = attrList[specificationName(elatencyEnergyCmxBackplane)];
203 auto latencyEnergyCmxLocal = attrList[specificationName(elatencyEnergyCmxLocal)];
204 auto latencyEnergyCmxCable = attrList[specificationName(elatencyEnergyCmxCable)];
205 auto latencyEnergyCmxSystem = attrList[specificationName(elatencyEnergyCmxSystem)];
206 auto latencyEnergyCmxInfo = attrList[specificationName(elatencyEnergyCmxInfo)];
207 auto latencyEnergyCmxRoi = attrList[specificationName(elatencyEnergyCmxRoi)];
208 auto latencyTopo = attrList[specificationName(elatencyTopo)];
209 auto internalLatencyJemJet = attrList[specificationName(einternalLatencyJemJet)];
210 auto internalLatencyJemSum = attrList[specificationName(einternalLatencyJemSum)];
211 auto bcOffsetJemJet = attrList[specificationName(ebcOffsetJemJet)];
212 auto bcOffsetJemSum = attrList[specificationName(ebcOffsetJemSum)];
213 auto bcOffsetCmx = attrList[specificationName(ebcOffsetCmx)];
214 auto bcOffsetTopo = attrList[specificationName(ebcOffsetTopo)];
215 auto formatTypePpm = attrList[specificationName(eformatTypePpm)];
216 auto formatTypeCpJep = attrList[specificationName(eformatTypeCpJep)];
217 auto formatTypeTopo = attrList[specificationName(eformatTypeTopo)];
218 auto compressionThresholdPpm = attrList[specificationName(ecompressionThresholdPpm)];
219 auto compressionThresholdCpJep = attrList[specificationName(ecompressionThresholdCpJep)];
220 auto compressionThresholdTopo = attrList[specificationName(ecompressionThresholdTopo)];
221 auto compressionBaselinePpm = attrList[specificationName(ecompressionBaselinePpm)];
222 auto readout80ModePpm = attrList[specificationName(ereadout80ModePpm)];
223 auto inputReadoutModeFex = attrList[specificationName(einputReadoutModeFex)];
224 auto readoutOffsetEfex = attrList[specificationName(ereadoutOffsetEfex)];
225 auto readoutOffsetGfex = attrList[specificationName(ereadoutOffsetGfex)];
226 auto readoutOffsetJfex = attrList[specificationName(ereadoutOffsetJfex)];
227 auto readoutOffsetPh1Topo = attrList[specificationName(ereadoutOffsetPh1Topo)];
228
229
230 addReadoutConfigJSON(L1CaloReadoutConfigJSON(chanNum, baselinePointer, numFadcSlices, l1aFadcSlice, numLutSlices, l1aLutSlice, numProcSlices, l1aProcSlice, numTopoSlices, l1aTopoSlice, numFexSlices, l1aFexSlice, latencyPpmFadc, latencyPpmLut, latencyCpmInput, latencyCpmHits, latencyCpmRoi, latencyJemInput, latencyJemRoi, latencyCpCmxBackplane, latencyCpCmxLocal, latencyCpCmxCable, latencyCpCmxSystem, latencyCpCmxInfo, latencyJetCmxBackplane, latencyJetCmxLocal, latencyJetCmxCable, latencyJetCmxSystem, latencyJetCmxInfo, latencyJetCmxRoi, latencyEnergyCmxBackplane, latencyEnergyCmxLocal, latencyEnergyCmxCable, latencyEnergyCmxSystem, latencyEnergyCmxInfo, latencyEnergyCmxRoi, latencyTopo, internalLatencyJemJet, internalLatencyJemSum, bcOffsetJemJet, bcOffsetJemSum, bcOffsetCmx, bcOffsetTopo, formatTypePpm, formatTypeCpJep, formatTypeTopo, compressionThresholdPpm, compressionThresholdCpJep, compressionThresholdTopo, compressionBaselinePpm, readout80ModePpm, inputReadoutModeFex, readoutOffsetEfex, readoutOffsetGfex, readoutOffsetJfex, readoutOffsetPh1Topo));
231 }
232 catch(const std::exception& e) { std::cout << "ERROR - Caught exception during creation of AthenaAttributeList object from ReadoutConfigJSON " << e.what() <<std::endl; }
233
234
235 }}
236
238{
239 auto it = std::lower_bound(std::begin(m_readoutConfigsJSON),
240 std::end(m_readoutConfigsJSON),
241 channelId,
242 [](const L1CaloReadoutConfigJSON& el, unsigned int val) -> bool {
243 return el.channelId() < val;
244 });
245 if(it == std::end(m_readoutConfigsJSON)) return nullptr;
246 return &(*it);
247}
248
250{
251 // insert into the correct position mainting the sorted vector
252 m_readoutConfigsJSON.insert(std::lower_bound(std::begin(m_readoutConfigsJSON),
253 std::end(m_readoutConfigsJSON),
254 readoutConfigJSON.channelId(),
255 [](const L1CaloReadoutConfigJSON& el, unsigned int va) -> bool {
256 return el.channelId() < va;
257 }),
259}
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
AbstractL1CaloPersistentCondition(const std::string &condType)
void addSpecification(int specId, const std::string &specName, const std::string &specType)
coral::AttributeListSpecification * createAttributeListSpecification() const
An AttributeList represents a logical row of attributes in a metadata table.
void addReadoutConfigJSON(const L1CaloReadoutConfigJSON &readoutConfigJSON)
const L1CaloReadoutConfigJSON * readoutConfigJSON(unsigned int channelId) const
std::vector< L1CaloReadoutConfigJSON > m_readoutConfigsJSON
virtual void makeTransient(const std::map< std::string, const CondAttrListCollection * > &) override
virtual DataObject * makePersistent() const override
Folder <-> Object mapping for /TRIGGER/L1Calo/V2/Configuration/ReadoutConfigJSON .