OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
SDDSWriter.h
Go to the documentation of this file.
1 #ifndef OPAL_SDDS_WRITER_H
2 #define OPAL_SDDS_WRITER_H
3 
4 #include <fstream>
5 #include <string>
6 #include <queue>
7 #include <map>
8 #include <vector>
9 #include <tuple>
10 #include <utility>
11 #include <ostream>
12 #include <iomanip>
13 #include <sstream>
14 
15 #include <boost/filesystem.hpp>
16 #include <boost/variant.hpp>
17 
18 #include "Structure/SDDSColumn.h"
20 
21 template <class T, unsigned Dim>
22 class PartBunchBase;
23 
24 class SDDSWriter {
25 
26 public:
27  // order: text, content
28  typedef std::pair<std::string, std::string> desc_t;
29 
30  // order: name, type, description
31  typedef std::tuple<std::string,
32  std::string,
33  std::string> param_t;
34 
35  // order: mode, no row counts
36  typedef std::pair<std::string, size_t> data_t;
37 
38  // order: name, type, unit, description
39  typedef std::tuple<std::string,
40  std::string,
41  std::string,
42  std::string> cols_t;
43 
44 
45  SDDSWriter(const std::string& fname, bool restart);
46 
47  virtual ~SDDSWriter() { };
48 
49  virtual void write(PartBunchBase<double, 3>* beam) { };
50 
54  void rewindLines(size_t numberOfLines);
55 
56  void replaceVersionString();
57 
58  double getLastValue(const std::string& column);
59 
60  bool exists() const;
61 
62 protected:
63 
64  void addDescription(const std::string& text,
65  const std::string& content);
66 
67  template<typename T>
68  void addParameter(const std::string& name,
69  const std::string& type,
70  const std::string& desc,
71  const T& value);
72 
73  void addDefaultParameters();
74 
75  void addColumn(const std::string& name,
76  const std::string& type,
77  const std::string& unit,
78  const std::string& desc);
79 
80  void addInfo(const std::string& mode,
81  const size_t& no_row_counts);
82 
83  void writeRow();
84 
85  void open();
86 
87  void close();
88 
94  void writeHeader();
95 
96  template<typename T>
97  std::string toString(const T& val);
98 
99  std::string fname_m;
100 
107  std::ios_base::openmode mode_m;
108 
110 
111  /* The columns of the SDDS file need to be
112  * added only once.
113  */
114  bool hasColumns() const;
115 
116 private:
117 
118  void writeDescription();
119 
120  void writeParameters();
121 
122  void writeColumns();
123 
124  void writeInfo();
125 
126  std::ofstream os_m;
127 
128  std::string indent_m;
129 
131  std::queue<param_t> params_m;
132  std::queue<std::string> paramValues_m;
134 
135  static constexpr
136  unsigned int precision_m = 15;
137 };
138 
139 
140 inline
141 bool SDDSWriter::exists() const {
142  return boost::filesystem::exists(fname_m);
143 }
144 
145 
146 inline
147 void SDDSWriter::addDescription(const std::string& text,
148  const std::string& content)
149 {
150  desc_m = std::make_pair(text, content);
151 }
152 
153 
154 template<typename T>
155 void SDDSWriter::addParameter(const std::string& name,
156  const std::string& type,
157  const std::string& desc,
158  const T& value)
159 {
160  params_m.push(std::make_tuple(name, type, desc));
161  std::stringstream ss;
162  ss << value;
163  paramValues_m.push(ss.str());
164 }
165 
166 
167 inline
168 void SDDSWriter::addInfo(const std::string& mode,
169  const size_t& no_row_counts) {
170  info_m = std::make_pair(mode, no_row_counts);
171 }
172 
173 
174 inline
177 }
178 
179 
180 template<typename T>
181 std::string SDDSWriter::toString(const T& val) {
182  std::ostringstream ss;
183  ss.precision(precision_m);
184  ss << val;
185  return ss.str();
186 }
187 
188 
189 inline
191  return columns_m.hasColumns();
192 }
193 
194 #endif
void writeRow(std::ostream &os) const
bool hasColumns() const
Definition: SDDSWriter.h:190
std::tuple< std::string, std::string, std::string > param_t
Definition: SDDSWriter.h:33
void writeParameters()
Definition: SDDSWriter.cpp:155
Definition: rbendmap.h:8
void writeHeader()
Write SDDS header.
Definition: SDDSWriter.cpp:130
static constexpr unsigned int precision_m
Definition: SDDSWriter.h:136
void writeRow()
Definition: SDDSWriter.h:175
void rewindLines(size_t numberOfLines)
delete the last &#39;numberOfLines&#39; lines of the file &#39;fileName&#39;
Definition: SDDSWriter.cpp:27
desc_t desc_m
Definition: SDDSWriter.h:130
virtual ~SDDSWriter()
Definition: SDDSWriter.h:47
std::queue< param_t > params_m
Definition: SDDSWriter.h:131
double getLastValue(const std::string &column)
Definition: SDDSWriter.cpp:104
SDDSWriter(const std::string &fname, bool restart)
Definition: SDDSWriter.cpp:11
void close()
Definition: SDDSWriter.cpp:123
void addDescription(const std::string &text, const std::string &content)
Definition: SDDSWriter.h:147
void addParameter(const std::string &name, const std::string &type, const std::string &desc, const T &value)
Definition: SDDSWriter.h:155
SDDSColumnSet columns_m
Definition: SDDSWriter.h:109
void writeColumns()
Definition: SDDSWriter.cpp:170
Class: DataSink.
Definition: OpalData.h:29
void addColumn(const std::string &name, const std::string &type, const std::string &unit, const std::string &desc)
bool exists() const
Definition: SDDSWriter.h:141
data_t info_m
Definition: SDDSWriter.h:133
std::ofstream os_m
Definition: SDDSWriter.h:126
void writeInfo()
Definition: SDDSWriter.cpp:175
std::ios_base::openmode mode_m
First write to the statistics output file.
Definition: SDDSWriter.h:107
std::tuple< std::string, std::string, std::string, std::string > cols_t
Definition: SDDSWriter.h:42
std::string fname_m
Definition: SDDSWriter.h:99
std::string toString(const T &val)
Definition: SDDSWriter.h:181
const std::string name
void open()
Definition: SDDSWriter.cpp:113
void addDefaultParameters()
Definition: SDDSWriter.cpp:190
bool hasColumns() const
Definition: SDDSColumnSet.h:61
std::string indent_m
Definition: SDDSWriter.h:128
virtual void write(PartBunchBase< double, 3 > *beam)
Definition: SDDSWriter.h:49
std::queue< std::string > paramValues_m
Definition: SDDSWriter.h:132
std::pair< std::string, std::string > desc_t
Definition: SDDSWriter.h:28
void writeDescription()
Definition: SDDSWriter.cpp:146
void replaceVersionString()
Definition: SDDSWriter.cpp:58
std::pair< std::string, size_t > data_t
Definition: SDDSWriter.h:36
void addInfo(const std::string &mode, const size_t &no_row_counts)
Definition: SDDSWriter.h:168