OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
DataSink.h
Go to the documentation of this file.
1 //
2 // Copyright & License: See Copyright.readme in src directory
3 //
4 
21 #ifndef _OPAL_DATA_SINK_H
22 #define _OPAL_DATA_SINK_H
23 
24 #include "Algorithms/PBunchDefs.h"
25 
26 #include "StatWriter.h"
27 #include "H5Writer.h"
28 #include "MultiBunchDump.h"
29 
30 template <class T, unsigned Dim>
31 class PartBunchBase;
32 class BoundaryGeometry;
33 class H5PartWrapper;
34 
35 class DataSink {
36 public:
38  typedef std::unique_ptr<StatWriter> statWriter_t;
39  typedef std::unique_ptr<SDDSWriter> sddsWriter_t;
40  typedef std::unique_ptr<H5Writer> h5Writer_t;
41  typedef std::unique_ptr<MultiBunchDump> mbWriter_t;
42 
43 
49  DataSink();
50  DataSink(H5PartWrapper *h5wrapper, bool restart, short numBunch);
51  DataSink(H5PartWrapper *h5wrapper, short numBunch);
52 
53  void dumpH5(PartBunchBase<double, 3> *beam, Vector_t FDext[]) const;
54 
55  int dumpH5(PartBunchBase<double, 3> *beam, Vector_t FDext[], double meanEnergy,
56  double refPr, double refPt, double refPz,
57  double refR, double refTheta, double refZ,
58  double azimuth, double elevation, bool local) const;
59 
60  //FIXME https://gitlab.psi.ch/OPAL/src/issues/245
61  void dumpH5(EnvelopeBunch &beam, Vector_t FDext[],
62  double sposHead, double sposRef,
63  double sposTail) const;
64 
65 
66  void dumpSDDS(PartBunchBase<double, 3> *beam, Vector_t FDext[],
67  const double& azimuth = -1) const;
68 
69  void dumpSDDS(PartBunchBase<double, 3> *beam, Vector_t FDext[],
70  const losses_t &losses = losses_t(), const double& azimuth = -1) const;
71 
72  //FIXME https://gitlab.psi.ch/OPAL/src/issues/245
73  void dumpSDDS(EnvelopeBunch &beam, Vector_t FDext[],
74  double sposHead, double sposRef, double sposTail) const;
75 
79 
80  void changeH5Wrapper(H5PartWrapper *h5wrapper);
81 
82 
88  void writePartlossZASCII(PartBunchBase<double, 3> *beam, BoundaryGeometry &bg, std::string fn);
89 
96  void writeGeomToVtk(BoundaryGeometry &bg, std::string fn);
97  //void writeGeoContourToVtk(BoundaryGeometry &bg, std::string fn);
98 
99 
107  long long int &step,
108  size_t &impact,
109  double &sey_num,
110  size_t numberOfFieldEmittedParticles,
111  bool nEmissionMode,
112  std::string fn);
113 
119  MultiBunchHandler* mbhandler);
120 
127 
128 private:
129  DataSink(const DataSink& ds) = delete;
130  DataSink &operator = (const DataSink &) = delete;
131 
132  void rewindLines();
133 
134  void init(bool restart = false,
135  H5PartWrapper* h5wrapper = nullptr,
136  short numBunch = 1);
137 
138 
141  std::vector<sddsWriter_t> sddsWriter_m;
142  std::vector<mbWriter_t> mbWriter_m;
143 
144  static std::string convertToString(int number, int setw = 5);
145 
147  unsigned int lossWrCounter_m;
148 
151 
152  const bool isMultiBunch_m;
153 
154  void initMultiBunchDump(short numBunch);
155 };
156 
157 
158 inline
159 std::string DataSink::convertToString(int number, int setw) {
160  std::stringstream ss;
161  ss << std::setw(setw) << std::setfill('0') << number;
162  return ss.str();
163 }
164 
165 
166 #endif // DataSink_H_
167 
168 // vi: set et ts=4 sw=4 sts=4:
169 // Local Variables:
170 // mode:c++
171 // c-basic-offset: 4
172 // indent-tabs-mode:nil
173 // End:
h5Writer_t h5Writer_m
Definition: DataSink.h:139
static std::string convertToString(int number, int setw=5)
Definition: DataSink.h:159
core of the envelope tracker based on Rene Bakkers BET implementation
Definition: EnvelopeBunch.h:60
std::unique_ptr< H5Writer > h5Writer_t
Definition: DataSink.h:40
void writeMultiBunchStatistics(PartBunchBase< double, 3 > *beam, MultiBunchHandler *mbhandler)
Definition: DataSink.cpp:279
void changeH5Wrapper(H5PartWrapper *h5wrapper)
Definition: DataSink.cpp:138
DataSink & operator=(const DataSink &)=delete
IpplTimings::TimerRef StatMarkerTimer_m
Timer to track statistics write time.
Definition: DataSink.h:150
void writeGeomToVtk(BoundaryGeometry &bg, std::string fn)
Definition: DataSink.cpp:228
DataSink()
Default constructor.
Definition: DataSink.cpp:42
Class: DataSink.
Definition: OpalData.h:29
void writeImpactStatistics(PartBunchBase< double, 3 > *beam, long long int &step, size_t &impact, double &sey_num, size_t numberOfFieldEmittedParticles, bool nEmissionMode, std::string fn)
Definition: DataSink.cpp:235
std::unique_ptr< SDDSWriter > sddsWriter_t
Definition: DataSink.h:39
void dumpH5(PartBunchBase< double, 3 > *beam, Vector_t FDext[]) const
Definition: DataSink.cpp:69
std::vector< mbWriter_t > mbWriter_m
Definition: DataSink.h:142
std::vector< sddsWriter_t > sddsWriter_m
Definition: DataSink.h:141
unsigned int lossWrCounter_m
needed to create index for vtk file
Definition: DataSink.h:147
const bool isMultiBunch_m
Definition: DataSink.h:152
std::unique_ptr< MultiBunchDump > mbWriter_t
Definition: DataSink.h:41
std::vector< std::pair< std::string, unsigned int > > losses_t
Definition: StatWriter.h:11
void writePartlossZASCII(PartBunchBase< double, 3 > *beam, BoundaryGeometry &bg, std::string fn)
Definition: DataSink.cpp:145
void init(bool restart=false, H5PartWrapper *h5wrapper=nullptr, short numBunch=1)
Definition: DataSink.cpp:345
void setMultiBunchInitialPathLengh(MultiBunchHandler *mbhandler_p)
Definition: DataSink.cpp:300
void dumpSDDS(PartBunchBase< double, 3 > *beam, Vector_t FDext[], const double &azimuth=-1) const
Definition: DataSink.cpp:99
void initMultiBunchDump(short numBunch)
Definition: DataSink.cpp:387
void rewindLines()
Definition: DataSink.cpp:308
Timing::TimerRef TimerRef
Definition: IpplTimings.h:176
StatWriter::losses_t losses_t
Definition: DataSink.h:37
statWriter_t statWriter_m
Definition: DataSink.h:140
void storeCavityInformation()
Write cavity information from H5 file.
Definition: DataSink.cpp:131
std::unique_ptr< StatWriter > statWriter_t
Definition: DataSink.h:38