OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
MonitorStatisticsWriter.cpp
Go to the documentation of this file.
1//
2// Class MonitorStatisticsWriter
3// This class writes statistics of monitor element.
4//
5// Copyright (c) 2019, Christof Metzger-Kraus, Open Sourcerer
6// All rights reserved
7//
8// This file is part of OPAL.
9//
10// OPAL is free software: you can redistribute it and/or modify
11// it under the terms of the GNU General Public License as published by
12// the Free Software Foundation, either version 3 of the License, or
13// (at your option) any later version.
14//
15// You should have received a copy of the GNU General Public License
16// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
17//
19#include "Physics/Units.h"
20
22#include "Utility/IpplInfo.h"
23
24MonitorStatisticsWriter::MonitorStatisticsWriter(const std::string& fname, bool restart)
25 : SDDSWriter(fname, restart)
26{ }
27
28
30
31 if (this->hasColumns()) {
32 return;
33 }
34
35 this->addDescription("Statistics data of monitors",
36 "stat parameters");
38
39 columns_m.addColumn("name", "string", "", "Monitor name");
40 columns_m.addColumn("s", "double", "m", "Longitudinal Position");
41 columns_m.addColumn("t", "double", "ns", "Passage Time Reference Particle");
42 columns_m.addColumn("numParticles", "long", "1", "Number of Macro Particles");
43 columns_m.addColumn("rms_x", "double", "m", "RMS Beamsize in x");
44 columns_m.addColumn("rms_y", "double", "m", "RMS Beamsize in y");
45 columns_m.addColumn("rms_s", "double", "m", "RMS Beamsize in s");
46 columns_m.addColumn("rms_t", "double", "ns", "RMS Passage Time");
47 columns_m.addColumn("rms_px", "double", "1", "RMS Momenta in x");
48 columns_m.addColumn("rms_py", "double", "1", "RMS Momenta in y");
49 columns_m.addColumn("rms_ps", "double", "1", "RMS Momenta in s");
50 columns_m.addColumn("emit_x", "double", "m", "Normalized Emittance x");
51 columns_m.addColumn("emit_y", "double", "m", "Normalized Emittance y");
52 columns_m.addColumn("emit_s", "double", "m", "Normalized Emittance s");
53 columns_m.addColumn("mean_x", "double", "m", "Mean Beam Position in x");
54 columns_m.addColumn("mean_y", "double", "m", "Mean Beam Position in y");
55 columns_m.addColumn("mean_s", "double", "m", "Mean Beam Position in s");
56 columns_m.addColumn("mean_t", "double", "ns", "Mean Passage Time");
57 columns_m.addColumn("ref_x", "double", "m", "x coordinate of reference particle in lab cs");
58 columns_m.addColumn("ref_y", "double", "m", "y coordinate of reference particle in lab cs");
59 columns_m.addColumn("ref_z", "double", "m", "z coordinate of reference particle in lab cs");
60 columns_m.addColumn("ref_px", "double", "1", "x momentum of reference particle in lab cs");
61 columns_m.addColumn("ref_py", "double", "1", "y momentum of reference particle in lab cs");
62 columns_m.addColumn("ref_pz", "double", "1", "z momentum of reference particle in lab cs");
63 columns_m.addColumn("min_x", "double", "m", "Min Beamsize in x");
64 columns_m.addColumn("min_y", "double", "m", "Min Beamsize in y");
65 columns_m.addColumn("min_s", "double", "m", "Min Beamsize in s");
66 columns_m.addColumn("max_x", "double", "m", "Max Beamsize in x");
67 columns_m.addColumn("max_y", "double", "m", "Max Beamsize in y");
68 columns_m.addColumn("max_s", "double", "m", "Max Beamsize in s");
69 columns_m.addColumn("xpx", "double", "1", "Correlation xpx");
70 columns_m.addColumn("ypy", "double", "1", "Correlation ypy");
71 columns_m.addColumn("zpz", "double", "1", "Correlation zpz");
72
73 this->addInfo("ascii", 1);
74}
75
76
78
79 if ( Ippl::myNode() != 0 ) {
80 return;
81 }
82
83 this->fillHeader();
84
85 this->open();
86
87 this->writeHeader();
88
89 columns_m.addColumnValue("name", set.outputName_m);
90 columns_m.addColumnValue("s", set.spos_m);
91 columns_m.addColumnValue("t", set.refTime_m);
92 columns_m.addColumnValue("numParticles", set.nTotal_m);
93 columns_m.addColumnValue("rms_x", set.rrms_m(0));
94 columns_m.addColumnValue("rms_y", set.rrms_m(1));
95 columns_m.addColumnValue("rms_s", set.rrms_m(2));
96 columns_m.addColumnValue("rms_t", set.trms_m * Units::s2ns);
97 columns_m.addColumnValue("rms_px", set.prms_m(0));
98 columns_m.addColumnValue("rms_py", set.prms_m(1));
99 columns_m.addColumnValue("rms_ps", set.prms_m(2));
100 columns_m.addColumnValue("emit_x", set.eps_norm_m(0));
101 columns_m.addColumnValue("emit_y", set.eps_norm_m(1));
102 columns_m.addColumnValue("emit_s", set.eps_norm_m(2));
103 columns_m.addColumnValue("mean_x", set.rmean_m(0));
104 columns_m.addColumnValue("mean_y", set.rmean_m(1));
105 columns_m.addColumnValue("mean_s", set.rmean_m(2));
106 columns_m.addColumnValue("mean_t", set.tmean_m * Units::s2ns);
107 columns_m.addColumnValue("ref_x", set.RefPartR_m(0));
108 columns_m.addColumnValue("ref_y", set.RefPartR_m(1));
109 columns_m.addColumnValue("ref_z", set.RefPartR_m(2));
110 columns_m.addColumnValue("ref_px", set.RefPartP_m(0));
111 columns_m.addColumnValue("ref_py", set.RefPartP_m(1));
112 columns_m.addColumnValue("ref_pz", set.RefPartP_m(2));
113 columns_m.addColumnValue("min_x", set.rmin_m[0]);
114 columns_m.addColumnValue("min_y", set.rmin_m[1]);
115 columns_m.addColumnValue("min_s", set.rmin_m[2]);
116 columns_m.addColumnValue("max_x", set.rmax_m[0]);
117 columns_m.addColumnValue("max_y", set.rmax_m[1]);
118 columns_m.addColumnValue("max_s", set.rmax_m[2]);
119 columns_m.addColumnValue("xpx", set.rprms_m(0));
120 columns_m.addColumnValue("ypy", set.rprms_m(1));
121 columns_m.addColumnValue("zpz", set.rprms_m(2));
122
123 this->writeRow();
124
125 this->close();
126}
constexpr double s2ns
Definition Units.h:44
Vector_t eps_norm_m
Vector_t rmax_m
Vector_t RefPartP_m
std::string outputName_m
Vector_t prms_m
Vector_t rmean_m
unsigned long nTotal_m
Vector_t rrms_m
Vector_t RefPartR_m
Vector_t rmin_m
Vector_t rprms_m
void addRow(const SetStatistics &set)
MonitorStatisticsWriter(const std::string &fname, bool restart)
SDDSWriter(const std::string &fname, bool restart)
SDDSColumnSet columns_m
Definition SDDSWriter.h:122
bool hasColumns() const
Definition SDDSWriter.h:200
void addDefaultParameters()
void addDescription(const std::string &text, const std::string &content)
Definition SDDSWriter.h:159
void writeHeader()
Write SDDS header.
void writeRow()
Definition SDDSWriter.h:185
void addInfo(const std::string &mode, const size_t &no_row_counts)
Definition SDDSWriter.h:178
static int myNode()
Definition IpplInfo.cpp:691