Project
Loading...
Searching...
No Matches
testTPCCDBInterface.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#define BOOST_TEST_MODULE Test TPC CDBInterface class
13#define BOOST_TEST_MAIN
14#define BOOST_TEST_DYN_LINK
15
16// boost includes
17#include <boost/range/combine.hpp>
18#include <boost/test/unit_test.hpp>
19
20// ROOT includes
21#include "TFile.h"
22
23// o2 includes
25#include "TPCBase/CalArray.h"
26#include "TPCBase/CalDet.h"
27#include "TPCBase/Mapper.h"
33
34namespace o2
35{
36namespace tpc
37{
38//template <class T>
39//void writeObject(T& obj, const std::string_view type, const std::string_view name, const int run)
40//{
41// auto cdb = o2::ccdb::Manager::Instance();
42//
43// auto id = new o2::ccdb::ConditionId(
44// "TPC/" + type +
45// "/" + name,
46// run, run, 1, 0);
47// auto md = new o2::ccdb::ConditionMetaData();
48// cdb->putObjectAny(&obj, *id, md);
49//}
50
51const std::string ccdbUrl = "file:///tmp/CCDBSnapshot";
52
54CalPad writeCalPadObject(const std::string_view name, const int run, const int dataOffset = 0)
55{
56 // ===| create and write test data |==========================================
58
59 int iter = dataOffset;
60 data.setName(name);
61 for (auto& calArray : data.getData()) {
62 for (auto& value : calArray.getData()) {
63 value = iter++;
64 }
65 }
66
67 o2::ccdb::CcdbApi ccdbApi;
68 ccdbApi.init(ccdbUrl);
69 std::map<std::string, std::string> metadata;
70 ccdbApi.storeAsTFileAny<CalPad>(data, "Calib", metadata);
71
72 writeObject(data, "Calib", name, run);
73
74 return data;
75}
76
78void checkCalPadEqual(const CalPad& data, const CalPad& dataRead)
79{
80 auto& mapper = Mapper::instance();
81 const auto numberOfPads = mapper.getPadsInSector() * 36;
82
83 float sumROC = 0.f;
84
85 int numberOfPadsROC = 0;
86
87 for (auto const& arrays : boost::combine(data.getData(), dataRead.getData())) {
88 for (auto const& val : boost::combine(arrays.get<0>().getData(), arrays.get<1>().getData())) {
89 sumROC += (val.get<0>() - val.get<1>());
90 ++numberOfPadsROC;
91 }
92 }
93
94 BOOST_CHECK_EQUAL(data.getName(), dataRead.getName());
95 BOOST_CHECK_CLOSE(sumROC, 0.f, 1.E-12);
96 BOOST_CHECK_EQUAL(numberOfPadsROC, numberOfPads);
97}
98
100BOOST_AUTO_TEST_CASE(CDBInterface_test_pedestals)
101{
102 const int run = 1;
103 const int dataOffset = 0;
104 const std::string_view type = "Pedestals";
105
106 // ===| initialize CDB manager |==============================================
107 auto cdb = o2::ccdb::Manager::Instance();
108 cdb->setDefaultStorage("local://O2CDB");
109
110 // ===| write test object |===================================================
111 auto data = writeCalPadObject(type, run, dataOffset);
112
113 // ===| TPC interface |=======================================================
114 auto& tpcCDB = CDBInterface::instance();
115
116 // ===| read object |=========================================================
117 cdb->setRun(run);
118 auto dataRead = tpcCDB.getPedestals();
119
120 // ===| checks |==============================================================
121 checkCalPadEqual(data, dataRead);
122}
123
125BOOST_AUTO_TEST_CASE(CDBInterface_test_noise)
126{
127 const int run = 2;
128 const int dataOffset = 1;
129 const std::string_view type = "Noise";
130
131 // ===| initialize CDB manager |==============================================
132 auto cdb = o2::ccdb::Manager::Instance();
133 cdb->setDefaultStorage("local://O2CDB");
134
135 // ===| write test object |===================================================
136 auto data = writeCalPadObject(type, run, dataOffset);
137
138 // ===| TPC interface |=======================================================
139 auto& tpcCDB = CDBInterface::instance();
140
141 // ===| read object |=========================================================
142 cdb->setRun(run);
143 auto dataRead = tpcCDB.getNoise();
144
145 // ===| checks |==============================================================
146 checkCalPadEqual(data, dataRead);
147}
148
150BOOST_AUTO_TEST_CASE(CDBInterface_test_gainmap)
151{
152 const int run = 2;
153 const int dataOffset = 1;
154 const std::string_view type = "Gain";
155
156 // ===| initialize CDB manager |==============================================
157 auto cdb = o2::ccdb::Manager::Instance();
158 cdb->setDefaultStorage("local://O2CDB");
159
160 // ===| write test object |===================================================
161 auto data = writeCalPadObject(type, run, dataOffset);
162
163 // ===| TPC interface |=======================================================
164 auto& tpcCDB = CDBInterface::instance();
165
166 // ===| read object |=========================================================
167 cdb->setRun(run);
168 auto dataRead = tpcCDB.getGainMap();
169
170 // ===| checks |==============================================================
171 checkCalPadEqual(data, dataRead);
172}
173
175BOOST_AUTO_TEST_CASE(CDBInterface_test_ParameterDetector)
176{
177 const int run = 3;
178 const std::string_view name = "Detector";
179 auto value = 100.3f;
180
181 // ===| initialize CDB manager |==============================================
182 auto cdb = o2::ccdb::Manager::Instance();
183 cdb->setDefaultStorage("local://O2CDB");
184
185 // ===| write test object |===================================================
187 // o2::conf::ConfigurableParam::updateFromString(TString::Format("TPCDetParam.TPClength = %f", value).Data());
188
189 // disabled for the moment since we cannot write these objects yet...
190 //writeObject(data, "Parameter", name, run);
191
192 // ===| TPC interface |=======================================================
193 // auto& tpcCDB = CDBInterface::instance();
194
195 // ===| read object |=========================================================
196 // cdb->setRun(run);
197 // auto dataRead = tpcCDB.getParameterDetector();
198
199 // ===| checks |==============================================================
200 // BOOST_CHECK_CLOSE(value, dataRead.getTPClength(), 1.E-12);
201}
202
204BOOST_AUTO_TEST_CASE(CDBInterface_test_ParameterElectronics)
205{
206 const int run = 3;
207 const std::string_view name = "Electronics";
208 auto value = 80.9f;
209
210 // ===| initialize CDB manager |==============================================
211 auto cdb = o2::ccdb::Manager::Instance();
212 cdb->setDefaultStorage("local://O2CDB");
213
214 // ===| write test object |===================================================
216 // o2::conf::ConfigurableParam::updateFromString(TString::Format("TPCEleParam.PeakingTime = %f", value).Data());
217
218 // disabled for the moment since we cannot write these objects yet...
219 // writeObject(data, "Parameter", name, run);
220
221 // ===| TPC interface |=======================================================
222 // auto& tpcCDB = CDBInterface::instance();
223
224 // ===| read object |=========================================================
225 // cdb->setRun(run);
226 // auto dataRead = tpcCDB.getParameterElectronics();
227
228 // ===| checks |==============================================================
229 // BOOST_CHECK_CLOSE(value, dataRead.getPeakingTime(), 1.E-12);
230}
231
233BOOST_AUTO_TEST_CASE(CDBInterface_test_ParameterGas)
234{
235 const int run = 3;
236 const std::string_view name = "Gas";
237 auto value = 1000.9434f;
238
239 // ===| initialize CDB manager |==============================================
240 auto cdb = o2::ccdb::Manager::Instance();
241 cdb->setDefaultStorage("local://O2CDB");
242
243 // ===| write test object |===================================================
245 // o2::conf::ConfigurableParam::updateFromString(TString::Format("TPCGasParam.DriftV = %f", value).Data());
246
247 // disabled for the moment since we cannot write these objects yet...
248 // writeObject(data, "Parameter", name, run);
249
250 // ===| TPC interface |=======================================================
251 // auto& tpcCDB = CDBInterface::instance();
252
253 // ===| read object |=========================================================
254 // cdb->setRun(run);
255 // auto dataRead = tpcCDB.getParameterGas();
256
257 // ===| checks |==============================================================
258 // BOOST_CHECK_CLOSE(value, dataRead.getVdrift(), 1.E-12);
259}
260
262BOOST_AUTO_TEST_CASE(CDBInterface_test_ParameterGEM)
263{
264 const int run = 3;
265 const std::string_view name = "GEM";
266 auto value = 1.7382f;
267
268 // ===| initialize CDB manager |==============================================
269 auto cdb = o2::ccdb::Manager::Instance();
270 cdb->setDefaultStorage("local://O2CDB");
271
272 // ===| write test object |===================================================
274 // o2::conf::ConfigurableParam::updateFromString(TString::Format("TPCGEMParam.TotalGainStack = %f", value).Data());
275
276 // disabled for the moment since we cannot write these objects yet...
277 // writeObject(data, "Parameter", name, run);
278
279 // ===| TPC interface |=======================================================
280 // auto& tpcCDB = CDBInterface::instance();
281
282 // ===| read object |=========================================================
283 // cdb->setRun(run);
284 // auto dataRead = tpcCDB.getParameterGEM();
285
286 // ===| checks |==============================================================
287 // BOOST_CHECK_CLOSE(value, dataRead.getCollectionEfficiency(0), 1.E-12);
288}
289
291BOOST_AUTO_TEST_CASE(CDBInterface_test_Default_ReadFromFile)
292{
293 // ===| TPC interface |=======================================================
294 auto& tpcCDB = CDBInterface::instance();
295
296 // ===| get default pedestals and noise |=====================================
297 tpcCDB.setUseDefaults();
298
299 // we need a copy here to do the comparison below
300 auto pedestals = tpcCDB.getPedestals();
301 auto noise = tpcCDB.getNoise();
302 auto gainmap = tpcCDB.getGainMap();
303
304 // check interface for defaults
305 tpcCDB.getParameterDetector();
306 tpcCDB.getParameterElectronics();
307 tpcCDB.getParameterGas();
308 tpcCDB.getParameterGEM();
309
310 // ===| dump to file |========================================================
311 auto f = TFile::Open("Calibration.root", "recreate");
312 f->WriteObject(&pedestals, "Pedestals");
313 f->WriteObject(&noise, "Noise");
314 f->WriteObject(&gainmap, "Gain");
315 delete f;
316
317 // ===| read from file |======================================================
318 tpcCDB.setUseDefaults(false);
319 tpcCDB.resetLocalCalibration();
320 tpcCDB.setPedestalsAndNoiseFromFile("Calibration.root");
321 tpcCDB.setGainMapFromFile("Calibration.root");
322
323 auto& pedestalsFromFile = tpcCDB.getPedestals();
324 auto& noiseFromFile = tpcCDB.getNoise();
325 auto& gainmapFromFile = tpcCDB.getGainMap();
326
327 // ===| checks |==============================================================
328 checkCalPadEqual(noise, noiseFromFile);
329 checkCalPadEqual(pedestals, pedestalsFromFile);
330 checkCalPadEqual(gainmap, gainmapFromFile);
331}
332} // namespace tpc
333} // namespace o2
Simple interface to the CDB manager.
Definition of the parameter class for the detector.
Definition of the parameter class for the detector electronics.
Definition of the parameter class for the GEM stack.
Definition of the parameter class for the detector gas.
int storeAsTFileAny(const T *obj, std::string const &path, std::map< std::string, std::string > const &metadata, long startValidityTimestamp=-1, long endValidityTimestamp=-1, std::vector< char >::size_type maxSize=0) const
Definition CcdbApi.h:157
void init(std::string const &hosts)
Definition CcdbApi.cxx:160
static CDBInterface & instance()
const std::vector< CalType > & getData() const
Definition CalDet.h:64
const std::string & getName() const
Definition CalDet.h:91
static Mapper & instance(const std::string mappingDir="")
Definition Mapper.h:44
GLuint const GLchar * name
Definition glcorearb.h:781
GLdouble f
Definition glcorearb.h:310
GLsizei const GLfloat * value
Definition glcorearb.h:819
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLboolean * data
Definition glcorearb.h:298
GLuint GLfloat * val
Definition glcorearb.h:1582
const GLuint * arrays
Definition glcorearb.h:1314
BOOST_AUTO_TEST_CASE(ClusterHardware_test1)
const std::string ccdbUrl
void checkCalPadEqual(const CalPad &data, const CalPad &dataRead)
Check equivalence of two CalPad objects.
CalPad writeCalPadObject(const std::string_view name, const int run, const int dataOffset=0)
write a CalPad object to the CCDB
@ ROC
ROCs (up to 72)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())