Version: SMASH-2.0
collidermodus.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014-2020
3  * SMASH Team
4  *
5  * GNU General Public License (GPLv3 or later)
6  */
7 #ifndef SRC_INCLUDE_SMASH_COLLIDERMODUS_H_
8 #define SRC_INCLUDE_SMASH_COLLIDERMODUS_H_
9 
10 #include <cstring>
11 #include <memory>
12 #include <string>
13 #include <utility>
14 
15 #include "deformednucleus.h"
16 #include "forwarddeclarations.h"
17 #include "fourvector.h"
18 #include "interpolation.h"
19 #include "modusdefault.h"
20 #include "nucleus.h"
21 #include "pdgcode.h"
22 
23 namespace smash {
24 
25 struct ExperimentParameters;
26 
43 class ColliderModus : public ModusDefault {
44  public:
65  explicit ColliderModus(Configuration modus_config,
66  const ExperimentParameters &parameters);
73  std::string custom_file_path(const std::string &file_directory,
74  const std::string &file_name);
87  double initial_conditions(Particles *particles,
88  const ExperimentParameters &parameters);
90  int total_N_number() const { return target_->size() + projectile_->size(); }
92  int proj_N_number() const { return projectile_->size(); }
93 
95  double nuclei_passing_time() const {
96  const double passing_distance =
97  projectile_->get_nuclear_radius() + target_->get_nuclear_radius();
98  const double passing_time =
99  passing_distance /
100  std::sqrt(sqrt_s_NN_ * sqrt_s_NN_ /
101  ((2 * nucleon_mass) * (2 * nucleon_mass)) -
102  1);
103  return passing_time;
104  }
110  double velocity_projectile() const { return velocity_projectile_; }
115  double velocity_target() const { return velocity_target_; }
119  bool cll_in_nucleus() { return cll_in_nucleus_; }
123  bool is_collider() const { return true; }
125  double sqrt_s_NN() const { return sqrt_s_NN_; }
127  double impact_parameter() const { return impact_; }
133  using ModusDefault::BadInput::BadInput;
134  };
135 
136  private:
143  std::unique_ptr<Nucleus> projectile_;
151  std::unique_ptr<Nucleus> target_;
157  double total_s_;
163  double sqrt_s_NN_;
175  static std::unique_ptr<DeformedNucleus> create_deformed_nucleus(
176  Configuration &nucleus_cfg, const int ntest,
177  const std::string &nucleus_type);
185  bool same_inputfile(Configuration &proj_config, Configuration &targ_config);
193  double impact_ = 0.;
199  double imp_min_ = 0.0;
201  double imp_max_ = 0.0;
203  double yield_max_ = 0.0;
205  std::unique_ptr<InterpolateDataLinear<double>> impact_interpolation_ =
206  nullptr;
207 
214  void rotate_reaction_plane(double phi, Particles *particles);
215 
226  void sample_impact();
245  bool cll_in_nucleus_ = false;
249  double velocity_projectile_ = 0.0;
253  double velocity_target_ = 0.0;
264  std::pair<double, double> get_velocities(double mandelstam_s, double m_a,
265  double m_b);
266 
273  friend std::ostream &operator<<(std::ostream &, const ColliderModus &);
274 };
275 
276 } // namespace smash
277 
278 #endif // SRC_INCLUDE_SMASH_COLLIDERMODUS_H_
smash::ColliderModus::impact_interpolation_
std::unique_ptr< InterpolateDataLinear< double > > impact_interpolation_
Pointer to the impact parameter interpolation.
Definition: collidermodus.h:205
smash::ColliderModus::initial_z_displacement_
double initial_z_displacement_
Initial z-displacement of nuclei.
Definition: collidermodus.h:233
smash
Definition: action.h:24
smash::ColliderModus::imp_min_
double imp_min_
Minimum value of impact parameter.
Definition: collidermodus.h:199
smash::ColliderModus::custom_file_path
std::string custom_file_path(const std::string &file_directory, const std::string &file_name)
Creates full path string consisting of file_directory and file_name Needed to initialize a customnucl...
Definition: collidermodus.cc:622
smash::ColliderModus::fermi_motion
FermiMotion fermi_motion()
Definition: collidermodus.h:121
Sampling::Quadratic
Sample from areal / quadratic distribution.
CalculationFrame::CenterOfVelocity
smash::ColliderModus::cll_in_nucleus_
bool cll_in_nucleus_
An option to accept first collisions within the same nucleus.
Definition: collidermodus.h:245
smash::ColliderModus::fermi_motion_
FermiMotion fermi_motion_
An option to include Fermi motion ("off", "on", "frozen")
Definition: collidermodus.h:241
smash::ColliderModus::total_N_number
int total_N_number() const
Definition: collidermodus.h:90
smash::ColliderModus::random_reaction_plane_
bool random_reaction_plane_
Whether the reaction plane should be randomized.
Definition: collidermodus.h:195
interpolation.h
modusdefault.h
smash::ColliderModus::sampling_
Sampling sampling_
Method used for sampling of impact parameter.
Definition: collidermodus.h:197
smash::ColliderModus::sqrt_s_NN_
double sqrt_s_NN_
Center-of-mass energy of a nucleon-nucleon collision.
Definition: collidermodus.h:163
smash::ColliderModus::target_
std::unique_ptr< Nucleus > target_
Target.
Definition: collidermodus.h:151
smash::ColliderModus::nuclei_passing_time
double nuclei_passing_time() const
Time until nuclei have passed through each other.
Definition: collidermodus.h:95
FermiMotion::Off
Don't use fermi motion.
smash::ColliderModus::same_inputfile
bool same_inputfile(Configuration &proj_config, Configuration &targ_config)
Checks if target and projectile are read from the same external file if they are both initialized as ...
Definition: collidermodus.cc:632
smash::ColliderModus::sample_impact
void sample_impact()
Sample impact parameter.
Definition: collidermodus.cc:564
smash::ColliderModus::is_collider
bool is_collider() const
Definition: collidermodus.h:123
smash::nucleon_mass
constexpr double nucleon_mass
Nucleon mass in GeV.
Definition: constants.h:55
smash::ColliderModus::initial_conditions
double initial_conditions(Particles *particles, const ExperimentParameters &parameters)
Generates initial state of the particles in the system.
Definition: collidermodus.cc:472
smash::ColliderModus::velocity_target
double velocity_target() const
Definition: collidermodus.h:115
fourvector.h
smash::ModusDefault::BadInput
Definition: modusdefault.h:183
smash::ColliderModus::velocity_projectile_
double velocity_projectile_
Beam velocity of the projectile.
Definition: collidermodus.h:249
smash::Configuration
Interface to the SMASH configuration files.
Definition: configuration.h:464
forwarddeclarations.h
smash::ColliderModus::imp_max_
double imp_max_
Maximum value of impact parameter.
Definition: collidermodus.h:201
smash::ColliderModus::impact_parameter
double impact_parameter() const
Definition: collidermodus.h:127
deformednucleus.h
smash::ColliderModus::total_s_
double total_s_
Center-of-mass energy squared of the nucleus-nucleus collision.
Definition: collidermodus.h:157
Sampling
Sampling
Possible methods of impact parameter sampling.
Definition: forwarddeclarations.h:104
smash::ColliderModus::frame_
CalculationFrame frame_
Reference frame for the system, as specified from config.
Definition: collidermodus.h:237
smash::ColliderModus::proj_N_number
int proj_N_number() const
Definition: collidermodus.h:92
smash::ModusDefault
Definition: modusdefault.h:44
nucleus.h
smash::ColliderModus::yield_max_
double yield_max_
Maximum value of yield. Needed for custom impact parameter sampling.
Definition: collidermodus.h:203
smash::ColliderModus::operator<<
friend std::ostream & operator<<(std::ostream &, const ColliderModus &)
Definition: collidermodus.cc:443
CalculationFrame
CalculationFrame
The calculation frame.
Definition: forwarddeclarations.h:87
smash::Particles
Definition: particles.h:33
smash::ColliderModus::impact_
double impact_
Impact parameter.
Definition: collidermodus.h:193
smash::ColliderModus
Definition: collidermodus.h:43
smash::ColliderModus::ColliderEmpty
Definition: collidermodus.h:132
pdgcode.h
smash::ColliderModus::projectile_
std::unique_ptr< Nucleus > projectile_
Projectile.
Definition: collidermodus.h:143
smash::ColliderModus::velocity_target_
double velocity_target_
Beam velocity of the target.
Definition: collidermodus.h:253
smash::ExperimentParameters
Helper structure for Experiment.
Definition: experimentparameters.h:24
smash::ColliderModus::create_deformed_nucleus
static std::unique_ptr< DeformedNucleus > create_deformed_nucleus(Configuration &nucleus_cfg, const int ntest, const std::string &nucleus_type)
Configure Deformed Nucleus.
Definition: collidermodus.cc:453
smash::ColliderModus::rotate_reaction_plane
void rotate_reaction_plane(double phi, Particles *particles)
Rotate the reaction plane about the angle phi.
Definition: collidermodus.cc:553
smash::ColliderModus::get_velocities
std::pair< double, double > get_velocities(double mandelstam_s, double m_a, double m_b)
Get the frame dependent velocity for each nucleus, using the current reference frame.
Definition: collidermodus.cc:595
smash::ColliderModus::sqrt_s_NN
double sqrt_s_NN() const
Definition: collidermodus.h:125
smash::ColliderModus::ColliderModus
ColliderModus(Configuration modus_config, const ExperimentParameters &parameters)
Constructor.
Definition: collidermodus.cc:266
FermiMotion
FermiMotion
Option to use Fermi Motion.
Definition: forwarddeclarations.h:94
smash::ColliderModus::velocity_projectile
double velocity_projectile() const
Definition: collidermodus.h:110
smash::ColliderModus::cll_in_nucleus
bool cll_in_nucleus()
Definition: collidermodus.h:119