Version: SMASH-2.0
binaryoutput.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2014-2020
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 
10 #ifndef SRC_INCLUDE_SMASH_BINARYOUTPUT_H_
11 #define SRC_INCLUDE_SMASH_BINARYOUTPUT_H_
12 
13 #include <memory>
14 #include <string>
15 
16 #include <boost/numeric/conversion/cast.hpp>
17 
18 #include "file.h"
19 #include "forwarddeclarations.h"
20 #include "outputinterface.h"
21 #include "outputparameters.h"
22 
23 namespace smash {
24 
30  protected:
39  explicit BinaryOutputBase(const bf::path &path, const std::string &mode,
40  const std::string &name, bool extended_format);
41 
46  void write(const char c);
47 
52  void write(const std::string &s);
53 
58  void write(const double x);
59 
64  void write(const FourVector &v);
65 
70  void write(const std::int32_t x) {
71  std::fwrite(&x, sizeof(x), 1, file_.get());
72  }
73 
78  void write(const std::uint32_t x) {
79  std::fwrite(&x, sizeof(x), 1, file_.get());
80  }
81 
86  void write(const std::uint16_t x) {
87  std::fwrite(&x, sizeof(x), 1, file_.get());
88  }
89 
94  void write(const size_t x) { write(boost::numeric_cast<uint32_t>(x)); }
95 
100  void write(const Particles &particles);
101 
106  void write(const ParticleList &particles);
107 
112  void write_particledata(const ParticleData &p);
113 
116 
117  private:
119  const uint16_t format_version_ = 7;
121  bool extended_;
122 };
123 
137  public:
145  BinaryOutputCollisions(const bf::path &path, std::string name,
146  const OutputParameters &out_par);
147 
155  void at_eventstart(const Particles &particles, const int event_number,
156  const EventInfo &event) override;
157 
165  void at_eventend(const Particles &particles, const int32_t event_number,
166  const EventInfo &event) override;
167 
174  void at_interaction(const Action &action, const double density) override;
175 
176  private:
179 };
180 
197  public:
205  BinaryOutputParticles(const bf::path &path, std::string name,
206  const OutputParameters &out_par);
207 
214  void at_eventstart(const Particles &particles, const int event_number,
215  const EventInfo &event) override;
216 
223  void at_eventend(const Particles &particles, const int event_number,
224  const EventInfo &event) override;
225 
233  void at_intermediate_time(const Particles &particles,
234  const std::unique_ptr<Clock> &clock,
235  const DensityParameters &dens_param,
236  const EventInfo &event) override;
237 
238  private:
241 };
242 
257  public:
265  BinaryOutputInitialConditions(const bf::path &path, std::string name,
266  const OutputParameters &out_par);
267 
272  void at_eventstart(const Particles &, const int, const EventInfo &) override;
273 
280  void at_eventend(const Particles &particles, const int event_number,
281  const EventInfo &event) override;
282 
289  void at_interaction(const Action &action, const double) override;
290 };
291 
292 } // namespace smash
293 
294 #endif // SRC_INCLUDE_SMASH_BINARYOUTPUT_H_
smash
Definition: action.h:24
outputparameters.h
smash::BinaryOutputBase::extended_
bool extended_
Option for extended output.
Definition: binaryoutput.h:121
smash::DensityParameters
A class to pre-calculate and store parameters relevant for density calculation.
Definition: density.h:108
smash::BinaryOutputParticles::only_final_
OutputOnlyFinal only_final_
Whether final- or initial-state particles should be written.
Definition: binaryoutput.h:240
OutputOnlyFinal
OutputOnlyFinal
Whether and when only final state particles should be printed.
Definition: forwarddeclarations.h:205
smash::ParticleData
Definition: particledata.h:52
smash::BinaryOutputParticles::at_eventstart
void at_eventstart(const Particles &particles, const int event_number, const EventInfo &event) override
Writes the initial particle information of an event to the binary output.
Definition: binaryoutput.cc:262
smash::BinaryOutputParticles::at_eventend
void at_eventend(const Particles &particles, const int event_number, const EventInfo &event) override
Writes the final particle information of an event to the binary output.
Definition: binaryoutput.cc:272
smash::BinaryOutputParticles::at_intermediate_time
void at_intermediate_time(const Particles &particles, const std::unique_ptr< Clock > &clock, const DensityParameters &dens_param, const EventInfo &event) override
Writes particles at each time interval; fixed by option OUTPUT_INTERVAL.
Definition: binaryoutput.cc:294
smash::BinaryOutputInitialConditions::at_eventstart
void at_eventstart(const Particles &, const int, const EventInfo &) override
Writes the initial particle information of an event to the binary output.
Definition: binaryoutput.cc:311
smash::BinaryOutputBase::write
void write(const std::uint16_t x)
Write unsigned integer (16 bit) to binary output.
Definition: binaryoutput.h:86
smash::BinaryOutputBase::write
void write(const size_t x)
Write a std::size_t to binary output.
Definition: binaryoutput.h:94
smash::BinaryOutputCollisions::at_eventend
void at_eventend(const Particles &particles, const int32_t event_number, const EventInfo &event) override
Writes the final particle information list of an event to the binary output.
Definition: binaryoutput.cc:216
smash::BinaryOutputBase::BinaryOutputBase
BinaryOutputBase(const bf::path &path, const std::string &mode, const std::string &name, bool extended_format)
Create binary output base.
Definition: binaryoutput.cc:134
smash::EventInfo
Structure to contain custom data for output.
Definition: outputinterface.h:35
smash::BinaryOutputCollisions::at_eventstart
void at_eventstart(const Particles &particles, const int event_number, const EventInfo &event) override
Writes the initial particle information list of an event to the binary output.
Definition: binaryoutput.cc:206
smash::RenamingFilePtr::get
FILE * get()
Get the underlying FILE* pointer.
Definition: file.cc:27
smash::BinaryOutputBase::write
void write(const std::uint32_t x)
Write unsigned integer (32 bit) to binary output.
Definition: binaryoutput.h:78
smash::BinaryOutputParticles
Writes the particle list at specific times to the binary file.
Definition: binaryoutput.h:196
forwarddeclarations.h
outputinterface.h
smash::OutputParameters
Helper structure for Experiment to hold output options and parameters.
Definition: outputparameters.h:25
smash::BinaryOutputBase::file_
RenamingFilePtr file_
Binary particles output file path.
Definition: binaryoutput.h:115
smash::BinaryOutputBase::write_particledata
void write_particledata(const ParticleData &p)
Write particle data to binary output.
Definition: binaryoutput.cc:177
smash::OutputInterface
Abstraction of generic output.
Definition: outputinterface.h:65
smash::BinaryOutputBase::write
void write(const char c)
Write byte to binary output.
Definition: binaryoutput.cc:147
smash::BinaryOutputBase::format_version_
const uint16_t format_version_
Binary file format version number.
Definition: binaryoutput.h:119
smash::BinaryOutputInitialConditions::at_interaction
void at_interaction(const Action &action, const double) override
Writes particles that are removed when crossing the hypersurface to the output.
Definition: binaryoutput.cc:338
smash::BinaryOutputCollisions::at_interaction
void at_interaction(const Action &action, const double density) override
Writes an interaction block, including information about the incoming and outgoing particles,...
Definition: binaryoutput.cc:238
smash::BinaryOutputInitialConditions::at_eventend
void at_eventend(const Particles &particles, const int event_number, const EventInfo &event) override
Writes the final particle information of an event to the binary output.
Definition: binaryoutput.cc:314
smash::BinaryOutputCollisions::print_start_end_
bool print_start_end_
Write initial and final particles additonally to collisions?
Definition: binaryoutput.h:178
smash::Particles
Definition: particles.h:33
smash::Action
Definition: action.h:35
smash::RenamingFilePtr
A RAII type to replace std::FILE *.
Definition: file.h:73
smash::BinaryOutputBase::write
void write(const std::int32_t x)
Write integer (32 bit) to binary output.
Definition: binaryoutput.h:70
smash::BinaryOutputCollisions
Saves SMASH collision history to binary file.
Definition: binaryoutput.h:136
smash::FourVector
Definition: fourvector.h:33
smash::pdg::p
constexpr int p
Proton.
Definition: pdgcode_constants.h:28
file.h
smash::BinaryOutputInitialConditions::BinaryOutputInitialConditions
BinaryOutputInitialConditions(const bf::path &path, std::string name, const OutputParameters &out_par)
Create binary initial conditions particle output.
Definition: binaryoutput.cc:306
smash::BinaryOutputParticles::BinaryOutputParticles
BinaryOutputParticles(const bf::path &path, std::string name, const OutputParameters &out_par)
Create binary particle output.
Definition: binaryoutput.cc:255
smash::BinaryOutputCollisions::BinaryOutputCollisions
BinaryOutputCollisions(const bf::path &path, std::string name, const OutputParameters &out_par)
Create binary particle output.
Definition: binaryoutput.cc:198
smash::BinaryOutputInitialConditions
Writes the particles when crossing the hypersurface to the binary file.
Definition: binaryoutput.h:256
smash::BinaryOutputBase
Definition: binaryoutput.h:29