Skip to content
Snippets Groups Projects
Commit 394a064d authored by Volker Friese's avatar Volker Friese
Browse files

Added event selector to CbmReco and its YAML configuration

parent 95784f38
No related branches found
No related tags found
1 merge request!1240Added event selector to CbmReco and its YAML configuration
......@@ -24,12 +24,19 @@ namespace cbm::algo
//TO DO: Investigate possible algorithms that use bitset instead of std::unordered_map.
//This requires consequtive addresses for modules and stations.
// --- Digi number in BMON
if (!(event.fData.fT0.fDigis.size() > fParams.fMinNumDigisBmon)) return false;
// --- Number of STS stations
if (0 < fParams.fStsMinStations) {
if (!CheckSts(event.fData.fSts.fDigis)) return false;
}
// --- Number of TOF layers
if (0 < fParams.fTofMinLayers) {
if (!CheckTof(event.fData.fTof.fDigis)) return false;
}
return true;
}
......
......@@ -13,8 +13,9 @@ namespace cbm::algo
{
struct DigiEventSelectorParams {
uint8_t fStsMinStations = 0;
uint8_t fTofMinLayers = 0;
size_t fStsMinStations = 0;
size_t fTofMinLayers = 0;
size_t fMinNumDigisBmon = 0;
};
/** @class DigiEventSelector
......
......@@ -25,6 +25,8 @@
#include <yaml-cpp/yaml.h>
#include "DigiEventSelector.h"
using std::make_unique;
using std::string;
......@@ -33,11 +35,13 @@ using std::string;
void CbmRecoConfig::LoadYaml(const std::string& filename)
{
YAML::Node config = YAML::LoadFile(filename);
// --- Digi trigger
fTriggerDet = ToCbmModuleIdCaseInsensitive(config["trigger"]["detector"].as<std::string>());
fTriggerWin = config["trigger"]["window"].as<double>();
fTriggerThreshold = config["trigger"]["threshold"].as<size_t>();
fTriggerDeadTime = config["trigger"]["deadtime"].as<double>();
// --- Event builder: (detector -> (tMin, tMax))
if (auto eventbuilder = config["eventbuilder"]) {
if (auto windows = eventbuilder["windows"]) {
......@@ -49,10 +53,17 @@ void CbmRecoConfig::LoadYaml(const std::string& filename)
}
}
}
// --- Event selector parameters
fSelectMinStationsSts = config["selector"]["minStationsSts"].as<size_t>();
fSelectMinStationsTof = config["selector"]["minStationsTof"].as<size_t>();
fSelectMinDigisBmon = config["selector"]["minDigisBmon"].as<size_t>();
// --- Branch persistence in output file
fStoreTimeslice = config["store"]["timeslice"].as<bool>();
fStoreTrigger = config["store"]["triggers"].as<bool>();
fStoreEvents = config["store"]["events"].as<bool>();
// --- QA publishing
fHttpServerRefreshRate = config["qa"]["refreshrate"].as<int32_t>(fHttpServerRefreshRate);
}
......@@ -63,17 +74,26 @@ void CbmRecoConfig::LoadYaml(const std::string& filename)
void CbmRecoConfig::SaveYaml(const std::string& filename)
{
YAML::Node config;
// --- Digi trigger
config["trigger"]["detector"] = ToString(fTriggerDet);
config["trigger"]["window"] = fTriggerWin;
config["trigger"]["threshold"] = fTriggerThreshold;
config["trigger"]["deadtime"] = fTriggerDeadTime;
// --- Event builder: (detector -> (tMin, tMax))
for (const auto& [key, value] : fEvtbuildWindows) {
auto det = ToString(key);
config["eventbuilder"]["windows"][det].push_back(value.first);
config["eventbuilder"]["windows"][det].push_back(value.second);
};
// --- Event selector
config["selector"]["minStationsSts"] = fSelectMinStationsSts;
config["selector"]["minStationsTof"] = fSelectMinStationsTof;
config["selector"]["minDigisBmon"] = fSelectMinDigisBmon;
// --- Branch persistence in output file
config["store"]["timeslice"] = fStoreTimeslice;
config["store"]["triggers"] = fStoreTrigger;
......@@ -187,11 +207,18 @@ int32_t CbmReco::Run()
trigger->SetOutputBranchPersistent("Trigger", fConfig.fStoreTrigger);
run.AddTask(trigger.release());
// --- Event selector parameters
size_t minStatSts = fConfig.fSelectMinStationsSts;
size_t minStatTof = fConfig.fSelectMinStationsTof;
size_t minDigisBmon = fConfig.fSelectMinDigisBmon;
auto selectPar = cbm::algo::DigiEventSelectorParams {minStatSts, minStatTof, minDigisBmon};
// --- Event building
auto evtBuild = make_unique<CbmTaskBuildEvents>();
for (auto& entry : fConfig.fEvtbuildWindows)
evtBuild->SetEventWindow(entry.first, entry.second.first, entry.second.second);
evtBuild->SetOutputBranchPersistent("DigiEvent", fConfig.fStoreEvents);
evtBuild->SetDigiEventSelector(selectPar);
run.AddTask(evtBuild.release());
// --- Event QA
......
......@@ -28,6 +28,10 @@ public:
double fTriggerDeadTime = 0.; // Minimal time between two trigger [ns]
// --- Event builder: (detector -> (tMin, tMax))
std::map<ECbmModuleId, std::pair<double, double>> fEvtbuildWindows = {};
// --- Event selector
size_t fSelectMinStationsSts = 0;
size_t fSelectMinStationsTof = 0;
size_t fSelectMinDigisBmon = 0;
// --- Branch persistence in output file
bool fStoreTimeslice = false;
bool fStoreTrigger = false;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment