OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
ElementPositionWriter.cpp
Go to the documentation of this file.
2
4#include "Ippl.h"
5
6ElementPositionWriter::ElementPositionWriter(const std::string& fname) : SDDSWriter(fname, false) {}
7
9 if (this->hasColumns()) {
10 return;
11 }
12
13 this->addDescription(
14 "Element positions '" + OpalData::getInstance()->getInputFn() + "'",
15 "element positions");
17
18 columns_m.addColumn("s", "double", "m", "longitudinal position", std::ios_base::fixed, 10);
19 columns_m.addColumn("dipole", "float", "1", "dipole field present", std::ios_base::fixed, 4);
21 "quadrupole", "float", "1", "quadrupole field present", std::ios_base::fixed, 0);
23 "sextupole", "float", "1", "sextupole field present", std::ios_base::fixed, 1);
25 "octupole", "float", "1", "octupole field present", std::ios_base::fixed, 2);
27 "decapole", "float", "1", "decapole field present", std::ios_base::fixed, 0);
29 "multipole", "float", "1", "higher multipole field present", std::ios_base::fixed, 0);
31 "solenoid", "float", "1", "solenoid field present", std::ios_base::fixed, 0);
32 columns_m.addColumn("rfcavity", "float", "1", "RF field present", std::ios_base::fixed, 4);
33 columns_m.addColumn("monitor", "float", "1", "monitor present", std::ios_base::fixed, 0);
34 columns_m.addColumn("other", "float", "1", "other element present", std::ios_base::fixed, 0);
35 columns_m.addColumn("element_names", "string", "", "names of elements");
36
37 this->addInfo("ascii", 1);
38}
39
41 double spos, const std::vector<double>& row, const std::string& elements) {
42 if (ippl::Comm->rank() != 0) return;
43
44 this->fillHeader();
45
46 this->open();
47
48 this->writeHeader();
49
50 static const std::vector<double> typeMultipliers = {3.3333e-1, 1.0, 0.5, 0.25, 1.0,
51 1.0, 1.0, 1.0, 1.0, 1.0};
52
53 static const std::vector<std::string> columnNames = {
54 "dipole", "quadrupole", "sextupole", "octupole", "decapole",
55 "multipole", "solenoid", "rfcavity", "monitor", "other"};
56
57 columns_m.addColumnValue("s", spos);
58 for (unsigned int i = 0; i < columnNames.size(); ++i) {
59 columns_m.addColumnValue(columnNames[i], row[i] * typeMultipliers[i]);
60 }
61 columns_m.addColumnValue("element_names", elements);
62
63 this->writeRow();
64
65 this->close();
66}
elements
Definition IndexMap.cpp:168
void addRow(double spos, const std::vector< double > &row, const std::string &elements)
ElementPositionWriter(const std::string &fname)
static OpalData * getInstance()
Definition OpalData.cpp:193
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