Project
Loading...
Searching...
No Matches
CDBInterface.h
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
15
16#ifndef AliceO2_TPC_CDBInterface_H_
17#define AliceO2_TPC_CDBInterface_H_
18
19#include <memory>
20#include <unordered_map>
21#include <string_view>
22
23#include "Framework/Logger.h"
25#include "CCDB/CcdbApi.h"
26#include "TPCBase/CalDet.h"
27#include "TPCBase/FEEConfig.h"
28#include "TPCBase/CDBTypes.h"
31#include "DataFormatsTPC/Defs.h"
33
34namespace o2::tpc
35{
36// forward declarations
37class ParameterDetector;
38class ParameterElectronics;
39class ParameterGas;
40class ParameterGEM;
41
43enum class CDBIntervention {
44 Manual,
45 Automatic,
46};
47
49const std::unordered_map<CDBIntervention, std::string> CDBInterventionMap{
50 {CDBIntervention::Manual, "Manual"},
51 {CDBIntervention::Automatic, "Automatic"},
52};
53
66{
67 public:
68 using CalPadMapType = std::unordered_map<std::string, CalPad>;
70
71 CDBInterface(const CDBInterface&) = delete;
72
76 {
77 static CDBInterface interface;
78 return interface;
79 }
80
86 const CalPad& getPedestals();
87
91 const CalPad& getPedestalsCRU();
92
98 const CalPad& getNoise();
99
102
108 const CalPad& getGainMap();
109
113 const CalPad& getITFraction();
114
118 const CalPad& getITExpLambda();
119
123 const CalPad& getCMkValues();
124
127
129 const FEEConfig& getFEEConfig();
130
132 DeadChannelMapCreator& getDeadChannelMapCreator() { return mDeadChannelMapCreator; }
133
142
149
156
163
166 const CalPad& getCalPad(const std::string_view path);
167
172 template <typename T>
173 T& getSpecificObjectFromCDB(const std::string_view path, long timestamp = -1, const std::map<std::string, std::string>& metaData = std::map<std::string, std::string>());
174
176 template <typename T>
177 T& getObjectFromCDB(std::string_view path);
178
185 void setPedestalsAndNoiseFromFile(const std::string_view fileName) { mPedestalNoiseFileName = fileName; }
186
192 void setGainMapFromFile(const std::string_view fileName) { mGainMapFileName = fileName; }
193
199 void setThresholdMapFromFile(const std::string_view fileName) { mFEEParamFileName = fileName; }
200
206 void setFEEParamsFromFile(const std::string_view fileName) { mFEEParamFileName = fileName; }
207
211 void setUseDefaults(bool defaults = true) { mUseDefaults = defaults; }
212
214 bool getUseDefaults() const { return mUseDefaults; }
215
218 {
220 cdb.setTimestamp(time);
221 }
222
224 void setURL(const std::string_view url)
225 {
227 cdb.setURL(url.data());
228 mDeadChannelMapCreator.init(url);
229 }
230
233 void setDefaultZSsigma(float zs)
234 {
235 mDefaultZSsigma = zs;
236 }
237
240 {
241 mPedestals.reset();
242 mNoise.reset();
243 mZeroSuppression.reset();
244 mGainMap.reset();
245 }
246
247 private:
248 CDBInterface();
249
250 // ===| Pad calibrations |====================================================
251 std::unique_ptr<CalPad> mPedestals;
252 std::unique_ptr<CalPad> mPedestalsCRU;
253 std::unique_ptr<CalPad> mNoise;
254 std::unique_ptr<CalPad> mZeroSuppression;
255 std::unique_ptr<CalPad> mGainMap;
256 std::unique_ptr<CalPad> mITFraction;
257 std::unique_ptr<CalPad> mITExpLambda;
258 std::unique_ptr<CalPad> mCMkValues;
259 std::unique_ptr<CalPadFlagType> mPadFlags;
260
261 std::unique_ptr<FEEConfig> mFEEConfig;
262
263 // ===| switches and parameters |=============================================
264 bool mUseDefaults = false;
265 float mDefaultZSsigma = 3.f;
266
267 std::string mPedestalNoiseFileName;
268 std::string mGainMapFileName;
269 std::string mFEEParamFileName;
270 DeadChannelMapCreator mDeadChannelMapCreator;
271
272 // ===========================================================================
273 // ===| functions |===========================================================
274 //
275 void loadNoiseAndPedestalFromFile();
276 void loadGainMapFromFile();
277 void loadFEEParamsFromFile();
278
279 void createDefaultPedestals();
280 void createDefaultNoise();
281 void createDefaultZeroSuppression();
282 void createDefaultGainMap();
283 void createDefaultIonTailParams();
284 void createDefaultCMParams();
285 void createDefaultPadFlags();
286
287 void createFEEConfig();
288};
289
295template <typename T>
296inline T& CDBInterface::getObjectFromCDB(std::string_view path)
297{
298 static auto& cdb = o2::ccdb::BasicCCDBManager::instance();
299 auto* object = cdb.get<T>(path.data());
300 if (!object) {
301 LOGP(fatal, "Could not get {} from cdb", path);
302 }
303 return *object;
304}
305
313template <typename T>
314inline T& CDBInterface::getSpecificObjectFromCDB(std::string_view path, long timestamp, const std::map<std::string, std::string>& metaData)
315{
316 static auto& cdb = o2::ccdb::BasicCCDBManager::instance();
317 auto* object = cdb.getSpecific<T>(path.data(), timestamp, metaData);
318 return *object;
319}
320
321template CalPad& CDBInterface::getSpecificObjectFromCDB(const std::string_view path, long timestamp, const std::map<std::string, std::string>& metaData);
322template std::vector<CalPad>& CDBInterface::getSpecificObjectFromCDB(const std::string_view path, long timestamp, const std::map<std::string, std::string>& metaData);
323template CDBInterface::CalPadMapType& CDBInterface::getSpecificObjectFromCDB(const std::string_view path, long timestamp, const std::map<std::string, std::string>& metaData);
324template LtrCalibData& CDBInterface::getSpecificObjectFromCDB(const std::string_view path, long timestamp, const std::map<std::string, std::string>& metaData);
325
332{
333 public:
334 using MetaData_t = std::map<std::string, std::string>;
335 void setURL(std::string_view url)
336 {
337 mCCDB.init(url.data());
338 }
339
341 {
342 mMetaData.clear();
343 }
344
345 void setResponsible(std::string_view responsible)
346 {
347 mMetaData["Responsible"] = responsible;
348 }
349
350 void setReason(std::string_view reason)
351 {
352 mMetaData["Reason"] = reason;
353 }
354
355 void setIntervention(CDBIntervention const intervention)
356 {
357 mMetaData["Intervention"] = CDBInterventionMap.at(intervention);
358 }
359
360 void setJIRA(std::string_view jira)
361 {
362 mMetaData["JIRA"] = jira;
363 }
364
365 void setComment(std::string_view comment)
366 {
367 mMetaData["Comment"] = comment;
368 }
369
370 void setRunNumber(int run)
371 {
372 mMetaData[o2::base::NameConf::CCDBRunTag.data()] = std::to_string(run);
373 }
374
375 const auto& getMetaData() const { return mMetaData; }
376
377 std::string getMetaDataString() const;
378
379 void setSimulate(bool sim = true) { mSimulate = sim; }
380
381 bool getSimulate() const { return mSimulate; }
382
383 template <typename T>
384 void storeObject(T* obj, CDBType const type, MetaData_t const& metadata, long start, long end)
385 {
386 if (checkMetaData(metadata)) {
387 if (!mSimulate) {
388 mCCDB.storeAsTFileAny(obj, CDBTypeMap.at(type), metadata, start, end);
389 }
390 printObjectSummary(typeid(obj).name(), type, metadata, start, end);
391 } else {
392 LOGP(error, "Meta data not set properly, object will not be stored");
393 }
394 }
395
396 template <typename T>
397 void storeObject(T* obj, CDBType const type, long start, long end)
398 {
399 storeObject(obj, type, mMetaData, start, end);
400 }
401
402 void uploadNoiseAndPedestal(std::string_view fileName, long first = -1, long last = o2::ccdb::CcdbObjectInfo::INFINITE_TIMESTAMP);
403 void uploadGainMap(std::string_view fileName, bool isFull = true, long first = -1, long last = o2::ccdb::CcdbObjectInfo::INFINITE_TIMESTAMP);
404 void uploadPulserOrCEData(CDBType type, std::string_view fileName, long first = -1, long last = o2::ccdb::CcdbObjectInfo::INFINITE_TIMESTAMP);
405 void uploadFEEConfigPad(std::string_view fileName, long first = -1, long last = o2::ccdb::CcdbObjectInfo::INFINITE_TIMESTAMP);
406 void uploadTimeGain(std::string_view fileName, long first = -1, long last = o2::ccdb::CcdbObjectInfo::INFINITE_TIMESTAMP);
407
408 private:
409 bool checkMetaData(MetaData_t metaData) const;
410 bool checkMetaData() const { return checkMetaData(mMetaData); }
411 void printObjectSummary(std::string_view name, CDBType const type, MetaData_t const& metadata, long start, long end) const;
412
413 o2::ccdb::CcdbApi mCCDB;
414 MetaData_t mMetaData;
415 bool mSimulate = false;
416};
417
418} // namespace o2::tpc
419
420#endif
CDB Type definitions for TPC.
Frontend electronics configuration values.
int16_t time
Definition RawEventData.h:4
calibration data from laser track calibration
Definition of the Names Generator class.
static constexpr std::string_view CCDBRunTag
Definition NameConf.h:69
static BasicCCDBManager & instance()
static constexpr long INFINITE_TIMESTAMP
const CalDet< bool > & getDeadChannelMap()
Dead channel map.
const CalPad & getCMkValues()
std::unordered_map< std::string, CalPad > CalPadMapType
const CalPad & getITFraction()
static CDBInterface & instance()
const ParameterDetector & getParameterDetector()
const CalPad & getPedestals()
const CalPad & getZeroSuppressionThreshold()
Return the zero suppression threshold map.
void setGainMapFromFile(const std::string_view fileName)
void setURL(const std::string_view url)
set CCDB URL
const CalPad & getNoise()
const CalPad & getITExpLambda()
const ParameterElectronics & getParameterElectronics()
const ParameterGas & getParameterGas()
void resetLocalCalibration()
Reset the local calibration.
const ParameterGEM & getParameterGEM()
DeadChannelMapCreator & getDeadChannelMapCreator()
Dead channel map creator.
void setThresholdMapFromFile(const std::string_view fileName)
const CalPadFlagType & getPadFlags()
Pad status flags from IDCs.
void setDefaultZSsigma(float zs)
void setUseDefaults(bool defaults=true)
const CalPad & getCalPad(const std::string_view path)
const CalPad & getGainMap()
void setFEEParamsFromFile(const std::string_view fileName)
bool getUseDefaults() const
return defaults usage
const CalPad & getPedestalsCRU()
void setPedestalsAndNoiseFromFile(const std::string_view fileName)
const FEEConfig & getFEEConfig()
Return FEEConfig.
CDBInterface(const CDBInterface &)=delete
T & getObjectFromCDB(std::string_view path)
read an object from CCDB
CalDet< PadFlags > CalPadFlagType
T & getSpecificObjectFromCDB(const std::string_view path, long timestamp=-1, const std::map< std::string, std::string > &metaData=std::map< std::string, std::string >())
void setTimeStamp(long time)
set CDB time stamp for object retrieval
void storeObject(T *obj, CDBType const type, long start, long end)
void setReason(std::string_view reason)
void setJIRA(std::string_view jira)
void setSimulate(bool sim=true)
void setRunNumber(int run)
void setIntervention(CDBIntervention const intervention)
void setURL(std::string_view url)
void setComment(std::string_view comment)
void setResponsible(std::string_view responsible)
const auto & getMetaData() const
void storeObject(T *obj, CDBType const type, MetaData_t const &metadata, long start, long end)
std::map< std::string, std::string > MetaData_t
bool getSimulate() const
void init(std::string_view url="")
GLuint GLuint end
Definition glcorearb.h:469
GLuint const GLchar * name
Definition glcorearb.h:781
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLsizei const GLchar *const * path
Definition glcorearb.h:3591
GLuint object
Definition glcorearb.h:4041
GLuint start
Definition glcorearb.h:469
Global TPC definitions and constants.
Definition SimTraits.h:167
const std::unordered_map< CDBType, const std::string > CDBTypeMap
Storage name in CCDB for each calibration and parameter type.
Definition CDBTypes.h:94
const std::unordered_map< CDBIntervention, std::string > CDBInterventionMap
Poor enum reflection ...
CDBIntervention
Upload intervention type.
@ Automatic
Automatic upload.
@ Manual
Upload from manual intervention.
CDBType
Calibration and parameter types for CCDB.
Definition CDBTypes.h:26
std::string to_string(gsl::span< T, Size > span)
Definition common.h:52