diff --git a/core/detectors/tof/CbmMcbm2018TofPar.h b/core/detectors/tof/CbmMcbm2018TofPar.h index 901e3169a8fc66062acb847ebd400d677391d226..338fb98fc830f9d00bfc7772ecb8d92db69e3fc1 100644 --- a/core/detectors/tof/CbmMcbm2018TofPar.h +++ b/core/detectors/tof/CbmMcbm2018TofPar.h @@ -168,4 +168,16 @@ private: ClassDef(CbmMcbm2018TofPar, 1); }; + +class CbmMcbm2018BmonPar : public CbmMcbm2018TofPar { +public: + /** Standard constructor **/ + CbmMcbm2018BmonPar(const char* name = "CbmMcbm2018BmonPar", const char* title = "Bmon unpacker parameters", + const char* context = "Default") + : CbmMcbm2018TofPar(name, title, context) {}; + +private: + // just an alias for the Parameter container to allow two instances + ClassDef(CbmMcbm2018BmonPar, 1); +}; #endif // CBMMCBM2018TOFPAR_H diff --git a/core/detectors/tof/CbmTofBaseLinkDef.h b/core/detectors/tof/CbmTofBaseLinkDef.h index 47794dbeb7abaf293bea217a32780d691461f7b2..302372dec126c60f1c962c8305f46eb076d2dc1f 100644 --- a/core/detectors/tof/CbmTofBaseLinkDef.h +++ b/core/detectors/tof/CbmTofBaseLinkDef.h @@ -15,6 +15,7 @@ #pragma link C++ class CbmTofDigiPar + ; #pragma link C++ class CbmMcbm2018TofPar + ; #pragma link C++ class CbmTofGeoHandler + ; +#pragma link C++ class CbmMcbm2018BmonPar + ; #pragma link C++ class TTrbHeader + ; #endif diff --git a/core/detectors/tof/CbmTofContFact.cxx b/core/detectors/tof/CbmTofContFact.cxx index 21cc24ad6685ddb1f88b1c77886459b436eee583..ff2bd329ab3d2dbb3a91ce8c0253f136a25baeca 100644 --- a/core/detectors/tof/CbmTofContFact.cxx +++ b/core/detectors/tof/CbmTofContFact.cxx @@ -58,6 +58,11 @@ void CbmTofContFact::setAllContainers() FairContainer* beamPars = new FairContainer("CbmMcbm2018TofPar", "TOF at MCBM 2018 Unpack Parameters", "Default"); beamPars->addContext("Default"); containers->Add(beamPars); + + FairContainer* beamParsBmon = new FairContainer( + "CbmMcbm2018BmonPar", "BMon at MCBM 2022+ Unpack Parameters, interim for dual instances", "Default"); + beamParsBmon->addContext("Default"); + containers->Add(beamParsBmon); } FairParSet* CbmTofContFact::createContainer(FairContainer* c) @@ -77,6 +82,9 @@ FairParSet* CbmTofContFact::createContainer(FairContainer* c) else if (strcmp(name, "CbmMcbm2018TofPar") == 0) { p = new CbmMcbm2018TofPar(c->getConcatName().Data(), c->GetTitle(), c->getContext()); } + else if (strcmp(name, "CbmMcbm2018BmonPar") == 0) { + p = new CbmMcbm2018BmonPar(c->getConcatName().Data(), c->GetTitle(), c->getContext()); + } return p; } diff --git a/macro/beamtime/mcbm2022/mBmonCriPar.par b/macro/beamtime/mcbm2022/mBmonCriPar.par index 98525587b78c9680f23726dd1d9c7e12f80dcff0..330ca7e7a6a5a7a6107e304a87c91e03ea042963 100644 --- a/macro/beamtime/mcbm2022/mBmonCriPar.par +++ b/macro/beamtime/mcbm2022/mBmonCriPar.par @@ -1,5 +1,5 @@ #################################################################################################### -[CbmMcbm2018TofPar] +[CbmMcbm2018BmonPar] //---------------------------------------------------------------------------- NrOfGdpbs: Int_t 4 GdpbIdArray: Int_t \ diff --git a/reco/detectors/tof/unpack/CbmBmonUnpackConfig.cxx b/reco/detectors/tof/unpack/CbmBmonUnpackConfig.cxx index 7bd185d2528dc529985c385a270cf98286d190f3..d4a0ab13c149254372798aebf96ea910e0b79a73 100644 --- a/reco/detectors/tof/unpack/CbmBmonUnpackConfig.cxx +++ b/reco/detectors/tof/unpack/CbmBmonUnpackConfig.cxx @@ -17,6 +17,7 @@ CbmBmonUnpackConfig::CbmBmonUnpackConfig(std::string detGeoSetupTag, UInt_t runid) : CbmTofUnpackConfig(detGeoSetupTag, runid) { + SetFlagBmonParMode(); } CbmBmonUnpackConfig::~CbmBmonUnpackConfig() {} diff --git a/reco/detectors/tof/unpack/CbmTofUnpackAlgo.cxx b/reco/detectors/tof/unpack/CbmTofUnpackAlgo.cxx index e688c7e10701e34f84284d7727365342eb5e50ca..e962d40299755f0f6af32962164bf495e792c8f1 100644 --- a/reco/detectors/tof/unpack/CbmTofUnpackAlgo.cxx +++ b/reco/detectors/tof/unpack/CbmTofUnpackAlgo.cxx @@ -25,14 +25,21 @@ CbmTofUnpackAlgo::~CbmTofUnpackAlgo() {} std::vector<std::pair<std::string, std::shared_ptr<FairParGenericSet>>>* CbmTofUnpackAlgo::GetParContainerRequest(std::string /*geoTag*/, std::uint32_t /*runId*/) { - // Basepath for default Trd parameter sets (those connected to a geoTag) + // Basepath for default Tof parameter sets (those connected to a geoTag) std::string basepath = Form("%s", fParFilesBasePath.data()); std::string temppath = ""; // // Get parameter container temppath = basepath + fParFileName; LOG(info) << fName << "::GetParContainerRequest - Trying to open file " << temppath; - fParContVec.emplace_back(std::make_pair(temppath, std::make_shared<CbmMcbm2018TofPar>())); + if (fbBmonParMode) { + /// Should be enabled only when both TOF and BMON are used with same RunManagerDb (only MQ for now) + LOG(info) << fName << "::GetParContainerRequest - Requesting CbmMcbm2018BmonPar instead of CbmMcbm2018TofPar"; + fParContVec.emplace_back(std::make_pair(temppath, std::make_shared<CbmMcbm2018BmonPar>())); + } + else { + fParContVec.emplace_back(std::make_pair(temppath, std::make_shared<CbmMcbm2018TofPar>())); + } return &fParContVec; } @@ -44,7 +51,14 @@ Bool_t CbmTofUnpackAlgo::init() { return kTRUE; } Bool_t CbmTofUnpackAlgo::initParSet(FairParGenericSet* parset) { LOG(info) << fName << "::initParSet - for container " << parset->ClassName(); - if (parset->IsA() == CbmMcbm2018TofPar::Class()) return initParSet(static_cast<CbmMcbm2018TofPar*>(parset)); + if (parset->IsA() == CbmMcbm2018BmonPar::Class()) { + /// Should be the case only if fbBmonParMode is enabled and when both TOF and BMON are used with same + /// RunManagerDb (only MQ for now). CbmMcbm2018BmonPar is an identical derivation of CbmMcbm2018TofPar + return initParSet(dynamic_cast<CbmMcbm2018TofPar*>(parset)); + } + else if (parset->IsA() == CbmMcbm2018TofPar::Class()) { + return initParSet(static_cast<CbmMcbm2018TofPar*>(parset)); + } // If we do not know the derived ParSet class we return false LOG(error) diff --git a/reco/detectors/tof/unpack/CbmTofUnpackAlgo.h b/reco/detectors/tof/unpack/CbmTofUnpackAlgo.h index 5d67958d9fd4fe8ad7b222a641b47f00809102f2..aa04de6a420afed11e78df82734dcd805cce2764 100644 --- a/reco/detectors/tof/unpack/CbmTofUnpackAlgo.h +++ b/reco/detectors/tof/unpack/CbmTofUnpackAlgo.h @@ -72,6 +72,13 @@ public: */ void SetFlagEpochCountHack2021(bool bFlagin = true) { fbEpochCountHack2021 = bFlagin; } + /** + * @brief Sets the flag switching to a request of CbmMcbm2018BmonPar. Default is enable. + * + * @param[in] Optional: boolean flag value, default is true + */ + void SetFlagBmonParMode(bool bFlagin = true) { fbBmonParMode = bFlagin; } + /** * @brief Sets the name of the parameter file to be used. * @@ -194,6 +201,7 @@ private: /// Control flags bool fbEpochCountHack2021 = false; + bool fbBmonParMode = false; std::vector<bool> fvbMaskedComponents = {}; bool fbLastEpochGood = false; diff --git a/reco/detectors/tof/unpack/CbmTofUnpackConfig.cxx b/reco/detectors/tof/unpack/CbmTofUnpackConfig.cxx index a646cb8108b4a62dce220ec95c39d2c0ef0ac86b..7e13c63952c70296bedf84b63338af3cc7409ac2 100644 --- a/reco/detectors/tof/unpack/CbmTofUnpackConfig.cxx +++ b/reco/detectors/tof/unpack/CbmTofUnpackConfig.cxx @@ -41,6 +41,11 @@ std::shared_ptr<CbmTofUnpackAlgo> CbmTofUnpackConfig::chooseAlgo() // Unpacker algo from mcbm 2021 on and hopefully default for a long time. auto algo = std::make_shared<CbmTofUnpackAlgo>(); LOG(info) << fName << "::chooseAlgo() - selected algo = " << algo->Class_Name(); + if (fbBmonParMode) { + LOG(info) << fName << "::chooseAlgo - Setting the new algo in BMon Par mode"; + algo->SetFlagBmonParMode(fbBmonParMode); + } + return algo; LOG(error) << fName diff --git a/reco/detectors/tof/unpack/CbmTofUnpackConfig.h b/reco/detectors/tof/unpack/CbmTofUnpackConfig.h index d6bb8313c99564561628ccfed44bfa465135d774..f743abab93c968b2f56bb18dd2ea8c8a7dd9ed9c 100644 --- a/reco/detectors/tof/unpack/CbmTofUnpackConfig.h +++ b/reco/detectors/tof/unpack/CbmTofUnpackConfig.h @@ -76,6 +76,13 @@ public: */ void SetFlagEpochCountHack2021(bool bFlagin = true) { fbEpochCountHack2021 = bFlagin; } + /** + * @brief Sets the flag switching to a request of CbmMcbm2018BmonPar. Default is enable. + * + * @param[in] Optional: boolean flag value, default is true + */ + void SetFlagBmonParMode(bool bFlagin = true) { fbBmonParMode = bFlagin; } + /** * @brief Sets the name of the parameter file to be used. * @@ -98,6 +105,7 @@ protected: private: /// Control flags bool fbEpochCountHack2021 = false; + bool fbBmonParMode = false; /// Parameter file name std::string fsParFileName = "mTofCriPar.par";