From 5cbe192e67f80498888a380a57427f56c6522b32 Mon Sep 17 00:00:00 2001 From: Alexandru Bercuci <abercuci@niham.nipne.ro> Date: Thu, 23 Feb 2023 15:10:26 +0200 Subject: [PATCH] add hit time synchronization as derived from 2391 run. --- macro/beamtime/mcbm2022/mcbm_event_reco_L1.C | 1 + reco/detectors/trd/CbmTrdClusterFinder.cxx | 2 +- reco/detectors/trd/CbmTrdHitProducer.cxx | 3 ++- reco/detectors/trd/CbmTrdHitProducer.h | 6 ++++-- reco/detectors/trd/CbmTrdModuleRec2D.cxx | 4 ++-- reco/detectors/trd/CbmTrdModuleRec2D.h | 5 +++++ 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C b/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C index 169b1fd751..49fd93511d 100644 --- a/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C +++ b/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C @@ -461,6 +461,7 @@ Bool_t mcbm_event_reco_L1(UInt_t uRunId = 2391, std::cout << "-I- : Added task " << trdCluster->GetName() << std::endl; CbmTrdHitProducer* trdHit = new CbmTrdHitProducer(); + trdHit->SetHitTimeOffset(363); // hit time synchronization for TRD2D determined on run 2391 run->AddTask(trdHit); std::cout << "-I- : Added task " << trdHit->GetName() << std::endl; } diff --git a/reco/detectors/trd/CbmTrdClusterFinder.cxx b/reco/detectors/trd/CbmTrdClusterFinder.cxx index 10aad5baa8..2d239d67ca 100644 --- a/reco/detectors/trd/CbmTrdClusterFinder.cxx +++ b/reco/detectors/trd/CbmTrdClusterFinder.cxx @@ -62,7 +62,7 @@ CbmTrdClusterFinder::~CbmTrdClusterFinder() fClusters->Delete(); delete fClusters; } - if (fGeoPar) { delete fGeoPar; } + // if (fGeoPar) { delete fGeoPar; } // if(fModuleInfo){ // delete fModuleInfo; // } diff --git a/reco/detectors/trd/CbmTrdHitProducer.cxx b/reco/detectors/trd/CbmTrdHitProducer.cxx index 0a9ab6b829..7f77912475 100644 --- a/reco/detectors/trd/CbmTrdHitProducer.cxx +++ b/reco/detectors/trd/CbmTrdHitProducer.cxx @@ -52,7 +52,7 @@ CbmTrdHitProducer::~CbmTrdHitProducer() { fHits->Clear(); delete fHits; - if (fGeoPar) delete fGeoPar; + //if (fGeoPar) delete fGeoPar; } //____________________________________________________________________________________ @@ -101,6 +101,7 @@ CbmTrdModuleRec* CbmTrdHitProducer::AddModule(Int_t address, const CbmTrdParModG if (moduleType >= 9) { module = fModules[address] = new CbmTrdModuleRec2D(address); ((CbmTrdModuleRec2D*) module)->SetUseHelpers(CbmTrdClusterFinder::UseRecoHelpers()); + ((CbmTrdModuleRec2D*) module)->SetHitTimeOffset(fHitTimeOffset); } else { module = fModules[address] = new CbmTrdModuleRecR(address); diff --git a/reco/detectors/trd/CbmTrdHitProducer.h b/reco/detectors/trd/CbmTrdHitProducer.h index 9cd1c6e2b3..c6fee35991 100644 --- a/reco/detectors/trd/CbmTrdHitProducer.h +++ b/reco/detectors/trd/CbmTrdHitProducer.h @@ -60,6 +60,8 @@ public: */ virtual void Finish(); virtual void SetParContainers(); + /** \brief Correction of hit time in TRD2D due to different processes */ + void SetHitTimeOffset(int dt) { fHitTimeOffset = dt; } private: CbmTrdHitProducer(const CbmTrdHitProducer&); @@ -138,8 +140,8 @@ private: /** @brief Total processing time [RealTime]. */ Float_t fProcessTime = 0; - - + int fHitTimeOffset = 0; ///< hit time correction for synchronization + ClassDef(CbmTrdHitProducer, 2); }; diff --git a/reco/detectors/trd/CbmTrdModuleRec2D.cxx b/reco/detectors/trd/CbmTrdModuleRec2D.cxx index 837d67caf5..df0caa2386 100644 --- a/reco/detectors/trd/CbmTrdModuleRec2D.cxx +++ b/reco/detectors/trd/CbmTrdModuleRec2D.cxx @@ -520,7 +520,7 @@ Bool_t CbmTrdModuleRec2D::MergeHits(CbmTrdHit* h, Int_t a0) h->SetDy(edy); h->SetDz(0.); h->SetDxy(0.); - h->SetTime(CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP) * (vt0 + time) - tdrift + 30.29, edt); + h->SetTime(CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP) * (vt0 + time) - tdrift + 30.29 + fHitTimeOff, edt); h->SetELoss(e); h->SetClassType(); h->SetMaxType(IsMaxTilt()); @@ -732,7 +732,7 @@ Bool_t CbmTrdModuleRec2D::BuildHit(CbmTrdHit* h) h->SetDy(edy); h->SetDz(0); h->SetDxy(0.); - h->SetTime(CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP) * (vt0 + time) - tdrift + 30.29, edt); + h->SetTime(CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP) * (vt0 + time) - tdrift + 30.29 + fHitTimeOff, edt); h->SetELoss(e); h->SetClassType(); h->SetMaxType(IsMaxTilt()); diff --git a/reco/detectors/trd/CbmTrdModuleRec2D.h b/reco/detectors/trd/CbmTrdModuleRec2D.h index f74f0e9cb4..dd9fcac98c 100644 --- a/reco/detectors/trd/CbmTrdModuleRec2D.h +++ b/reco/detectors/trd/CbmTrdModuleRec2D.h @@ -125,6 +125,10 @@ public: { use ? SETBIT(fConfigMap, ECbmTrdModuleRec2D::kHelpers) : CLRBIT(fConfigMap, ECbmTrdModuleRec2D::kHelpers); } + /** \brief Time offset to synchronize TRD2D hits to the rest of detectors + * \param dt offset in [ns] + */ + void SetHitTimeOffset(int dt) { fHitTimeOff = dt; } protected: private: @@ -205,6 +209,7 @@ private: UChar_t vrM = 0; //! maximum row UChar_t viM = 0; //! index of maximum signal in the projection UShort_t vyM = 0; //! bit map for cluster topology classification + int fHitTimeOff = 0; //! hit time offset for synchronization std::vector<Double_t> vs; //! working copy of signals from cluster std::vector<Double_t> vse; //! working copy of signal errors from cluster std::vector<Char_t> vt; //! working copy of signal relative timing -- GitLab