diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 2af4efb1b63902970564aa7b943a245759dafa77..0147239fcc97ee7591729cb14d13475358cefb51 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -34,3 +34,7 @@ set(CBMDETECTORBASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/detectors PARENT_SCOPE) If(GTEST_FOUND) add_subdirectory(data/test) EndIf() + +Install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/config/CbmConfigBase.h + DESTINATION include + ) diff --git a/core/config/CbmConfigBase.h b/core/config/CbmConfigBase.h index 870816027ae38a107694a37f96ff80375a59dc3d..9dc07e2658a1dbdf0ff0ff233080e52ab51f7d46 100644 --- a/core/config/CbmConfigBase.h +++ b/core/config/CbmConfigBase.h @@ -37,7 +37,7 @@ public: SetLogLevel(tree); auto moduleTree {tree.get_child_optional(Config_t::GetModuleTag())}; if (!moduleTree) { - LOG(error) << "CbmConfig: module tag is not correct!\n"; + LOG(error) << "CbmConfig: module tag not found:" << Config_t::GetModuleTag(); return false; } if (!Validate(moduleTree.get())) return false; diff --git a/macro/run/config.json b/macro/run/config.json index 373b69fe6d1416fc6040b5ee7cb94a5093562df1..67b33835202c66b6d621d5d707b3b572a8457bff 100644 --- a/macro/run/config.json +++ b/macro/run/config.json @@ -72,6 +72,11 @@ "psd": "v20a", "platform": "v13a" } + }, + "stackFilter": { + "storeAllPrimaries": true, + "storeAllMothers": true, + "storeAllDecays": true } }, diff --git a/sim/transport/steer/CbmTransportConfig.cxx b/sim/transport/steer/CbmTransportConfig.cxx index 4042f16c0437b3780a630e81d6c0c483cd597cee..d7471ac7e11e884806ce2a265ac31ccb9fd0ba1f 100644 --- a/sim/transport/steer/CbmTransportConfig.cxx +++ b/sim/transport/steer/CbmTransportConfig.cxx @@ -64,7 +64,10 @@ CbmTransportConfig::TagSet_t CbmTransportConfig::GetValidationTags() "geometry.subsystems.psd", "geometry.subsystems.hodo", "geometry.subsystems.shield", - "geometry.subsystems.platform"}; + "geometry.subsystems.platform", + "stackFilter.storeAllPrimaries", + "stackFilter.storeAllMothers", + "stackFilter.storeAllDecays"}; } CbmTransportConfig::TagSet_t CbmTransportConfig::GetAcceptedGenerators() { return {"unigen", "pluto", "beam"}; } @@ -259,6 +262,11 @@ bool CbmTransportConfig::SetTransportParameters(CbmTransport& obj, const pt::ptr } bool CbmTransportConfig::SetGeometry(CbmTransport& obj, const pt::ptree& moduleTree) +{ + return SetGeometry(obj.GetSetup(), moduleTree); +}; + +bool CbmTransportConfig::SetGeometry(CbmSetup* setup, const pt::ptree& moduleTree) { auto geometry = moduleTree.get_child_optional("geometry"); if (!geometry) { @@ -267,9 +275,8 @@ bool CbmTransportConfig::SetGeometry(CbmTransport& obj, const pt::ptree& moduleT } auto geometryTree = geometry.get(); auto baseSetup = geometryTree.get_optional<string>("baseSetup"); - if (baseSetup) obj.LoadSetup(baseSetup.get().c_str()); + if (baseSetup) setup->LoadSetup(baseSetup.get().c_str()); - auto setup = obj.GetSetup(); auto fieldTag = geometryTree.get_optional<string>("magneticField.tag"); auto fieldScale = geometryTree.get_optional<float>("magneticField.scale"); auto fieldX = geometryTree.get_optional<float>("magneticField.position.x"); @@ -297,10 +304,25 @@ bool CbmTransportConfig::SetGeometry(CbmTransport& obj, const pt::ptree& moduleT return true; } +bool CbmTransportConfig::SetStackFilter(CbmTransport& obj, const pt::ptree& moduleTree) +{ + auto stackFilterSettings = moduleTree.get_child_optional("stackFilter"); + if (!stackFilterSettings) return true; + auto settingsTree = stackFilterSettings.get(); + auto& filter = obj.GetStackFilter(); + auto storeAllPrimaries = settingsTree.get_optional<bool>("storeAllPrimaries"); + auto storeAllMothers = settingsTree.get_optional<bool>("storeAllMothers"); + auto storeAllDecays = settingsTree.get_optional<bool>("storeAllDecays"); + if (storeAllPrimaries) filter->SetStoreAllPrimaries(storeAllPrimaries.get()); + if (storeAllMothers) filter->SetStoreAllPrimaries(storeAllMothers.get()); + if (storeAllDecays) filter->SetStoreAllPrimaries(storeAllDecays.get()); + return true; +} + bool CbmTransportConfig::LoadImpl(CbmTransport& obj, const pt::ptree& moduleTree) { return SetIO(obj, moduleTree) && SetTarget(obj, moduleTree) && SetBeamProfile(obj, moduleTree) - && SetTransportParameters(obj, moduleTree) && SetGeometry(obj, moduleTree); + && SetTransportParameters(obj, moduleTree) && SetGeometry(obj, moduleTree) && SetStackFilter(obj, moduleTree); } ClassImp(CbmTransportConfig) diff --git a/sim/transport/steer/CbmTransportConfig.h b/sim/transport/steer/CbmTransportConfig.h index 8c15558b683427ade4d63b9430c281a7b69af6c6..ba7cea807bdc10ed61248fb74a46a91a1d332f2d 100644 --- a/sim/transport/steer/CbmTransportConfig.h +++ b/sim/transport/steer/CbmTransportConfig.h @@ -3,6 +3,7 @@ #include "CbmConfigBase.h" class CbmTransport; +class CbmSetup; class CbmTransportConfig : public CbmConfigBase<CbmTransportConfig, CbmTransport> { @@ -18,6 +19,8 @@ public: static bool SetBeamProfile(CbmTransport& obj, const pt::ptree& moduleTree); static bool SetTransportParameters(CbmTransport& obj, const pt::ptree& moduleTree); static bool SetGeometry(CbmTransport& obj, const pt::ptree& moduleTree); + static bool SetGeometry(CbmSetup* setup, const pt::ptree& moduleTree); + static bool SetStackFilter(CbmTransport& obj, const pt::ptree& moduleTree); ClassDef(CbmTransportConfig, 1); };