OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
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
28 if (this->hasColumns()) {
29 return;
30 }
31
32 this->addDescription("Statistics data of monitors", "stat parameters");
34
35 columns_m.addColumn("name", "string", "", "Monitor name");
36 columns_m.addColumn("s", "double", "m", "Longitudinal Position");
37 columns_m.addColumn("t", "double", "ns", "Passage Time Reference Particle");
38 columns_m.addColumn("numParticles", "long", "1", "Number of Macro Particles");
39 columns_m.addColumn("rms_x", "double", "m", "RMS Beamsize in x");
40 columns_m.addColumn("rms_y", "double", "m", "RMS Beamsize in y");
41 columns_m.addColumn("rms_s", "double", "m", "RMS Beamsize in s");
42 columns_m.addColumn("rms_t", "double", "ns", "RMS Passage Time");
43 columns_m.addColumn("rms_px", "double", "1", "RMS Momenta in x");
44 columns_m.addColumn("rms_py", "double", "1", "RMS Momenta in y");
45 columns_m.addColumn("rms_ps", "double", "1", "RMS Momenta in s");
46 columns_m.addColumn("emit_x", "double", "m", "Normalized Emittance x");
47 columns_m.addColumn("emit_y", "double", "m", "Normalized Emittance y");
48 columns_m.addColumn("emit_s", "double", "m", "Normalized Emittance s");
49 columns_m.addColumn("mean_x", "double", "m", "Mean Beam Position in x");
50 columns_m.addColumn("mean_y", "double", "m", "Mean Beam Position in y");
51 columns_m.addColumn("mean_s", "double", "m", "Mean Beam Position in s");
52 columns_m.addColumn("mean_t", "double", "ns", "Mean Passage Time");
53 columns_m.addColumn("ref_x", "double", "m", "x coordinate of reference particle in lab cs");
54 columns_m.addColumn("ref_y", "double", "m", "y coordinate of reference particle in lab cs");
55 columns_m.addColumn("ref_z", "double", "m", "z coordinate of reference particle in lab cs");
56 columns_m.addColumn("ref_px", "double", "1", "x momentum of reference particle in lab cs");
57 columns_m.addColumn("ref_py", "double", "1", "y momentum of reference particle in lab cs");
58 columns_m.addColumn("ref_pz", "double", "1", "z momentum of reference particle in lab cs");
59 columns_m.addColumn("min_x", "double", "m", "Min Beamsize in x");
60 columns_m.addColumn("min_y", "double", "m", "Min Beamsize in y");
61 columns_m.addColumn("min_s", "double", "m", "Min Beamsize in s");
62 columns_m.addColumn("max_x", "double", "m", "Max Beamsize in x");
63 columns_m.addColumn("max_y", "double", "m", "Max Beamsize in y");
64 columns_m.addColumn("max_s", "double", "m", "Max Beamsize in s");
65 columns_m.addColumn("xpx", "double", "1", "Correlation xpx");
66 columns_m.addColumn("ypy", "double", "1", "Correlation ypy");
67 columns_m.addColumn("zpz", "double", "1", "Correlation zpz");
68
69 this->addInfo("ascii", 1);
70}
71
73 if (ippl::Comm->rank() != 0) {
74 return;
75 }
76
77 this->fillHeader();
78
79 this->open();
80
81 this->writeHeader();
82
86 columns_m.addColumnValue("numParticles", set.nTotal_m);
87 columns_m.addColumnValue("rms_x", set.rrms_m(0));
88 columns_m.addColumnValue("rms_y", set.rrms_m(1));
89 columns_m.addColumnValue("rms_s", set.rrms_m(2));
91 columns_m.addColumnValue("rms_px", set.prms_m(0));
92 columns_m.addColumnValue("rms_py", set.prms_m(1));
93 columns_m.addColumnValue("rms_ps", set.prms_m(2));
94 columns_m.addColumnValue("emit_x", set.eps_norm_m(0));
95 columns_m.addColumnValue("emit_y", set.eps_norm_m(1));
96 columns_m.addColumnValue("emit_s", set.eps_norm_m(2));
97 columns_m.addColumnValue("mean_x", set.rmean_m(0));
98 columns_m.addColumnValue("mean_y", set.rmean_m(1));
99 columns_m.addColumnValue("mean_s", set.rmean_m(2));
101 columns_m.addColumnValue("ref_x", set.RefPartR_m(0));
102 columns_m.addColumnValue("ref_y", set.RefPartR_m(1));
103 columns_m.addColumnValue("ref_z", set.RefPartR_m(2));
104 columns_m.addColumnValue("ref_px", set.RefPartP_m(0));
105 columns_m.addColumnValue("ref_py", set.RefPartP_m(1));
106 columns_m.addColumnValue("ref_pz", set.RefPartP_m(2));
107 columns_m.addColumnValue("min_x", set.rmin_m[0]);
108 columns_m.addColumnValue("min_y", set.rmin_m[1]);
109 columns_m.addColumnValue("min_s", set.rmin_m[2]);
110 columns_m.addColumnValue("max_x", set.rmax_m[0]);
111 columns_m.addColumnValue("max_y", set.rmax_m[1]);
112 columns_m.addColumnValue("max_s", set.rmax_m[2]);
113 columns_m.addColumnValue("xpx", set.rprms_m(0));
114 columns_m.addColumnValue("ypy", set.rprms_m(1));
115 columns_m.addColumnValue("zpz", set.rprms_m(2));
116
117 this->writeRow();
118
119 this->close();
120}
void addRow(const SetStatistics &set)
MonitorStatisticsWriter(const std::string &fname, bool restart)
void addColumn(const std::string &name, const std::string &type, const std::string &unit, const std::string &desc, std::ios_base::fmtflags flags=std::ios_base::scientific, unsigned short precision=15)
void addColumnValue(const std::string &name, const T &val)
SDDSColumnSet columns_m
Definition SDDSWriter.h:111
bool hasColumns() const
Definition SDDSWriter.h:168
void addDefaultParameters()
void addDescription(const std::string &text, const std::string &content)
Definition SDDSWriter.h:141
void writeHeader()
Write SDDS header.
void writeRow()
Definition SDDSWriter.h:158
void addInfo(const std::string &mode, const size_t &no_row_counts)
Definition SDDSWriter.h:154
constexpr double s2ns
Definition Units.h:44
Vector_t< double, 3 > rprms_m
std::string outputName_m
Vector_t< double, 3 > RefPartR_m
Vector_t< double, 3 > RefPartP_m
Vector_t< double, 3 > rrms_m
Vector_t< double, 3 > eps_norm_m
Vector_t< double, 3 > rmax_m
Vector_t< double, 3 > prms_m
unsigned long nTotal_m
Vector_t< double, 3 > rmin_m
Vector_t< double, 3 > rmean_m