From b730b712335c947e4afbf2e5b58fd625d555d77b Mon Sep 17 00:00:00 2001 From: P-A Loizeau <p.-a.loizeau@gsi.de> Date: Wed, 20 Nov 2024 15:27:51 +0100 Subject: [PATCH] online par generation: changes needed to regenerate consistent files for mCBM 2024-05 - fix deprecated Sink usage by using new Dummy Sink class - use new mTOF 2024 calib file from Norbert - use geometry file in macro/run/data as generated by the CI (instead of the one by the mCBM simulation) - add missing system time offset for TRD1D and TRD2D, copied from the run_unpack_tsa.C macro --- reco/steer/CbmOnlineParWrite.cxx | 10 +++-- reco/steer/CbmSinkDummy.h | 51 +++++++++++++++++++++++++ reco/tasks/CbmTaskTrdUnpackParWrite.cxx | 15 ++++++++ 3 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 reco/steer/CbmSinkDummy.h diff --git a/reco/steer/CbmOnlineParWrite.cxx b/reco/steer/CbmOnlineParWrite.cxx index 3b5fe641a5..eac56543db 100644 --- a/reco/steer/CbmOnlineParWrite.cxx +++ b/reco/steer/CbmOnlineParWrite.cxx @@ -6,6 +6,7 @@ #include "CbmMcbmUtils.h" #include "CbmSetup.h" +#include "CbmSinkDummy.h" #include "CbmSourceDummy.h" #include "CbmStsAddress.h" #include "CbmStsParAsic.h" @@ -142,7 +143,7 @@ void CbmOnlineParWrite::AddTof() break; case Setup::mCBM2024_05: doCalibration = true; - cFname = Form("%s/3036_1_TofCal.hst.root", TofFileFolder.Data()); + cFname = Form("%s/3026_1_TofCal.hst.root", TofFileFolder.Data()); break; default: throw std::runtime_error("TOF: Unknown setup type"); } @@ -346,7 +347,7 @@ void CbmOnlineParWrite::Run(const Config& config) LOG(info) << "Using geometry setup: " << geoSetupTag; - TString geoFile = fSrcDir + "/macro/mcbm/data/" + geoSetupTag + ".geo.root"; + TString geoFile = fSrcDir + "/macro/run/data/" + geoSetupTag + ".geo.root"; fSetup = CbmSetup::Instance(); fSetup->LoadSetup(geoSetupTag); @@ -357,8 +358,9 @@ void CbmOnlineParWrite::Run(const Config& config) fRun = new FairRunAna(); // Dummy source required for the FairRunAna as it will crash without a source - auto* inputSource = new CbmSourceDummy{}; - fRun->SetSource(inputSource); + fRun->SetSource(new CbmSourceDummy{}); + fRun->SetSink(new CbmSinkDummy{}); + // ========================================================================= // === Alignment Correction === diff --git a/reco/steer/CbmSinkDummy.h b/reco/steer/CbmSinkDummy.h new file mode 100644 index 0000000000..d18e215990 --- /dev/null +++ b/reco/steer/CbmSinkDummy.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2023-2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt + SPDX-License-Identifier: GPL-3.0-only + Authors: Sergei Zharko [committer] */ + +/// \file CbmSinkDummy.cxx +/// \date 15.06.2024 +/// \brief A dummy FairSink class for the FairRunAna instance, if no output is really needed +/// \author S.Zharko <s.zharko@gsi.de> + +#pragma once + +#include <FairSink.h> + +/// \class CbmSinkDummy +/// \brief A dummy sink class, which is to be passed to a FairRunAna, if no output is required +class CbmSinkDummy : public FairSink { + public: + /// \brief Default constructor + CbmSinkDummy() = default; + + /// \brief Copy constructor + CbmSinkDummy(const CbmSinkDummy&) = default; + + /// \brief Move constructor + CbmSinkDummy(CbmSinkDummy&&) = default; + + /// \brief Destructor + ~CbmSinkDummy() = default; + + /// \brief Copy assignment operator + CbmSinkDummy& operator=(const CbmSinkDummy&) = default; + + /// \brief Copy assignment operator + CbmSinkDummy& operator=(CbmSinkDummy&&) = default; + + // FairSink virtual function implementations + Bool_t InitSink() { return kTRUE; } + void Close() {} + void Reset() {} + Sink_Type GetSinkType() { return kFILESINK; } + void SetOutTree(TTree*) {} + void Fill() {} + Int_t Write(const char*, Int_t, Int_t) { return 0; } + void RegisterImpl(const char*, const char*, void*) {} + void RegisterAny(const char*, const std::type_info&, const std::type_info&, void*) {} + void WriteFolder() {} + bool CreatePersistentBranchesAny() { return true; } + void WriteObject(TObject*, const char*, Int_t) {} + void WriteGeometry() {} // TODO: if(gGeoManager) gGeoManager->Write(); + FairSink* CloneSink() { return new CbmSinkDummy(*this); } +}; diff --git a/reco/tasks/CbmTaskTrdUnpackParWrite.cxx b/reco/tasks/CbmTaskTrdUnpackParWrite.cxx index f4baf1a72b..c7c3667f31 100644 --- a/reco/tasks/CbmTaskTrdUnpackParWrite.cxx +++ b/reco/tasks/CbmTaskTrdUnpackParWrite.cxx @@ -84,6 +84,13 @@ InitStatus CbmTaskTrdUnpackParWrite::Init() trd2dConfig.InitComponentMap(crobMap); trd2dConfig.InitChannelMap(channelMap); + // Apply system time offset + // See <source_dir>/macro/run/run_unpack_tsa.C + if (fPars.setup == Setup::mCBM2022 || fPars.setup == Setup::mCBM2024_03 || fPars.setup == Setup::mCBM2024_05) { + // Ni 2022, Au 2022, Ni 2024 + trd2dConfig.SetSystemTimeOffset(-510); + } + std::ofstream("Trd2dReadoutSetup.yaml") << yaml::Dump{}(trd2dConfig); } @@ -139,8 +146,16 @@ InitStatus CbmTaskTrdUnpackParWrite::Init() } trdConfig.Init(addressMap, channelMap); + // Apply system time offset + // See <source_dir>/macro/run/run_unpack_tsa.C + if (fPars.setup == Setup::mCBM2022 || fPars.setup == Setup::mCBM2024_03 || fPars.setup == Setup::mCBM2024_05) { + // Ni 2022, Au 2022, Ni 2024 + trdConfig.SetSystemTimeOffset(1300); + } + // Apply time offset per elink // See: https://git.cbm.gsi.de/computing/cbmroot/-/merge_requests/1751 + // and <source_dir>/macro/run/run_unpack_tsa.C if (fPars.setup == Setup::mCBM2024_05) { for (int elinkId = 0; elinkId < 36; ++elinkId) { trdConfig.SetElinkTimeOffset(20736, elinkId, -36); -- GitLab