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
26#include "TPCBase/CalArray.h"
27#include "TPCBase/CalDet.h"
28#include "TPCBase/Mapper.h"
34
35namespace o2
36{
37namespace tpc
38{
39//template <class T>
40//void writeObject(T& obj, const std::string_view type, const std::string_view name, const int run)
41//{
42// auto cdb = o2::ccdb::Manager::Instance();
43//
44// auto id = new o2::ccdb::ConditionId(
45// "TPC/" + type +
46// "/" + name,
47// run, run, 1, 0);
48// auto md = new o2::ccdb::ConditionMetaData();
49// cdb->putObjectAny(&obj, *id, md);
50//}
51
52const std::string ccdbUrl = "file:///tmp/CCDBSnapshot";
53
55CalPad writeCalPadObject(const std::string_view name, const int run, const int dataOffset = 0)
56{
57 // ===| create and write test data |==========================================
59
60 int iter = dataOffset;
61 data.setName(name);
62 for (auto& calArray : data.getData()) {
63 for (auto& value : calArray.getData()) {
64 value = iter++;
65 }
66 }
67
68 o2::ccdb::CcdbApi ccdbApi;
69 ccdbApi.init(ccdbUrl);
70 std::map<std::string, std::string> metadata;
71 ccdbApi.storeAsTFileAny<CalPad>(data, "Calib", metadata);
72
73 writeObject(data, "Calib", name, run);
74
75 return data;
76}
77
79void checkCalPadEqual(const CalPad& data, const CalPad& dataRead)
80{
81 auto& mapper = Mapper::instance();
82 const auto numberOfPads = mapper.getPadsInSector() * 36;
83
84 float sumROC = 0.f;
85
86 int numberOfPadsROC = 0;
87
88 for (auto const& arrays : boost::combine(data.getData(), dataRead.getData())) {
89 for (auto const& val : boost::combine(arrays.get<0>().getData(), arrays.get<1>().getData())) {
90 sumROC += (val.get<0>() - val.get<1>());
91 ++numberOfPadsROC;
92 }
93 }
94
95 BOOST_CHECK_EQUAL(data.getName(), dataRead.getName());
96 BOOST_CHECK_CLOSE(sumROC, 0.f, 1.E-12);
97 BOOST_CHECK_EQUAL(numberOfPadsROC, numberOfPads);
98}
99
101BOOST_AUTO_TEST_CASE(CDBInterface_test_pedestals)
102{
103 const int run = 1;
104 const int dataOffset = 0;
105 const std::string_view type = "Pedestals";
106
107 // ===| initialize CDB manager |==============================================
108 auto cdb = o2::ccdb::Manager::Instance();
109 cdb->setDefaultStorage("local://O2CDB");
110
111 // ===| write test object |===================================================
112 auto data = writeCalPadObject(type, run, dataOffset);
113
114 // ===| TPC interface |=======================================================
115 auto& tpcCDB = CDBInterface::instance();
116
117 // ===| read object |=========================================================
118 cdb->setRun(run);
119 auto dataRead = tpcCDB.getPedestals();
120
121 // ===| checks |==============================================================
122 checkCalPadEqual(data, dataRead);
123}
124
126BOOST_AUTO_TEST_CASE(CDBInterface_test_noise)
127{
128 const int run = 2;
129 const int dataOffset = 1;
130 const std::string_view type = "Noise";
131
132 // ===| initialize CDB manager |==============================================
133 auto cdb = o2::ccdb::Manager::Instance();
134 cdb->setDefaultStorage("local://O2CDB");
135
136 // ===| write test object |===================================================
137 auto data = writeCalPadObject(type, run, dataOffset);
138
139 // ===| TPC interface |=======================================================
140 auto& tpcCDB = CDBInterface::instance();
141
142 // ===| read object |=========================================================
143 cdb->setRun(run);
144 auto dataRead = tpcCDB.getNoise();
145
146 // ===| checks |==============================================================
147 checkCalPadEqual(data, dataRead);
148}
149
151BOOST_AUTO_TEST_CASE(CDBInterface_test_gainmap)
152{
153 const int run = 2;
154 const int dataOffset = 1;
155 const std::string_view type = "Gain";
156
157 // ===| initialize CDB manager |==============================================
158 auto cdb = o2::ccdb::Manager::Instance();
159 cdb->setDefaultStorage("local://O2CDB");
160
161 // ===| write test object |===================================================
162 auto data = writeCalPadObject(type, run, dataOffset);
163
164 // ===| TPC interface |=======================================================
165 auto& tpcCDB = CDBInterface::instance();
166
167 // ===| read object |=========================================================
168 cdb->setRun(run);
169 auto dataRead = tpcCDB.getGainMap();
170
171 // ===| checks |==============================================================
172 checkCalPadEqual(data, dataRead);
173}
174
176BOOST_AUTO_TEST_CASE(CDBInterface_test_ParameterDetector)
177{
178 const int run = 3;
179 const std::string_view name = "Detector";
180 auto value = 100.3f;
181
182 // ===| initialize CDB manager |==============================================
183 auto cdb = o2::ccdb::Manager::Instance();
184 cdb->setDefaultStorage("local://O2CDB");
185
186 // ===| write test object |===================================================
188 // o2::conf::ConfigurableParam::updateFromString(TString::Format("TPCDetParam.TPClength = %f", value).Data());
189
190 // disabled for the moment since we cannot write these objects yet...
191 //writeObject(data, "Parameter", name, run);
192
193 // ===| TPC interface |=======================================================
194 // auto& tpcCDB = CDBInterface::instance();
195
196 // ===| read object |=========================================================
197 // cdb->setRun(run);
198 // auto dataRead = tpcCDB.getParameterDetector();
199
200 // ===| checks |==============================================================
201 // BOOST_CHECK_CLOSE(value, dataRead.getTPClength(), 1.E-12);
202}
203
205BOOST_AUTO_TEST_CASE(CDBInterface_test_ParameterElectronics)
206{
207 const int run = 3;
208 const std::string_view name = "Electronics";
209 auto value = 80.9f;
210
211 // ===| initialize CDB manager |==============================================
212 auto cdb = o2::ccdb::Manager::Instance();
213 cdb->setDefaultStorage("local://O2CDB");
214
215 // ===| write test object |===================================================
217 // o2::conf::ConfigurableParam::updateFromString(TString::Format("TPCEleParam.PeakingTime = %f", value).Data());
218
219 // disabled for the moment since we cannot write these objects yet...
220 // writeObject(data, "Parameter", name, run);
221
222 // ===| TPC interface |=======================================================
223 // auto& tpcCDB = CDBInterface::instance();
224
225 // ===| read object |=========================================================
226 // cdb->setRun(run);
227 // auto dataRead = tpcCDB.getParameterElectronics();
228
229 // ===| checks |==============================================================
230 // BOOST_CHECK_CLOSE(value, dataRead.getPeakingTime(), 1.E-12);
231}
232
234BOOST_AUTO_TEST_CASE(CDBInterface_test_ParameterGas)
235{
236 const int run = 3;
237 const std::string_view name = "Gas";
238 auto value = 1000.9434f;
239
240 // ===| initialize CDB manager |==============================================
241 auto cdb = o2::ccdb::Manager::Instance();
242 cdb->setDefaultStorage("local://O2CDB");
243
244 // ===| write test object |===================================================
246 // o2::conf::ConfigurableParam::updateFromString(TString::Format("TPCGasParam.DriftV = %f", value).Data());
247
248 // disabled for the moment since we cannot write these objects yet...
249 // writeObject(data, "Parameter", name, run);
250
251 // ===| TPC interface |=======================================================
252 // auto& tpcCDB = CDBInterface::instance();
253
254 // ===| read object |=========================================================
255 // cdb->setRun(run);
256 // auto dataRead = tpcCDB.getParameterGas();
257
258 // ===| checks |==============================================================
259 // BOOST_CHECK_CLOSE(value, dataRead.getVdrift(), 1.E-12);
260}
261
263BOOST_AUTO_TEST_CASE(CDBInterface_test_ParameterGEM)
264{
265 const int run = 3;
266 const std::string_view name = "GEM";
267 auto value = 1.7382f;
268
269 // ===| initialize CDB manager |==============================================
270 auto cdb = o2::ccdb::Manager::Instance();
271 cdb->setDefaultStorage("local://O2CDB");
272
273 // ===| write test object |===================================================
275 // o2::conf::ConfigurableParam::updateFromString(TString::Format("TPCGEMParam.TotalGainStack = %f", value).Data());
276
277 // disabled for the moment since we cannot write these objects yet...
278 // writeObject(data, "Parameter", name, run);
279
280 // ===| TPC interface |=======================================================
281 // auto& tpcCDB = CDBInterface::instance();
282
283 // ===| read object |=========================================================
284 // cdb->setRun(run);
285 // auto dataRead = tpcCDB.getParameterGEM();
286
287 // ===| checks |==============================================================
288 // BOOST_CHECK_CLOSE(value, dataRead.getCollectionEfficiency(0), 1.E-12);
289}
290
292BOOST_AUTO_TEST_CASE(CDBInterface_test_Default_ReadFromFile)
293{
294 // ===| TPC interface |=======================================================
295 auto& tpcCDB = CDBInterface::instance();
296
297 // ===| get default pedestals and noise |=====================================
298 tpcCDB.setUseDefaults();
299
300 // we need a copy here to do the comparison below
301 auto pedestals = tpcCDB.getPedestals();
302 auto noise = tpcCDB.getNoise();
303 auto gainmap = tpcCDB.getGainMap();
304
305 // check interface for defaults
306 tpcCDB.getParameterDetector();
307 tpcCDB.getParameterElectronics();
308 tpcCDB.getParameterGas();
309 tpcCDB.getParameterGEM();
310
311 // ===| dump to file |========================================================
312 auto f = TFile::Open("Calibration.root", "recreate");
313 f->WriteObject(&pedestals, "Pedestals");
314 f->WriteObject(&noise, "Noise");
315 f->WriteObject(&gainmap, "Gain");
316 delete f;
317
318 // ===| read from file |======================================================
319 tpcCDB.setUseDefaults(false);
320 tpcCDB.resetLocalCalibration();
321 tpcCDB.setPedestalsAndNoiseFromFile("Calibration.root");
322 tpcCDB.setGainMapFromFile("Calibration.root");
323
324 auto& pedestalsFromFile = tpcCDB.getPedestals();
325 auto& noiseFromFile = tpcCDB.getNoise();
326 auto& gainmapFromFile = tpcCDB.getGainMap();
327
328 // ===| checks |==============================================================
329 checkCalPadEqual(noise, noiseFromFile);
330 checkCalPadEqual(pedestals, pedestalsFromFile);
331 checkCalPadEqual(gainmap, gainmapFromFile);
332}
333} // namespace tpc
334} // 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:165
static CDBInterface & instance()
const std::vector< CalType > & getData() const
Definition CalDet.h:58
const std::string & getName() const
Definition CalDet.h:85
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())