11bool GstreamerJsonFactory::startEventImpl(
const std::shared_ptr<GEventDataCollection>& event_data) {
12 if (!ofile.is_open()) {
19 if (!event_data->getHeader()) {
26 ensureFileInitializedForType(
"event");
29 is_building_event =
true;
30 current_event.str(std::string());
31 current_event.clear();
32 current_event_has_header =
false;
33 current_event_has_any_detector =
false;
34 current_event_has_generated =
false;
35 current_event_digitized_entries.clear();
38 event_number = event_data->getHeader()->getG4LocalEvn();
41 current_event <<
"\"event_number\": " << event_number;
44 current_event <<
", \"header\": {";
48bool GstreamerJsonFactory::endEventImpl(
const std::shared_ptr<GEventDataCollection>& event_data) {
49 if (!is_building_event) {
52 "endEventImpl called without an active event in GstreamerJsonFactory");
59 if (!current_event_has_header) {
60 current_event <<
"\"timestamp\": \"\", \"thread_id\": -1}";
65 bool detectors_has_content = current_event_has_any_detector;
66 if (!current_event_has_any_detector) {
67 current_event <<
", \"detectors\": {";
68 current_event_has_any_detector =
true;
73 if (!current_event_digitized_entries.empty()) {
74 if (detectors_has_content) { current_event <<
", "; }
75 current_event <<
"\"digitized_by_detector\": {";
77 for (
const auto& entry : current_event_digitized_entries) {
78 if (!first) { current_event <<
", "; }
80 current_event << entry;
88 writeTopLevelEntry(current_event.str());
90 is_building_event =
false;
96bool GstreamerJsonFactory::publishEventGeneratedParticlesImpl(
const std::string& bankName,
98 if (!is_building_event) {
101 "publishEventGeneratedParticlesImpl called without an active event in GstreamerJsonFactory");
105 if (!current_event_has_generated) {
106 current_event <<
", \"generated\": {";
107 current_event_has_generated =
true;
110 current_event <<
", ";
113 current_event <<
"\"" << jsonEscape(bankName) <<
"\": [";
115 bool wrote_first_particle =
false;
116 for (
const auto& particle : particles) {
117 if (wrote_first_particle) { current_event <<
", "; }
118 wrote_first_particle =
true;
121 <<
"\"name\": \"" << jsonEscape(particle.name) <<
"\""
122 <<
", \"pid\": " << particle.pid
123 <<
", \"type\": " << particle.type
124 <<
", \"multiplicity\": " << particle.multiplicity
125 <<
", \"p\": " << particle.p
126 <<
", \"theta\": " << particle.theta
127 <<
", \"phi\": " << particle.phi
128 <<
", \"vx\": " << particle.vx
129 <<
", \"vy\": " << particle.vy
130 <<
", \"vz\": " << particle.vz
134 current_event <<
"]";
135 if (bankName ==
"generated_tracked") {
136 current_event <<
"}";
142bool GstreamerJsonFactory::publishEventAncestorsImpl(
const GAncestorBank& ancestors) {
143 if (!is_building_event) {
146 "publishEventAncestorsImpl called without an active event in GstreamerJsonFactory");
150 current_event <<
", \"ancestors\": [";
152 for (
const auto& ancestor : ancestors) {
153 if (!first) { current_event <<
", "; }
155 current_event <<
"{\"pid\": " << ancestor.pid
156 <<
", \"tid\": " << ancestor.tid
157 <<
", \"mtid\": " << ancestor.mtid
158 <<
", \"trackE\": " << ancestor.trackE
159 <<
", \"px\": " << ancestor.px
160 <<
", \"py\": " << ancestor.py
161 <<
", \"pz\": " << ancestor.pz
162 <<
", \"vx\": " << ancestor.vx
163 <<
", \"vy\": " << ancestor.vy
164 <<
", \"vz\": " << ancestor.vz
167 current_event <<
"]";
std::shared_ptr< GLogger > log
std::vector< GAncestorData > GAncestorBank
std::vector< GGeneratedParticleData > GGeneratedParticleBank
Shared constants and error codes for the gstreamer module.
JSON streamer plugin declarations.
constexpr int ERR_PUBLISH_ERROR
Publish sequence encountered invalid state or invalid input data.
constexpr int ERR_CANTOPENOUTPUT
Output medium could not be opened successfully.