From 479518152cb641335706bb5e997dab3e307b7fff Mon Sep 17 00:00:00 2001
From: Nikolay Karpushkin <karpushkin@inr.ru>
Date: Tue, 13 Jul 2021 11:14:52 +0200
Subject: [PATCH] Add new interface to unpack algo

---
 .../monitor/CbmMcbm2018MonitorAlgoPsd.cxx      | 18 +++++++-----------
 .../unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx    | 17 +++++++++++++----
 .../unpacker/CbmMcbm2018UnpackerAlgoPsd.h      |  1 +
 .../unpacker/CbmMcbm2018UnpackerTaskPsd.cxx    |  6 ++++--
 4 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx
index e68e1fff6c..31d4e0e278 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx
@@ -476,12 +476,6 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
         fuLostMsgsCntInMs += uNbMessages - PsdReader.GetTotalGbtWordsRead();
       }  //if (uNbMessages > 1)
 
-      if (fdPrevMsTime < 0.) fdPrevMsTime = fdMsTime;
-      else {
-        fhMsLengthEvo->Fill(fdMsTime - fdStartTime, 1e9 * (fdMsTime - fdPrevMsTime));
-        fdPrevMsTime = fdMsTime;
-      }
-
       /// Fill histograms
       FillHistograms();
 
@@ -665,11 +659,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
 
       }  //if(uNbMessages > 1)
 
-      if (fdPrevMsTime < 0.) fdPrevMsTime = fdMsTime;
-      else {
-        fhMsLengthEvo->Fill(fdMsTime - fdStartTime, 1e9 * (fdMsTime - fdPrevMsTime));
-        fdPrevMsTime = fdMsTime;
-      }
+
 
       /// Fill histograms
       FillHistograms();
@@ -680,6 +670,12 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
 
   }    // switch
 
+  if (fdPrevMsTime < 0.) fdPrevMsTime = fdMsTime;
+  else {
+    fhMsLengthEvo->Fill(fdMsTime - fdStartTime, 1e9 * (fdMsTime - fdPrevMsTime));
+    fdPrevMsTime = fdMsTime;
+  }
+
   return kTRUE;
 }
 
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx
index 5a2cef28b0..bc3ed12dd7 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx
@@ -155,7 +155,7 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessTs(const fles::Timeslice& ts)
 {
 
   fulCurrentTsIdx = ts.index();
-  fdTsStartTime   = static_cast<Double_t>(ts.descriptor(0, 0).idx);
+  fdTsStartTime   = static_cast<Double_t>(ts.descriptor(0, 0).idx); // FIXME ts.start_time();
 
   /// Ignore First TS as first MS is typically corrupt
   if (0 == fulCurrentTsIdx) { return kTRUE; }  // if( 0 == fulCurrentTsIdx )
@@ -305,7 +305,7 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u
       case 100: {
 
         PsdDataV100::PsdGbtReader PsdReader(pInBuff);
-        //if (fair::Logger::Logging(fair::Severity::debug)) PsdReader.SetPrintOutMode(true);
+        if (fair::Logger::Logging(fair::Severity::debug)) PsdReader.SetPrintOutMode(true);
 
         while (PsdReader.GetTotalGbtWordsRead() < uNbMessages) {
           int ReadResult = PsdReader.ReadMs();
@@ -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
+            double prev_hit_time = fdTsStartTime + (double) PsdReader.VectPackHdr.at(0).uAdcTime * 12.5
                                    - fdTimeOffsetNs;  //in ns
 
             //hit loop
@@ -337,7 +337,7 @@ 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  = (double) fulCurrentMsIdx /* * 25.*/
+              Double_t fdTime  = fdTsStartTime
                                 + (double) PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5
                                 - fdTimeOffsetNs;  /// Time of measurement [ns]
               Double_t fdEdep = (double) PsdReader.VectHitHdr.at(hit_iter).uSignalCharge
@@ -526,6 +526,15 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u
   return kTRUE;
 }
 
+std::pair<std::vector<CbmPsdDigi>*, std::vector<CbmPsdDsp>*> CbmMcbm2018UnpackerAlgoPsd::unpack(const fles::Timeslice* ts, std::uint16_t icomp)
+{
+  AddMsComponentToList(icomp, 0x80);
+  Reset();
+  ProcessTs(*ts);
+
+  return std::make_pair(fPsdDigiVector, fPsdDspVector);
+}
+
 Bool_t CbmMcbm2018UnpackerAlgoPsd::SetDigiOutputPointer(std::vector<CbmPsdDigi>* const pVector)
 {
   if (nullptr == fPsdDigiVector) {
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.h b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.h
index d9d64a4398..b149c706de 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.h
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.h
@@ -73,6 +73,7 @@ public:
   inline void SetDspWriteMode(Bool_t bFlagIn = kTRUE) { fbDebugWriteOutput = bFlagIn; }
   inline void SetTimeOffsetNs(Double_t dOffsetIn = 0.0) { fdTimeOffsetNs = dOffsetIn; }
 
+  std::pair<std::vector<CbmPsdDigi>*, std::vector<CbmPsdDsp>*> unpack(const fles::Timeslice* ts, std::uint16_t icomp);
 
 private:
   /// Control flags
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskPsd.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskPsd.cxx
index 06c6479b56..3b3db25b03 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskPsd.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskPsd.cxx
@@ -143,7 +143,7 @@ void CbmMcbm2018UnpackerTaskPsd::AddMsComponentToList(size_t component, UShort_t
   fUnpackerAlgo->AddMsComponentToList(component, usDetectorId);
 }
 
-Bool_t CbmMcbm2018UnpackerTaskPsd::DoUnpack(const fles::Timeslice& ts, size_t /*component*/)
+Bool_t CbmMcbm2018UnpackerTaskPsd::DoUnpack(const fles::Timeslice& ts, size_t component)
 {
 
   if (fbMonitorMode && bMcbm2018UnpackerTaskPsdResetHistos) {
@@ -152,11 +152,13 @@ Bool_t CbmMcbm2018UnpackerTaskPsd::DoUnpack(const fles::Timeslice& ts, size_t /*
     bMcbm2018UnpackerTaskPsdResetHistos = kFALSE;
   }  // if( fbMonitorMode && bMcbm2018UnpackerTaskPsdResetHistos )
 
+  fUnpackerAlgo->unpack(&ts, component);
+/*
   if (kFALSE == fUnpackerAlgo->ProcessTs(ts)) {
     LOG(error) << "Failed processing TS " << ts.index() << " in unpacker algorithm class";
     return kTRUE;
   }  // if( kFALSE == fUnpackerAlgo->ProcessTs( ts ) )
-
+*/
   /*
    /// Sort the buffers of hits due to the time offsets applied
    => Done in the algo!!!
-- 
GitLab