14 #include <boost/filesystem.hpp> 18 #include "smash/config.h" 128 const std::string &mode,
129 const std::string &name,
130 bool extended_format)
132 std::fwrite(
"SMSH", 4, 1,
file_.
get());
134 std::uint16_t format_variant =
static_cast<uint16_t
>(
extended_);
135 write(format_variant);
136 write(VERSION_MAJOR);
141 const auto size = boost::numeric_cast<uint32_t>(s.size());
142 std::fwrite(&size,
sizeof(std::uint32_t), 1,
file_.
get());
143 std::fwrite(s.c_str(), s.size(), 1,
file_.
get());
147 std::fwrite(&x,
sizeof(x), 1,
file_.
get());
155 for (
const auto &
p : particles) {
161 for (
const auto &
p : particles) {
169 std::fwrite(&mass,
sizeof(mass), 1,
file_.
get());
176 write(history.collisions_per_particle);
179 write(history.id_process);
180 write(static_cast<int32_t>(history.process_type));
181 write(history.time_last_collision);
182 write(history.p1.get_decimal());
183 write(history.p2.get_decimal());
191 path / ((name ==
"Collisions" ?
"collisions_binary" : name) +
".bin"),
192 "wb", name, out_par.get_coll_extended(name)),
193 print_start_end_(out_par.coll_printstartend) {}
199 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
206 const int32_t event_number,
207 double impact_parameter) {
210 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
217 std::fwrite(&fchar,
sizeof(
char), 1,
file_.
get());
219 write(impact_parameter);
226 const double density) {
228 std::fwrite(&ichar,
sizeof(
char), 1,
file_.
get());
231 std::fwrite(&density,
sizeof(
double), 1,
file_.
get());
233 std::fwrite(&weight,
sizeof(
double), 1,
file_.
get());
235 std::fwrite(&partial_weight,
sizeof(
double), 1,
file_.
get());
236 const auto type =
static_cast<uint32_t
>(action.
get_type());
237 std::fwrite(&type,
sizeof(uint32_t), 1,
file_.
get());
246 out_par.part_extended),
247 only_final_(out_par.part_only_final) {}
253 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
260 const int event_number,
261 double impact_parameter) {
263 std::fwrite(&pchar,
sizeof(
char), 1,
file_.
get());
269 std::fwrite(&fchar,
sizeof(
char), 1,
file_.
get());
271 write(impact_parameter);
282 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.
double formation_time() const
Get the absolute formation time of the particle.
A class to pre-calculate and store parameters relevant for density calculation.
PdgCode pdgcode() const
Get the pdgcode of the particle.
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...
const FourVector & position() const
Get the particle's position in Minkowski space.
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...
virtual ProcessType get_type() const
Get the process type.
uint16_t format_version_
Binary file format version number.
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.
double effective_mass() const
Get the particle's effective mass.
void at_eventend(const Particles &particles, const int32_t event_number, double impact_parameter) override
Writes the final particle information list of an event to the binary output.
HistoryData get_history() const
Get history information.
double xsec_scaling_factor(double delta_time=0.) const
Return the cross section scaling factor at a given time.
Helper structure for Experiment to hold output options and parameters.
Base class for SMASH binary output.
const ParticleType & type() const
Get the type of the particle.
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.
int32_t charge() const
The charge of the particle.
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.
bool print_start_end_
Write initial and final particles additonally to collisions?
const ParticleList & incoming_particles() const
Get the list of particles that go into the action.
bool only_final_
Write only final particles (True) or both, inital and final (False).
The Particles class abstracts the storage and manipulation of particles.
const ParticleList & outgoing_particles() const
Get the list of particles that resulted from the action.
int32_t id() const
Get the id of the particle.
The FourVector class holds relevant values in Minkowski spacetime with (+, −, −, −) metric signature.
int32_t get_decimal() const
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.
const FourVector & momentum() const
Get the particle's 4-momentum.
bool extended_
Option for extended output.