diff --git a/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx b/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx index e859e7341f4a62ae43b9684974587417bf653937..a53ac33d897352472fac6e3a087fa21e140f9469 100644 --- a/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx +++ b/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx @@ -1732,8 +1732,9 @@ double_t CbmTofUnpackMonitor::ExtractQFactor(TH1* pHistoIn) { // Q-Factor = Max Bin Content / Mean Content of all bin in range // => Tend toward 1 if bins are more identical - if (pHistoIn->Integral()) { - return (pHistoIn->GetBinContent(pHistoIn->GetMaximumBin())) / (pHistoIn->Integral() / pHistoIn->GetNbinsX()); + double_t mean = ExtractMean(pHistoIn); + if (0.0 < mean) { + return (pHistoIn->GetBinContent(pHistoIn->GetMaximumBin())) / mean; } else { return 0.0; @@ -1741,9 +1742,8 @@ double_t CbmTofUnpackMonitor::ExtractQFactor(TH1* pHistoIn) } double_t CbmTofUnpackMonitor::ExtractMean(TH1* pHistoIn) { - // Q-Factor = Max Bin Content / Mean Content of all bin in range - // => Tend toward 1 if bins are more identical - if (pHistoIn->Integral()) { + // Mean bin content, special case for histo with single entries to avoid unrealistic Q-Factors + if (pHistoIn->Integral() && 1 < pHistoIn->GetEntries()) { return (pHistoIn->Integral() / pHistoIn->GetNbinsX()); } else { @@ -1811,7 +1811,11 @@ void CbmTofUnpackMonitor::FinalizeTsBmonQfactorHistos(uint64_t uTsTimeNs, std::v fvuQfactorIdxHistoCycleinTS.assign(fvdQfactorIntegrationNs.size(), 0); if (vDigis && 0 < vDigis->size()) { for (auto it = vDigis->begin(); it != vDigis->end(); ++it) { - FillHitBmonQfactorHistos(uTsTimeNs, (*it).GetTime()); + // Filter out pulser digis + if ((0 != (*it).GetChannel() % 4) || ((*it).GetCharge() < fuMinTotPulser) + || (fuMaxTotPulser < (*it).GetCharge())) { + FillHitBmonQfactorHistos(uTsTimeNs, (*it).GetTime()); + } } }