7 #ifndef SRC_INCLUDE_SMASH_NUCLEUS_H_ 
    8 #define SRC_INCLUDE_SMASH_NUCLEUS_H_ 
   51   Nucleus(
const std::map<PdgCode, int> &particle_list, 
int nTest);
 
  118   void boost(
double beta_scalar);
 
  141   void shift(
double z_offset, 
double x_offset, 
double simulation_time);
 
  171           "Number of test particles and test particles" 
  172           "per particle are incompatible.");
 
  185     size_t proton_counter = 0;
 
  189       if (particle.type().pdgcode() == 
pdg::p) {
 
  198           "Number of test protons and test particles" 
  199           "per proton are incompatible.");
 
  215       data.set_belongs_to(label);
 
  226       p->set_4position(
p->position() - centerpoint);
 
  267     using std::length_error::length_error;
 
  309   inline std::vector<ParticleData>::iterator 
begin() {
 
  313   inline std::vector<ParticleData>::iterator 
end() { 
return particles_.end(); }
 
  315   inline std::vector<ParticleData>::const_iterator 
cbegin()
 const {
 
  319   inline std::vector<ParticleData>::const_iterator 
cend()
 const {
 
  352       return (1.12 * std::pow(A, 1.0 / 3.0) - 0.86 * std::pow(A, -1.0 / 3.0));
 
Interface to the SMASH configuration files.
 
The FourVector class holds relevant values in Minkowski spacetime with (+, −, −, −) metric signature.
 
A nucleus is a collection of particles that are initialized, before the beginning of the simulation a...
 
virtual double nucleon_density(double r, double) const
Return the Woods-Saxon probability density for the given position.
 
double proton_radius_
Single proton radius in fm.
 
Nucleus()=default
default constructor
 
double get_diffusiveness() const
 
double euler_theta_
Euler angel theta.
 
std::vector< ParticleData >::const_iterator cbegin() const
For const iterators over the particle list:
 
void shift(double z_offset, double x_offset, double simulation_time)
Shifts the nucleus to correct impact parameter and z displacement.
 
double get_saturation_density() const
 
double woods_saxon(double x)
Woods-Saxon distribution.
 
void random_euler_angles()
Randomly generate Euler angles.
 
virtual ~Nucleus()=default
 
virtual void arrange_nucleons()
Sets the positions of the nucleons inside a nucleus.
 
virtual double calculate_saturation_density() const
 
virtual void rotate()
Rotates the nucleus.
 
double default_nuclear_radius()
Default nuclear radius calculated as:
 
double diffusiveness_
Diffusiveness of Woods-Saxon distribution of this nucleus in fm (for diffusiveness_ == 0,...
 
double saturation_density_
Saturation density of this nucleus.
 
FourVector center() const
Calculate geometrical center of the nucleus.
 
virtual void generate_fermi_momenta()
Generates momenta according to Fermi motion for the nucleons.
 
virtual void set_parameters_automatic()
Sets the deformation parameters of the Woods-Saxon distribution according to the current mass number.
 
std::vector< ParticleData >::const_iterator cend() const
For const iterators over the particle list:
 
virtual void set_parameters_from_config(Configuration &config)
Sets the parameters of the Woods-Saxon according to manually added values in the configuration file.
 
size_t size() const
Number of numerical (=test-)particles in the nucleus:
 
size_t testparticles_
Number of testparticles per physical particle.
 
double get_nuclear_radius() const
 
double euler_phi_
Euler angel phi.
 
double nuclear_radius_
Nuclear radius of this nucleus.
 
void fill_from_list(const std::map< PdgCode, int > &particle_list, int testparticles)
Adds particles from a map PDG code => Number_of_particles_with_that_PDG_code to the nucleus.
 
std::vector< ParticleData > particles_
Particles associated with this nucleus.
 
double euler_psi_
Euler angel psi.
 
virtual double nucleon_density_unnormalized(double r, double) const
Return the unnormalized Woods-Saxon distribution for the given position without deformation.
 
void align_center()
Shifts the nucleus so that its center is at (0,0,0)
 
void copy_particles(Particles *particles)
Copies the particles from this nucleus into the particle list.
 
virtual void set_saturation_density(double density)
Sets the saturation density of the nucleus.
 
void set_nuclear_radius(double rad)
Sets the nuclear radius.
 
void set_label(BelongsTo label)
Sets target / projectile labels on nucleons.
 
void set_diffusiveness(double diffuse)
Sets the diffusiveness of the nucleus.
 
std::vector< ParticleData >::iterator begin()
For iterators over the particle list:
 
size_t number_of_protons() const
Number of physical protons in the nucleus:
 
void boost(double beta_scalar)
Boosts the nuclei into the computational frame, such that the nucleons have the appropriate momentum ...
 
virtual ThreeVector distribute_nucleon()
The distribution of return values from this function is according to a spherically symmetric Woods-Sa...
 
size_t number_of_particles() const
Number of physical particles in the nucleus:
 
std::vector< ParticleData >::iterator end()
For iterators over the particle list:
 
ParticleData contains the dynamic information of a certain particle.
 
The Particles class abstracts the storage and manipulation of particles.
 
The ThreeVector class represents a physical three-vector  with the components .
 
Collection of useful constants that are known at compile time.
 
friend std::ostream & operator<<(std::ostream &, const Nucleus &)
Writes the state of the Nucleus object to the output stream.
 
constexpr double nuclear_density
Ground state density of symmetric nuclear matter [fm^-3].