diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt index 358c59fea0ed05418ff7a8dd70b5b78a529a6f97..f7c26cbbd1622700b77d404ccfca871a6acc8931 100644 --- a/algo/CMakeLists.txt +++ b/algo/CMakeLists.txt @@ -117,6 +117,7 @@ set(SRCS detectors/tof/TrackingInterface.cxx detectors/tof/config/ReadoutPars_mCBM2022.cxx detectors/tof/config/ReadoutPars_mCBM2024.cxx + detectors/tof/config/ReadoutPars_mCBM2024_05.cxx detectors/bmon/ReadoutConfig.cxx detectors/bmon/Unpack.cxx detectors/bmon/UnpackMS.cxx diff --git a/algo/detectors/tof/config/ReadoutPars.h b/algo/detectors/tof/config/ReadoutPars.h index f40b53c326a0f9f76273ba2eeb814a1affb85fae..c34275357794516975c7598931df358a11cc9c74 100644 --- a/algo/detectors/tof/config/ReadoutPars.h +++ b/algo/detectors/tof/config/ReadoutPars.h @@ -21,6 +21,7 @@ namespace cbm::algo::tof::config static ReadoutPars MakeMCBM2022(); static ReadoutPars MakeMCBM2024(); + static ReadoutPars MakeMCBM2024_05(); bool mcbmTof2024 = false; diff --git a/algo/detectors/tof/config/ReadoutPars_mCBM2024_05.cxx b/algo/detectors/tof/config/ReadoutPars_mCBM2024_05.cxx new file mode 100644 index 0000000000000000000000000000000000000000..4e83e1a665e259ccfda1cfe76d0ee51999995db5 --- /dev/null +++ b/algo/detectors/tof/config/ReadoutPars_mCBM2024_05.cxx @@ -0,0 +1,69 @@ +/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt + SPDX-License-Identifier: GPL-3.0-only + Authors: Felix Weiglhofer [committer], Dominik Smith */ +#include "Exceptions.h" +#include "ReadoutPars.h" + +using namespace cbm::algo::tof::config; + +ReadoutPars ReadoutPars::MakeMCBM2024_05() +{ + // This here refers to the mCBM 2022 and 2024 setups. + // Taken from CbmMcbm2018TofPar in combination with macro/beamtime/mcbm2022/mTofCriParNickel.par + // and mTofCriParNickel_withBmon.par (?) + + ReadoutPars pars; + + pars.mcbmTof2024 = true; + + pars.nFebsPerComponent = 5; + pars.nAsicsPerFeb = 8; + pars.nChannelsPerAsic = 4; + pars.nCrobPerComponent = 1; + + constexpr int NumCrob = 19; + + // Module Identifier connected to Gbtx link, has to match geometry + const int32_t moduleId[NumCrob] = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 0, 0, 1, 0, 1, 1, 5, 5}; + + // type of Rpcs connected to Gbtx link + const int32_t rpcType[NumCrob] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 9, 9, 6, 2, 2, 0, 0}; + + // side of Rpcs connected to Gbtx link, i.e. 0 or 1 + const int32_t rpcSide[NumCrob] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 4, 0, 1, 0, 1}; + + // number of Rpcs connected to Gbtx link, i.e. 3 or 5 + const int32_t numRpc[NumCrob] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 5, 5, 5, 5}; + + for (int i = 0; i < NumCrob; ++i) { + pars.crobs.push_back({moduleId[i], rpcType[i], rpcSide[i], numRpc[i]}); + } + + pars.eqIds = {0xabc0, 0xabc1, 0xabc2, 0xabc3, 0xabc4, 0xabc5, 0xabc6, 0xabc7, 0xabc8, 0xabc9, + 0xabca, 0xabcb, 0xabd0, 0xabd1, 0xbbc0, 0xabcc, 0xabcd, 0xabce, 0xabcf}; + + pars.elink2Asic = {27, 2, 7, 3, 31, 26, 30, 1, 33, 37, 32, 13, 9, 14, 10, 15, 17, 21, 16, 35, + 34, 38, 25, 24, 0, 6, 20, 23, 18, 22, 28, 4, 29, 5, 19, 36, 39, 8, 12, 11}; + pars.elink2AsicInner = {0, 16, 8, 17, 1, 18, 9, 19, 2, 20, 10, 21, 3, 22, 11, 23, 4, 24, 12, 25, + 5, 26, 13, 27, 6, 28, 14, 29, 7, 30, 15, 31, 32, 33, 34, 35, 36, 37, 38, 39}; + + // Mapping in Readout chain PCBs + pars.asic2PadI = { + 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12, + 19, 18, 17, 16, 23, 22, 21, 20, 27, 26, 25, 24, 31, 30, 29, 28}; //! Map from GET4 channel to PADI channel + + if (pars.NElinksPerCrob() != static_cast<i32>(pars.elink2Asic.size())) { + throw FatalError("tof::ReadoutPars::MakeMCBM2024_05 => size of elink2Asic not matching, {} vs {}, stop there!", + static_cast<uint32_t>(pars.elink2Asic.size()), static_cast<uint32_t>(pars.NElinksPerCrob())); + } + if (pars.NElinksPerCrob() != static_cast<i32>(pars.elink2AsicInner.size())) { + throw FatalError("tof::ReadoutPars::MakeMCBM2024_05 => size of elink2AsicInner not matching, {} vs {}, stop there!", + static_cast<uint32_t>(pars.elink2Asic.size()), static_cast<uint32_t>(pars.NElinksPerCrob())); + } + if (pars.NChansPerFeb() != static_cast<i32>(pars.asic2PadI.size())) { + throw FatalError("tof::ReadoutPars::MakeMCBM2024_05 => size of asic2PadI not matching, {} vs {}, stop there!", + static_cast<uint32_t>(pars.elink2Asic.size()), static_cast<uint32_t>(pars.NChansPerFeb())); + } + + return pars; +} diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx index a6e2b98fe229613e85db35f9a2efac11b2f8d626..6eabeac03e0fc40be2411cf6a98c9bb340be601b 100644 --- a/algo/global/Reco.cxx +++ b/algo/global/Reco.cxx @@ -134,8 +134,9 @@ void Reco::Init(const Options& opts) } if (Opts().Has(Subsystem::TOF) && Opts().Has(Step::Unpack)) { - tof::ReadoutConfig cfg{2724 <= Opts().RunId() ? tof::config::ReadoutPars::MakeMCBM2024() - : tof::config::ReadoutPars::MakeMCBM2022()}; + tof::ReadoutConfig cfg{2918 <= Opts().RunId() ? tof::config::ReadoutPars::MakeMCBM2024_05() + : 2724 <= Opts().RunId() ? tof::config::ReadoutPars::MakeMCBM2024() + : tof::config::ReadoutPars::MakeMCBM2022()}; fTofUnpack = std::make_unique<tof::Unpack>(cfg); }