11 #include <framework/logging/Logger.h>
13 #include <arich/dbobjects/ARICHModulesInfo.h>
20 ARICHModulesInfo::ARICHModulesInfo()
22 m_ChannelQE.assign(N_HAPDS * N_CHANNELS, 0);
23 std::fill_n(m_installed, N_HAPDS,
false);
24 std::fill_n(m_active, N_HAPDS,
false);
27 double ARICHModulesInfo::getChannelQE(
unsigned moduleID,
unsigned channelID)
const
29 if (moduleID > N_HAPDS
30 || channelID > N_CHANNELS - 1) B2ERROR(
"ARICHModulesInfo::getChannelQE: module ID or channel ID out of range");
32 int id = (moduleID - 1) * N_CHANNELS + channelID;
33 return (
double)m_ChannelQE[id] / 100.0;
36 void ARICHModulesInfo::setChannelQE(
unsigned modId,
unsigned chId,
double qe)
38 if (modId > N_HAPDS || chId > N_CHANNELS - 1) B2ERROR(
"ARICHModulesInfo::setChannelQE: module ID or channel ID out of range");
40 int chid = (modId - 1) * N_CHANNELS + chId;
41 m_ChannelQE[chid] = uint8_t(qe * 100 + 0.5);
44 void ARICHModulesInfo::addModule(
unsigned modId, std::vector<float>& qeList,
bool active)
47 if (modId > N_HAPDS) B2ERROR(
"ARICHModulesInfo::addModule: module ID is out of range");
48 if (qeList.size() != N_CHANNELS) B2ERROR(
"ARICHModulesInfo::addModule: incomplete list of channels QEs");
50 m_installed[modId - 1] =
true;
51 m_active[modId - 1] = active;
53 std::vector<uint8_t>::iterator it = m_ChannelQE.begin() + (modId - 1) * N_CHANNELS;
54 for (
auto qe : qeList) {
55 *it = uint8_t(qe + 0.5);
60 bool ARICHModulesInfo::isInstalled(
unsigned modId)
const
62 if (modId > N_HAPDS) B2ERROR(
"ARICHModulesInfo::isInstalled: module ID is out of range");
64 return m_installed[modId - 1];
67 bool ARICHModulesInfo::isActive(
unsigned modId)
const
69 if (modId > N_HAPDS) B2ERROR(
"ARICHModulesInfo::isActive: module ID is out of range");
71 return m_active[modId - 1];
74 void ARICHModulesInfo::print()
const
76 cout <<
"ARICHModulesInfo: " << endl;
77 cout <<
" Modules status " << endl;
78 cout <<
" ID / installed / active / avg. QE" << endl;
80 for (
int i = 1; i < N_HAPDS + 1; i++) {
81 cout << right << setfill(
' ') << setw(4) << i <<
": ";
82 if (isInstalled(i)) cout << 1;
85 if (isActive(i)) cout << 1;
88 for (
int j = 0; j < N_CHANNELS; j++) {
89 double chQE = getChannelQE(i, j);
91 if (chQE > maxQE) maxQE = chQE;
93 avgQE /= double(N_CHANNELS);
94 cout <<
" " << left << setfill(
'0') << setw(4) << setprecision(2) << avgQE <<
" ";
95 if ((i) % 10 == 0) cout << endl;
97 cout <<
" Maximal channel QE: " << maxQE << endl;