From 0157edc91d159fa0fab962bb5b32f05f77987f74 Mon Sep 17 00:00:00 2001
From: Dominik Smith <smith@th.physik.uni-frankfurt.de>
Date: Wed, 28 Jul 2021 12:19:32 +0200
Subject: [PATCH] CbmStsUnpackAlgo: Added DPB offset to FEB index calculation
 in processHitInfo().

---
 reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx | 11 +++++++++--
 reco/detectors/sts/unpack/CbmStsUnpackAlgo.h   |  3 +++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
index 254f7f5404..8bc5076f92 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
@@ -146,6 +146,9 @@ Bool_t CbmStsUnpackAlgo::initParSet(CbmMcbm2018StsPar* parset)
   // Get Number of Channels per FEB
   fNrChsPerFeb = parset->GetNbChanPerFeb();
 
+  // Get Number of FEBs per CROB
+  fNrFebsPerCrob = parset->GetNbFebsPerCrob();
+
   for (size_t ielink = 0; ielink < fNrElinksPerCrob; ++ielink) {
     fElinkIdxToFebIdxVec.emplace_back(parset->ElinkIdxToFebIdx(ielink));
     fElinkIdxToAsicIdxVec.emplace_back(
@@ -451,13 +454,16 @@ void CbmStsUnpackAlgo::processHitInfo(const stsxyter::Message& mess)
 {
   const uint16_t usElinkIdx = mess.GetLinkIndexHitBinning();
   const uint32_t uCrobIdx   = usElinkIdx / fNrElinksPerCrob;
-  const int32_t uFebIdx     = fElinkIdxToFebIdxVec.at(usElinkIdx);
+  int32_t uFebIdx           = fElinkIdxToFebIdxVec.at(usElinkIdx);
   if (-1 == uFebIdx) {
     LOG(warning) << "CbmAlgoUnpackSts::DoUnpack => "
                  << "Wrong elink Idx! Elink raw " << Form("%d remap %d", usElinkIdx, uFebIdx);
     return;
   }
-  // Get the asix index
+  //uFebIdx +=  ( fuCurrDpbIdx * fNrCrobPerDpb + ____CrobIndexCalculationIfNeeded___() ) * fuNbFebsPerCrob;
+  uFebIdx += (fuCurrDpbIdx * fNrCrobPerDpb) * fNrFebsPerCrob;  //no Crob index calculation for now
+
+  // Get the asic index
   uint32_t uAsicIdx = getAsicIndex(fuCurrDpbIdx, uCrobIdx, usElinkIdx);
 
   const uint16_t usChan     = mess.GetHitChannel();
@@ -478,6 +484,7 @@ void CbmStsUnpackAlgo::processHitInfo(const stsxyter::Message& mess)
   fvvusLastTsMsbChan[uAsicIdx][usChan]      = fvulCurrentTsMsb[fuCurrDpbIdx];
   fvvusLastTsMsbCycleChan[uAsicIdx][usChan] = fvuCurrentTsMsbCycle[fuCurrDpbIdx];
 
+
   // Compute the Full time stamp
   const int64_t ulHitTime = getFullTimeStamp(usRawTs);
 
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
index 079a36be8c..502e9b4c27 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
@@ -246,6 +246,9 @@ protected:
   /** @brief Number of CROBs per DPB */
   uint32_t fNrCrobPerDpb = 0;  //!
 
+  /** @brief Number of FEBs per CROB */
+  uint32_t fNrFebsPerCrob = 0;  //!
+
   /** @brief Vector used for the translation between eLink index and FEB index*/
   std::vector<int> fElinkIdxToFebIdxVec = {};
 
-- 
GitLab