diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx index 0b14f1c582ae78b20c848e3dd363bff49723f51f..cdcc1f1cfd86abed19b553b5c7da91749ef676e4 100644 --- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx +++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx @@ -39,9 +39,13 @@ CbmMcbm2018MonitorAlgoPsd::CbmMcbm2018MonitorAlgoPsd() , /// From the class itself fbMonitorMode(kFALSE) + , fbMonitorChanMode(kFALSE) + , fbMonitorWfmMode(kFALSE) + , fbMonitorFitMode(kFALSE) , fbDebugMonitorMode(kTRUE) , fvbMaskedComponents() , fbFirstPackageError(kTRUE) + , fbPsdMissedData(kFALSE) , fUnpackPar(nullptr) , fuNrOfGdpbs(0) , fGdpbIdIndexMap() @@ -51,68 +55,47 @@ CbmMcbm2018MonitorAlgoPsd::CbmMcbm2018MonitorAlgoPsd() , fulCurrentTsIdx(0) , fulCurrentMsIdx(0) , fdTsStartTime(-1.0) - , fdTsStopTimeCore(-1.0) , fdMsTime(-1.0) , fdPrevMsTime(-1.0) , fuMsIndex(0) , fuCurrentEquipmentId(0) , fuCurrDpbId(0) , fuCurrDpbIdx(0) - , fiRunStartDateTimeSec(-1) - , fiBinSizeDatePlots(-1) - , fvulCurrentEpoch() - , fvulCurrentEpochCycle() - , fvulCurrentEpochFull() , fdStartTime(-1.0) - , fdStartTimeMsSz(0.0) , ftStartTimeUnix(std::chrono::steady_clock::now()) , fuHistoryHistoSize(3600) , fviHistoChargeArgs(3, 0) , fviHistoAmplArgs(3, 0) , fviHistoZLArgs(3, 0) - , fuReadEvtCnt(0) , fuMsgsCntInMs(0) , fuReadMsgsCntInMs(0) , fuLostMsgsCntInMs(0) , fuReadEvtCntInMs(0) - , fvuHitCntChanMs(kuNbChanPsd, 0) - , fvuErrorCntChanMs(kuNbChanPsd, 0) - , fvuEvtLostCntChanMs(kuNbChanPsd, 0) - , fvhHitCntEvoChan(kuNbChanPsd, nullptr) - , fvhHitCntPerMsEvoChan(kuNbChanPsd, nullptr) , fvhHitChargeChan(kuNbChanPsd, nullptr) , fvhHitZeroLevelChan(kuNbChanPsd, nullptr) , fvhHitAmplChan(kuNbChanPsd, nullptr) , fvhHitChargeByWfmChan(kuNbChanPsd, nullptr) - , fvhHitChargeEvoChan(kuNbChanPsd, nullptr) , fvhHitWfmChan(kuNbChanPsd, nullptr) - , fvhHitFitWfmChan(kuNbChanPsd, nullptr) , kvuWfmRanges(kuNbWfmRanges, 0) , kvuWfmInRangeToChangeChan(kuNbChanPsd * kuNbWfmRanges, 0) - , fv3hHitWfmFlattenedChan(kuNbChanPsd * kuNbWfmRanges * kuNbWfmExamples, - nullptr) + , fv3hHitWfmFlattenedChan(kuNbChanPsd * kuNbWfmRanges * kuNbWfmExamples, nullptr) , fbSpillOn(kTRUE) , fuCurrentSpillIdx(0) , fuCurrentSpillPlot(0) , fdStartTimeSpill(-1.0) , fdLastSecondTime(-1.0) , fuCountsLastSecond(0) - , fhChannelMap(nullptr) , fhHitChargeMap(nullptr) , fhHitMapEvo(nullptr) , fhChanHitMapEvo(nullptr) - , fvhChannelMapSpill() - , fhHitsPerSpill(nullptr) - , fhMsgsCntEvo(nullptr) - , fhReadMsgsCntEvo(nullptr) - , fhLostMsgsCntEvo(nullptr) - , fhReadEvtsCntEvo(nullptr) - , fhAdcTimeEvo(nullptr) + , fhMissedData(nullptr) + , fhAdcTime(nullptr) , fhMsLengthEvo(nullptr) , fhMsgsCntPerMsEvo(nullptr) , fhReadMsgsCntPerMsEvo(nullptr) , fhLostMsgsCntPerMsEvo(nullptr) , fhReadEvtsCntPerMsEvo(nullptr) + , fvhHitFitWfmChan(kuNbChanPsd, nullptr) , fvhFitHarmonic1Chan(kuNbChanPsd, nullptr) , fvhFitHarmonic2Chan(kuNbChanPsd, nullptr) , fvhFitQaChan(kuNbChanPsd, nullptr) @@ -121,11 +104,12 @@ CbmMcbm2018MonitorAlgoPsd::CbmMcbm2018MonitorAlgoPsd() , fcChargesFPGA(nullptr) , fcChargesWfm(nullptr) , fcAmplitudes(nullptr) + , fcZeroLevels(nullptr) , fcGenCntsPerMs(nullptr) - , fcSpillCounts(nullptr) - , fcSpillCountsHori(nullptr) , fcWfmsAllChannels(nullptr) - , fvcWfmsChan(kuNbChanPsd, nullptr) {} + , fvcWfmsChan(kuNbChanPsd, nullptr) +{ +} CbmMcbm2018MonitorAlgoPsd::~CbmMcbm2018MonitorAlgoPsd() { /// Clear buffers } @@ -188,10 +172,6 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::InitParameters() { << fUnpackPar->GetGdpbId(i) << std::dec; } // for( UInt_t i = 0; i < fuNrOfGdpbs; ++i ) - /// Internal status initialization - fvulCurrentEpoch.resize(fuNrOfGdpbs, 0); - fvulCurrentEpochCycle.resize(fuNrOfGdpbs, 0); - fvulCurrentEpochFull.resize(fuNrOfGdpbs, 0); return kTRUE; } @@ -240,10 +220,6 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessTs(const fles::Timeslice& ts) { LOG(info) << "In each TS " << fuNbMsLoop << " MS will be looped over"; } // if( -1.0 == fdTsCoreSizeInNs ) - /// Compute time of TS core end - fdTsStopTimeCore = fdTsStartTime + fdTsCoreSizeInNs; - // LOG(info) << Form( "TS %5d Start %12f Stop %12f", fulCurrentTsIdx, fdTsStartTime, fdTsStopTimeCore ); - /// Loop over core microslices (and overlap ones if chosen) for (fuMsIndex = 0; fuMsIndex < fuNbMsLoop; fuMsIndex++) { /// Loop over registered components @@ -334,10 +310,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, if (fbSpillOn && fuCountsLastSecond < kuOffSpillCountLimit) { fbSpillOn = kFALSE; fuCurrentSpillIdx++; - fuCurrentSpillPlot = (fuCurrentSpillPlot + 1) % kuNbSpillPlots; fdStartTimeSpill = fdMsTime; - fvhChannelMapSpill[fuCurrentSpillPlot]->Reset(); - fhHitsPerSpill->SetBinContent(fuCurrentSpillPlot + 1, 0); } // if( fbSpillOn && fuCountsLastSecond < kuOffSpillCountLimit ) else if (kuOffSpillCountLimit < fuCountsLastSecond) fbSpillOn = kTRUE; @@ -384,13 +357,6 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, } } - kvuWfmRanges.clear(); - for (uint8_t i = 0; i <= kuNbWfmRanges; ++i) - kvuWfmRanges.push_back( - fviHistoChargeArgs.at(1) - + i * (fviHistoChargeArgs.at(2) - fviHistoChargeArgs.at(1)) - / kuNbWfmRanges); - PsdData::PsdGbtReader PsdReader(pInBuff); if (gLogger->IsLogNeeded(fair::Severity::debug)) PsdReader.SetPrintOutMode(true); @@ -406,11 +372,9 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, if (ReadResult == 0) { fuCountsLastSecond++; - fhAdcTimeEvo->Fill(fdMsTime - fdStartTime, PsdReader.EvHdrAc.uAdcTime); - fuReadEvtCnt++; + fhAdcTime->Fill(PsdReader.EvHdrAc.uAdcTime); fuReadEvtCntInMs++; - fhHitsPerSpill->AddBinContent(fuCurrentSpillPlot + 1, - PsdReader.EvHdrAb.uHitsNumber); + //hit loop for (int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) { @@ -427,112 +391,94 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, break; } //Hit header - fhChannelMap->Fill(uHitChannel); fhHitChargeMap->Fill(uHitChannel, uSignalCharge); - fvhChannelMapSpill[fuCurrentSpillPlot]->Fill( - uHitChannel); //should be placed map(channel) fhHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime); fhChanHitMapEvo->Fill( uHitChannel, fdMsTime - fdStartTime); //should be placed map(channel) - fvhHitCntEvoChan[uHitChannel]->Fill(fdMsTime - fdStartTime); - fvuHitCntChanMs[uHitChannel]++; - - fvhHitChargeChan[uHitChannel]->Fill(uSignalCharge); - fvhHitZeroLevelChan[uHitChannel]->Fill(uZeroLevel); - fvhHitChargeEvoChan[uHitChannel]->Fill(fdMsTime - fdStartTime, - uSignalCharge); - - //Hit data - uint16_t uHitAmlpitude = 0; - uint16_t uHitChargeWfm = 0; - fvhHitWfmChan[uHitChannel]->Reset(); - fvhHitFitWfmChan[uHitChannel]->Reset(); - for (UInt_t wfm_iter = 0; wfm_iter < uWfm.size(); wfm_iter++) { - if (uWfm.at(wfm_iter) > uHitAmlpitude) - uHitAmlpitude = uWfm.at(wfm_iter); - uHitChargeWfm += uWfm.at(wfm_iter) - uZeroLevel; - fvhHitWfmChan[uHitChannel]->Fill(wfm_iter, uWfm.at(wfm_iter)); - } - fvhHitWfmChan[uHitChannel]->SetTitle( - Form("Waveform channel %03u charge %0u zero level %0u; Time [adc " - "counts]; Amplitude [adc counts]", - uHitChannel, - uSignalCharge, - uZeroLevel)); - uHitAmlpitude -= uZeroLevel; - fvhHitAmplChan[uHitChannel]->Fill(uHitAmlpitude); - fvhHitChargeByWfmChan[uHitChannel]->Fill(uHitChargeWfm); - - for (uint8_t i = 0; i < kuNbWfmRanges; ++i) { - if (uSignalCharge > kvuWfmRanges.at(i) - && uSignalCharge < kvuWfmRanges.at(i + 1)) { - UInt_t uFlatIndexOfChange = i * kuNbChanPsd + uHitChannel; - - UInt_t uWfmExampleIter = - kvuWfmInRangeToChangeChan.at(uFlatIndexOfChange); - UInt_t uFlatIndexHisto = - uWfmExampleIter * kuNbWfmRanges * kuNbChanPsd + i * kuNbChanPsd - + uHitChannel; - fv3hHitWfmFlattenedChan[uFlatIndexHisto]->Reset(); - - for (UInt_t wfm_iter = 0; wfm_iter < uWfm.size(); wfm_iter++) - fv3hHitWfmFlattenedChan[uFlatIndexHisto]->Fill( - wfm_iter, uWfm.at(wfm_iter)); - fv3hHitWfmFlattenedChan[uFlatIndexHisto]->SetTitle( - Form("Waveform channel %03u charge %0u zero level %0u; Time " - "[adc counts]; Amplitude [adc counts]", - uHitChannel, - uSignalCharge, - uZeroLevel)); - - kvuWfmInRangeToChangeChan.at(uFlatIndexOfChange)++; - if (kvuWfmInRangeToChangeChan.at(uFlatIndexOfChange) - == kuNbWfmExamples) - kvuWfmInRangeToChangeChan.at(uFlatIndexOfChange) = 0; - - } // if( uSignalCharge > kvuWfmRanges.at(i) && uSignalCharge < kvuWfmRanges.at(i+1) ) - } // for (uint8_t i=0; i<kuNbWfmRanges; ++i) - - - int gate_beg = 0; - int gate_end = 7; - PsdSignalFitting::PronyFitter Pfitter(2, 2, gate_beg, gate_end); - - Pfitter.SetDebugMode(0); - Pfitter.SetWaveform(uWfm, uZeroLevel); - int SignalBeg = 2; - Int_t best_signal_begin = Pfitter.ChooseBestSignalBeginHarmonics( - SignalBeg - 1, SignalBeg + 1); - - Pfitter.SetSignalBegin(best_signal_begin); - Pfitter.CalculateFitHarmonics(); - Pfitter.CalculateFitAmplitudes(); - - Float_t fit_integral = Pfitter.GetIntegral(gate_beg, gate_end); - Float_t fit_R2 = Pfitter.GetRSquare(gate_beg, gate_end); - - std::complex<float>* harmonics = Pfitter.GetHarmonics(); - std::vector<uint16_t> uFitWfm = Pfitter.GetFitWfm(); - for (UInt_t wfm_iter = 0; wfm_iter < uFitWfm.size(); wfm_iter++) { - fvhHitFitWfmChan[uHitChannel]->Fill(wfm_iter, uFitWfm.at(wfm_iter)); - fvhHitWfmChan[uHitChannel]->SetTitle( - Form("Waveform channel %03u charge %0u zero level %0u R2 %.5f; " - "Time [adc counts]; Amplitude [adc counts]", - uHitChannel, - uSignalCharge, - uZeroLevel, - fit_R2)); - } - - fvhFitQaChan[uHitChannel]->Fill(fit_integral, fit_R2); + if (fbMonitorChanMode) { + + fvhHitChargeChan[uHitChannel]->Fill(uSignalCharge); + fvhHitZeroLevelChan[uHitChannel]->Fill(uZeroLevel); + + //Hit data + uint16_t uHitAmlpitude = 0; + UInt_t uHitChargeWfm = 0; + if (fbMonitorWfmMode) fvhHitWfmChan[uHitChannel]->Reset(); + if (fbMonitorFitMode) fvhHitFitWfmChan[uHitChannel]->Reset(); + for (UInt_t wfm_iter = 0; wfm_iter < uWfm.size(); wfm_iter++) { + if (uWfm.at(wfm_iter) > uHitAmlpitude) uHitAmlpitude = uWfm.at(wfm_iter); + uHitChargeWfm += uWfm.at(wfm_iter) - uZeroLevel; + if (fbMonitorWfmMode) fvhHitWfmChan[uHitChannel]->Fill(wfm_iter, uWfm.at(wfm_iter)); + } + uHitAmlpitude -= uZeroLevel; + fvhHitAmplChan[uHitChannel]->Fill(uHitAmlpitude); + fvhHitChargeByWfmChan[uHitChannel]->Fill(uHitChargeWfm); + + if (fbMonitorWfmMode) { + fvhHitWfmChan[uHitChannel]->SetTitle(Form("Waveform channel %03u charge %0u zero level %0u; Time [adc " + "counts]; Amplitude [adc counts]", + uHitChannel, uSignalCharge, uZeroLevel)); + for (uint8_t i = 0; i < kuNbWfmRanges; ++i) { + if (uSignalCharge > kvuWfmRanges.at(i) && uSignalCharge < kvuWfmRanges.at(i + 1)) { + UInt_t uFlatIndexOfChange = i * kuNbChanPsd + uHitChannel; + + UInt_t uWfmExampleIter = kvuWfmInRangeToChangeChan.at(uFlatIndexOfChange); + UInt_t uFlatIndexHisto = + uWfmExampleIter * kuNbWfmRanges * kuNbChanPsd + i * kuNbChanPsd + uHitChannel; + fv3hHitWfmFlattenedChan[uFlatIndexHisto]->Reset(); + + for (UInt_t wfm_iter = 0; wfm_iter < uWfm.size(); wfm_iter++) + fv3hHitWfmFlattenedChan[uFlatIndexHisto]->Fill(wfm_iter, uWfm.at(wfm_iter)); + fv3hHitWfmFlattenedChan[uFlatIndexHisto]->SetTitle( + Form("Waveform channel %03u charge %0u zero level %0u; Time " + "[adc counts]; Amplitude [adc counts]", + uHitChannel, uSignalCharge, uZeroLevel)); + + kvuWfmInRangeToChangeChan.at(uFlatIndexOfChange)++; + if (kvuWfmInRangeToChangeChan.at(uFlatIndexOfChange) == kuNbWfmExamples) + kvuWfmInRangeToChangeChan.at(uFlatIndexOfChange) = 0; + + } // if( uSignalCharge > kvuWfmRanges.at(i) && uSignalCharge < kvuWfmRanges.at(i+1) ) + } // for (uint8_t i=0; i<kuNbWfmRanges; ++i) + } //if (fbMonitorWfmMode) + + + if (fbMonitorFitMode) { + int gate_beg = 0; + int gate_end = 7; + PsdSignalFitting::PronyFitter Pfitter(2, 2, gate_beg, gate_end); + + Pfitter.SetDebugMode(0); + Pfitter.SetWaveform(uWfm, uZeroLevel); + int SignalBeg = 2; + Int_t best_signal_begin = Pfitter.ChooseBestSignalBeginHarmonics(SignalBeg - 1, SignalBeg + 1); + + Pfitter.SetSignalBegin(best_signal_begin); + Pfitter.CalculateFitHarmonics(); + Pfitter.CalculateFitAmplitudes(); + + Float_t fit_integral = Pfitter.GetIntegral(gate_beg, gate_end); + Float_t fit_R2 = Pfitter.GetRSquare(gate_beg, gate_end); + + std::complex<float>* harmonics = Pfitter.GetHarmonics(); + std::vector<uint16_t> uFitWfm = Pfitter.GetFitWfm(); + for (UInt_t wfm_iter = 0; wfm_iter < uFitWfm.size(); wfm_iter++) { + fvhHitFitWfmChan[uHitChannel]->Fill(wfm_iter, uFitWfm.at(wfm_iter)); + fvhHitWfmChan[uHitChannel]->SetTitle(Form("Waveform channel %03u charge %0u zero level %0u R2 %.5f; " + "Time [adc counts]; Amplitude [adc counts]", + uHitChannel, uSignalCharge, uZeroLevel, fit_R2)); + } + + fvhFitQaChan[uHitChannel]->Fill(fit_integral, fit_R2); + + if (fit_R2 > 0.02) continue; + fvhFitHarmonic1Chan[uHitChannel]->Fill(std::real(harmonics[1]), std::imag(harmonics[1])); + fvhFitHarmonic2Chan[uHitChannel]->Fill(std::real(harmonics[2]), std::imag(harmonics[2])); + } //if (fbMonitorFitMode) + } //if (fbMonitorChanMode) - if (fit_R2 > 0.02) continue; - fvhFitHarmonic1Chan[uHitChannel]->Fill(std::real(harmonics[1]), - std::imag(harmonics[1])); - fvhFitHarmonic2Chan[uHitChannel]->Fill(std::real(harmonics[2]), - std::imag(harmonics[2])); } // for(int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) } else if (ReadResult == 1) { @@ -556,6 +502,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, } // while(PsdReader.GetTotalGbtWordsRead()<uNbMessages) if (uNbMessages != PsdReader.GetTotalGbtWordsRead()) { + fbPsdMissedData = kTRUE; LOG(error) << "Wrong amount of messages read!" << " in microslice " << uNbMessages << " by PsdReader " << PsdReader.GetTotalGbtWordsRead(); @@ -578,13 +525,6 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, << " in microslice " << fulCurrentMsIdx << " by PsdReader " << PsdReader.EvHdrAb.ulMicroSlice << "\n"; - fhMsgsCntEvo->AddBinContent(fdMsTime - fdStartTime, uNbMessages); - fhReadMsgsCntEvo->AddBinContent(fdMsTime - fdStartTime, - PsdReader.GetTotalGbtWordsRead()); - fhLostMsgsCntEvo->AddBinContent( - fdMsTime - fdStartTime, uNbMessages - PsdReader.GetTotalGbtWordsRead()); - fhReadEvtsCntEvo->AddBinContent(fdMsTime - fdStartTime, fuReadEvtCnt); - fuMsgsCntInMs += uNbMessages; fuReadMsgsCntInMs += PsdReader.GetTotalGbtWordsRead(); fuLostMsgsCntInMs += uNbMessages - PsdReader.GetTotalGbtWordsRead(); @@ -613,14 +553,9 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { /// Logarithmic bining uint32_t iNbBinsLog = 0; /// Parameters are NbDecadesLog, NbStepsDecade, NbSubStepsInStep - std::vector<double> dBinsLogVector = GenerateLogBinArray(4, 9, 1, iNbBinsLog); + std::vector<double> dBinsLogVector = GenerateLogBinArray(2, 3, 1, iNbBinsLog); double* dBinsLog = dBinsLogVector.data(); - fhChannelMap = new TH1I("hChannelMap", - "Map of hits in PSD detector; Chan; Hits Count []", - kuNbChanPsd, - 0., - kuNbChanPsd); fhHitChargeMap = new TH2I("hHitChargeMap", "Map of hits charges in PSD detector; Chan; Charge [adc counts]", @@ -648,56 +583,11 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { fuHistoryHistoSize, 0, fuHistoryHistoSize); - for (UInt_t uSpill = 0; uSpill < kuNbSpillPlots; uSpill++) { - fvhChannelMapSpill.push_back( - new TH1I(Form("hChannelMapSpill%02u", uSpill), - Form("Map of hits in PSD detector in current spill %02u; Chan; " - "Hits Count []", - uSpill), - kuNbChanPsd, - 0., - kuNbChanPsd)); - } // for( UInt_t uSpill = 0; uSpill < kuNbSpillPlots; uSpill ++) - fhHitsPerSpill = new TH1I("hHitsPerSpill", - "Hit count per spill; Spill; Hits Count []", - kuNbSpillPlots, - 0, - kuNbSpillPlots); - - fhMsgsCntEvo = new TH1I("hMsgsCntEvo", - "Evolution of TotalMsgs counts vs time in run; Time " - "in run [s]; Msgs Count []", - fuHistoryHistoSize, - 0, - fuHistoryHistoSize); - fhReadMsgsCntEvo = new TH1I("hReadMsgsCntEvo", - "Evolution of ReadMsgs counts vs time in run; " - "Time in run [s]; ReadMsgs Count []", - fuHistoryHistoSize, - 0, - fuHistoryHistoSize); - fhLostMsgsCntEvo = new TH1I("hLostMsgsCntEvo", - "Evolution of LostMsgs counts vs time in run; " - "Time in run [s]; LostMsgs Count []", - fuHistoryHistoSize, - 0, - fuHistoryHistoSize); - fhReadEvtsCntEvo = new TH1I("hReadEvtsCntEvo", - "Evolution of ReadEvents counts vs time in run; " - "Time in run [s]; ReadEvents Count []", - fuHistoryHistoSize, - 0, - fuHistoryHistoSize); - - fhAdcTimeEvo = new TH2I( - "hAdcTimeEvo", - "Evolution of ADC time vs time in run; Time in run [s]; Adc time *12.5[ns]", - fuHistoryHistoSize, - 0, - fuHistoryHistoSize, - 500, - 0, - 9000); + + + fhMissedData = new TH1I("hMissedData", "PSD Missed data", 2, 0, 2); + + fhAdcTime = new TH1I("hAdcTime", "ADC time; Adc time []", 100, 0, 160000); fhMsLengthEvo = new TH2I( "hMsLengthEvo", @@ -736,31 +626,18 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { fuHistoryHistoSize, iNbBinsLog, dBinsLog); - fhReadEvtsCntPerMsEvo = - new TH2I("hReadEvtCntPerMsEvo", - "Evolution of ReadEvents, per MS counts vs time in run; Time in " - "run [s]; ReadEvents Count/MS []; MS", - fuHistoryHistoSize, - 0, - fuHistoryHistoSize, - iNbBinsLog, - dBinsLog); + fhReadEvtsCntPerMsEvo = new TH2I("hReadEvtCntPerMsEvo", + "Evolution of ReadEvents counts, per MS vs time in run; Time in " + "run [s]; ReadEvents Count/MS []; MS", + fuHistoryHistoSize, 0, fuHistoryHistoSize, iNbBinsLog, dBinsLog); /// Add pointers to the vector with all histo for access by steering class - AddHistoToVector(fhChannelMap, sFolder); AddHistoToVector(fhHitChargeMap, sFolder); AddHistoToVector(fhHitMapEvo, sFolder); AddHistoToVector(fhChanHitMapEvo, sFolder); - for (UInt_t uSpill = 0; uSpill < kuNbSpillPlots; uSpill++) - AddHistoToVector(fvhChannelMapSpill[uSpill], sFolder); - AddHistoToVector(fhHitsPerSpill, sFolder); - - AddHistoToVector(fhMsgsCntEvo, sFolder); - AddHistoToVector(fhReadMsgsCntEvo, sFolder); - AddHistoToVector(fhLostMsgsCntEvo, sFolder); - AddHistoToVector(fhReadEvtsCntEvo, sFolder); - AddHistoToVector(fhAdcTimeEvo, sFolder); + AddHistoToVector(fhMissedData, sFolder); + AddHistoToVector(fhAdcTime, sFolder); AddHistoToVector(fhMsLengthEvo, sFolder); AddHistoToVector(fhMsgsCntPerMsEvo, sFolder); @@ -769,163 +646,80 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { AddHistoToVector(fhReadEvtsCntPerMsEvo, sFolder); /*******************************************************************/ - for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) { - fvhHitCntEvoChan[uChan] = - new TH1I(Form("hHitCntEvoChan%03u", uChan), - Form("Evolution of Hit counts vs time in run for channel %03u; " - "Time in run [s]; Hits Count []", - uChan), - fuHistoryHistoSize, - 0, - fuHistoryHistoSize); - - fvhHitCntPerMsEvoChan[uChan] = - new TH2I(Form("hHitCntPerMsEvoChan%03u", uChan), - Form("Evolution of Hit counts per MS vs time in run for channel " - "%03u; Time in run [s]; Hits Count/MS []; MS", - uChan), - fuHistoryHistoSize, - 0, - fuHistoryHistoSize, - iNbBinsLog, - dBinsLog); - - fvhHitChargeChan[uChan] = new TH1I( - Form("hHitChargeChan%03u", uChan), - Form("Hits charge distribution for channel %03u; Charge [adc counts]", - uChan), - fviHistoChargeArgs.at(0), - fviHistoChargeArgs.at(1), - fviHistoChargeArgs.at(2)); - - fvhHitZeroLevelChan[uChan] = new TH1I( - Form("hHitZeroLevelChan%03u", uChan), - Form( - "Hits zero level distribution for channel %03u; ZeroLevel [adc counts]", - uChan), - fviHistoZLArgs.at(0), - fviHistoZLArgs.at(1), - fviHistoZLArgs.at(2)); - - fvhHitAmplChan[uChan] = new TH1I( - Form("hHitAmplChan%03u", uChan), - Form( - "Hits amplitude distribution for channel %03u; Amplitude [adc counts]", - uChan), - fviHistoAmplArgs.at(0), - fviHistoAmplArgs.at(1), - fviHistoAmplArgs.at(2)); - - fvhHitChargeByWfmChan[uChan] = - new TH1I(Form("hHitChargeByWfmChan%03u", uChan), - Form("Hits charge by waveform distribution for channel %03u; " - "Charge [adc counts]", - uChan), - fviHistoChargeArgs.at(0), - fviHistoChargeArgs.at(1), - fviHistoChargeArgs.at(2)); - - fvhHitChargeEvoChan[uChan] = - new TH2I(Form("hHitChargeEvoChan%03u", uChan), - Form("Evolution of Hit charge vs time in run for channel %03u; " - "Time in run [s]; Charge [adc counts]", - uChan), - fuHistoryHistoSize, - 0, - fuHistoryHistoSize, - fviHistoChargeArgs.at(0), - fviHistoChargeArgs.at(1), - fviHistoChargeArgs.at(2)); - - fvhHitWfmChan[uChan] = new TH1I( - Form("hHitWfmChan%03u", uChan), Form("HitWfmChan%03u", uChan), 8, 0, 8); - fvhHitWfmChan[uChan]->SetMarkerStyle(31); - fvhHitWfmChan[uChan]->SetMarkerSize(0.5); - - fvhHitFitWfmChan[uChan] = new TH1I(Form("hHitFitWfmChan%03u", uChan), - Form("HitFitWfmChan%03u", uChan), - 8, - 0, - 8); - fvhHitFitWfmChan[uChan]->SetLineColor(kRed); - fvhHitFitWfmChan[uChan]->SetLineWidth(2); - - for (UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; - uWfmRangeIter++) { - for (UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; - uWfmExampleIter++) { - UInt_t uFlatIndex = uWfmExampleIter * kuNbWfmRanges * kuNbChanPsd - + uWfmRangeIter * kuNbChanPsd + uChan; - fv3hHitWfmFlattenedChan[uFlatIndex] = - new TH1I(Form("hHitWfmChan%03uRange%02uExample%02u", - uChan, - uWfmRangeIter, - uWfmExampleIter), - Form("HitWfmChan%03uRange%02uExample%02u", - uChan, - uWfmRangeIter, - uWfmExampleIter), - 8, - 0, - 8); - - } // for( UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; uWfmRangeIter ++) - } // for( UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; uWfmExampleIter ++) - - fvhFitHarmonic1Chan[uChan] = new TH2I( - Form("hFitHarmonic1Chan%03u", uChan), - Form( - "Waveform fit harmonic 1 for channel %03u; Real part []; Imag part []", - uChan), - 400, - -2, - 2, - 200, - -1, - 1); - fvhFitHarmonic1Chan[uChan]->SetMarkerColor(kRed); - - fvhFitHarmonic2Chan[uChan] = new TH2I( - Form("hFitHarmonic2Chan%03u", uChan), - Form( - "Waveform fit harmonic 2 for channel %03u; Real part []; Imag part []", - uChan), - 400, - -2, - 2, - 200, - -1, - 1); - fvhFitHarmonic2Chan[uChan]->SetMarkerColor(kBlue); - - fvhFitQaChan[uChan] = new TH2I( - Form("hFitQaChan%03u", uChan), - Form("Waveform fit QA for channel %03u; Integral [adc counts]; R2 []", - uChan), - fviHistoChargeArgs.at(0), - fviHistoChargeArgs.at(1), - fviHistoChargeArgs.at(2), - 500, - 0, - 1); - - - /// Add pointers to the vector with all histo for access by steering class - AddHistoToVector(fvhHitCntEvoChan[uChan], sFolder); - AddHistoToVector(fvhHitCntPerMsEvoChan[uChan], sFolder); - AddHistoToVector(fvhHitChargeChan[uChan], sFolder); - AddHistoToVector(fvhHitZeroLevelChan[uChan], sFolder); - AddHistoToVector(fvhHitAmplChan[uChan], sFolder); - AddHistoToVector(fvhHitChargeByWfmChan[uChan], sFolder); - AddHistoToVector(fvhHitChargeEvoChan[uChan], sFolder); - - AddHistoToVector(fvhFitHarmonic1Chan[uChan], sFitFolder); - AddHistoToVector(fvhFitHarmonic2Chan[uChan], sFitFolder); - AddHistoToVector(fvhFitQaChan[uChan], sFitFolder); - - } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan ) - - + if (fbMonitorChanMode) { + + for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) { + fvhHitChargeChan[uChan] = new TH1I(Form("hHitChargeChan%03u", uChan), + Form("Hits charge distribution for channel %03u; Charge [adc counts]", uChan), + fviHistoChargeArgs.at(0), fviHistoChargeArgs.at(1), fviHistoChargeArgs.at(2)); + + fvhHitZeroLevelChan[uChan] = + new TH1I(Form("hHitZeroLevelChan%03u", uChan), + Form("Hits zero level distribution for channel %03u; ZeroLevel [adc counts]", uChan), + fviHistoZLArgs.at(0), fviHistoZLArgs.at(1), fviHistoZLArgs.at(2)); + + fvhHitAmplChan[uChan] = + new TH1I(Form("hHitAmplChan%03u", uChan), + Form("Hits amplitude distribution for channel %03u; Amplitude [adc counts]", uChan), + fviHistoAmplArgs.at(0), fviHistoAmplArgs.at(1), fviHistoAmplArgs.at(2)); + + fvhHitChargeByWfmChan[uChan] = + new TH1I(Form("hHitChargeByWfmChan%03u", uChan), + Form("Hits charge by waveform distribution for channel %03u; " + "Charge [adc counts]", + uChan), + fviHistoChargeArgs.at(0), fviHistoChargeArgs.at(1), fviHistoChargeArgs.at(2)); + + AddHistoToVector(fvhHitChargeChan[uChan], sFolder); + AddHistoToVector(fvhHitZeroLevelChan[uChan], sFolder); + AddHistoToVector(fvhHitAmplChan[uChan], sFolder); + AddHistoToVector(fvhHitChargeByWfmChan[uChan], sFolder); + + if (fbMonitorWfmMode) { + fvhHitWfmChan[uChan] = new TH1I(Form("hHitWfmChan%03u", uChan), Form("HitWfmChan%03u", uChan), 8, 0, 8); + fvhHitWfmChan[uChan]->SetMarkerStyle(31); + fvhHitWfmChan[uChan]->SetMarkerSize(0.5); + + for (UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; uWfmRangeIter++) { + for (UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; uWfmExampleIter++) { + UInt_t uFlatIndex = uWfmExampleIter * kuNbWfmRanges * kuNbChanPsd + uWfmRangeIter * kuNbChanPsd + uChan; + fv3hHitWfmFlattenedChan[uFlatIndex] = + new TH1I(Form("hHitWfmChan%03uRange%02uExample%02u", uChan, uWfmRangeIter, uWfmExampleIter), + Form("HitWfmChan%03uRange%02uExample%02u", uChan, uWfmRangeIter, uWfmExampleIter), 8, 0, 8); + + } // for( UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; uWfmRangeIter ++) + } // for( UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; uWfmExampleIter ++) + } // if(fbMonitorWfmMode) + + if (fbMonitorFitMode) { + + fvhHitFitWfmChan[uChan] = + new TH1I(Form("hHitFitWfmChan%03u", uChan), Form("HitFitWfmChan%03u", uChan), 8, 0, 8); + fvhHitFitWfmChan[uChan]->SetLineColor(kRed); + fvhHitFitWfmChan[uChan]->SetLineWidth(2); + + fvhFitHarmonic1Chan[uChan] = new TH2I( + Form("hFitHarmonic1Chan%03u", uChan), + Form("Waveform fit harmonic 1 for channel %03u; Real part []; Imag part []", uChan), 400, -2, 2, 200, -1, 1); + fvhFitHarmonic1Chan[uChan]->SetMarkerColor(kRed); + + fvhFitHarmonic2Chan[uChan] = new TH2I( + Form("hFitHarmonic2Chan%03u", uChan), + Form("Waveform fit harmonic 2 for channel %03u; Real part []; Imag part []", uChan), 400, -2, 2, 200, -1, 1); + fvhFitHarmonic2Chan[uChan]->SetMarkerColor(kBlue); + + fvhFitQaChan[uChan] = new TH2I( + Form("hFitQaChan%03u", uChan), Form("Waveform fit QA for channel %03u; Integral [adc counts]; R2 []", uChan), + fviHistoChargeArgs.at(0), fviHistoChargeArgs.at(1), fviHistoChargeArgs.at(2), 500, 0, 1); + + AddHistoToVector(fvhFitHarmonic1Chan[uChan], sFitFolder); + AddHistoToVector(fvhFitHarmonic2Chan[uChan], sFitFolder); + AddHistoToVector(fvhFitQaChan[uChan], sFitFolder); + + } // if(fbMonitorFitMode) + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan ) + + } // if (fbMonitorChanMode) /*******************************************************************/ /// Canvases @@ -940,16 +734,10 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { fcHitMaps->cd(1); gPad->SetGridx(); gPad->SetGridy(); - gPad->SetLogy(); - fhChannelMap->Draw(); - - fcHitMaps->cd(2); - gPad->SetGridx(); - gPad->SetGridy(); gPad->SetLogz(); fhChanHitMapEvo->Draw("colz"); - fcHitMaps->cd(3); + fcHitMaps->cd(2); gPad->SetGridx(); gPad->SetGridy(); gPad->SetLogz(); @@ -967,8 +755,8 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { fcSummary->cd(1); gPad->SetGridx(); gPad->SetGridy(); - gPad->SetLogy(); - fhChannelMap->Draw(); + gPad->SetLogz(); + fhHitChargeMap->Draw("colz"); fcSummary->cd(2); gPad->SetGridx(); @@ -979,8 +767,8 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { fcSummary->cd(3); gPad->SetGridx(); gPad->SetGridy(); - gPad->SetLogz(); - fhHitChargeMap->Draw("colz"); + gPad->SetLogy(); + fhMissedData->Draw(); fcSummary->cd(4); gPad->SetGridx(); @@ -992,51 +780,6 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { AddCanvasToVector(fcSummary, "canvases"); /*******************************************************************/ - /*******************************************************************/ - /// Charge from FPGA all channels - fcChargesFPGA = new TCanvas( - "cChargesFPGA", "Charges spectra in all channels calculated by FPGA", w, h); - fcChargesFPGA->DivideSquare(kuNbChanPsd); - - for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fcChargesFPGA->cd(1 + uChan); - fvhHitChargeChan[uChan]->Draw(); - } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) - - AddCanvasToVector(fcChargesFPGA, "canvases"); - /*******************************************************************/ - - /*******************************************************************/ - /// Charge from Waveform all channels - fcChargesWfm = - new TCanvas("cChargesWfm", - "Charges spectra in all channels calculated over waveform", - w, - h); - fcChargesWfm->DivideSquare(kuNbChanPsd); - - for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fcChargesWfm->cd(1 + uChan); - fvhHitChargeByWfmChan[uChan]->Draw(); - } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) - - AddCanvasToVector(fcChargesWfm, "canvases"); - /*******************************************************************/ - - /*******************************************************************/ - /// Amplitudes all channels - fcAmplitudes = - new TCanvas("cAmplitudes", "Amplitude spectra in all channels", w, h); - fcAmplitudes->DivideSquare(kuNbChanPsd); - - for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fcAmplitudes->cd(1 + uChan); - fvhHitAmplChan[uChan]->Draw(); - } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) - - AddCanvasToVector(fcAmplitudes, "canvases"); - /*******************************************************************/ - /*******************************************************************/ /// General summary: Hit maps, Hit rate vs time in run, error fraction vs time un run fcGenCntsPerMs = new TCanvas( @@ -1077,98 +820,133 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() { AddCanvasToVector(fcGenCntsPerMs, "canvases"); /*******************************************************************/ - /*******************************************************************/ - /// General summary: Hit maps, Hit rate vs time in run, error fraction vs time un run - fcSpillCounts = - new TCanvas("cSpillCounts", - "Counts per spill, last 5 spills including current one", - w, - h); - fcSpillCounts->Divide(1, kuNbSpillPlots); - - for (UInt_t uSpill = 0; uSpill < kuNbSpillPlots; uSpill++) { - fcSpillCounts->cd(1 + uSpill); - gPad->SetGridx(); - gPad->SetGridy(); - fvhChannelMapSpill[uSpill]->Draw(); - } // for( UInt_t uSpill = 0; uSpill < kuNbSpillPlots; uSpill ++) - - AddCanvasToVector(fcSpillCounts, "canvases"); - /*******************************************************************/ + if (fbMonitorChanMode) { + + /*******************************************************************/ + /// Charge from FPGA all channels + fcChargesFPGA = new TCanvas("cChargesFPGA", "Charges spectra in all channels calculated by FPGA", w, h); + fcChargesFPGA->DivideSquare(kuNbChanPsd); + + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fcChargesFPGA->cd(1 + uChan); + fvhHitChargeChan[uChan]->Draw(); + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) + + AddCanvasToVector(fcChargesFPGA, "canvases"); + /*******************************************************************/ + + /*******************************************************************/ + /// Charge from Waveform all channels + fcChargesWfm = new TCanvas("cChargesWfm", "Charges spectra in all channels calculated over waveform", w, h); + fcChargesWfm->DivideSquare(kuNbChanPsd); + + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fcChargesWfm->cd(1 + uChan); + fvhHitChargeByWfmChan[uChan]->Draw(); + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) + + AddCanvasToVector(fcChargesWfm, "canvases"); + /*******************************************************************/ + + /*******************************************************************/ + /// Amplitudes all channels + fcAmplitudes = new TCanvas("cAmplitudes", "Amplitude spectra in all channels", w, h); + fcAmplitudes->DivideSquare(kuNbChanPsd); + + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fcAmplitudes->cd(1 + uChan); + fvhHitAmplChan[uChan]->Draw(); + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) + + AddCanvasToVector(fcAmplitudes, "canvases"); + /*******************************************************************/ + + /*******************************************************************/ + /// ZeroLevels all channels + fcZeroLevels = new TCanvas("cZeroLevels", "Zero Level spectra in all channels", w, h); + fcZeroLevels->DivideSquare(kuNbChanPsd); + + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fcZeroLevels->cd(1 + uChan); + fvhHitZeroLevelChan[uChan]->Draw(); + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) + + AddCanvasToVector(fcZeroLevels, "canvases"); + /*******************************************************************/ + + if (fbMonitorWfmMode) { + + /*******************************************************************/ + /// General summary: Hit maps, Hit rate vs time in run, error fraction vs time un run + fcWfmsAllChannels = new TCanvas("cWfmsAllChannels", "Last waveforms in PSD fired channels", w, h); + fcWfmsAllChannels->DivideSquare(kuNbChanPsd); + + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fcWfmsAllChannels->cd(1 + uChan); + if (!fbMonitorFitMode) fvhHitWfmChan[uChan]->Draw("HIST LP"); + if (fbMonitorFitMode) { + fvhHitWfmChan[uChan]->Draw("HIST P"); + fvhHitFitWfmChan[uChan]->Draw("L SAME"); + } + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) - /*******************************************************************/ - /// General summary: Hit maps, Hit rate vs time in run, error fraction vs time un run - fcWfmsAllChannels = new TCanvas( - "cWfmsAllChannels", "Last waveforms in PSD fired channels", w, h); - fcWfmsAllChannels->DivideSquare(kuNbChanPsd); + AddCanvasToVector(fcWfmsAllChannels, "waveforms"); + /*******************************************************************/ - for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fcWfmsAllChannels->cd(1 + uChan); - fvhHitWfmChan[uChan]->Draw("HIST P"); - fvhHitFitWfmChan[uChan]->Draw("L SAME"); - } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) + /*******************************************************************/ + /// General summary: Hit maps, Hit rate vs time in run, error fraction vs time un run + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fvcWfmsChan[uChan] = + new TCanvas(Form("cWfmsChan%03u", uChan), Form("Canvas with last waveforms in channel %03u", uChan), w, h); + fvcWfmsChan[uChan]->Divide(kuNbWfmExamples, kuNbWfmRanges); + UInt_t uHisto = 0; - AddCanvasToVector(fcWfmsAllChannels, "waveforms"); - /*******************************************************************/ + for (UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; uWfmRangeIter++) { + for (UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; uWfmExampleIter++) { + fvcWfmsChan[uChan]->cd(1 + uHisto); + UInt_t uFlatIndex = uWfmExampleIter * kuNbWfmRanges * kuNbChanPsd + uWfmRangeIter * kuNbChanPsd + uChan; + fv3hHitWfmFlattenedChan[uFlatIndex]->Draw("HIST LP"); + uHisto++; + } // for( UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; uWfmRangeIter ++) + } // for( UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; uWfmExampleIter ++) - /*******************************************************************/ - /// General summary: Hit maps, Hit rate vs time in run, error fraction vs time un run - for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fvcWfmsChan[uChan] = - new TCanvas(Form("cWfmsChan%03u", uChan), - Form("Canvas with last waveforms in channel %03u", uChan), - w, - h); - fvcWfmsChan[uChan]->Divide(kuNbWfmExamples, kuNbWfmRanges); - UInt_t uHisto = 0; - - for (UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; - uWfmRangeIter++) { - for (UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; - uWfmExampleIter++) { - fvcWfmsChan[uChan]->cd(1 + uHisto); - UInt_t uFlatIndex = uWfmExampleIter * kuNbWfmRanges * kuNbChanPsd - + uWfmRangeIter * kuNbChanPsd + uChan; - fv3hHitWfmFlattenedChan[uFlatIndex]->Draw("HIST LP"); - uHisto++; - } // for( UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; uWfmRangeIter ++) - } // for( UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; uWfmExampleIter ++) - - AddCanvasToVector(fvcWfmsChan[uChan], "waveforms"); - } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) + AddCanvasToVector(fvcWfmsChan[uChan], "waveforms"); + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) - /*******************************************************************/ + /*******************************************************************/ - fcPronyFit = new TCanvas("cPronyFit", "Prony wfm fitting", w, h); - fcPronyFit->Divide(2); + } // if (fbMonitorWfmMode) - fcPronyFit->cd(1); - for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fvhFitHarmonic1Chan[uChan]->Draw("same"); - fvhFitHarmonic2Chan[uChan]->Draw("same"); - } + if (fbMonitorFitMode) { - fcPronyFit->cd(2); - for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fvhFitQaChan[uChan]->Draw("same"); - } + fcPronyFit = new TCanvas("cPronyFit", "Prony wfm fitting", w, h); + fcPronyFit->Divide(2); - AddCanvasToVector(fcPronyFit, "PronyFit"); + fcPronyFit->cd(1); + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fvhFitHarmonic1Chan[uChan]->Draw("same"); + fvhFitHarmonic2Chan[uChan]->Draw("same"); + } - /*******************************************************************/ + fcPronyFit->cd(2); + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fvhFitQaChan[uChan]->Draw("same"); + } - return kTRUE; -} + AddCanvasToVector(fcPronyFit, "PronyFit"); -Bool_t CbmMcbm2018MonitorAlgoPsd::FillHistograms() { + /*******************************************************************/ - for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) { - fvhHitCntPerMsEvoChan[uChan]->Fill(fdMsTime - fdStartTime, - fvuHitCntChanMs[uChan]); - fvuHitCntChanMs[uChan] = 0; + } // if (fbMonitorFitMode) - } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan ) + } // if (fbMonitorChanMode) + return kTRUE; +} + +Bool_t CbmMcbm2018MonitorAlgoPsd::FillHistograms() +{ + fhMissedData->Fill(fbPsdMissedData); fhMsgsCntPerMsEvo->Fill(fdMsTime - fdStartTime, fuMsgsCntInMs); fhReadMsgsCntPerMsEvo->Fill(fdMsTime - fdStartTime, fuReadMsgsCntInMs); fhLostMsgsCntPerMsEvo->Fill(fdMsTime - fdStartTime, fuLostMsgsCntInMs); @@ -1181,47 +959,40 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::FillHistograms() { return kTRUE; } -Bool_t CbmMcbm2018MonitorAlgoPsd::ResetHistograms() { - for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) { - fvhHitCntEvoChan[uChan]->Reset(); - fvhHitCntPerMsEvoChan[uChan]->Reset(); - fvhHitChargeChan[uChan]->Reset(); - fvhHitZeroLevelChan[uChan]->Reset(); - fvhHitAmplChan[uChan]->Reset(); - fvhHitChargeByWfmChan[uChan]->Reset(); - fvhHitChargeEvoChan[uChan]->Reset(); - fvhHitWfmChan[uChan]->Reset(); - fvhHitFitWfmChan[uChan]->Reset(); - - fvhFitHarmonic1Chan[uChan]->Reset(); - fvhFitHarmonic2Chan[uChan]->Reset(); - fvhFitQaChan[uChan]->Reset(); - } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan ) - - for (UInt_t uFlatIndex = 0; - uFlatIndex < kuNbChanPsd * kuNbWfmRanges * kuNbWfmExamples; - ++uFlatIndex) - fv3hHitWfmFlattenedChan[uFlatIndex]->Reset(); - for (UInt_t uWfmIndex = 0; uWfmIndex < kuNbChanPsd * kuNbWfmRanges; - ++uWfmIndex) - kvuWfmInRangeToChangeChan[uWfmIndex] = 0; +Bool_t CbmMcbm2018MonitorAlgoPsd::ResetHistograms(Bool_t bResetTime) +{ + + if (fbMonitorChanMode) { + for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) { + fvhHitChargeChan[uChan]->Reset(); + fvhHitZeroLevelChan[uChan]->Reset(); + fvhHitAmplChan[uChan]->Reset(); + fvhHitChargeByWfmChan[uChan]->Reset(); + if (fbMonitorWfmMode) fvhHitWfmChan[uChan]->Reset(); + + if (fbMonitorFitMode) { + fvhHitFitWfmChan[uChan]->Reset(); + fvhFitHarmonic1Chan[uChan]->Reset(); + fvhFitHarmonic2Chan[uChan]->Reset(); + fvhFitQaChan[uChan]->Reset(); + } // if (fbMonitorFitMode) + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan ) + } // if(fbMonitorChanMode) + + if (fbMonitorWfmMode) { + for (UInt_t uFlatIndex = 0; uFlatIndex < kuNbChanPsd * kuNbWfmRanges * kuNbWfmExamples; ++uFlatIndex) + fv3hHitWfmFlattenedChan[uFlatIndex]->Reset(); + for (UInt_t uWfmIndex = 0; uWfmIndex < kuNbChanPsd * kuNbWfmRanges; ++uWfmIndex) + kvuWfmInRangeToChangeChan[uWfmIndex] = 0; + } // if(fbMonitorWfmMode) fuCurrentSpillIdx = 0; - fuCurrentSpillPlot = 0; - fhChannelMap->Reset(); fhHitChargeMap->Reset(); fhHitMapEvo->Reset(); fhChanHitMapEvo->Reset(); - for (UInt_t uSpill = 0; uSpill < kuNbSpillPlots; uSpill++) - fvhChannelMapSpill[uSpill]->Reset(); - fhHitsPerSpill->Reset(); - - fhMsgsCntEvo->Reset(); - fhReadMsgsCntEvo->Reset(); - fhLostMsgsCntEvo->Reset(); - fhReadEvtsCntEvo->Reset(); - fhAdcTimeEvo->Reset(); + fhMissedData->Reset(); + fhAdcTime->Reset(); fhMsLengthEvo->Reset(); fhMsgsCntPerMsEvo->Reset(); @@ -1229,8 +1000,10 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ResetHistograms() { fhLostMsgsCntPerMsEvo->Reset(); fhReadEvtsCntPerMsEvo->Reset(); - /// Also reset the Start time for the evolution plots! - fdStartTime = -1.0; + if (kTRUE == bResetTime) { + /// Also reset the Start time for the evolution plots! + fdStartTime = -1.0; + } // if( kTRUE == bResetTime ) return kTRUE; diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h index 4d9d10b4db08c849227803a15c4e2446a1f7f669..15a18e820e5840c9dc2bcce14ff805bfcd95e0f1 100644 --- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h +++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h @@ -56,16 +56,23 @@ public: Bool_t CreateHistograms(); Bool_t FillHistograms(); - Bool_t ResetHistograms(); + Bool_t ResetHistograms(Bool_t bResetTime = kTRUE); inline void SetMonitorMode(Bool_t bFlagIn = kTRUE) { fbMonitorMode = bFlagIn; } + inline void SetMonitorChanMode(Bool_t bFlagIn = kTRUE) { fbMonitorChanMode = bFlagIn; } + inline void SetMonitorWfmMode(Bool_t bFlagIn = kTRUE) { fbMonitorWfmMode = bFlagIn; } + inline void SetMonitorFitMode(Bool_t bFlagIn = kTRUE) { fbMonitorFitMode = bFlagIn; } inline void SetHistoryHistoSize(UInt_t inHistorySizeSec = 1800) { fuHistoryHistoSize = inHistorySizeSec; } inline void SetChargeHistoArgs(std::vector<Int_t> inVec) { fviHistoChargeArgs = inVec; + kvuWfmRanges.clear(); + for (uint8_t i = 0; i <= kuNbWfmRanges; ++i) + kvuWfmRanges.push_back(fviHistoChargeArgs.at(1) + + i * (fviHistoChargeArgs.at(2) - fviHistoChargeArgs.at(1)) / kuNbWfmRanges); } inline void SetAmplHistoArgs(std::vector<Int_t> inVec) { fviHistoAmplArgs = inVec; @@ -79,10 +86,14 @@ private: /// Control flags Bool_t fbMonitorMode; //! Switch ON the filling of a minimal set of histograms + Bool_t fbMonitorChanMode; //! Switch ON the filling channelwise histograms + Bool_t fbMonitorWfmMode; //! Switch ON the filling waveforms histograms + Bool_t fbMonitorFitMode; //! Switch ON the filling waveform fitting histograms Bool_t fbDebugMonitorMode; //! Switch ON the filling of a additional set of histograms std::vector<Bool_t> fvbMaskedComponents; Bool_t fbFirstPackageError; + Bool_t fbPsdMissedData; /// Settings from parameter file CbmMcbm2018PsdPar* fUnpackPar; //! @@ -105,8 +116,6 @@ private: ULong64_t fulCurrentMsIdx; Double_t fdTsStartTime; //! Time in ns of current TS from the index of the first MS first component - Double_t - fdTsStopTimeCore; //! End Time in ns of current TS Core from the index of the first MS first component Double_t fdMsTime; //! Start Time in ns of current MS from its index field in header Double_t @@ -120,21 +129,10 @@ private: fuCurrDpbId; //! Temp holder until Current equipment ID is properly filled in MS UInt_t fuCurrDpbIdx; //! Index of the DPB from which the MS currently unpacked is coming - Int_t - fiRunStartDateTimeSec; //! Start of run time since "epoch" in s, for the plots with date as X axis - Int_t fiBinSizeDatePlots; //! Bin size in s for the plots with date as X axis - - /// Data format control: Current time references for each GDPB: merged epoch marker, epoch cycle, full epoch [fuNrOfGdpbs] - std::vector<ULong64_t> fvulCurrentEpoch; //! Current epoch index, per DPB - std::vector<ULong64_t> - fvulCurrentEpochCycle; //! Epoch cycle from the Ms Start message and Epoch counter flip - std::vector<ULong64_t> fvulCurrentEpochFull; //! Epoch + Epoch Cycle /// Starting state book-keeping Double_t fdStartTime; /** Time of first valid hit (epoch available), used as reference for evolution plots**/ - Double_t - fdStartTimeMsSz; /** Time of first microslice, used as reference for evolution plots**/ std::chrono::steady_clock::time_point ftStartTimeUnix; /** Time of run Start from UNIX system, used as reference for long evolution plots against reception time **/ @@ -148,7 +146,6 @@ private: fviHistoZLArgs; /** ZeroLevel histogram arguments in adc counts **/ /// Histograms - UInt_t fuReadEvtCnt; UInt_t fuMsgsCntInMs; UInt_t fuReadMsgsCntInMs; UInt_t fuLostMsgsCntInMs; @@ -156,17 +153,11 @@ private: /// Channel rate plots std::vector<UInt_t> fvuHitCntChanMs; - std::vector<UInt_t> fvuErrorCntChanMs; - std::vector<UInt_t> fvuEvtLostCntChanMs; - std::vector<TH1*> fvhHitCntEvoChan; - std::vector<TH2*> fvhHitCntPerMsEvoChan; std::vector<TH1*> fvhHitChargeChan; std::vector<TH1*> fvhHitZeroLevelChan; std::vector<TH1*> fvhHitAmplChan; std::vector<TH1*> fvhHitChargeByWfmChan; - std::vector<TH2*> fvhHitChargeEvoChan; std::vector<TH1*> fvhHitWfmChan; - std::vector<TH1*> fvhHitFitWfmChan; static const UInt_t kuNbWfmRanges = 8; static const UInt_t kuNbWfmExamples = 8; @@ -181,25 +172,17 @@ private: Double_t fdStartTimeSpill; Double_t fdLastSecondTime; UInt_t fuCountsLastSecond; - static const UInt_t kuNbSpillPlots = 5; static const UInt_t kuOffSpillCountLimit = 200; const UInt_t kuPsdChanMap[kuNbChanPsd] = { 0}; // = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //! Map from electronics channel to PSD physical channel - TH1* fhChannelMap; TH1* fhHitChargeMap; TH1* fhHitMapEvo; TH2* fhChanHitMapEvo; - std::vector<TH1*> fvhChannelMapSpill; - TH1* fhHitsPerSpill; /// Global Rate - TH1* fhMsgsCntEvo; - TH1* fhReadMsgsCntEvo; - TH1* fhLostMsgsCntEvo; - TH1* fhReadEvtsCntEvo; - - TH2* fhAdcTimeEvo; + TH1* fhMissedData; + TH1* fhAdcTime; TH2* fhMsLengthEvo; TH2* fhMsgsCntPerMsEvo; @@ -208,6 +191,7 @@ private: TH2* fhReadEvtsCntPerMsEvo; /// Waveform fitting + std::vector<TH1*> fvhHitFitWfmChan; std::vector<TH2*> fvhFitHarmonic1Chan; std::vector<TH2*> fvhFitHarmonic2Chan; std::vector<TH2*> fvhFitQaChan; @@ -218,9 +202,8 @@ private: TCanvas* fcChargesFPGA; TCanvas* fcChargesWfm; TCanvas* fcAmplitudes; + TCanvas* fcZeroLevels; TCanvas* fcGenCntsPerMs; - TCanvas* fcSpillCounts; - TCanvas* fcSpillCountsHori; TCanvas* fcWfmsAllChannels; std::vector<TCanvas*> fvcWfmsChan; TCanvas* fcPronyFit; diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.cxx index 6423306e8ab623f155d2902f19b7acb99deb45d7..861b4c477ba27309183ce13ea5723c98d4e039e6 100644 --- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.cxx +++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.cxx @@ -103,6 +103,9 @@ Bool_t CbmMcbm2018MonitorTaskPsd::InitContainers() { /// Transfer parameter values set from calling macro fMonitorAlgo->SetMonitorMode(fbMonitorMode); + fMonitorAlgo->SetMonitorChanMode(fbMonitorChanMode); + fMonitorAlgo->SetMonitorWfmMode(fbMonitorWfmMode); + fMonitorAlgo->SetMonitorFitMode(fbMonitorFitMode); fMonitorAlgo->SetHistoryHistoSize(fuHistoryHistoSize); fMonitorAlgo->SetChargeHistoArgs(fviHistoChargeArgs); fMonitorAlgo->SetAmplHistoArgs(fviHistoAmplArgs); diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.h b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.h index 1f1cfdac23244c3663c993f14f12c8e01cc3110f..55c5e4e644aa0dc70c6cad75e3fdd5e9111ef6b4 100644 --- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.h +++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.h @@ -42,6 +42,9 @@ public: inline void SetMonitorMode(Bool_t bFlagIn = kTRUE) { fbMonitorMode = bFlagIn; } + inline void SetMonitorChanMode(Bool_t bFlagIn = kTRUE) { fbMonitorChanMode = bFlagIn; } + inline void SetMonitorWfmMode(Bool_t bFlagIn = kTRUE) { fbMonitorWfmMode = bFlagIn; } + inline void SetMonitorFitMode(Bool_t bFlagIn = kTRUE) { fbMonitorFitMode = bFlagIn; } void SetIgnoreOverlapMs(Bool_t bFlagIn = kTRUE); inline void SetHistoryHistoSize(UInt_t inHistorySizeSec = 1800) { fuHistoryHistoSize = inHistorySizeSec; @@ -61,6 +64,9 @@ private: /// Control flags Bool_t fbMonitorMode; //! Switch ON the filling of a minimal set of histograms + Bool_t fbMonitorChanMode; //! Switch ON the filling channelwise histograms + Bool_t fbMonitorWfmMode; //! Switch ON the filling waveforms histograms + Bool_t fbMonitorFitMode; //! Switch ON the filling waveform fitting histograms Bool_t fbDebugMonitorMode; //! Switch ON the filling of a additional set of histograms diff --git a/macro/beamtime/mcbm2020/MonitorPsd.C b/macro/beamtime/mcbm2020/MonitorPsd.C index 7d23cd339ef4218f610be8f2116eed1e64803abf..6b3d70f39b1e2070b1378bfb99243691ec3517b5 100644 --- a/macro/beamtime/mcbm2020/MonitorPsd.C +++ b/macro/beamtime/mcbm2020/MonitorPsd.C @@ -53,6 +53,9 @@ void MonitorPsd(TString inFile = "", std::cout << std::endl; std::cout << ">>> MonitorPsd: Initialising..." << std::endl; CbmMcbm2018MonitorTaskPsd* monitor_psd = new CbmMcbm2018MonitorTaskPsd(); + monitor_psd->SetMonitorChanMode(kFALSE); + monitor_psd->SetMonitorWfmMode(kFALSE); + monitor_psd->SetMonitorFitMode(kFALSE); monitor_psd->SetIgnoreOverlapMs(); monitor_psd->SetHistoryHistoSize(3600);