diff --git a/core/data/psd/CbmPsdDsp.h b/core/data/psd/CbmPsdDsp.h index 7e644f1c11edc2d58825630622972a7e297d267b..6b425cc00a52f2793a0036a2a77b0d2600a06009 100644 --- a/core/data/psd/CbmPsdDsp.h +++ b/core/data/psd/CbmPsdDsp.h @@ -111,10 +111,6 @@ public: void SetTime(Double_t time) { fdTime = time; } void SetEdep(Double_t edep) { fdEdep = edep; } -private: - /// BOOST serialization interface - friend class boost::serialization::access; - UInt_t fuAddress = 0; /// Unique channel address Double_t fdTime = -1.; /// Time of measurement [ns] Double_t fdEdep = 0.; /// Energy deposition from FPGA [MeV] @@ -159,6 +155,12 @@ private: ar& fuFitWfm; } +private: + /// BOOST serialization interface + friend class boost::serialization::access; + + + ClassDefNV(CbmPsdDsp, 1); }; diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx index c80997191a2ec630152a46f2c7994cf64ec73b9b..c20226f28df1fdd2ecf66c2a1b5009caa0b74e72 100644 --- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx +++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx @@ -266,8 +266,8 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u // If MS time is less than start time print error and return if (fdMsTime - fdStartTime < 0) { - LOG(error) << "negative time! "; - return kFALSE; + LOG(error) << "CbmMcbm2018UnpackerAlgoPsd:: Negative time! MS time = " << fdMsTime << "; Start time = " << fdStartTime; + //return kFALSE; } // Compute the number of complete messages in the input microslice buffer @@ -315,7 +315,7 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u if (ReadResult == 0) { double prev_hit_time = - (double) fulCurrentMsIdx * 25. + PsdReader.VectPackHdr.at(0).uAdcTime * 12.5 - fdTimeOffsetNs; //in ns + (double) fulCurrentMsIdx /* * 25.*/ + PsdReader.VectPackHdr.at(0).uAdcTime * 12.5 - fdTimeOffsetNs; //in ns //hit loop for (uint64_t hit_iter = 0; hit_iter < PsdReader.VectHitHdr.size(); hit_iter++) { @@ -328,14 +328,6 @@ 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; - double dEdep = (double) PsdReader.VectHitHdr.at(hit_iter).uSignalCharge - / fUnpackPar->GetMipCalibration(uHitChannel); // ->now in MeV - uint16_t uZeroLevel = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel; - double dHitTime = (double) fulCurrentMsIdx * 25. - + (double) PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5 - fdTimeOffsetNs; //in ns - std::vector<uint16_t> uWfm = PsdReader.VectHitData.at(hit_iter).uWfm; - - if (uHitChannel >= fviPsdChUId.size()) { LOG(error) << "hit channel number out of range! channel index: " << uHitChannel << " max: " << fviPsdChUId.size(); @@ -343,11 +335,11 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u } UInt_t uChanUId = fviPsdChUId[uHitChannel]; //unique ID - UInt_t fuAddress = uChanUId; /// Unique channel address - Double_t fdTime = dHitTime; /// Time of measurement [ns] - Double_t fdEdep = dEdep; /// Energy deposition from FPGA [MeV] - UInt_t fuZL = uZeroLevel; /// ZeroLevel from waveform [adc counts] + Double_t fdTime = (double) fulCurrentMsIdx /* * 25.*/ + + (double) PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5 - fdTimeOffsetNs; /// Time of measurement [ns] + Double_t fdEdep = (double) PsdReader.VectHitHdr.at(hit_iter).uSignalCharge / fUnpackPar->GetMipCalibration(uHitChannel); /// Energy deposition from FPGA [MeV] + UInt_t fuZL = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel; /// ZeroLevel from waveform [adc counts] Double_t fdAccum = (double) PsdReader.VectHitHdr.at(hit_iter).uFeeAccum; /// FPGA FEE Accumulator Double_t fdAdcTime = (double) PsdReader.VectPackHdr.at(hit_iter).uAdcTime; /// Adc time of measurement @@ -355,7 +347,7 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u Double_t fdAmpl = 0.; /// Amplitude from waveform [mV] UInt_t fuMinimum = 0; /// Minimum of waveform [adc samples] UInt_t fuTimeMax = 0; /// Time of maximum in waveform [adc samples] - std::vector<uint16_t> fuWfm = uWfm; + std::vector<uint16_t> fuWfm = PsdReader.VectHitData.at(hit_iter).uWfm; Double_t fdFitAmpl = 0.; /// Amplitude from fit of waveform [mV] Double_t fdFitZL = 0.; /// ZeroLevel from fit of waveform [adc counts] @@ -364,15 +356,15 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u Double_t fdFitTimeMax = -1.; /// Time of maximum in fit of waveform [adc samples] std::vector<uint16_t> fuFitWfm; - if (!uWfm.empty()) { + if (!fuWfm.empty()) { - int32_t iHitChargeWfm = std::accumulate(uWfm.begin(), uWfm.end(), -uZeroLevel * uWfm.size()); - auto const max_iter = std::max_element(uWfm.begin(), uWfm.end()); - assert(max_iter != uWfm.end()); - if (max_iter == uWfm.end()) break; - uint8_t uHitTimeMax = std::distance(uWfm.begin(), max_iter); - int32_t iHitAmlpitude = *max_iter - uZeroLevel; - auto const min_iter = std::min_element(uWfm.begin(), uWfm.end()); + int32_t iHitChargeWfm = std::accumulate(fuWfm.begin(), fuWfm.end(), -fuZL * fuWfm.size()); + auto const max_iter = std::max_element(fuWfm.begin(), fuWfm.end()); + assert(max_iter != fuWfm.end()); + if (max_iter == fuWfm.end()) break; + uint8_t uHitTimeMax = std::distance(fuWfm.begin(), max_iter); + int32_t iHitAmlpitude = *max_iter - fuZL; + auto const min_iter = std::min_element(fuWfm.begin(), fuWfm.end()); uint32_t uHitMinimum = *min_iter; fdEdepWfm = (double) iHitChargeWfm / fUnpackPar->GetMipCalibration(uHitChannel); // ->now in MeV @@ -381,11 +373,11 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u fuMinimum = uHitMinimum; int gate_beg = 0; - int gate_end = (int) uWfm.size() - 1; + int gate_end = (int) fuWfm.size() - 1; PsdSignalFitting::PronyFitter Pfitter(2, 2, gate_beg, gate_end); Pfitter.SetDebugMode(0); - //std::vector<int> iWfm(uWfm.begin(), uWfm.end()); - Pfitter.SetWaveform(uWfm, uZeroLevel); + //std::vector<int> iWfm(fuWfm.begin(), fuWfm.end()); + Pfitter.SetWaveform(fuWfm, fuZL); int SignalBeg = 4; //0.6, 0.2 // 0.72 0.38 std::complex<float> first_fit_harmonic = {0.72, 0.0}; @@ -416,12 +408,12 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u if (fbDebugWriteOutput && (fPsdDspVector != nullptr)) { fPsdDspVector->emplace_back(dsp); } //DEBUG - if (dHitTime < prev_hit_time) printf("negative time!\n"); + if (fdTime < prev_hit_time) printf("negative time btw hits! %f after %f \n", fdTime, prev_hit_time); //DEBUG END - prev_hit_time = dHitTime; + prev_hit_time = fdTime; //DEBUG - } // for(int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) + } // for (uint64_t hit_iter = 0; hit_iter < PsdReader.VectHitHdr.size(); hit_iter++) { } else if (ReadResult == 1) { LOG(error) << "no pack headers in message!";