11 std::shared_ptr<GLogger>& logger) : log(logger) {
17 root_tree->SetAutoFlush(20 * 1024 * 1024);
20 root_tree->SetAutoSave(50 * 1024 * 1024);
22 registerVariable(
"g4localEventNumber", gevent_header->getG4LocalEvn());
23 registerVariable(
"threadID", gevent_header->getThreadID());
24 registerVariable(
"timeStamp", gevent_header->getTimeStamp());
29 log->
info(2,
"Filling header tree for local event n. ", gevent_header->getG4LocalEvn(),
" threadID ",
30 gevent_header->getThreadID());
33 intVarsMap[
"g4localEventNumber"].clear();
34 intVarsMap[
"threadID"].clear();
35 stringVarsMap[
"timeStamp"].clear();
37 intVarsMap[
"g4localEventNumber"].emplace_back(gevent_header->getG4LocalEvn());
38 intVarsMap[
"threadID"].emplace_back(gevent_header->getThreadID());
39 stringVarsMap[
"timeStamp"].emplace_back(gevent_header->getTimeStamp());
48 log->
info(2,
"Filling header tree for run n. ",
grun_header->getRunID());
51 intVarsMap[
"runID"].clear();
52 intVarsMap[
"runID"].emplace_back(
grun_header->getRunID());
60 std::shared_ptr<GLogger>& logger) : log(logger) {
64 root_tree->SetAutoFlush(20 * 1024 * 1024);
65 root_tree->SetAutoSave(50 * 1024 * 1024);
76 std::shared_ptr<GLogger>& logger) : log(logger) {
80 root_tree->SetAutoFlush(20 * 1024 * 1024);
81 root_tree->SetAutoSave(50 * 1024 * 1024);
85 for (
auto& [varname, value] : identityMap) { registerVariable(varname, value); }
93 std::shared_ptr<GLogger>& logger) : log(logger) {
97 root_tree->SetAutoFlush(20 * 1024 * 1024);
98 root_tree->SetAutoSave(50 * 1024 * 1024);
100 registerVariable(
"pid", 0);
101 registerVariable(
"type", 0);
102 registerVariable(
"multiplicity", 0);
103 registerVariable(
"p", 0.0);
104 registerVariable(
"theta", 0.0);
105 registerVariable(
"phi", 0.0);
106 registerVariable(
"vx", 0.0);
107 registerVariable(
"vy", 0.0);
108 registerVariable(
"vz", 0.0);
109 registerVariable(
"name", std::string());
118 std::shared_ptr<GLogger>& logger) : log(logger) {
122 root_tree->SetAutoFlush(20 * 1024 * 1024);
123 root_tree->SetAutoSave(50 * 1024 * 1024);
127 for (
auto& [varname, value] : identityMap) { registerVariable(varname, value,
true); }
130 registerVariable(varname, value);
132 for (
auto& [varname, value] : gdata->
getDblObservablesMap(0)) { registerVariable(varname, value); }
139 for (
auto& [varname, values] : intVarsMap) { values.clear(); }
140 for (
auto& [varname, values] : doubleVarsMap) { values.clear(); }
141 for (
auto& [varname, values] : stringVarsMap) { values.clear(); }
144 for (
auto& dataHits : trueInfoData) {
147 for (
auto& [varname, value] : identityMap) {
148 intVarsMap[varname].push_back(value);
151 for (
auto& [varname, value] : dataHits->getDoubleVariablesMap()) { doubleVarsMap[varname].push_back(value); }
152 for (
auto& [varname, value] : dataHits->getStringVariablesMap()) { stringVarsMap[varname].push_back(value); }
163 for (
auto& [varname, values] : intVarsMap) { values.clear(); }
164 for (
auto& [varname, values] : doubleVarsMap) { values.clear(); }
165 for (
auto& [varname, values] : stringVarsMap) { values.clear(); }
168 for (
auto& dataHits : digitizedData) {
171 for (
auto& [varname, value] : identityMap) {
172 intVarsMap[varname].push_back(value);
176 for (
auto& [varname, value] : dataHits->getIntObservablesMap(0)) { intVarsMap[varname].push_back(value); }
177 for (
auto& [varname, value] : dataHits->getDblObservablesMap(0)) { doubleVarsMap[varname].push_back(value); }
185 for (
auto& [varname, values] : intVarsMap) { values.clear(); }
186 for (
auto& [varname, values] : doubleVarsMap) { values.clear(); }
187 for (
auto& [varname, values] : stringVarsMap) { values.clear(); }
189 for (
const auto& particle : particles) {
190 intVarsMap[
"pid"].push_back(particle.pid);
191 intVarsMap[
"type"].push_back(particle.type);
192 intVarsMap[
"multiplicity"].push_back(particle.multiplicity);
193 doubleVarsMap[
"p"].push_back(particle.p);
194 doubleVarsMap[
"theta"].push_back(particle.theta);
195 doubleVarsMap[
"phi"].push_back(particle.phi);
196 doubleVarsMap[
"vx"].push_back(particle.vx);
197 doubleVarsMap[
"vy"].push_back(particle.vy);
198 doubleVarsMap[
"vz"].push_back(particle.vz);
199 stringVarsMap[
"name"].push_back(particle.name);
211void GRootTree::registerVariable(
const std::string& varname, [[maybe_unused]]
int value,
bool can_ignore_duplicates) {
212 if (can_ignore_duplicates) {
213 root_tree->Branch(varname.c_str(), &intVarsMap[varname]);
216 if (intVarsMap.find(varname) == intVarsMap.end()) { root_tree->Branch(varname.c_str(), &intVarsMap[varname]); }
219 "> already registered in the int variable map of tree ", root_tree->GetName());
224void GRootTree::registerVariable(
const std::string& varname, [[maybe_unused]]
double value) {
225 if (doubleVarsMap.find(varname) == doubleVarsMap.end()) {
226 root_tree->Branch(varname.c_str(), &doubleVarsMap[varname]);
230 "> already registered in the double variable map of tree ", root_tree->GetName());
234void GRootTree::registerVariable(
const std::string& varname, [[maybe_unused]]
const std::string& value) {
235 if (stringVarsMap.find(varname) == stringVarsMap.end()) {
236 root_tree->Branch(varname.c_str(), &stringVarsMap[varname]);
240 "> already registered in the string variable map of tree ", root_tree->GetName());
const std::vector< GIdentifier > & getIdentity() const
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 an event-header tree and register its branches.
bool fillTree(const std::unique_ptr< GEventHeader > &gevent_header)
Fill the event-header tree with one event header entry.
std::map< std::string, double > getDoubleVariablesMap() const
const std::vector< GIdentifier > & getIdentity() const
std::map< std::string, std::string > getStringVariablesMap() const
std::vector< GGeneratedParticleData > GGeneratedParticleBank
ROOT tree adapter used internally by the ROOT gstreamer plugin.
#define DIGITIZEDTREENAMEDESC
#define TRUEINFOTREENAMEDESC
#define RUNHEADERTREENAMEDESC
#define EVENTHEADERTREENAMEDESC
#define EVENTHEADERTREENAME
#define RUNHEADERTREENAME
#define GENERATEDTREENAMEDESC
std::map< std::string, int > getIdentityMap(std::vector< GIdentifier > gidentity)
Shared constants and error codes for the gstreamer module.
#define ERR_GSTREAMERVARIABLEEXISTS
Duplicate variable registration was attempted in a streamer-specific schema.