9 std::shared_ptr<GLogger>& logger) : log(logger) {
14 root_tree->SetAutoFlush(20 * 1024 * 1024);
16 root_tree->SetAutoSave(50 * 1024 * 1024);
19 registerVariable(
"g4localEventNumber", gevent_header->getG4LocalEvn());
20 registerVariable(
"threadID", gevent_header->getThreadID());
21 registerVariable(
"timeStamp", gevent_header->getTimeStamp());
28 std::shared_ptr<GLogger>& logger) : log(logger) {
33 root_tree->SetAutoFlush(20 * 1024 * 1024);
35 root_tree->SetAutoSave(50 * 1024 * 1024);
46 std::shared_ptr<GLogger>& logger) : log(logger) {
51 root_tree->SetAutoFlush(20 * 1024 * 1024);
53 root_tree->SetAutoSave(50 * 1024 * 1024);
56 for (
auto& [varname, value] : gdata->
getIntObservablesMap(0)) { registerVariable(varname, value); }
57 for (
auto& [varname, value] : gdata->
getDblObservablesMap(0)) { registerVariable(varname, value); }
62 log->
info(0,
"Filling header tree for local event n. ", gevent_header->getG4LocalEvn(),
" threadID ",
63 gevent_header->getThreadID());
66 intVarsMap[
"g4localEventNumber"].clear();
67 intVarsMap[
"threadID"].clear();
68 stringVarsMap[
"timeStamp"].clear();
70 intVarsMap[
"g4localEventNumber"].emplace_back(gevent_header->getG4LocalEvn());
71 intVarsMap[
"threadID"].emplace_back(gevent_header->getThreadID());
72 stringVarsMap[
"timeStamp"].emplace_back(gevent_header->getTimeStamp());
82 for (
auto& [varname, values] : doubleVarsMap) { values.clear(); }
83 for (
auto& [varname, values] : stringVarsMap) { values.clear(); }
86 for (
auto& dataHits : trueInfoData) {
88 for (
auto& [varname, value] : dataHits->getDoubleVariablesMap()) { doubleVarsMap[varname].push_back(value); }
91 for (
auto& [varname, value] : dataHits->getStringVariablesMap()) { stringVarsMap[varname].push_back(value); }
102 for (
auto& [varname, values] : intVarsMap) { values.clear(); }
103 for (
auto& [varname, values] : doubleVarsMap) { values.clear(); }
105 for (
auto& dataHits : digitizedData) {
107 for (
auto& [varname, value] : dataHits->getIntObservablesMap(0)) { intVarsMap[varname].push_back(value); }
110 for (
auto& [varname, value] : dataHits->getDblObservablesMap(0)) { doubleVarsMap[varname].push_back(value); }
121void GRootTree::registerVariable(
const std::string& varname, [[maybe_unused]]
int value) {
122 if (intVarsMap.find(varname) == intVarsMap.end()) { root_tree->Branch(varname.c_str(), &intVarsMap[varname]); }
125 "< already exist in the int variable map of tree ", root_tree->GetName());
129void GRootTree::registerVariable(
const std::string& varname, [[maybe_unused]]
double value) {
130 if (doubleVarsMap.find(varname) == doubleVarsMap.end()) {
131 root_tree->Branch(varname.c_str(), &doubleVarsMap[varname]);
135 "< already exist in the int variable map of tree ", root_tree->GetName());
139void GRootTree::registerVariable(
const std::string& varname, [[maybe_unused]]
const std::string& value) {
140 if (stringVarsMap.find(varname) == stringVarsMap.end()) {
141 root_tree->Branch(varname.c_str(), &stringVarsMap[varname]);
145 "< already exist in the int variable map of tree ", root_tree->GetName());
std::map< std::string, int > getIntObservablesMap(int which) const
std::map< std::string, double > getDblObservablesMap(int which) const
void debug(debug_type type, Args &&... args) const
void info(int level, Args &&... args) const
void error(int exit_code, Args &&... args) const
GRootTree(const std::unique_ptr< GEventHeader > &gevent_header, std::shared_ptr< GLogger > &log)
Construct a header tree and register header branches.
bool fillTree(const std::unique_ptr< GEventHeader > &gevent_header)
Fill the header tree for one event.
std::map< std::string, double > getDoubleVariablesMap() const
std::map< std::string, std::string > getStringVariablesMap() const
ROOT tree adapter used by the ROOT gstreamer plugin.
#define DIGITIZEDTREENAMEDESC
#define TRUEINFOTREENAMEDESC
#define HEADERTREENAMEDESC
Shared constants and error codes for the gstreamer module.
#define ERR_GSTREAMERVARIABLEEXISTS
Attempt to register the same output variable twice (ROOT tree branch conflict).