11bool GstreamerJsonFactory::startEventImpl(
const std::shared_ptr<GEventDataCollection>& event_data) {
12 if (!ofile.is_open()) {
19 if (!event_data->getHeader()) {
25 ensureFileInitializedForType(
"event");
28 is_building_event =
true;
29 current_event.str(std::string());
30 current_event.clear();
31 current_event_has_header =
false;
32 current_event_has_any_detector =
false;
33 current_event_has_generated =
false;
34 current_event_digitized_entries.clear();
37 event_number = event_data->getHeader()->getG4LocalEvn();
40 current_event <<
"\"event_number\": " << event_number;
43 current_event <<
", \"header\": {";
47bool GstreamerJsonFactory::endEventImpl(
const std::shared_ptr<GEventDataCollection>& event_data) {
48 if (!is_building_event) {
50 "endEventImpl called without an active event in GstreamerJsonFactory");
57 if (!current_event_has_header) {
58 current_event <<
"\"timestamp\": \"\", \"thread_id\": -1}";
63 bool detectors_has_content = current_event_has_any_detector;
64 if (!current_event_has_any_detector) {
65 current_event <<
", \"detectors\": {";
66 current_event_has_any_detector =
true;
71 if (!current_event_digitized_entries.empty()) {
72 if (detectors_has_content) { current_event <<
", "; }
73 current_event <<
"\"digitized_by_detector\": {";
75 for (
const auto& entry : current_event_digitized_entries) {
76 if (!first) { current_event <<
", "; }
78 current_event << entry;
86 writeTopLevelEntry(current_event.str());
88 is_building_event =
false;
94bool GstreamerJsonFactory::publishEventGeneratedParticlesImpl(
const std::string& bankName,
96 if (!is_building_event) {
98 "publishEventGeneratedParticlesImpl called without an active event in GstreamerJsonFactory");
102 if (!current_event_has_generated) {
103 current_event <<
", \"generated\": {";
104 current_event_has_generated =
true;
107 current_event <<
", ";
110 current_event <<
"\"" << jsonEscape(bankName) <<
"\": [";
112 bool wrote_first_particle =
false;
113 for (
const auto& particle : particles) {
114 if (wrote_first_particle) { current_event <<
", "; }
115 wrote_first_particle =
true;
118 <<
"\"name\": \"" << jsonEscape(particle.name) <<
"\""
119 <<
", \"pid\": " << particle.pid
120 <<
", \"type\": " << particle.type
121 <<
", \"multiplicity\": " << particle.multiplicity
122 <<
", \"p\": " << particle.p
123 <<
", \"theta\": " << particle.theta
124 <<
", \"phi\": " << particle.phi
125 <<
", \"vx\": " << particle.vx
126 <<
", \"vy\": " << particle.vy
127 <<
", \"vz\": " << particle.vz
131 current_event <<
"]";
132 if (bankName ==
"generated_tracked") {
133 current_event <<
"}";
139bool GstreamerJsonFactory::publishEventAncestorsImpl(
const GAncestorBank& ancestors) {
140 if (!is_building_event) {
142 "publishEventAncestorsImpl called without an active event in GstreamerJsonFactory");
146 current_event <<
", \"ancestors\": [";
148 for (
const auto& ancestor : ancestors) {
149 if (!first) { current_event <<
", "; }
151 current_event <<
"{\"pid\": " << ancestor.pid
152 <<
", \"tid\": " << ancestor.tid
153 <<
", \"mtid\": " << ancestor.mtid
154 <<
", \"trackE\": " << ancestor.trackE
155 <<
", \"px\": " << ancestor.px
156 <<
", \"py\": " << ancestor.py
157 <<
", \"pz\": " << ancestor.pz
158 <<
", \"vx\": " << ancestor.vx
159 <<
", \"vy\": " << ancestor.vy
160 <<
", \"vz\": " << ancestor.vz
163 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.