gdata
Loading...
Searching...
No Matches
gDataCollection.h
Go to the documentation of this file.
1#pragma once
2
36#include "gTrueInfoData.h"
37#include "gDigitizedData.h"
38
39// c++
40#include <memory>
41#include <vector>
42
62{
63public:
71 explicit GDataCollection() = default;
72
79 ~GDataCollection() = default;
80
97 void collectTrueInfosData(const std::unique_ptr<GTrueInfoData>& data) {
98 // first event
99 if (trueInfosData.empty()) {
100 trueInfosData.push_back(std::make_unique<GTrueInfoData>(*data));
101 }
102 else {
103 for (const auto& [varName, value] : data->getDoubleVariablesMap()) {
104 trueInfosData.front()->accumulateVariable(varName, value);
105 }
106 }
107 }
108
127 void collectDigitizedData(const std::unique_ptr<GDigitizedData>& data) {
128 // first event
129 if (digitizedData.empty()) {
130 digitizedData.push_back(std::make_unique<GDigitizedData>(*data));
131 }
132 else {
133 // argument passed: 0: do not get SRO var
134 for (const auto& [varName, value] : data->getIntObservablesMap(0)) {
135 digitizedData.front()->accumulateVariable(varName, value);
136 }
137 for (const auto& [varName, value] : data->getDblObservablesMap(0)) {
138 digitizedData.front()->accumulateVariable(varName, value);
139 }
140 }
141 }
142
152 void addDigitizedData(std::unique_ptr<GDigitizedData> data) {
153 digitizedData.push_back(std::move(data)); // taking ownership of the unique_ptr
154 }
155
165 void addTrueInfoData(std::unique_ptr<GTrueInfoData> data) {
166 trueInfosData.push_back(std::move(data)); // taking ownership of the unique_ptr
167 }
168
179 [[nodiscard]] auto getTrueInfoData() const -> const std::vector<std::unique_ptr<GTrueInfoData>>& {
180 return trueInfosData;
181 }
182
193 [[nodiscard]] auto getDigitizedData() const -> const std::vector<std::unique_ptr<GDigitizedData>>& {
194 return digitizedData;
195 }
196
197private:
205 std::vector<std::unique_ptr<GTrueInfoData>> trueInfosData;
206
214 std::vector<std::unique_ptr<GDigitizedData>> digitizedData;
215};
Per-sensitive-detector container that owns true and digitized hit data.
void addTrueInfoData(std::unique_ptr< GTrueInfoData > data)
Add one true-hit entry (event-level ownership transfer).
auto getDigitizedData() const -> const std::vector< std::unique_ptr< GDigitizedData > > &
Read-only access to stored digitized-hit data.
GDataCollection()=default
Constructs an empty data collection for a single sensitive detector.
~GDataCollection()=default
Destructor for GDataCollection.
void addDigitizedData(std::unique_ptr< GDigitizedData > data)
Add one digitized-hit entry (event-level ownership transfer).
void collectTrueInfosData(const std::unique_ptr< GTrueInfoData > &data)
Integrate ("collect") true-hit data into a run-level aggregate entry.
auto getTrueInfoData() const -> const std::vector< std::unique_ptr< GTrueInfoData > > &
Read-only access to stored true-hit data.
void collectDigitizedData(const std::unique_ptr< GDigitizedData > &data)
Integrate ("collect") digitized data into a run-level aggregate entry.
Container for digitized (electronics-level) observables for one hit.
Container for true (simulation-level) observables for one hit.
Container for "true" (simulation-level) observables associated with one hit.