14 #include <boost/filesystem.hpp> 18 #include "smash/config.h" 117 const std::string &mode,
118 const std::string &name,
119 bool extended_format)
120 :
OutputInterface(name), file_{path, mode}, extended_(extended_format) {
121 std::fwrite(
"SMSH", 4, 1, file_.get());
122 write(format_version_);
123 std::uint16_t format_variant =
static_cast<uint16_t
>(extended_);
124 write(format_variant);
125 write(VERSION_MAJOR);
130 const auto size = boost::numeric_cast<uint32_t>(s.size());
131 std::fwrite(&size,
sizeof(std::uint32_t), 1,
file_.
get());
132 std::fwrite(s.c_str(), s.size(), 1,
file_.
get());
136 std::fwrite(&x,
sizeof(x), 1,
file_.
get());
144 for (
const auto &
p : particles) {
150 for (
const auto &
p : particles) {
157 double mass =
p.effective_mass();
158 std::fwrite(&mass,
sizeof(mass), 1,
file_.
get());
160 write(
p.pdgcode().get_decimal());
164 const auto history =
p.get_history();
165 write(history.collisions_per_particle);
166 write(
p.formation_time());
167 write(
p.xsec_scaling_factor());
168 write(history.id_process);
169 write(static_cast<uint32_t>(history.process_type));
170 write(history.time_last_collision);
171 write(history.p1.get_decimal());
172 write(history.p2.get_decimal());
180 path / ((name ==
"Collisions" ?
"collisions_binary" : name) +
".bin"),
181 "wb", name, out_par.get_coll_extended(name)),
182 print_start_end_(out_par.coll_printstartend) {}
188 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
195 const int event_number,
196 double impact_parameter) {
199 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
206 std::fwrite(&fchar,
sizeof(
char), 1,
file_.
get());
208 write(impact_parameter);
215 const double density) {
217 std::fwrite(&ichar,
sizeof(
char), 1,
file_.
get());
220 std::fwrite(&density,
sizeof(
double), 1,
file_.
get());
222 std::fwrite(&weight,
sizeof(
double), 1,
file_.
get());
224 std::fwrite(&partial_weight,
sizeof(
double), 1,
file_.
get());
225 const auto type =
static_cast<uint32_t
>(action.
get_type());
226 std::fwrite(&type,
sizeof(uint32_t), 1,
file_.
get());
235 out_par.part_extended),
236 only_final_(out_par.part_only_final) {}
242 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
249 const int event_number,
250 double impact_parameter) {
252 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
258 std::fwrite(&fchar,
sizeof(
char), 1,
file_.
get());
260 write(impact_parameter);
271 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
void at_intermediate_time(const Particles &particles, const Clock &clock, const DensityParameters &dens_param) override
Writes particles at each time interval; fixed by option OUTPUT_INTERVAL.
A class to pre-calculate and store parameters relevant for density calculation.
void at_eventend(const Particles &particles, const int event_number, double impact_parameter) override
Writes the final particle information of an event to the binary output.
void at_interaction(const Action &action, const double density) override
Writes an interaction block, including information about the incoming and outgoing particles...
BinaryOutputCollisions(const bf::path &path, std::string name, const OutputParameters &out_par)
Create binary particle output.
FILE * get()
Get the underlying FILE* pointer.
RenamingFilePtr file_
Binary particles output file path.
void write_particledata(const ParticleData &p)
Write particle data to binary output.
virtual double get_partial_weight() const =0
Return the specific weight for the chosen outgoing channel, which is mainly used for the partial weig...
void at_eventstart(const Particles &particles, const int event_number) override
Writes the initial particle information of an event to the binary output.
void write(const std::string &s)
Write string to binary output.
const ParticleList & outgoing_particles() const
Get the list of particles that resulted from the action.
const ParticleList & incoming_particles() const
Get the list of particles that go into the action.
Helper structure for Experiment to hold output options and parameters.
virtual ProcessType get_type() const
Get the process type.
Base class for SMASH binary output.
Clock tracks the time in the simulation.
Action is the base class for a generic process that takes a number of incoming particles and transfor...
virtual double get_total_weight() const =0
Return the total weight value, which is mainly used for the weight output entry.
BinaryOutputBase(const bf::path &path, const std::string &mode, const std::string &name, bool extended_format)
Create binary output base.
void at_eventstart(const Particles &particles, const int event_number) override
Writes the initial particle information list of an event to the binary output.
void at_eventend(const Particles &particles, const int event_number, double impact_parameter) override
Writes the final particle information list of an event to the binary output.
bool print_start_end_
Write initial and final particles additonally to collisions?
bool only_final_
Write only final particles (True) or both, inital and final (False).
The Particles class abstracts the storage and manipulation of particles.
The FourVector class holds relevant values in Minkowski spacetime with (+, −, −, −) metric signature.
BinaryOutputParticles(const bf::path &path, std::string name, const OutputParameters &out_par)
Create binary particle output.
ParticleData contains the dynamic information of a certain particle.
Abstraction of generic output.
bool extended_
Option for extended output.