diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h index 3b0ac0c1d05f2..63462f90179b2 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/Scalers.h @@ -33,6 +33,7 @@ struct errorCounters { void printStream(std::ostream& stream) const; uint32_t lmB = 0, l0B = 0, l1B = 0, lmA = 0, l0A = 0, l1A = 0; // decreasing counters uint32_t lmBlmA = 0, lmAl0B = 0, l0Bl0A = 0, l0Al1B = 0, l1Bl1A = 0; // between levels countres + uint32_t lmBlmAd1 = 0, lmAl0Bd1 = 0, l0Bl0Ad1 = 0, l0Al1Bd1 = 0, l1Bl1Ad1 = 0; // between levels countres - diff =1 - just warning uint32_t MAXPRINT = 3; }; struct CTPScalerRaw { diff --git a/DataFormats/Detectors/CTP/src/Scalers.cxx b/DataFormats/Detectors/CTP/src/Scalers.cxx index 311ee0c38b296..728ef1493ee0f 100644 --- a/DataFormats/Detectors/CTP/src/Scalers.cxx +++ b/DataFormats/Detectors/CTP/src/Scalers.cxx @@ -21,6 +21,8 @@ using namespace o2::ctp; void errorCounters::printStream(std::ostream& stream) const { + stream << "Counter warnings diff 1 lmBlmA:" << lmBlmAd1 << " lmAl0B:" << lmAl0Bd1 << " l0Bl0A:" << l0Bl0Ad1 << " l0Al1B: " << l0Al1Bd1 << " l1Bl1A:" << l1Bl1Ad1; + stream << std::endl; stream << "Counter errorrs: lmB:" << lmB << " l0B:" << l0B << " l1B:" << l1B << " lmA:" << lmA << " l0A:" << l0A << " l1A:" << l1A; stream << " lmBlmA:" << lmBlmA << " lmAl0B:" << lmAl0B << " l0Bl0A:" << l0Bl0A << " l0Al1B: " << l0Al1B << " l1Bl1A:" << l1Bl1A; stream << std::endl; @@ -392,24 +394,34 @@ int CTPRunScalers::checkConsistency(const CTPScalerO2& scal0, const CTPScalerO2& // LMB >= LMA >= L0B >= L0A >= L1B >= L1A: 5 relations // broken for classes started at L0 // - if ((scal1.lmAfter - scal0.lmAfter) > (scal1.lmBefore - scal0.lmBefore)) { + int64_t difThres = 2; + int64_t dif = (scal1.lmAfter - scal0.lmAfter) - (scal1.lmBefore - scal0.lmBefore); + if (dif <= difThres) { + eCnts.lmBlmAd1++; + } else if (dif > difThres) { eCnts.lmBlmA++; if (eCnts.lmBlmA < eCnts.MAXPRINT) { - LOG(error) << "LMA > LMB error:" << ((scal1.lmAfter - scal0.lmAfter) - (scal1.lmBefore - scal0.lmBefore)); + LOG(error) << "LMA > LMB error:" << dif; } ret++; } - if ((scal1.l0After - scal0.l0After) > (scal1.l0Before - scal0.l0Before)) { + dif = (scal1.l0After - scal0.l0After) - (scal1.l0Before - scal0.l0Before); + if (dif <= difThres) { + eCnts.l0Bl0Ad1++; + } else if (dif > difThres) { eCnts.l0Bl0A++; if (eCnts.l0Bl0A < eCnts.MAXPRINT) { - LOG(error) << "L0A > L0B error:" << ((scal1.l0After - scal0.l0After) - (scal1.l0Before - scal0.l0Before)); + LOG(error) << "L0A > L0B error:" << dif; } ret++; } - if ((scal1.l1After - scal0.l1After) > (scal1.l1Before - scal0.l1Before)) { + dif = (scal1.l0After - scal0.l0After) - (scal1.l0Before - scal0.l0Before); + if (dif <= difThres) { + eCnts.l1Bl1Ad1++; + } else if (dif > difThres) { eCnts.l1Bl1A++; if (eCnts.l1Bl1A < eCnts.MAXPRINT) { - LOG(error) << "L1A > L1B error:" << ((scal1.l0After - scal0.l0After) - (scal1.l0Before - scal0.l0Before)); + LOG(error) << "L1A > L1B error:" << dif; } ret++; } @@ -417,10 +429,13 @@ int CTPRunScalers::checkConsistency(const CTPScalerO2& scal0, const CTPScalerO2& // LOG(warning) << "L0B > LMA ok if L0 class."; // ret++; } - if ((scal1.l1Before - scal0.l1Before) > (scal1.l0After - scal0.l0After)) { + dif = (scal1.l1Before - scal0.l1Before) - (scal1.l0After - scal0.l0After); + if (dif <= difThres) { + eCnts.l0Al1Bd1++; + } else if (dif > difThres) { eCnts.l0Al1B++; if (eCnts.l0Al1B < eCnts.MAXPRINT) { - LOG(error) << "L1B > L0A Before error:" << ((scal1.l1Before - scal0.l1Before) - (scal1.l0After - scal0.l0After)); + LOG(error) << "L1B > L0A Before error:" << dif; } ret++; } @@ -482,6 +497,14 @@ int CTPRunScalers::updateOverflows(const CTPScalerRaw& scal0, const CTPScalerRaw // int CTPRunScalers::updateOverflowsInps(const CTPScalerRecordRaw& rec0, const CTPScalerRecordRaw& rec1, std::array& overflow) const { + static int iPrint = 0; + if (mRunNumber < 545367) { + if (iPrint < 1) { + LOG(info) << "CTP Input scalers not available for run:" << mRunNumber; + iPrint++; + } + return 0; + } uint32_t NINPS = 48; if (rec0.scalersInps.size() < NINPS) { LOG(error) << "updateOverflowsInps.size < 48:" << rec0.scalersInps.size(); diff --git a/Detectors/CTP/macro/GetScalersForRun.C b/Detectors/CTP/macro/GetScalersForRun.C index e10d00e79c353..d1b977139ab02 100644 --- a/Detectors/CTP/macro/GetScalersForRun.C +++ b/Detectors/CTP/macro/GetScalersForRun.C @@ -87,25 +87,29 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) std::cout << cls.name << ":" << iznc << std::endl; } } - std::cout << "ZNC:"; - int inp = 26; - double_t nbc = bcs.size(); - double_t frev = 11245; - double_t sigmaratio = 28.; std::vector recs = ctpscalers->getScalerRecordO2(); - double_t time0 = recs[0].epochTime; - double_t timeL = recs[recs.size() - 1].epochTime; - double_t Trun = timeL - time0; - double_t integral = recs[recs.size() - 1].scalersInps[inp - 1] - recs[0].scalersInps[inp - 1]; - double_t rate = integral / Trun; - double_t rat = integral / Trun / nbc / frev; - double_t mu = -TMath::Log(1 - rat); - double_t pp = 1 - mu / (TMath::Exp(mu) - 1); - double_t ratepp = mu * nbc * frev; - double_t integralpp = ratepp * Trun; - std::cout << "Rate:" << rate / sigmaratio << " Integral:" << integral << " mu:" << mu << " Pileup prob:" << pp; - std::cout << " Integralpp:" << integralpp << " Ratepp:" << ratepp / sigmaratio << std::endl; - // ctpscalers->printInputRateAndIntegral(26); + if (recs[0].scalersInps.size() == 48) { + std::cout << "ZNC:"; + int inp = 26; + double_t nbc = bcs.size(); + double_t frev = 11245; + double_t sigmaratio = 28.; + double_t time0 = recs[0].epochTime; + double_t timeL = recs[recs.size() - 1].epochTime; + double_t Trun = timeL - time0; + double_t integral = recs[recs.size() - 1].scalersInps[inp - 1] - recs[0].scalersInps[inp - 1]; + double_t rate = integral / Trun; + double_t rat = integral / Trun / nbc / frev; + double_t mu = -TMath::Log(1 - rat); + double_t pp = 1 - mu / (TMath::Exp(mu) - 1); + double_t ratepp = mu * nbc * frev; + double_t integralpp = ratepp * Trun; + std::cout << "Rate:" << rate / sigmaratio << " Integral:" << integral << " mu:" << mu << " Pileup prob:" << pp; + std::cout << " Integralpp:" << integralpp << " Ratepp:" << ratepp / sigmaratio << std::endl; + // ctpscalers->printInputRateAndIntegral(26); + } else { + std::cout << "Inputs not available" << std::endl; + } // if (tsc != 255) { std::cout << "TSC:"; @@ -122,7 +126,7 @@ void GetScalersForRun(int runNumber = 0, int fillN = 0, bool test = 1) } if (iznc != 255) { std::cout << "ZNC class:"; - int integral = recs[recs.size() - 1].scalers[iznc].l1After - recs[0].scalers[iznc].l1After; + int64_t integral = recs[recs.size() - 1].scalers[iznc].l1After - recs[0].scalers[iznc].l1After; std::cout << integral << std::endl; } }