36 columns_m.addColumn(
"t",
"double",
"ns",
"Time");
37 columns_m.addColumn(
"s",
"double",
"m",
"Path length");
38 columns_m.addColumn(
"numParticles",
"long",
"1",
"Number of Macro Particles");
39 columns_m.addColumn(
"charge",
"double",
"1",
"Bunch Charge");
40 columns_m.addColumn(
"energy",
"double",
"MeV",
"Mean Bunch Energy");
42 columns_m.addColumn(
"rms_x",
"double",
"m",
"RMS Beamsize in x");
43 columns_m.addColumn(
"rms_y",
"double",
"m",
"RMS Beamsize in y");
44 columns_m.addColumn(
"rms_s",
"double",
"m",
"RMS Beamsize in s");
46 columns_m.addColumn(
"rms_px",
"double",
"1",
"RMS Normalized Momenta in x");
47 columns_m.addColumn(
"rms_py",
"double",
"1",
"RMS Normalized Momenta in y");
48 columns_m.addColumn(
"rms_ps",
"double",
"1",
"RMS Normalized 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");
54 columns_m.addColumn(
"mean_x",
"double",
"m",
"Mean Beam Position in x");
55 columns_m.addColumn(
"mean_y",
"double",
"m",
"Mean Beam Position in y");
56 columns_m.addColumn(
"mean_s",
"double",
"m",
"Mean Beam Position in s");
58 columns_m.addColumn(
"ref_x",
"double",
"m",
"x coordinate of reference particle in lab cs");
59 columns_m.addColumn(
"ref_y",
"double",
"m",
"y coordinate of reference particle in lab cs");
60 columns_m.addColumn(
"ref_z",
"double",
"m",
"z coordinate of reference particle in lab cs");
62 columns_m.addColumn(
"ref_px",
"double",
"1",
"x momentum of reference particle in lab cs");
63 columns_m.addColumn(
"ref_py",
"double",
"1",
"y momentum of reference particle in lab cs");
64 columns_m.addColumn(
"ref_pz",
"double",
"1",
"z momentum of reference particle in lab cs");
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");
70 columns_m.addColumn(
"xpx",
"double",
"1",
"Correlation xpx");
71 columns_m.addColumn(
"ypy",
"double",
"1",
"Correlation ypy");
72 columns_m.addColumn(
"zpz",
"double",
"1",
"Correlation zpz");
74 columns_m.addColumn(
"Dx",
"double",
"m",
"Dispersion in x");
75 columns_m.addColumn(
"DDx",
"double",
"1",
"Derivative of dispersion in x");
76 columns_m.addColumn(
"Dy",
"double",
"m",
"Dispersion in y");
77 columns_m.addColumn(
"DDy",
"double",
"1",
"Derivative of dispersion in y");
79 columns_m.addColumn(
"Bx_ref",
"double",
"T",
"Bx-Field component of ref particle");
80 columns_m.addColumn(
"By_ref",
"double",
"T",
"By-Field component of ref particle");
81 columns_m.addColumn(
"Bz_ref",
"double",
"T",
"Bz-Field component of ref particle");
83 columns_m.addColumn(
"Ex_ref",
"double",
"MV/m",
"Ex-Field component of ref particle");
84 columns_m.addColumn(
"Ey_ref",
"double",
"MV/m",
"Ey-Field component of ref particle");
85 columns_m.addColumn(
"Ez_ref",
"double",
"MV/m",
"Ez-Field component of ref particle");
87 columns_m.addColumn(
"dE",
"double",
"MeV",
"energy spread of the beam");
88 columns_m.addColumn(
"dt",
"double",
"ns",
"time step size");
89 columns_m.addColumn(
"partsOutside",
"double",
"1",
"outside n*sigma of the beam");
91 columns_m.addColumn(
"DebyeLength",
"double",
"m",
"Debye length in the boosted frame");
92 columns_m.addColumn(
"plasmaParameter",
"double",
"1",
"Plasma parameter that gives no. of particles in a Debye sphere");
93 columns_m.addColumn(
"temperature",
"double",
"K",
"Temperature of the beam");
94 columns_m.addColumn(
"rmsDensity",
"double",
"1",
"RMS number density of the beam");
158 columns_m.addColumn(
"R0_x",
"double",
"m",
"R0 Particle position in x");
159 columns_m.addColumn(
"R0_y",
"double",
"m",
"R0 Particle position in y");
160 columns_m.addColumn(
"R0_s",
"double",
"m",
"R0 Particle position in z");
162 columns_m.addColumn(
"P0_x",
"double",
"1",
"R0 Particle momentum in x");
163 columns_m.addColumn(
"P0_y",
"double",
"1",
"R0 Particle momentum in y");
164 columns_m.addColumn(
"P0_s",
"double",
"1",
"R0 Particle momentum in z");
168 columns_m.addColumn(
"halo_x",
"double",
"1",
"Halo in x");
169 columns_m.addColumn(
"halo_y",
"double",
"1",
"Halo in y");
170 columns_m.addColumn(
"halo_z",
"double",
"1",
"Halo in z");
172 columns_m.addColumn(
"azimuth",
"double",
"deg",
"Azimuth in global coordinates");
175 for (
size_t i = 0; i < losses.size(); ++i) {
176 columns_m.addColumn(losses[i].first,
"long",
"1",
"Number of lost particles in element");
179 if (
mode_m == std::ios::app)
183 std::string dateStr(simtimer.
date());
184 std::string timeStr(simtimer.
time());
186 std::stringstream ss;
199 const size_t npOutside) {
202 double Ekin = pc->getMeanKineticEnergy();
204 double pathLength = beam->
get_sPos();
211 if (ippl::Comm->rank() != 0) {
222 columns_m.addColumnValue(
"s", pathLength);
225 columns_m.addColumnValue(
"energy", Ekin);
227 columns_m.addColumnValue(
"rms_x", pc->getRmsR()(0));
228 columns_m.addColumnValue(
"rms_y", pc->getRmsR()(1));
229 columns_m.addColumnValue(
"rms_s", pc->getRmsR()(2));
231 columns_m.addColumnValue(
"rms_px", pc->getRmsP()(0));
232 columns_m.addColumnValue(
"rms_py", pc->getRmsP()(1));
233 columns_m.addColumnValue(
"rms_ps", pc->getRmsP()(2));
239 columns_m.addColumnValue(
"mean_x", pc->getMeanR()(0));
240 columns_m.addColumnValue(
"mean_y", pc->getMeanR()(1));
241 columns_m.addColumnValue(
"mean_s", pc->getMeanR()(2));
251 columns_m.addColumnValue(
"max_x", pc->getMaxR()(0));
252 columns_m.addColumnValue(
"max_y", pc->getMaxR()(1));
253 columns_m.addColumnValue(
"max_s", pc->getMaxR()(2));
267 columns_m.addColumnValue(
"Bx_ref", FDext[0](0));
268 columns_m.addColumnValue(
"By_ref", FDext[0](1));
269 columns_m.addColumnValue(
"Bz_ref", FDext[0](2));
271 columns_m.addColumnValue(
"Ex_ref", FDext[1](0));
272 columns_m.addColumnValue(
"Ey_ref", FDext[1](1));
273 columns_m.addColumnValue(
"Ez_ref", FDext[1](2));
277 columns_m.addColumnValue(
"partsOutside", npOutside);
332 if (ippl::Comm->size() == 1) {
334 columns_m.addColumnValue(
"R0_x", beam->
R(0)[0]);
335 columns_m.addColumnValue(
"R0_y", beam->
R(0)[1]);
336 columns_m.addColumnValue(
"R0_s", beam->
R(0)[2]);
337 columns_m.addColumnValue(
"P0_x", beam->
P(0)[0]);
338 columns_m.addColumnValue(
"P0_y", beam->
P(0)[1]);
339 columns_m.addColumnValue(
"P0_s", beam->
P(0)[2]);
350 columns_m.addColumnValue(
"halo_x", halo(0));
351 columns_m.addColumnValue(
"halo_y", halo(1));
352 columns_m.addColumnValue(
"halo_z", halo(2));
354 columns_m.addColumnValue(
"azimuth", azimuth);
357 for (
size_t i = 0; i < losses.size(); ++i) {
358 long unsigned int loss = losses[i].second;
359 columns_m.addColumnValue(losses[i].first, loss);
ParticleContainer< double, 3 > ParticleContainer_t
PartBunch< PLayout_t< double, 3 >, double, 3 > PartBunch_t
ippl::Vector< T, Dim > Vector_t
std::string getInputFn()
get opals input filename
static OpalData * getInstance()
double get_plasmaParameter() const
double get_rmsDensity() const
double getCharge() const
get the total charge per simulation particle
Vector_t< T, Dim > get_halo() const
double get_debyeLength() const
Vector_t< T, Dim > RefPartR_m
std::shared_ptr< ParticleContainer_t > getParticleContainer()
size_t getLocalNum() const
Vector_t< double, Dim > R(size_t i)
ParticleAttrib< Vector_t< T, Dim > > P
double get_temperature() const
size_t getTotalNum() const
Vector_t< T, Dim > RefPartP_m
Vector_t< T, Dim > get_rprms() const
Vector_t< T, Dim > get_norm_emit() const
void addDefaultParameters()
void addDescription(const std::string &text, const std::string &content)
void writeHeader()
Write SDDS header.
std::ios_base::openmode mode_m
First write to the statistics output file.
void addInfo(const std::string &mode, const size_t &no_row_counts)
StatBaseWriter(const std::string &fname, bool restart)
std::vector< std::pair< std::string, unsigned int > > losses_t
void write(PartBunch_t *beam, Vector_t< double, 3 > FDext[], const losses_t &losses=losses_t(), const double &azimuth=-1, const size_t npOutside=0)
Write statistical data.
void fillHeader(const losses_t &losses=losses_t())
StatWriter(const std::string &fname, bool restart)
std::string time() const
Return time.
std::string date() const
Return date.