diff --git a/core/data/CbmDefs.h b/core/data/CbmDefs.h index 5c1eedd61352119bc7c47ddd30acf105c0452683..b9760d9bc96d16bfd2a1091129864972fe6aba1e 100644 --- a/core/data/CbmDefs.h +++ b/core/data/CbmDefs.h @@ -47,8 +47,9 @@ enum class ECbmModuleId kPsd = 8, ///< Projectile spectator detector kHodo = 9, ///< Hodoscope (for test beam times) kDummyDet = 10, ///< Dummy for tutorials or tests - kT0 = 11, ///< ToF start Detector - kNofSystems = 12, ///< For loops over active systems + kT0 = 11, ///< ToF start Detector (FIXME) + kTrd2d = 12, ///< TRD-FASP Detector (FIXME) + kNofSystems = 13, ///< For loops over active systems kMagnet = 17, ///< Magnet kTarget = 18, ///< Target kPipe = 19, ///< Beam pipe diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx index 37c751e9579c5ff8309fed1c472c34e0e7470310..2011b13fc1151d0429dbd62c2028eed1f1be4a69 100644 --- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx +++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx @@ -84,6 +84,15 @@ void CbmMcbmCheckTimingAlgo::CheckDataPresence(CheckTimingDetector detToCheck) "Stopping there!"; } // if ( ! fpT0DigiVec ) } // if( ECbmModuleId::kT0 == detToCheck.detId ) + /// Handle special case for TRD-2D as not yet supported in DigiManager + if (ECbmModuleId::kTrd2d == detToCheck.detId) { + // Get a pointer to the previous already existing data level + fpTrd2dDigiVec = ioman->InitObjectAs<std::vector<CbmTrdDigi> const*>("TrdFaspDigi"); + if (!fpTrd2dDigiVec) { + LOG(fatal) << "No storage with TRD-2D digis found while it should be used. " + "Stopping there!"; + } // if ( ! fpTrd2dDigiVec ) + } // if( ECbmModuleId::kTrd2d == detToCheck.detId ) else if (!fDigiMan->IsPresent(detToCheck.detId)) { LOG(fatal) << "No " << detToCheck.sName << " digis found while it should be used. Stopping there!"; } // else if ( ! fDigiMan->IsPresent( detToCheck.detId ) ) of if( ECbmModuleId::kT0 == detToCheck.detId ) @@ -195,6 +204,10 @@ void CbmMcbmCheckTimingAlgo::ProcessTs() CheckInterSystemOffset<CbmTrdDigi>(); break; } // case ECbmModuleId::kTrd: + case ECbmModuleId::kTrd2d: { + CheckInterSystemOffset<CbmTrdDigi>(); + break; + } // case ECbmModuleId::kTrd2d: case ECbmModuleId::kTof: { CheckInterSystemOffset<CbmTofDigi>(); break; @@ -234,6 +247,10 @@ void CbmMcbmCheckTimingAlgo::CheckInterSystemOffset() uNbRefDigis = fpT0DigiVec->size(); break; } // case ECbmModuleId::kT0 + case ECbmModuleId::kTrd2d: { + uNbRefDigis = fpTrd2dDigiVec->size(); + break; + } // case ECbmModuleId::kTrd2d default: { uNbRefDigis = fDigiMan->GetNofDigis(fRefDet.detId); break; @@ -255,6 +272,11 @@ void CbmMcbmCheckTimingAlgo::CheckInterSystemOffset() dRefTime = fpT0DigiVec->at(uDigi).GetTime(); dRefCharge = fpT0DigiVec->at(uDigi).GetCharge(); } // if( ECbmModuleId::kT0 == fRefDet.detId ) + else if (ECbmModuleId::kTrd2d == fRefDet.detId) { + dRefTime = fpTrd2dDigiVec->at(uDigi).GetTime(); + //dRefCharge = fpTrd2dDigiVec->at(uDigi).GetCharge(); + dRefCharge = 1; + } // else if( ECbmModuleId::kTrd2d == fRefDet.detId ) else { dRefTime = fDigiMan->Get<DigiRef>(uDigi)->GetTime(); dRefCharge = fDigiMan->Get<DigiRef>(uDigi)->GetCharge(); @@ -298,6 +320,10 @@ void CbmMcbmCheckTimingAlgo::CheckInterSystemOffset() FillTimeOffsetHistos<CbmTrdDigi>(dRefTime, dRefCharge, uDetIdx); break; } // case ECbmModuleId::kTrd: + case ECbmModuleId::kTrd2d: { + FillTimeOffsetHistos<CbmTrdDigi>(dRefTime, dRefCharge, uDetIdx); + break; + } // case ECbmModuleId::kTrd: case ECbmModuleId::kTof: { FillTimeOffsetHistos<CbmTofDigi>(dRefTime, dRefCharge, uDetIdx); break; @@ -339,6 +365,10 @@ void CbmMcbmCheckTimingAlgo::FillTimeOffsetHistos(const Double_t dRefTime, const uNbDigis = fpT0DigiVec->size(); break; } // case ECbmModuleId::kT0 + case ECbmModuleId::kTrd2d: { + uNbDigis = fpTrd2dDigiVec->size(); + break; + } // case ECbmModuleId::kTrd2d default: { uNbDigis = fDigiMan->GetNofDigis(fvDets[uDetIdx].detId); break; @@ -355,6 +385,11 @@ void CbmMcbmCheckTimingAlgo::FillTimeOffsetHistos(const Double_t dRefTime, const dTime = fpT0DigiVec->at(uDigiIdx).GetTime(); dCharge = fpT0DigiVec->at(uDigiIdx).GetCharge(); } // if( ECbmModuleId::kT0 == fRefDet.detId ) + else if (ECbmModuleId::kTrd2d == fvDets[uDetIdx].detId) { + dTime = fpTrd2dDigiVec->at(uDigiIdx).GetTime(); + // dCharge = fpTrd2dDigiVec->at(uDigiIdx).GetCharge(); + dCharge = 1; + } // else if (ECbmModuleId::kTrd2d == fvDets[uDetIdx].detId) else { dTime = fDigiMan->Get<Digi>(uDigiIdx)->GetTime(); dCharge = fDigiMan->Get<Digi>(uDigiIdx)->GetCharge(); @@ -469,6 +504,18 @@ void CbmMcbmCheckTimingAlgo::WriteHistos() } break; } + case ECbmModuleId::kTrd2d: { + if (DetAverageSingle > 0) { + TF1* gs_trd2d = new TF1("gs_trd2d", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fTrd2dPeakWidthNs, + DetPeakPosSingle + 2 * fTrd2dPeakWidthNs); + gs_trd2d->SetParameters(0.7 * DetAverageSingle, DetPeakPosSingle, fTrd2dPeakWidthNs, DetAverageSingle); + fvhDetToRefDiff[uDetIdx]->Fit("gs_trd2d", "R"); + TF1* fitresult_trd2d = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_trd2d"); + LOG(debug) << fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_trd2d->GetParameter(0) + << ", " << fitresult_trd2d->GetParameter(1) << ", " << fitresult_trd2d->GetParameter(2); + } + break; + } case ECbmModuleId::kT0: { if (DetAverageSingle > 0) { TF1* gs_tof = new TF1("gs_tof", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fTofPeakWidthNs, diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h index 71a993702b8a098c8e62470c86b7f287a0896792..76d13b9c91d3fa29dd846f32ef53e8cecc24a406 100644 --- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h +++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h @@ -10,6 +10,7 @@ #include "CbmModuleList.h" #include "CbmTofDigi.h" +#include "CbmTrdDigi.h" #include "TString.h" @@ -87,6 +88,7 @@ public: void RemoveCheckDetector(ECbmModuleId detIn); void SetTrdPeakWidthNs(Double_t val = 120.) { fTrdPeakWidthNs = val; } + void SetTrd2dPeakWidthNs(Double_t val = 120.) { fTrd2dPeakWidthNs = val; } void SetStsPeakWidthNs(Double_t val = 30.) { fStsPeakWidthNs = val; } void SetMuchPeakWidthNs(Double_t val = 100.) { fMuchPeakWidthNs = val; } void SetTofPeakWidthNs(Double_t val = 20.) { fTofPeakWidthNs = val; } @@ -108,6 +110,8 @@ private: /** T0 is not included in CbmDigiManager, so add it explicitly here **/ const std::vector<CbmTofDigi>* fpT0DigiVec = nullptr; //! + /** TRD-2D is not included in CbmDigiManager, so add it explicitly here **/ + const std::vector<CbmTrdDigi>* fpTrd2dDigiVec = nullptr; //! // UInt_t fuNbTs = 0; @@ -130,12 +134,13 @@ private: TString fOutFileName = "data/HistosCheckTiming.root"; Double_t DetPeakPosSingle; Double_t DetAverageSingle; - Double_t fTrdPeakWidthNs = 120.; - Double_t fStsPeakWidthNs = 30.; - Double_t fMuchPeakWidthNs = 100.; - Double_t fTofPeakWidthNs = 20.; - Double_t fRichPeakWidthNs = 40.; - Double_t fPsdPeakWidthNs = 20.; + Double_t fTrdPeakWidthNs = 120.; + Double_t fTrd2dPeakWidthNs = 120.; + Double_t fStsPeakWidthNs = 30.; + Double_t fMuchPeakWidthNs = 100.; + Double_t fTofPeakWidthNs = 20.; + Double_t fRichPeakWidthNs = 40.; + Double_t fPsdPeakWidthNs = 20.; ClassDefNV(CbmMcbmCheckTimingAlgo, 1); }; diff --git a/macro/beamtime/mcbm2021/check_timing_any.C b/macro/beamtime/mcbm2021/check_timing_any.C index e3b2cef535ef6a810640a7a511b8ab3442bb39ed..50ab2ff9ea66c26f5be5b784c03c9c9225511eed 100644 --- a/macro/beamtime/mcbm2021/check_timing_any.C +++ b/macro/beamtime/mcbm2021/check_timing_any.C @@ -48,7 +48,6 @@ void check_timing_any(TString fileName, UInt_t uRunId = 0, Int_t nEvents = 0, TS 190, 182 ); */ /// Here swapping with TOF - timeChecker->SetReferenceDetector(ECbmModuleId::kPsd, "Psd", -300000, 300000, 320 * 300); timeChecker->RemoveCheckDetector(ECbmModuleId::kPsd); //timeChecker->AddCheckDetector(ECbmModuleId::kT0, "T0"); @@ -58,17 +57,14 @@ void check_timing_any(TString fileName, UInt_t uRunId = 0, Int_t nEvents = 0, TS timeChecker->SetReferenceDetector(ECbmModuleId::kMuch, "Much"); timeChecker->RemoveCheckDetector(ECbmModuleId::kMuch); timeChecker->AddCheckDetector(ECbmModuleId::kT0, "T0"); -*/ + */ /// Remove detectors not present in 2021 timeChecker->RemoveCheckDetector(ECbmModuleId::kT0); timeChecker->RemoveCheckDetector(ECbmModuleId::kMuch); - /// Remove detectors not yet in common unpacker - timeChecker->RemoveCheckDetector(ECbmModuleId::kSts); - timeChecker->RemoveCheckDetector(ECbmModuleId::kRich); - /// Add detectors with wider range + /* timeChecker->RemoveCheckDetector(ECbmModuleId::kSts); timeChecker->AddCheckDetector(ECbmModuleId::kSts, "Sts"); timeChecker->RemoveCheckDetector(ECbmModuleId::kTrd); @@ -76,6 +72,10 @@ void check_timing_any(TString fileName, UInt_t uRunId = 0, Int_t nEvents = 0, TS timeChecker->RemoveCheckDetector(ECbmModuleId::kTof); //timeChecker->AddCheckDetector(ECbmModuleId::kTof, "Tof", -150000, 150000, 320*150); timeChecker->AddCheckDetector(ECbmModuleId::kTof, "Tof", -2000, 2000, 320 * 2); + */ + + /// Add detectors not in default list + timeChecker->AddCheckDetector(ECbmModuleId::kTrd2d, "Trd2d", -3000, 3000, 160 * 3); if (0 < uRunId) timeChecker->SetOutFilename(Form("%s/HistosTimeCheck_%03u.root", outDir.Data(), uRunId)); fRun->AddTask(timeChecker); diff --git a/macro/run/run_unpack_tsa.C b/macro/run/run_unpack_tsa.C index 117e367c7d4ea374ef32e27252c1c8849656fe13..2152366abbf139bfbaa0a4f078756a7efaf1978a 100644 --- a/macro/run/run_unpack_tsa.C +++ b/macro/run/run_unpack_tsa.C @@ -159,7 +159,7 @@ void run_unpack_tsa(std::string infile = "test.tsa", UInt_t runid = 0, const cha trdfasp2dconfig->SetOutputBranchName("TrdFaspDigi"); std::string parfilesbasepathTrdfasp2d = Form("%s/parameters/trd", srcDir.Data()); trdfasp2dconfig->SetParFilesBasePath(parfilesbasepathTrdfasp2d); - trdfasp2dconfig->SetSystemTimeOffset(0); // [ns] value to be updated + trdfasp2dconfig->SetSystemTimeOffset(-1800); // [ns] value to be updated } // -------------