OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
MultiBunchDump.cpp
Go to the documentation of this file.
1 #include "MultiBunchDump.h"
2 
3 #include <sstream>
4 
5 #include "Utilities/Timer.h"
6 #include "Utilities/Util.h"
9 #include "Ippl.h"
10 
11 extern Inform *gmsg;
12 
13 MultiBunchDump::MultiBunchDump(const std::string& fname, bool restart)
14  : StatBaseWriter(fname, restart)
15 { }
16 
17 
19 
20  if (this->hasColumns()) {
21  return;
22  }
23 
24  columns_m.addColumn("t", "double", "ns", "Time");
25  columns_m.addColumn("s", "double", "m", "Path length");
26  columns_m.addColumn("azimuth", "double", "deg", "Azimuth in global coordinates");
27  columns_m.addColumn("radius", "double", "mm", "Radius in global coordinates");
28  columns_m.addColumn("numParticles", "long", "1", "Number of Macro Particles");
29  columns_m.addColumn("energy", "double", "MeV", "Mean Bunch Energy");
30  columns_m.addColumn("dE", "double", "MeV", "energy spread of the beam");
31 
32  columns_m.addColumn("rms_x", "double", "m", "RMS Beamsize in x");
33  columns_m.addColumn("rms_y", "double", "m", "RMS Beamsize in y");
34  columns_m.addColumn("rms_s", "double", "m", "RMS Beamsize in s");
35 
36  columns_m.addColumn("rms_px", "double", "1", "RMS Normalized Momenta in x");
37  columns_m.addColumn("rms_py", "double", "1", "RMS Normalized Momenta in y");
38  columns_m.addColumn("rms_ps", "double", "1", "RMS Normalized Momenta in s");
39 
40  columns_m.addColumn("emit_x", "double", "m", "Normalized Emittance x");
41  columns_m.addColumn("emit_y", "double", "m", "Normalized Emittance y");
42  columns_m.addColumn("emit_s", "double", "m", "Normalized Emittance s");
43 
44  columns_m.addColumn("mean_x", "double", "m", "Mean Beam Position in x");
45  columns_m.addColumn("mean_y", "double", "m", "Mean Beam Position in y");
46  columns_m.addColumn("mean_s", "double", "m", "Mean Beam Position in s");
47 
48  columns_m.addColumn("xpx", "double", "1", "RMS Correlation xpx");
49  columns_m.addColumn("ypy", "double", "1", "RMS Correlation ypy");
50  columns_m.addColumn("zpz", "double", "1", "RMS Correlation zpz");
51 
52  columns_m.addColumn("halo_x", "double", "1", "Halo in x");
53  columns_m.addColumn("halo_y", "double", "1", "Halo in y");
54  columns_m.addColumn("halo_z", "double", "1", "Halo in z");
55 
56  if ( mode_m == std::ios::app )
57  return;
58 
59  OPALTimer::Timer simtimer;
60  std::string dateStr(simtimer.date());
61  std::string timeStr(simtimer.time());
62 
63  std::stringstream ss;
64  ss << "Multi Bunch Statistics data '"
66  << "' " << dateStr << " " << timeStr;
67 
68  this->addDescription(ss.str(), "multi bunch stat parameters");
69 
70  this->addDefaultParameters();
71 
72  this->addInfo("ascii", 1);
73 }
74 
75 
77  const beaminfo_t& binfo) {
78 
79  if ( Ippl::myNode() > 0)
80  return;
81 
82  fillHeader();
83 
84  this->open();
85 
86  this->writeHeader();
87 
88  columns_m.addColumnValue("t", binfo.time);
90  columns_m.addColumnValue("azimuth", binfo.azimuth);
91  columns_m.addColumnValue("radius", binfo.radius);
92  columns_m.addColumnValue("numParticles", binfo.nParticles);
93  columns_m.addColumnValue("energy", binfo.ekin);
94  columns_m.addColumnValue("dE", binfo.dEkin);
95 
96  columns_m.addColumnValue("rms_x", binfo.rrms[0]);
97  columns_m.addColumnValue("rms_y", binfo.rrms[1]);
98  columns_m.addColumnValue("rms_s", binfo.rrms[2]);
99 
100  columns_m.addColumnValue("rms_px", binfo.prms[0]);
101  columns_m.addColumnValue("rms_py", binfo.prms[1]);
102  columns_m.addColumnValue("rms_ps", binfo.prms[2]);
103 
104  columns_m.addColumnValue("emit_x", binfo.emit[0]);
105  columns_m.addColumnValue("emit_y", binfo.emit[1]);
106  columns_m.addColumnValue("emit_s", binfo.emit[2]);
107 
108  columns_m.addColumnValue("mean_x", binfo.mean[0]);
109  columns_m.addColumnValue("mean_y", binfo.mean[1]);
110  columns_m.addColumnValue("mean_s", binfo.mean[2]);
111 
112  columns_m.addColumnValue("xpx", binfo.correlation[0]);
113  columns_m.addColumnValue("ypy", binfo.correlation[1]);
114  columns_m.addColumnValue("zpz", binfo.correlation[2]);
115 
116  columns_m.addColumnValue("halo_x", binfo.halo[0]);
117  columns_m.addColumnValue("halo_y", binfo.halo[1]);
118  columns_m.addColumnValue("halo_z", binfo.halo[2]);
119 
120  this->writeRow();
121 
122  this->close();
123 }
bool hasColumns() const
Definition: SDDSWriter.h:190
void writeHeader()
Write SDDS header.
Definition: SDDSWriter.cpp:130
void writeRow()
Definition: SDDSWriter.h:175
Inform * gmsg
Definition: Main.cpp:21
static int myNode()
Definition: IpplInfo.cpp:794
void close()
Definition: SDDSWriter.cpp:123
void addDescription(const std::string &text, const std::string &content)
Definition: SDDSWriter.h:147
SDDSColumnSet columns_m
Definition: SDDSWriter.h:109
std::string date() const
Return date.
Definition: Timer.cpp:35
static OpalData * getInstance()
Definition: OpalData.cpp:209
MultiBunchDump(const std::string &fname, bool restart)
std::string getInputFn()
get opals input filename
Definition: OpalData.cpp:713
void addColumnValue(const std::string &name, const T &val)
Definition: SDDSColumnSet.h:46
std::ios_base::openmode mode_m
First write to the statistics output file.
Definition: SDDSWriter.h:107
std::string time() const
Return time.
Definition: Timer.cpp:42
void write(PartBunchBase< double, 3 > *beam, const beaminfo_t &binfo)
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 open()
Definition: SDDSWriter.cpp:113
void addDefaultParameters()
Definition: SDDSWriter.cpp:190
Definition: Inform.h:41
void addInfo(const std::string &mode, const size_t &no_row_counts)
Definition: SDDSWriter.h:168