11bool GstreamerJsonFactory::startEventImpl(
const std::shared_ptr<GEventDataCollection>& event_data) {
17 if (!event_data->getHeader()) {
23 ensureFileInitializedForType(
"event");
26 is_building_event =
true;
27 current_event.str(std::string());
28 current_event.clear();
29 current_event_has_header =
false;
30 current_event_has_any_detector =
false;
31 current_event_has_generated =
false;
32 current_event_digitized_entries.clear();
35 event_number = event_data->getHeader()->getG4LocalEvn();
38 current_event <<
"\"event_number\": " << event_number;
41 current_event <<
", \"header\": {";
45bool GstreamerJsonFactory::endEventImpl(
const std::shared_ptr<GEventDataCollection>& event_data) {
46 if (!is_building_event) {
54 if (!current_event_has_header) {
55 current_event <<
"\"timestamp\": \"\", \"thread_id\": -1}";
60 bool detectors_has_content = current_event_has_any_detector;
61 if (!current_event_has_any_detector) {
62 current_event <<
", \"detectors\": {";
63 current_event_has_any_detector =
true;
68 if (!current_event_digitized_entries.empty()) {
69 if (detectors_has_content) { current_event <<
", "; }
70 current_event <<
"\"digitized_by_detector\": {";
72 for (
const auto& entry : current_event_digitized_entries) {
73 if (!first) { current_event <<
", "; }
75 current_event << entry;
83 writeTopLevelEntry(current_event.str());
85 is_building_event =
false;
91bool GstreamerJsonFactory::publishEventGeneratedParticlesImpl(
const std::string& bankName,
93 if (!is_building_event) {
95 "publishEventGeneratedParticlesImpl called without an active event in GstreamerJsonFactory");
99 if (!current_event_has_generated) {
100 current_event <<
", \"generated\": {";
101 current_event_has_generated =
true;
104 current_event <<
", ";
107 current_event <<
"\"" << jsonEscape(bankName) <<
"\": [";
109 bool wrote_first_particle =
false;
110 for (
const auto& particle : particles) {
111 if (wrote_first_particle) { current_event <<
", "; }
112 wrote_first_particle =
true;
115 <<
"\"name\": \"" << jsonEscape(particle.name) <<
"\""
116 <<
", \"pid\": " << particle.pid
117 <<
", \"type\": " << particle.type
118 <<
", \"multiplicity\": " << particle.multiplicity
119 <<
", \"p\": " << particle.p
120 <<
", \"theta\": " << particle.theta
121 <<
", \"phi\": " << particle.phi
122 <<
", \"vx\": " << particle.vx
123 <<
", \"vy\": " << particle.vy
124 <<
", \"vz\": " << particle.vz
128 current_event <<
"]";
129 if (bankName ==
"generated_tracked") {
130 current_event <<
"}";
std::shared_ptr< GLogger > log
void error(int exit_code, Args &&... args) const
std::vector< GGeneratedParticleData > GGeneratedParticleBank
Shared constants and error codes for the gstreamer module.
#define ERR_PUBLISH_ERROR
Publish sequence encountered invalid state or invalid input data.
#define ERR_CANTOPENOUTPUT
Output medium could not be opened successfully.
JSON streamer plugin declarations.