Project
Loading...
Searching...
No Matches
DCSProcessor.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
12#ifndef DETECTOR_TRDDCSPROCESSOR_H_
13#define DETECTOR_TRDDCSPROCESSOR_H_
14
15#include "Framework/Logger.h"
20#include "CCDB/CcdbObjectInfo.h"
24
25#include "CCDB/CcdbApi.h"
26#include <Rtypes.h>
27#include <unordered_map>
28#include <string>
29#include <bitset>
30#include <gsl/gsl>
31
33
34namespace o2
35{
36namespace trd
37{
38
42
44{
45
46 public:
47 using TFType = uint64_t;
49
50 DCSProcessor() = default;
51 ~DCSProcessor() = default;
52
53 // initialization based on configured DP IDs
54 void init(const std::vector<DPID>& pids);
55
56 // processing methods
57 int process(const gsl::span<const DPCOM> dps);
58 int processDP(const DPCOM& dpcom);
59 int processFlags(uint64_t flag, const char* pid);
60
61 // these functions prepare the CCDB objects
62 bool updateGasDPsCCDB();
65 bool updateEnvDPsCCDB();
68
69 // signal that the CCDB object for the voltages should be updated due to change exceeding threshold
70 bool shouldUpdateVoltages() const { return mShouldUpdateVoltages; }
71 // LB: Only update ChamberStatus/CFGtag if both conditions are met (complete DPs and new run)
72 bool shouldUpdateFedChamberStatus() const { return mFedChamberStatusCompleteDPs && mFirstRunEntryForFedChamberStatusUpdate; }
73 bool shouldUpdateFedCFGtag() const { return mFedCFGtagCompleteDPs && mFirstRunEntryForFedCFGtagUpdate; }
74 // LB: Env DPs have no alias pattern, processor uses this function to identify if alias is Env
75 bool isAliasFromEnvDP(const char* dpalias) const
76 {
77 std::vector<std::string> envaliases = {"CavernTemperature", "temperature_P2_external", "AtmosPressure", "UXC2Humidity"};
78 for (const auto& envalias : envaliases) {
79 if (std::strstr(dpalias, envalias.c_str()) != nullptr) {
80 return true;
81 }
82 }
83 return false;
84 }
85
86 // allow access to the CCDB objects from DPL processor
87 CcdbObjectInfo& getccdbGasDPsInfo() { return mCcdbGasDPsInfo; }
88 CcdbObjectInfo& getccdbVoltagesDPsInfo() { return mCcdbVoltagesDPsInfo; }
89 CcdbObjectInfo& getccdbCurrentsDPsInfo() { return mCcdbCurrentsDPsInfo; }
90 CcdbObjectInfo& getccdbEnvDPsInfo() { return mCcdbEnvDPsInfo; }
91 CcdbObjectInfo& getccdbFedChamberStatusDPsInfo() { return mCcdbFedChamberStatusDPsInfo; }
92 CcdbObjectInfo& getccdbFedCFGtagDPsInfo() { return mCcdbFedCFGtagDPsInfo; }
93
94 const std::unordered_map<DPID, TRDDCSMinMaxMeanInfo>& getTRDGasDPsInfo() const { return mTRDDCSGas; }
95 const std::unordered_map<DPID, float>& getTRDVoltagesDPsInfo() const { return mTRDDCSVoltages; }
96 const std::unordered_map<DPID, TRDDCSMinMaxMeanInfo>& getTRDCurrentsDPsInfo() const { return mTRDDCSCurrents; }
97 const std::unordered_map<DPID, TRDDCSMinMaxMeanInfo>& getTRDEnvDPsInfo() const { return mTRDDCSEnv; }
98 const std::array<int, constants::MAXCHAMBER>& getTRDFedChamberStatusDPsInfo() const { return mTRDDCSFedChamberStatus; }
99 const std::array<string, constants::MAXCHAMBER>& getTRDFedCFGtagDPsInfo() const { return mTRDDCSFedCFGtag; }
100
101 // settings
102 void setCurrentTS(TFType tf) { mCurrentTS = tf; }
103 void setVerbosity(int v) { mVerbosity = v; }
104 void setMaxCounterAlarmFed(int alarmfed) { mFedAlarmCounterMax = alarmfed; }
105 void setFedMinimunDPsForUpdate(int minupdatefed) { mFedMinimunDPsForUpdate = minupdatefed; }
106 void setUVariationTriggerForUpdate(float utrigger) { mUVariationTriggerForUpdate = utrigger; }
107
108 // reset methods
109 void clearGasDPsInfo();
112 void clearEnvDPsInfo();
116
117 // helper functions
118 int getChamberIdFromAlias(const char* alias) const;
119
120 private:
121 // the CCDB objects
122 std::unordered_map<DPID, TRDDCSMinMaxMeanInfo> mTRDDCSGas;
123 std::unordered_map<DPID, TRDDCSMinMaxMeanInfo> mTRDDCSCurrents;
124 std::unordered_map<DPID, float> mTRDDCSVoltages;
125 std::unordered_map<DPID, TRDDCSMinMaxMeanInfo> mTRDDCSEnv;
126 std::array<int, constants::MAXCHAMBER> mTRDDCSFedChamberStatus;
127 std::array<string, constants::MAXCHAMBER> mTRDDCSFedCFGtag;
128
129 // helper variables
130 std::unordered_map<DPID, bool> mPids;
131 std::unordered_map<DPID, uint64_t> mLastDPTimeStamps;
132 CcdbObjectInfo mCcdbGasDPsInfo;
133 CcdbObjectInfo mCcdbVoltagesDPsInfo;
134 CcdbObjectInfo mCcdbCurrentsDPsInfo;
135 CcdbObjectInfo mCcdbEnvDPsInfo;
136 CcdbObjectInfo mCcdbFedChamberStatusDPsInfo;
137 CcdbObjectInfo mCcdbFedCFGtagDPsInfo;
138
139 TFType mGasStartTS;
140 TFType mVoltagesStartTS;
141 TFType mCurrentsStartTS;
142 TFType mEnvStartTS;
143 TFType mFedChamberStatusStartTS;
144 TFType mFedCFGtagStartTS;
145 TFType mCurrentTS{0};
146 bool mGasStartTSset{false};
147 bool mVoltagesStartTSSet{false};
148 bool mCurrentsStartTSSet{false};
149 bool mEnvStartTSSet{false};
150 bool mFedChamberStatusStartTSSet{false};
151 bool mFedCFGtagStartTSSet{false};
152 std::bitset<constants::MAXCHAMBER> mVoltageSet{};
153 bool mShouldUpdateVoltages{false};
154 // LB: FedChamberStatus and FedCFGtag logic
155 bool mFedChamberStatusCompleteDPs{false};
156 bool mFedCFGtagCompleteDPs{false};
157 bool mFirstRunEntryForFedChamberStatusUpdate{false};
158 bool mFirstRunEntryForFedCFGtagUpdate{false};
159 int mCurrentRunNumber{-1};
160 int mFedChamberStatusAlarmCounter{0};
161 int mFedCFGtagAlarmCounter{0};
162
163 // settings
164 int mVerbosity{0};
165 int mFedAlarmCounterMax{1};
166 int mFedMinimunDPsForUpdate{522};
167 float mUVariationTriggerForUpdate{1.0};
168
169 ClassDefNV(DCSProcessor, 0);
170};
171
172} // namespace trd
173} // namespace o2
174
175#endif
Global TRD definitions and constants.
Objects which are created from DCS DPs and stored in the CCDB.
const std::unordered_map< DPID, TRDDCSMinMaxMeanInfo > & getTRDGasDPsInfo() const
const std::unordered_map< DPID, float > & getTRDVoltagesDPsInfo() const
CcdbObjectInfo & getccdbCurrentsDPsInfo()
CcdbObjectInfo & getccdbFedCFGtagDPsInfo()
int getChamberIdFromAlias(const char *alias) const
void setMaxCounterAlarmFed(int alarmfed)
void setFedMinimunDPsForUpdate(int minupdatefed)
bool shouldUpdateFedCFGtag() const
bool isAliasFromEnvDP(const char *dpalias) const
CcdbObjectInfo & getccdbVoltagesDPsInfo()
void init(const std::vector< DPID > &pids)
bool shouldUpdateVoltages() const
CcdbObjectInfo & getccdbEnvDPsInfo()
const std::array< string, constants::MAXCHAMBER > & getTRDFedCFGtagDPsInfo() const
int processFlags(uint64_t flag, const char *pid)
CcdbObjectInfo & getccdbGasDPsInfo()
void setUVariationTriggerForUpdate(float utrigger)
const std::unordered_map< DPID, TRDDCSMinMaxMeanInfo > & getTRDEnvDPsInfo() const
CcdbObjectInfo & getccdbFedChamberStatusDPsInfo()
bool shouldUpdateFedChamberStatus() const
int processDP(const DPCOM &dpcom)
void setCurrentTS(TFType tf)
const std::unordered_map< DPID, TRDDCSMinMaxMeanInfo > & getTRDCurrentsDPsInfo() const
const std::array< int, constants::MAXCHAMBER > & getTRDFedChamberStatusDPsInfo() const
const GLdouble * v
Definition glcorearb.h:832
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::unique_ptr< GPUReconstructionTimeframe > tf