120 auto& dpid = dpcom.
id;
123 if (mVerboseDP || mVerboseHVLV) {
126 LOG(info) <<
"Processing DP = " << dpcom <<
", with value = " << o2::dcs::getValue<double>(dpcom) <<
", epoch time = " <<
val.get_epoch_time();
129 LOG(info) <<
"Processing DP = " << dpcom <<
", with value = " << o2::dcs::getValue<int32_t>(dpcom);
137 auto& dvect = mDpsdoublesmap[dpid];
139 LOG(
debug) <<
"mDpsdoublesmap[dpid].size() = " << dvect.size();
141 auto etime =
val.get_epoch_time();
142 if (dvect.size() == 0 ||
143 etime != dvect.back().get_epoch_time()) {
147 dvect.push_back(
val);
153 if (std::strstr(dpid.get_alias(),
"FEACSTATUS") !=
nullptr) {
154 std::string aliasStr(dpid.get_alias());
156 const auto offs = std::strlen(
"TOF_FEACSTATUS_");
157 std::size_t
const nn = aliasStr.find_first_of(
"0123456789", offs);
158 std::size_t
const mm = aliasStr.find_first_not_of(
"0123456789", nn);
159 std::string ddlStr = aliasStr.substr(nn, mm != std::string::npos ? mm - nn : mm);
160 auto iddl = std::stoi(ddlStr);
161 std::bitset<8> feacstatus(o2::dcs::getValue<int32_t>(dpcom));
163 LOG(info) <<
"DDL: " << iddl <<
": Prev FEAC = " << mPrevFEACstatus[iddl] <<
", new = " << feacstatus;
165 if (feacstatus == mPrevFEACstatus[iddl]) {
167 LOG(info) <<
"Same FEAC status as before, we do nothing";
172 LOG(info) <<
"Something changed in LV for DDL " << iddl <<
", we need to check what";
174 mUpdateFeacStatus =
true;
175 int plate = -1, strip = -1;
176 int det[5] = {iddl / 4, -1, -1, -1, -1};
177 for (
auto ifeac = 0; ifeac <
NFEACS; ++ifeac) {
178 auto singlefeacstatus = feacstatus[ifeac];
179 for (
int istrip = 0; istrip < 6; ++istrip) {
180 if (mFeacInfo[iddl][ifeac].stripInSM[istrip] == -1) {
183 for (
int ipadz = 0; ipadz <
Geo::NPADZ; ++ipadz) {
184 for (
int ipadx = mFeacInfo[iddl][ifeac].firstPadX; ipadx <= mFeacInfo[iddl][ifeac].lastPadX; ++ipadx) {
186 LOG(info) <<
"mFeacInfo[" << iddl <<
"][" << ifeac <<
"].stripInSM[" << istrip <<
"] = " << mFeacInfo[iddl][ifeac].stripInSM[istrip];
194 LOG(info) <<
"det[0] = " << det[0] <<
", det[1] = " << det[1] <<
", det[2] = " << det[2] <<
", det[3] = " << det[3] <<
", det[4] = " << det[4];
197 if (mFeac[channelIdx] != singlefeacstatus) {
198 mFeac[channelIdx] = singlefeacstatus;
205 LOG(info) <<
"Updating previous FEAC status for DDL " << iddl;
207 mPrevFEACstatus[iddl] = feacstatus;
210 if (std::strstr(dpid.get_alias(),
"HVSTATUS") !=
nullptr) {
211 std::string aliasStr(dpid.get_alias());
213 const auto offs = std::strlen(
"TOF_HVSTATUS_SM");
214 std::size_t
const nn = aliasStr.find_first_of(
"0123456789", offs);
215 std::size_t
const mm = aliasStr.find_first_not_of(
"0123456789", nn);
216 std::size_t
const oo = aliasStr.find_first_of(
"0123456789", mm);
217 std::size_t
const pp = aliasStr.find_first_not_of(
"0123456789", oo);
218 std::string sectorStr = aliasStr.substr(nn, mm != std::string::npos ? mm - nn : mm);
219 auto isect = std::stoi(sectorStr);
220 std::string plateStr = aliasStr.substr(oo, pp != std::string::npos ? pp - oo : pp);
221 auto iplat = std::stoi(plateStr);
222 std::bitset<19> hvstatus(o2::dcs::getValue<int32_t>(dpcom));
224 LOG(info) <<
"Sector: " << isect <<
", plate = " << iplat <<
": Prev HV = "
225 << mPrevHVstatus[iplat][isect] <<
", new = " << hvstatus;
227 if (hvstatus == mPrevHVstatus[iplat][isect]) {
229 LOG(info) <<
"Same HV status as before, we do nothing";
234 LOG(info) <<
"Something changed in HV for Sect " << isect <<
" and plate "
235 << iplat <<
", we need to check what";
237 mUpdateHVStatus =
true;
238 int det[5] = {isect, iplat, -1, -1, -1};
240 for (
auto istrip = 0; istrip < nStrips; ++istrip) {
241 auto singlestripHV = hvstatus[istrip];
242 for (
int ipadz = 0; ipadz <
Geo::NPADZ; ++ipadz) {
243 for (
int ipadx = 0; ipadx <
Geo::NPADX; ++ipadx) {
248 if (mHV[channelIdx] != singlestripHV) {
249 mHV[channelIdx] = singlestripHV;
255 LOG(info) <<
"Updating previous HV status for Sector: " << isect <<
", plate = " << iplat;
257 mPrevHVstatus[iplat][isect] = hvstatus;
334 LOG(info) <<
"Finalizing";
338 } converter0, converter1;
340 for (
auto& it : mPids) {
341 const auto&
type = it.first.get_type();
343 auto& tofdcs = mTOFDCS[it.first];
346 LOG(info) <<
"Processing DP " << it.first.get_alias();
349 tofdcs.updated =
true;
350 auto& dpvect = mDpsdoublesmap[it.first];
351 tofdcs.firstValue.first = dpvect[0].get_epoch_time();
352 converter0.raw_data = dpvect[0].payload_pt1;
353 tofdcs.firstValue.second = converter0.double_value;
354 tofdcs.lastValue.first = dpvect.back().get_epoch_time();
355 converter0.raw_data = dpvect.back().payload_pt1;
356 tofdcs.lastValue.second = converter0.double_value;
358 for (
const auto& el : dpvect) {
359 converter0.raw_data = el.payload_pt1;
360 if (converter0.double_value < tofdcs.minValue.second) {
361 tofdcs.minValue.first = el.get_epoch_time();
362 tofdcs.minValue.second = converter0.double_value;
364 if (converter0.double_value > tofdcs.maxValue.second) {
365 tofdcs.maxValue.first = el.get_epoch_time();
366 tofdcs.maxValue.second = converter0.double_value;
370 if (dpvect.size() > 1) {
371 auto deltatime = dpvect.back().get_epoch_time() - dpvect[0].get_epoch_time();
372 if (deltatime < 60000) {
375 converter0.raw_data = dpvect[0].payload_pt1;
376 converter1.raw_data = dpvect.back().payload_pt1;
377 double delta = converter0.double_value - converter1.double_value;
378 tofdcs.maxChange.first[0] = dpvect[0].get_epoch_time();
379 tofdcs.maxChange.first[1] = dpvect.back().get_epoch_time();
380 tofdcs.maxChange.second = delta;
382 for (
auto i = 0;
i < dpvect.size() - 1; ++
i) {
383 for (
auto j =
i + 1;
j < dpvect.size(); ++
j) {
384 auto deltatime = dpvect[
j].get_epoch_time() - dpvect[
i].get_epoch_time();
385 if (deltatime >= 60000) {
386 converter0.raw_data = dpvect[
i].payload_pt1;
387 converter1.raw_data = dpvect[
j].payload_pt1;
388 double delta = converter0.double_value - converter1.double_value;
389 if (std::abs(delta) > std::abs(tofdcs.maxChange.second)) {
390 tofdcs.maxChange.first[0] = dpvect[
i].get_epoch_time();
391 tofdcs.maxChange.first[1] = dpvect[
j].get_epoch_time();
392 tofdcs.maxChange.second = delta;
399 auto midIdx = dpvect.size() / 2 - 1;
400 tofdcs.midValue.first = dpvect[midIdx].get_epoch_time();
401 converter0.raw_data = dpvect[midIdx].payload_pt1;
402 tofdcs.midValue.second = converter0.double_value;
404 tofdcs.maxChange.first[0] = dpvect[0].get_epoch_time();
405 tofdcs.maxChange.first[1] = dpvect[0].get_epoch_time();
406 converter0.raw_data = dpvect[0].payload_pt1;
407 tofdcs.maxChange.second = converter0.double_value;
408 tofdcs.midValue.first = dpvect[0].get_epoch_time();
409 converter0.raw_data = dpvect[0].payload_pt1;
410 tofdcs.midValue.second = converter0.double_value;
413 tofdcs.updated =
false;
416 LOG(info) <<
"PID " << it.first.get_alias() <<
" was updated to:";
422 LOG(info) <<
"Printing object to be sent to CCDB";
423 for (
auto& it : mPids) {
424 const auto&
type = it.first.get_type();
426 LOG(info) <<
"PID = " << it.first.get_alias();
427 auto& tofdcs = mTOFDCS[it.first];
434 std::map<std::string, std::string> md;
435 md[
"responsible"] =
"Chiara Zampolli";
492 for (
int ii = 0; ii < 6; ++ii) {
495 }
else if (nFEAC == 3) {
496 for (
int ii = 0; ii < 5; ++ii) {
499 }
else if (nFEAC == 4) {
500 for (
int ii = 0; ii < 6; ++ii) {
503 }
else if (nFEAC == 5) {
504 for (
int ii = 0; ii < 5; ++ii) {
507 }
else if (nFEAC == 6) {
508 for (
int ii = 0; ii < 6; ++ii) {
511 }
else if (nFEAC == 7) {
512 for (
int ii = 0; ii < 5; ++ii) {
523 for (
int ii = 0; ii < 6; ++ii) {
526 }
else if (nFEAC == 3) {
527 for (
int ii = 0; ii < 5; ++ii) {
530 }
else if (nFEAC == 4) {
531 for (
int ii = 0; ii < 6; ++ii) {
534 }
else if (nFEAC == 5) {
535 for (
int ii = 0; ii < 6; ++ii) {
538 }
else if (nFEAC == 6) {
539 for (
int ii = 0; ii < 5; ++ii) {
542 }
else if (nFEAC == 7) {
543 for (
int ii = 0; ii < 6; ++ii) {
554 for (
int ii = 0; ii < 6; ++ii) {
555 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC);
557 }
else if (nFEAC == 3) {
558 for (
int ii = 0; ii < 5; ++ii) {
559 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC);
561 }
else if (nFEAC == 4) {
562 for (
int ii = 0; ii < 6; ++ii) {
563 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC - 1);
565 }
else if (nFEAC == 5) {
566 for (
int ii = 0; ii < 5; ++ii) {
567 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC - 1);
569 }
else if (nFEAC == 6) {
570 for (
int ii = 0; ii < 6; ++ii) {
571 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC - 2);
573 }
else if (nFEAC == 7) {
574 for (
int ii = 0; ii < 5; ++ii) {
575 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC - 2);
585 for (
int ii = 0; ii < 6; ++ii) {
586 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC);
588 }
else if (nFEAC == 3) {
589 for (
int ii = 0; ii < 5; ++ii) {
590 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC);
592 }
else if (nFEAC == 4) {
593 for (
int ii = 0; ii < 6; ++ii) {
594 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC - 1);
596 }
else if (nFEAC == 5) {
597 for (
int ii = 0; ii < 6; ++ii) {
598 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC - 1);
600 }
else if (nFEAC == 6) {
601 for (
int ii = 0; ii < 5; ++ii) {
602 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC - 1);
604 }
else if (nFEAC == 7) {
605 for (
int ii = 0; ii < 6; ++ii) {
606 info.
stripInSM[ii] = 90 - (ii + 6 * nFEAC - 2);
613 for (
int ii = 0; ii < 6; ++ii) {
614 LOG(info) <<
"nDDL = " << nDDL <<
", nFEAC = " << nFEAC <<
", stripInSM[" << ii <<
"] = " << info.
stripInSM[ii];