diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx index 0d11bc05e9b778c06c0a8a4677eadd61dfa8e715..bd9f56e525027cdd71327808b4d58d06855394d1 100644 --- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx +++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx @@ -76,6 +76,9 @@ CbmMcbm2018MonitorAlgoPsd::CbmMcbm2018MonitorAlgoPsd() , fuReadMsgsCntInMs(0) , fuLostMsgsCntInMs(0) , fuReadEvtCntInMs(0) + , fvhHitZLChanEvo(kuNbChanPsd, nullptr) + , fvhHitLPChanEvo(kuNbChanPsd, nullptr) + , fvhHitFAChanEvo(kuNbChanPsd, nullptr) , fvhHitChargeChan(kuNbChanPsd, nullptr) , fvhHitZeroLevelChan(kuNbChanPsd, nullptr) , fvhHitAmplChan(kuNbChanPsd, nullptr) @@ -363,48 +366,55 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM } switch (fuRawDataVersion) { - case 000: { +// -------------------------------------------------------------------------------------------------- + case 100: { - PsdDataV000::PsdGbtReader PsdReader(pInBuff); + PsdDataV100::PsdGbtReader PsdReader(pInBuff); if (fair::Logger::Logging(fair::Severity::debug)) PsdReader.SetPrintOutMode(true); + // every 80bit gbt word is decomposed into two 64bit words if (uNbMessages > 1) { while (PsdReader.GetTotalGbtWordsRead() < uNbMessages) { - int ReadResult = PsdReader.ReadEventFles(); - if (PsdReader.EvHdrAb.uHitsNumber > kuNbChanPsd) { - LOG(error) << "too many triggered channels! In header: " << PsdReader.EvHdrAb.uHitsNumber - << " in PSD: " << GetNbChanPsd(); - break; - } - + int ReadResult = PsdReader.ReadMs(); if (ReadResult == 0) { fuCountsLastSecond++; - fhAdcTime->Fill(PsdReader.EvHdrAc.uAdcTime); fuReadEvtCntInMs++; //hit loop - for (int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) { - UInt_t uHitChannel = PsdReader.VectHitHdr.at(hit_iter).uHitChannel; - UInt_t uSignalCharge = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge; - UInt_t uZeroLevel = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel; + for (uint64_t hit_iter = 0; hit_iter < PsdReader.VectHitHdr.size(); hit_iter++) { + if (PsdReader.VectPackHdr.size() != PsdReader.VectHitHdr.size()) { + LOG(error) << "Different vector headers sizes!" + << " in VectPackHdr " << PsdReader.VectPackHdr.size() << " in VectHitHdr " + << PsdReader.VectHitHdr.size() << "\n"; + break; + } + + uint16_t uHitChannel = PsdReader.VectHitHdr.at(hit_iter).uHitChannel; + //uint8_t uLinkIndex = PsdReader.VectPackHdr.at(hit_iter).uLinkIndex; + uint32_t uSignalCharge = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge; + uint16_t uZeroLevel = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel; + uint32_t uAccum = PsdReader.VectHitHdr.at(hit_iter).uFeeAccum; + //double dHitTime = (double) fulCurrentMsIdx + PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5; //in ns + //double dHitTime = PsdReader.MsHdr.ulMicroSlice*1000. + PsdReader.VectPackHdr.at(hit_iter).uAdcTime*12.5; //in ns std::vector<uint16_t> uWfm = PsdReader.VectHitData.at(hit_iter).uWfm; uSignalCharge /= kfAdc_to_mV; // ->now in mV - if (uHitChannel >= kuNbChanPsd) //uHitChannel numerated from 0 - { + fhAdcTime->Fill(PsdReader.VectPackHdr.at(hit_iter).uAdcTime); + + //uHitChannel numerated from 0 + if (uHitChannel >= kuNbChanPsd) { LOG(error) << "hit channel number out of range! channel index: " << uHitChannel << " max: " << GetNbChanPsd(); break; } - //Hit header - fhHitChargeMap->Fill(uHitChannel, uSignalCharge); - fhHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime); - fhChanHitMapEvo->Fill(uHitChannel, - fdMsTime - fdStartTime); //should be placed map(channel) + //Pack header + fhHitChargeMap->Fill(uHitChannel, uSignalCharge); + fhChanHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime); //should be placed map(channel) if (fbMonitorChanMode) { - fvhHitChargeChan[uHitChannel]->Fill(uSignalCharge); fvhHitZeroLevelChan[uHitChannel]->Fill(uZeroLevel); + fvhHitZLChanEvo[uHitChannel]->Fill(fdMsTime - fdStartTime, uZeroLevel); + fvhHitFAChanEvo[uHitChannel]->Fill(fdMsTime - fdStartTime, uAccum); //Hit data int32_t iHitAmlpitude = 0; @@ -417,7 +427,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM auto const max_iter = std::max_element(uWfm.begin(), uWfm.end()); assert(max_iter != uWfm.end()); if (max_iter == uWfm.end()) break; - // uint8_t hit_time_max = std::distance(uWfm.begin(), max_iter); + //uint8_t hit_time_max = std::distance(uWfm.begin(), max_iter); iHitAmlpitude = *max_iter - uZeroLevel; iHitAmlpitude /= kfAdc_to_mV; iHitChargeWfm /= kfAdc_to_mV; @@ -425,6 +435,9 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM fvhHitChargeByWfmChan[uHitChannel]->Fill(iHitChargeWfm); if (fbMonitorWfmMode) { + fvhHitLPChanEvo[uHitChannel]->Fill(fdMsTime - fdStartTime, uWfm.back()); + for (UInt_t wfm_iter = 0; wfm_iter < uWfm.size(); wfm_iter++) + 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]", @@ -472,13 +485,12 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM 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++) { + 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)); - } + 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); @@ -488,20 +500,19 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM } //if (fbMonitorFitMode) } //if (fbMonitorChanMode) + } // for(int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) } else if (ReadResult == 1) { - LOG(error) << "no event headers in message!"; + LOG(error) << "no pack headers in message!"; break; } else if (ReadResult == 2) { - LOG(error) << "check number of waveform points! In header: " << PsdReader.HitHdr.uWfmPoints - << " should be: " << 8; + LOG(error) << "wrong channel! In header: " << PsdReader.HitHdr.uHitChannel; break; } else if (ReadResult == 3) { - LOG(error) << "wrong amount of hits read! In header: " << PsdReader.EvHdrAb.uHitsNumber - << " in hit vector: " << PsdReader.VectHitHdr.size(); + LOG(error) << "check number of waveform points! In header: " << PsdReader.HitHdr.uWfmWords - 1; break; } else { @@ -511,6 +522,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM } // while(PsdReader.GetTotalGbtWordsRead()<uNbMessages) + if (uNbMessages != PsdReader.GetTotalGbtWordsRead()) { fbPsdMissedData = kTRUE; LOG(error) << "Wrong amount of messages read!" @@ -528,16 +540,10 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM } } - if (fulCurrentMsIdx != PsdReader.EvHdrAb.ulMicroSlice) - LOG(error) << "Wrong MS index!" - << " in microslice " << fulCurrentMsIdx << " by PsdReader " << PsdReader.EvHdrAb.ulMicroSlice - << "\n"; - fuMsgsCntInMs += uNbMessages; fuReadMsgsCntInMs += PsdReader.GetTotalGbtWordsRead(); fuLostMsgsCntInMs += uNbMessages - PsdReader.GetTotalGbtWordsRead(); - - } //if(uNbMessages > 1) + } //if (uNbMessages > 1) if (fdPrevMsTime < 0.) fdPrevMsTime = fdMsTime; else { @@ -549,52 +555,50 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM FillHistograms(); break; - } // case 0 - - case 100: { + } // case 1 +// -------------------------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------------------------- + case 000: { - PsdDataV100::PsdGbtReader PsdReader(pInBuff); + PsdDataV000::PsdGbtReader PsdReader(pInBuff); if (fair::Logger::Logging(fair::Severity::debug)) PsdReader.SetPrintOutMode(true); - // every 80bit gbt word is decomposed into two 64bit words if (uNbMessages > 1) { while (PsdReader.GetTotalGbtWordsRead() < uNbMessages) { - int ReadResult = PsdReader.ReadMs(); + int ReadResult = PsdReader.ReadEventFles(); + if (PsdReader.EvHdrAb.uHitsNumber > kuNbChanPsd) { + LOG(error) << "too many triggered channels! In header: " << PsdReader.EvHdrAb.uHitsNumber + << " in PSD: " << GetNbChanPsd(); + break; + } + if (ReadResult == 0) { fuCountsLastSecond++; + fhAdcTime->Fill(PsdReader.EvHdrAc.uAdcTime); fuReadEvtCntInMs++; //hit loop - for (uint64_t hit_iter = 0; hit_iter < PsdReader.VectHitHdr.size(); hit_iter++) { - if (PsdReader.VectPackHdr.size() != PsdReader.VectHitHdr.size()) { - LOG(error) << "Different vector headers sizes!" - << " in VectPackHdr " << PsdReader.VectPackHdr.size() << " in VectHitHdr " - << PsdReader.VectHitHdr.size() << "\n"; - break; - } - - uint16_t uHitChannel = PsdReader.VectHitHdr.at(hit_iter).uHitChannel; - // uint8_t uLinkIndex = PsdReader.VectPackHdr.at(hit_iter).uLinkIndex; - uint32_t uSignalCharge = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge; - uint16_t uZeroLevel = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel; - // double dHitTime = (double) fulCurrentMsIdx + PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5; //in ns - //double dHitTime = PsdReader.MsHdr.ulMicroSlice*1000. + PsdReader.VectPackHdr.at(hit_iter).uAdcTime*12.5; //in ns + for (int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) { + UInt_t uHitChannel = PsdReader.VectHitHdr.at(hit_iter).uHitChannel; + UInt_t uSignalCharge = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge; + UInt_t uZeroLevel = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel; std::vector<uint16_t> uWfm = PsdReader.VectHitData.at(hit_iter).uWfm; uSignalCharge /= kfAdc_to_mV; // ->now in mV - fhAdcTime->Fill(PsdReader.VectPackHdr.at(hit_iter).uAdcTime); - - //uHitChannel numerated from 0 - if (uHitChannel >= kuNbChanPsd) { + if (uHitChannel >= kuNbChanPsd) //uHitChannel numerated from 0 + { LOG(error) << "hit channel number out of range! channel index: " << uHitChannel << " max: " << GetNbChanPsd(); break; } - - //Pack header + //Hit header fhHitChargeMap->Fill(uHitChannel, uSignalCharge); - fhChanHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime); //should be placed map(channel) + fhHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime); + fhChanHitMapEvo->Fill(uHitChannel, + fdMsTime - fdStartTime); //should be placed map(channel) + if (fbMonitorChanMode) { + fvhHitChargeChan[uHitChannel]->Fill(uSignalCharge); fvhHitZeroLevelChan[uHitChannel]->Fill(uZeroLevel); @@ -609,7 +613,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM auto const max_iter = std::max_element(uWfm.begin(), uWfm.end()); assert(max_iter != uWfm.end()); if (max_iter == uWfm.end()) break; - // uint8_t hit_time_max = std::distance(uWfm.begin(), max_iter); + //uint8_t hit_time_max = std::distance(uWfm.begin(), max_iter); iHitAmlpitude = *max_iter - uZeroLevel; iHitAmlpitude /= kfAdc_to_mV; iHitChargeWfm /= kfAdc_to_mV; @@ -617,6 +621,8 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM fvhHitChargeByWfmChan[uHitChannel]->Fill(iHitChargeWfm); if (fbMonitorWfmMode) { + for (UInt_t wfm_iter = 0; wfm_iter < uWfm.size(); wfm_iter++) + 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]", @@ -664,13 +670,12 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM 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++) { + 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)); - } + 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); @@ -680,19 +685,20 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM } //if (fbMonitorFitMode) } //if (fbMonitorChanMode) - } // for(int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) } else if (ReadResult == 1) { - LOG(error) << "no pack headers in message!"; + LOG(error) << "no event headers in message!"; break; } else if (ReadResult == 2) { - LOG(error) << "wrong channel! In header: " << PsdReader.HitHdr.uHitChannel; + LOG(error) << "check number of waveform points! In header: " << PsdReader.HitHdr.uWfmPoints + << " should be: " << 8; break; } else if (ReadResult == 3) { - LOG(error) << "check number of waveform points! In header: " << PsdReader.HitHdr.uWfmWords - 1; + LOG(error) << "wrong amount of hits read! In header: " << PsdReader.EvHdrAb.uHitsNumber + << " in hit vector: " << PsdReader.VectHitHdr.size(); break; } else { @@ -702,7 +708,6 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM } // while(PsdReader.GetTotalGbtWordsRead()<uNbMessages) - if (uNbMessages != PsdReader.GetTotalGbtWordsRead()) { fbPsdMissedData = kTRUE; LOG(error) << "Wrong amount of messages read!" @@ -720,10 +725,16 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM } } + if (fulCurrentMsIdx != PsdReader.EvHdrAb.ulMicroSlice) + LOG(error) << "Wrong MS index!" + << " in microslice " << fulCurrentMsIdx << " by PsdReader " << PsdReader.EvHdrAb.ulMicroSlice + << "\n"; + fuMsgsCntInMs += uNbMessages; fuReadMsgsCntInMs += PsdReader.GetTotalGbtWordsRead(); fuLostMsgsCntInMs += uNbMessages - PsdReader.GetTotalGbtWordsRead(); - } //if (uNbMessages > 1) + + } //if(uNbMessages > 1) if (fdPrevMsTime < 0.) fdPrevMsTime = fdMsTime; else { @@ -735,8 +746,9 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM FillHistograms(); break; + } // case 0 +// -------------------------------------------------------------------------------------------------- - } // case 1 } // switch return kTRUE; @@ -808,6 +820,21 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() if (fbMonitorChanMode) { for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) { + + fvhHitZLChanEvo[uChan] = new TH2I(Form("hHitZLChanEvo%03u", uChan), + Form("Hits ZeroLevel evolution for channel %03u; ZeroLevel [adc counts]", uChan), + fuHistoryHistoSize, 0, fuHistoryHistoSize, fviHistoZLArgs.at(0), fviHistoZLArgs.at(1), fviHistoZLArgs.at(2)); + fvhHitZLChanEvo[uChan]->SetMarkerColor(kRed); + fvhHitLPChanEvo[uChan] = new TH2I(Form("hHitLPChanEvo%03u", uChan), + Form("Hits LastPoint evolution for channel %03u; ZeroLevel [adc counts]", uChan), + fuHistoryHistoSize, 0, fuHistoryHistoSize, fviHistoZLArgs.at(0), fviHistoZLArgs.at(1), fviHistoZLArgs.at(2)); + fvhHitLPChanEvo[uChan]->SetMarkerColor(kBlue); + fvhHitFAChanEvo[uChan] = new TH2I(Form("hHitFAChanEvo%03u", uChan), + Form("Hits FeeAccumulator evolution for channel %03u; ZeroLevel [adc counts]", uChan), + fuHistoryHistoSize, 0, fuHistoryHistoSize, fviHistoZLArgs.at(0), fviHistoZLArgs.at(1), fviHistoZLArgs.at(2)); + fvhHitFAChanEvo[uChan]->SetMarkerColor(kOrange); + + fvhHitChargeChan[uChan] = new TH1I(Form("hHitChargeChan%03u", uChan), Form("Hits charge distribution for channel %03u; Charge [mV]", uChan), fviHistoChargeArgs.at(0), fviHistoChargeArgs.at(1), fviHistoChargeArgs.at(2)); @@ -828,13 +855,17 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() uChan), fviHistoChargeArgs.at(0), fviHistoChargeArgs.at(1), fviHistoChargeArgs.at(2)); + + AddHistoToVector(fvhHitZLChanEvo[uChan], sFolder); + AddHistoToVector(fvhHitLPChanEvo[uChan], sFolder); + AddHistoToVector(fvhHitFAChanEvo[uChan], sFolder); 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] = new TH1I(Form("hHitWfmChan%03u", uChan), Form("HitWfmChan%03u", uChan), 32, 0, 32); fvhHitWfmChan[uChan]->SetMarkerStyle(31); fvhHitWfmChan[uChan]->SetMarkerSize(0.5); @@ -843,7 +874,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() 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); + Form("HitWfmChan%03uRange%02uExample%02u", uChan, uWfmRangeIter, uWfmExampleIter), 32, 0, 32); } // for( UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; uWfmRangeIter ++) } // for( UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; uWfmExampleIter ++) @@ -852,7 +883,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() if (fbMonitorFitMode) { fvhHitFitWfmChan[uChan] = - new TH1I(Form("hHitFitWfmChan%03u", uChan), Form("HitFitWfmChan%03u", uChan), 8, 0, 8); + new TH1I(Form("hHitFitWfmChan%03u", uChan), Form("HitFitWfmChan%03u", uChan), 32, 0, 32); fvhHitFitWfmChan[uChan]->SetLineColor(kRed); fvhHitFitWfmChan[uChan]->SetLineWidth(2); @@ -975,13 +1006,28 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() if (fbMonitorChanMode) { + /*******************************************************************/ + /// ZL evo all channels + fcZLevo= new TCanvas("cZLevo", "ZeroLevel evolaution in all channels", w, h); + fcZLevo->DivideSquare(kuNbChanPsd); + + for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { + fcZLevo->cd(1 + uChan); + fvhHitZLChanEvo[uChan]->Draw(); + fvhHitLPChanEvo[uChan]->Draw("same"); + fvhHitFAChanEvo[uChan]->Draw("same"); + } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) + + AddCanvasToVector(fcZLevo, "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); + fcChargesFPGA->cd(1 + uChan)->SetLogy(); fvhHitChargeChan[uChan]->Draw(); } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) @@ -994,7 +1040,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() fcChargesWfm->DivideSquare(kuNbChanPsd); for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fcChargesWfm->cd(1 + uChan); + fcChargesWfm->cd(1 + uChan)->SetLogy(); fvhHitChargeByWfmChan[uChan]->Draw(); } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) @@ -1007,7 +1053,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms() fcAmplitudes->DivideSquare(kuNbChanPsd); for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) { - fcAmplitudes->cd(1 + uChan); + fcAmplitudes->cd(1 + uChan)->SetLogy(); fvhHitAmplChan[uChan]->Draw(); } // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++) @@ -1117,6 +1163,9 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ResetHistograms(Bool_t bResetTime) if (fbMonitorChanMode) { for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) { + fvhHitZLChanEvo[uChan]->Reset(); + fvhHitLPChanEvo[uChan]->Reset(); + fvhHitFAChanEvo[uChan]->Reset(); fvhHitChargeChan[uChan]->Reset(); fvhHitZeroLevelChan[uChan]->Reset(); fvhHitAmplChan[uChan]->Reset(); diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h index 995d5c152baf39c09a821736e83e694bd3e2d6b2..69acfdf50b84db60dca36ff0940cb7974b6bc4ab 100644 --- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h +++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h @@ -140,6 +140,9 @@ private: /// Channel rate plots std::vector<UInt_t> fvuHitCntChanMs; + std::vector<TH2*> fvhHitZLChanEvo; + std::vector<TH2*> fvhHitLPChanEvo; + std::vector<TH2*> fvhHitFAChanEvo; std::vector<TH1*> fvhHitChargeChan; std::vector<TH1*> fvhHitZeroLevelChan; std::vector<TH1*> fvhHitAmplChan; @@ -186,6 +189,7 @@ private: /// Canvases TCanvas* fcSummary; TCanvas* fcHitMaps; + TCanvas* fcZLevo; TCanvas* fcChargesFPGA; TCanvas* fcChargesWfm; TCanvas* fcAmplitudes; diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx index 44409d020a1312ced3f9335f816043ea3e920803..fdbaa4054c5ebb4e7fb8f2989c2f441abc29ee9c 100644 --- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx +++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx @@ -349,7 +349,7 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u } uint8_t uHitChannel = PsdReader.VectHitHdr.at(hit_iter).uHitChannel; - uint8_t uLinkIndex = PsdReader.VectPackHdr.at(hit_iter).uLinkIndex; + //uint8_t uLinkIndex = PsdReader.VectPackHdr.at(hit_iter).uLinkIndex; uint32_t uSignalCharge = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge; uint16_t uZeroLevel = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel; double dHitTime = (double) fulCurrentMsIdx + PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5; //in ns @@ -395,7 +395,7 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u digi.fdEdepWfm = dEdepWfm; digi.fdAmpl = dAmpl; digi.fuTimeMax = uHitTimeMax; - digi.ffFitEdep = uWfm.back(); + digi.fdFitEdep = uWfm.back(); fDigiVect.emplace_back(digi);