From 1c70793820fc188cc65ffe6313462b6e8f428017 Mon Sep 17 00:00:00 2001 From: "s.zharko@gsi.de" <s.zharko@gsi.de> Date: Thu, 24 Oct 2024 16:32:26 +0200 Subject: [PATCH] CA: Moved tracking setup initializatin from L1 to KfCbm --- core/data/CbmDefs.cxx | 28 ++++++++++ core/data/CbmDefs.h | 9 ++++ reco/L1/CMakeLists.txt | 2 - reco/L1/CbmL1.cxx | 4 +- reco/L1/qa/CbmCaInputQaSetup.cxx | 4 +- reco/L1/qa/CbmCaOutputQa.cxx | 4 +- reco/kfnew/CMakeLists.txt | 2 + .../CbmKfTrackingSetupBuilder.cxx} | 54 +++++++++---------- .../CbmKfTrackingSetupBuilder.h} | 20 ++++--- 9 files changed, 85 insertions(+), 42 deletions(-) rename reco/{L1/CbmCaTrackingSetupBuilder.cxx => kfnew/CbmKfTrackingSetupBuilder.cxx} (69%) rename reco/{L1/CbmCaTrackingSetupBuilder.h => kfnew/CbmKfTrackingSetupBuilder.h} (81%) diff --git a/core/data/CbmDefs.cxx b/core/data/CbmDefs.cxx index bd4d9a0082..406c72c2fa 100644 --- a/core/data/CbmDefs.cxx +++ b/core/data/CbmDefs.cxx @@ -102,3 +102,31 @@ std::ostream& operator<<(std::ostream& strm, const ECbmDataType& dataType) strm << std::to_string(ToIntegralType(dataType)); return strm; } + +namespace cbm::algo::ca +{ + ECbmModuleId ToCbmModuleId(EDetectorID detID) + { + switch (detID) { + case EDetectorID::kMvd: return ECbmModuleId::kMvd; + case EDetectorID::kSts: return ECbmModuleId::kSts; + case EDetectorID::kMuch: return ECbmModuleId::kMuch; + case EDetectorID::kTrd: return ECbmModuleId::kTrd; + case EDetectorID::kTof: return ECbmModuleId::kTof; + default: return ECbmModuleId::kNotExist; + } + } + + EDetectorID ToCaDetectorID(ECbmModuleId modId) + { + switch (modId) { + case ECbmModuleId::kMvd: return EDetectorID::kMvd; + case ECbmModuleId::kSts: return EDetectorID::kSts; + case ECbmModuleId::kMuch: return EDetectorID::kMuch; + case ECbmModuleId::kTrd: return EDetectorID::kTrd; + case ECbmModuleId::kTof: return EDetectorID::kTof; + default: return EDetectorID::END; + } + } + +} // namespace cbm::algo::ca diff --git a/core/data/CbmDefs.h b/core/data/CbmDefs.h index 65938836ea..3b89430788 100644 --- a/core/data/CbmDefs.h +++ b/core/data/CbmDefs.h @@ -181,6 +181,15 @@ namespace cbm::algo::ca kTof, END }; + + /** @brief Conversion map from EDetectorID to ECbmModuleId + **/ + ECbmModuleId ToCbmModuleId(EDetectorID detID); + + /** @brief Conversion map from EDetectorID to ECbmModuleId + **/ + EDetectorID ToCaDetectorID(ECbmModuleId modId); + } // namespace cbm::algo::ca diff --git a/reco/L1/CMakeLists.txt b/reco/L1/CMakeLists.txt index 1867421d29..84e5bd1bbe 100644 --- a/reco/L1/CMakeLists.txt +++ b/reco/L1/CMakeLists.txt @@ -26,7 +26,6 @@ set(SRCS ########################################################################### CbmCaMCModule.cxx CbmCaTimeSliceReader.cxx - CbmCaTrackingSetupBuilder.cxx CbmL1.cxx OffLineInterface/CbmL1StsTrackFinder.cxx @@ -78,7 +77,6 @@ set(HEADERS CbmL1Track.h CbmL1Vtx.h CbmCaTimeSliceReader.h - CbmCaTrackingSetupBuilder.h L1Algo/utils/CaUvConverter.h catools/CaToolsWindowFinder.h catools/CaToolsLinkKey.h diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx index 15fb967f55..e945d5127c 100644 --- a/reco/L1/CbmL1.cxx +++ b/reco/L1/CbmL1.cxx @@ -37,8 +37,8 @@ #include "CaHit.h" #include "CaToolsDebugger.h" #include "CaToolsField.h" -#include "CbmCaTrackingSetupBuilder.h" #include "CbmEvent.h" +#include "CbmKfTrackingSetupBuilder.h" #include "CbmMCDataObject.h" #include "CbmStsFindTracks.h" #include "CbmStsHit.h" @@ -193,7 +193,7 @@ try { // turn on reconstruction in sub-detectors - auto* pSetupBuilder{cbm::ca::TrackingSetupBuilder::Instance()}; + auto* pSetupBuilder{cbm::kf::TrackingSetupBuilder::Instance()}; fUseMVD = pSetupBuilder->Has(ca::EDetectorID::kMvd); fUseSTS = pSetupBuilder->Has(ca::EDetectorID::kSts); fUseMUCH = pSetupBuilder->Has(ca::EDetectorID::kMuch); diff --git a/reco/L1/qa/CbmCaInputQaSetup.cxx b/reco/L1/qa/CbmCaInputQaSetup.cxx index 7dfc29fa8c..5618827684 100644 --- a/reco/L1/qa/CbmCaInputQaSetup.cxx +++ b/reco/L1/qa/CbmCaInputQaSetup.cxx @@ -10,7 +10,7 @@ #include "CbmCaInputQaSetup.h" #include "CaInitManager.h" -#include "CbmCaTrackingSetupBuilder.h" +#include "CbmKfTrackingSetupBuilder.h" #include "CbmL1DetectorID.h" #include "CbmMCDataManager.h" #include "FairRootManager.h" @@ -254,7 +254,7 @@ void InputQaSetup::ExecQa() InitStatus InputQaSetup::InitQa() try { LOG(info) << fName << ": initializing... "; - auto* pSetupBuilder = cbm::ca::TrackingSetupBuilder::Instance(); + auto* pSetupBuilder = cbm::kf::TrackingSetupBuilder::Instance(); auto CheckPresence = [&](ca::EDetectorID detID) { fvbUseDet[detID] = pSetupBuilder->Has(detID); }; CheckPresence(ca::EDetectorID::kMvd); CheckPresence(ca::EDetectorID::kSts); diff --git a/reco/L1/qa/CbmCaOutputQa.cxx b/reco/L1/qa/CbmCaOutputQa.cxx index b86d12ba47..5a49b16b6a 100644 --- a/reco/L1/qa/CbmCaOutputQa.cxx +++ b/reco/L1/qa/CbmCaOutputQa.cxx @@ -11,7 +11,7 @@ #include "CaInitManager.h" #include "CbmCaMCModule.h" -#include "CbmCaTrackingSetupBuilder.h" +#include "CbmKfTrackingSetupBuilder.h" #include "CbmQaCanvas.h" #include "FairRootManager.h" #include "Logger.h" @@ -798,7 +798,7 @@ try { { using cbm::algo::kf::EFieldMode; - using cbm::ca::TrackingSetupBuilder; + using cbm::kf::TrackingSetupBuilder; ca::InitManager manager; manager.ReadParametersObject(fsParametersFilename.c_str()); manager.SetGeometrySetup(TrackingSetupBuilder::Instance()->MakeSetup<ca::fvec>(EFieldMode::Intrpl)); diff --git a/reco/kfnew/CMakeLists.txt b/reco/kfnew/CMakeLists.txt index 95833479bf..4b2b4a5c7b 100644 --- a/reco/kfnew/CMakeLists.txt +++ b/reco/kfnew/CMakeLists.txt @@ -6,6 +6,7 @@ set(INCLUDE_DIRECTORIES set(SRCS ${CMAKE_CURRENT_SOURCE_DIR}/CbmKfTarget.cxx + ${CMAKE_CURRENT_SOURCE_DIR}/CbmKfTrackingSetupBuilder.cxx ) SET_SOURCE_FILES_PROPERTIES(${SRCS} PROPERTIES COMPILE_FLAGS "-O3") @@ -71,6 +72,7 @@ install(TARGETS KfCbm DESTINATION lib) install( FILES CbmKfOriginalField.h + CbmKfTrackingSetupBuilder.h CbmKfTarget.h DESTINATION include/ diff --git a/reco/L1/CbmCaTrackingSetupBuilder.cxx b/reco/kfnew/CbmKfTrackingSetupBuilder.cxx similarity index 69% rename from reco/L1/CbmCaTrackingSetupBuilder.cxx rename to reco/kfnew/CbmKfTrackingSetupBuilder.cxx index 243f81a5e7..315065019f 100644 --- a/reco/L1/CbmCaTrackingSetupBuilder.cxx +++ b/reco/kfnew/CbmKfTrackingSetupBuilder.cxx @@ -7,7 +7,7 @@ /// \since 28.08.2024 /// \author Sergei Zharko <s.zharko@gsi.de> -#include "CbmCaTrackingSetupBuilder.h" +#include "CbmKfTrackingSetupBuilder.h" #include "CbmKfOriginalField.h" #include "CbmKfTarget.h" @@ -27,7 +27,8 @@ #include <functional> -using cbm::ca::TrackingSetupBuilder; +using cbm::algo::ca::EDetectorID; +using cbm::kf::TrackingSetupBuilder; using kf::tools::MaterialMapFactory; // --------------------------------------------------------------------------------------------------------------------- @@ -35,23 +36,24 @@ using kf::tools::MaterialMapFactory; void TrackingSetupBuilder::CheckDetectorPresence() { LOG(info) << "TrackingSetupBuilder: detector subsystems in geometry: "; - auto Check = [&](ca::EDetectorID detID) { - fvbDetUsed[detID] = CbmSetup::Instance()->IsActive(kCbmModuleId[detID]) - && FairRootManager::Instance()->GetObject(kDetHitBrName[detID]); - LOG(info) << fmt::format("\t{:6}: {}", kDetName[detID], fvbDetUsed[detID]); + auto Check = [&](EDetectorID detID) { + auto modId = cbm::algo::ca::ToCbmModuleId(detID); + fvbDetUsed[detID] = + CbmSetup::Instance()->IsActive(modId) && FairRootManager::Instance()->GetObject(kDetHitBrName[detID]); + LOG(info) << fmt::format("\t{:6}: {}", ToString(modId), fvbDetUsed[detID]); }; - Check(ca::EDetectorID::kMvd); - Check(ca::EDetectorID::kSts); - Check(ca::EDetectorID::kMuch); - Check(ca::EDetectorID::kTrd); - Check(ca::EDetectorID::kTof); + Check(EDetectorID::kMvd); + Check(EDetectorID::kSts); + Check(EDetectorID::kMuch); + Check(EDetectorID::kTrd); + Check(EDetectorID::kTof); // Explicitly disable MVD, if it is not required from the STSFindTracks task - if (fvbDetUsed[ca::EDetectorID::kMvd]) { + if (fvbDetUsed[EDetectorID::kMvd]) { auto* pTrackFinderTask = dynamic_cast<CbmStsFindTracks*>(FairRunAna::Instance()->GetTask("STSFindTracks")); if (pTrackFinderTask) { - fvbDetUsed[ca::EDetectorID::kMvd] = pTrackFinderTask->MvdUsage(); + fvbDetUsed[EDetectorID::kMvd] = pTrackFinderTask->MvdUsage(); } } } @@ -74,38 +76,34 @@ try { pField->GetType() == 0 && fabs(pField->GetBx(0., 0., 0.)) < MinField< double> && fabs(pField->GetBy(0., 0., 0.)) < MinField<double> && fabs(pField->GetBz(0., 0., 0.)) < MinField<double>) { - LOG(info) << "!!!!!!!!!!!!!!!!!!! A"; fBuilder.SetFieldFunction(cbm::kf::ZeroField(), EFieldType::Null); } else { - LOG(info) << "!!!!!!!!!!!!!!!!!!! B"; fBuilder.SetFieldFunction(cbm::kf::OriginalField(), EFieldType::Normal); } } else { - LOG(info) << "!!!!!!!!!!!!!!!!!!! C"; fBuilder.SetFieldFunction(cbm::kf::ZeroField(), EFieldType::Null); } // Tracking station property initialization - auto CollectStations = [&](const auto* pIfs, ca::EDetectorID detID) -> void { + auto CollectStations = [&](const auto* pIfs, EDetectorID detID) -> void { if (!fvbDetUsed[detID]) { return; } for (int iSt = 0; iSt < pIfs->GetNtrackingStations(); ++iSt) { - fBuilder.AddLayer( - GeoLayer<ca::EDetectorID>{detID, // ca::Tracking detector id scheme - iSt, // ca::Tracking station indexing - pIfs->GetZref(iSt), pIfs->GetZmin(iSt), pIfs->GetZmax(iSt), - std::max(std::fabs(pIfs->GetXmin(iSt)), std::fabs(pIfs->GetXmax(iSt))), - std::max(std::fabs(pIfs->GetYmin(iSt)), std::fabs(pIfs->GetYmax(iSt)))}); + fBuilder.AddLayer(GeoLayer<EDetectorID>{detID, // ca::Tracking detector id scheme + iSt, // ca::Tracking station indexing + pIfs->GetZref(iSt), pIfs->GetZmin(iSt), pIfs->GetZmax(iSt), + std::max(std::fabs(pIfs->GetXmin(iSt)), std::fabs(pIfs->GetXmax(iSt))), + std::max(std::fabs(pIfs->GetYmin(iSt)), std::fabs(pIfs->GetYmax(iSt)))}); } }; - CollectStations(CbmMvdTrackingInterface::Instance(), ca::EDetectorID::kMvd); - CollectStations(CbmStsTrackingInterface::Instance(), ca::EDetectorID::kSts); - CollectStations(CbmMuchTrackingInterface::Instance(), ca::EDetectorID::kMuch); - CollectStations(CbmTrdTrackingInterface::Instance(), ca::EDetectorID::kTrd); - CollectStations(CbmTofTrackingInterface::Instance(), ca::EDetectorID::kTof); + CollectStations(CbmMvdTrackingInterface::Instance(), EDetectorID::kMvd); + CollectStations(CbmStsTrackingInterface::Instance(), EDetectorID::kSts); + CollectStations(CbmMuchTrackingInterface::Instance(), EDetectorID::kMuch); + CollectStations(CbmTrdTrackingInterface::Instance(), EDetectorID::kTrd); + CollectStations(CbmTofTrackingInterface::Instance(), EDetectorID::kTof); // Retrieve target properties const auto* pTarget = cbm::kf::Target::Instance(); diff --git a/reco/L1/CbmCaTrackingSetupBuilder.h b/reco/kfnew/CbmKfTrackingSetupBuilder.h similarity index 81% rename from reco/L1/CbmCaTrackingSetupBuilder.h rename to reco/kfnew/CbmKfTrackingSetupBuilder.h index 409775a73d..bc8fabc43e 100644 --- a/reco/L1/CbmCaTrackingSetupBuilder.h +++ b/reco/kfnew/CbmKfTrackingSetupBuilder.h @@ -9,13 +9,14 @@ #pragma once -#include "CbmL1DetectorID.h" +#include "CbmDefs.h" +#include "CbmEnumArray.h" #include "KfSetupBuilder.h" #include <mutex> #include <tuple> -namespace cbm::ca +namespace cbm::kf { /// \class TrackingSetupBuilder /// \brief Encapsulation of the kf::Setup initialization routines for CBM @@ -36,7 +37,7 @@ namespace cbm::ca } /// \brief Checks, if a tracking detector is used (is in geometry and has hits) - bool Has(ca::EDetectorID detID) const { return fvbDetUsed[detID]; } + bool Has(cbm::algo::ca::EDetectorID detID) const { return fvbDetUsed[detID]; } // Disable copy and move TrackingSetupBuilder(const TrackingSetupBuilder&) = delete; @@ -45,6 +46,13 @@ namespace cbm::ca TrackingSetupBuilder& operator=(TrackingSetupBuilder&&) = delete; private: + template<typename T> + using DetectorIDArray_t = cbm::core::EnumArray<cbm::algo::ca::EDetectorID, T>; + + /// \brief Hit branch names vs. cbm::algo::ca::EDetectorID + static constexpr DetectorIDArray_t<const char*> kDetHitBrName{ + {"MvdHit", "StsHit", "MuchPixelHit", "TrdHit", "TofHit"}}; + /// \brief Default constructor TrackingSetupBuilder() = default; @@ -68,8 +76,8 @@ namespace cbm::ca inline static TrackingSetupBuilder* fpInstance{nullptr}; inline static std::mutex fMutex{}; - cbm::algo::kf::SetupBuilder fBuilder{}; ///< KF-setup builder - DetIdArr_t<bool> fvbDetUsed{{false}}; ///< Detector subsystem usage flag + cbm::algo::kf::SetupBuilder fBuilder{}; ///< KF-setup builder + DetectorIDArray_t<bool> fvbDetUsed{{false}}; ///< Detector subsystem usage flag /// \brief Checks, if the setup was already initialized /// \note Each call of the setup initializer resets the setup builder, so the initialization is called @@ -78,4 +86,4 @@ namespace cbm::ca }; -} // namespace cbm::ca +} // namespace cbm::kf -- GitLab