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;
34 event_number = event_data->getHeader()->getG4LocalEvn();
37 current_event <<
"\"event_number\": " << event_number;
40 current_event <<
", \"header\": {";
44bool GstreamerJsonFactory::endEventImpl(
const std::shared_ptr<GEventDataCollection>& event_data) {
45 if (!is_building_event) {
51 if (!current_event_has_header) {
52 current_event <<
"\"timestamp\": \"\", \"thread_id\": -1";
57 if (current_event_has_any_detector) {
63 if (!current_event_has_any_detector) {
64 current_event <<
", \"detectors\": {}";
69 writeTopLevelEntry(current_event.str());
71 is_building_event =
false;
77bool GstreamerJsonFactory::publishEventGeneratedParticlesImpl(
const std::string& bankName,
79 if (!is_building_event) {
81 "publishEventGeneratedParticlesImpl called without an active event in GstreamerJsonFactory");
85 if (!current_event_has_generated) {
86 current_event <<
", \"generated\": {";
87 current_event_has_generated =
true;
90 current_event <<
", ";
93 current_event <<
"\"" << jsonEscape(bankName) <<
"\": [";
95 bool wrote_first_particle =
false;
96 for (
const auto& particle : particles) {
97 if (wrote_first_particle) { current_event <<
", "; }
98 wrote_first_particle =
true;
101 <<
"\"name\": \"" << jsonEscape(particle.name) <<
"\""
102 <<
", \"pid\": " << particle.pid
103 <<
", \"type\": " << particle.type
104 <<
", \"multiplicity\": " << particle.multiplicity
105 <<
", \"p\": " << particle.p
106 <<
", \"theta\": " << particle.theta
107 <<
", \"phi\": " << particle.phi
108 <<
", \"vx\": " << particle.vx
109 <<
", \"vy\": " << particle.vy
110 <<
", \"vz\": " << particle.vz
114 current_event <<
"]";
115 if (bankName ==
"generated_tracked") {
116 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.