Version: SMASH-3.1
smash::HypersurfacecrossingAction Class Reference

#include <hypersurfacecrossingaction.h>

Hypersurfacecrossingaction is a special action which indicates that a particle has crossed a hypersurface of given proper time.

This can be used to generate initial conditions for hybrid models. If this action is performed the incoming particles are removed from the evolution.

Definition at line 27 of file hypersurfacecrossingaction.h.

Inheritance diagram for smash::HypersurfacecrossingAction:
smash::Action

Public Member Functions

 HypersurfacecrossingAction (const ParticleData &in_part, const ParticleData &out_part, const double time_until)
 Construct hypersurfacecrossing action. More...
 
double get_total_weight () const override
 Return the total weight value, which is mainly used for the weight output entry. More...
 
double get_partial_weight () const override
 Return the specific weight for the chosen outgoing channel, which is mainly used for the partial weight output entry. More...
 
void format_debug_output (std::ostream &out) const override
 Writes information about this action to the out stream. More...
 
void generate_final_state () override
 Generate the final state of the hypersurface crossing particles. More...
 
double check_conservation (const uint32_t id_process) const override
 Check various conservation laws. More...
 
- Public Member Functions inherited from smash::Action
 Action (const ParticleList &in_part, double time)
 Construct an action object with incoming particles and relative time. More...
 
 Action (const ParticleData &in_part, const ParticleData &out_part, double time, ProcessType type)
 Construct an action object with the incoming particles, relative time, and the already known outgoing particles and type of the process. More...
 
 Action (const ParticleList &in_part, const ParticleList &out_part, double absolute_execution_time, ProcessType type)
 Construct an action object with the incoming particles, absolute time, and the already known outgoing particles and type of the process. More...
 
 Action (const Action &)=delete
 Copying is disabled. Use pointers or create a new Action. More...
 
virtual ~Action ()
 Virtual Destructor. More...
 
bool operator< (const Action &rhs) const
 Determine whether one action takes place before another in time. More...
 
virtual ProcessType get_type () const
 Get the process type. More...
 
template<typename Branch >
void add_process (ProcessBranchPtr< Branch > &p, ProcessBranchList< Branch > &subprocesses, double &total_weight)
 Add a new subprocess. More...
 
template<typename Branch >
void add_processes (ProcessBranchList< Branch > pv, ProcessBranchList< Branch > &subprocesses, double &total_weight)
 Add several new subprocesses at once. More...
 
virtual double perform (Particles *particles, uint32_t id_process)
 Actually perform the action, e.g. More...
 
bool is_valid (const Particles &particles) const
 Check whether the action still applies. More...
 
bool is_pauli_blocked (const std::vector< Particles > &ensembles, const PauliBlocker &p_bl) const
 Check if the action is Pauli-blocked. More...
 
const ParticleList & incoming_particles () const
 Get the list of particles that go into the action. More...
 
void update_incoming (const Particles &particles)
 Update the incoming particles that are stored in this action to the state they have in the global particle list. More...
 
const ParticleList & outgoing_particles () const
 Get the list of particles that resulted from the action. More...
 
double time_of_execution () const
 Get the time at which the action is supposed to be performed. More...
 
double sqrt_s () const
 Determine the total energy in the center-of-mass frame [GeV]. More...
 
FourVector total_momentum_of_outgoing_particles () const
 Calculate the total kinetic momentum of the outgoing particles. More...
 
FourVector get_interaction_point () const
 Get the interaction point. More...
 
std::pair< FourVector, FourVectorget_potential_at_interaction_point () const
 Get the skyrme and asymmetry potential at the interaction point. More...
 
void set_stochastic_pos_idx ()
 Setter function that stores a random incoming particle index latter used to determine the interaction point. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from smash::Action
static double lambda_tilde (double a, double b, double c)
 Little helper function that calculates the lambda function (sometimes written with a tilde to better distinguish it) that appears e.g. More...
 
static void sample_manybody_phasespace_impl (double sqrts, const std::vector< double > &m, std::vector< FourVector > &sampled_momenta)
 Implementation of the full n-body phase-space sampling (masses, momenta, angles) in the center-of-mass frame for the final state particles. More...
 
- Protected Member Functions inherited from smash::Action
FourVector total_momentum () const
 Sum of 4-momenta of incoming particles. More...
 
template<typename Branch >
const Branch * choose_channel (const ProcessBranchList< Branch > &subprocesses, double total_weight)
 Decide for a particular final-state channel via Monte-Carlo and return it as a ProcessBranch. More...
 
virtual std::pair< double, double > sample_masses (double kinetic_energy_cm) const
 Sample final-state masses in general X->2 processes (thus also fixing the absolute c.o.m. More...
 
virtual void sample_angles (std::pair< double, double > masses, double kinetic_energy_cm)
 Sample final-state momenta in general X->2 processes (here: using an isotropical angular distribution). More...
 
void sample_2body_phasespace ()
 Sample the full 2-body phase-space (masses, momenta, angles) in the center-of-mass frame for the final state particles. More...
 
virtual void sample_manybody_phasespace ()
 Sample the full n-body phase-space (masses, momenta, angles) in the center-of-mass frame for the final state particles. More...
 
void assign_formation_time_to_outgoing_particles ()
 Assign the formation time to the outgoing particles. More...
 
- Protected Attributes inherited from smash::Action
ParticleList incoming_particles_
 List with data of incoming particles. More...
 
ParticleList outgoing_particles_
 Initially this stores only the PDG codes of final-state particles. More...
 
const double time_of_execution_
 Time at which the action is supposed to be performed (absolute time in the lab frame in fm). More...
 
ProcessType process_type_
 type of process More...
 
double box_length_ = -1.0
 Box length: needed to determine coordinates of collision correctly in case of collision through the wall. More...
 
int stochastic_position_idx_ = -1
 This stores a randomly-chosen index to an incoming particle. More...
 

Constructor & Destructor Documentation

◆ HypersurfacecrossingAction()

smash::HypersurfacecrossingAction::HypersurfacecrossingAction ( const ParticleData in_part,
const ParticleData out_part,
const double  time_until 
)
inline

Construct hypersurfacecrossing action.

Parameters
[in]in_partData of incoming particle.
[in]out_partData of particles leaving hypersurface
[in]time_untilTime when the crossing takes place[fm]

Definition at line 35 of file hypersurfacecrossingaction.h.

38  : Action(in_part, out_part, time_until,
Action(const ParticleList &in_part, double time)
Construct an action object with incoming particles and relative time.
Definition: action.h:44
@ HyperSurfaceCrossing
See here for a short description.

Member Function Documentation

◆ get_total_weight()

double smash::HypersurfacecrossingAction::get_total_weight ( ) const
inlineoverridevirtual

Return the total weight value, which is mainly used for the weight output entry.

It has different meanings depending of the type of action. It is the total cross section in case of a ScatterAction, the total decay width in case of a DecayAction and the shining weight in case of a DecayActionDilepton.

Prefer to use a more specific function. If there is no weight for the action type, 0 should be returned.

Returns
total cross section, decay width or shining weight

Implements smash::Action.

Definition at line 40 of file hypersurfacecrossingaction.h.

40 { return 0.0; };

◆ get_partial_weight()

double smash::HypersurfacecrossingAction::get_partial_weight ( ) const
inlineoverridevirtual

Return the specific weight for the chosen outgoing channel, which is mainly used for the partial weight output entry.

For scatterings it will be the partial cross section, for decays (including dilepton decays) the partial decay width.

If there is no weight for the action type, 0 should be returned.

Returns
specific weight for the chosen output channel.

Implements smash::Action.

Definition at line 41 of file hypersurfacecrossingaction.h.

41 { return 0.0; };

◆ format_debug_output()

void smash::HypersurfacecrossingAction::format_debug_output ( std::ostream &  out) const
inlineoverridevirtual

Writes information about this action to the out stream.

Parameters
[out]outout stream to be written to

Implements smash::Action.

Definition at line 42 of file hypersurfacecrossingaction.h.

42  {
43  out << "Hypersurface crossing of " << incoming_particles_;
44  }
ParticleList incoming_particles_
List with data of incoming particles.
Definition: action.h:355

◆ generate_final_state()

void smash::HypersurfacecrossingAction::generate_final_state ( )
overridevirtual

Generate the final state of the hypersurface crossing particles.

Removes all particles crossing the hypersurface from the evolution.

Implements smash::Action.

Definition at line 18 of file hypersurfacecrossingaction.cc.

18  {
19  logg[LHyperSurfaceCrossing].debug("Process: Hypersurface Crossing. ");
20 
21  ParticleList empty_list;
22 
23  // check that there is only 1 incoming particle
24  assert(incoming_particles_.size() == 1);
25 
26  // Return empty list because we want to remove the incoming particle
27  outgoing_particles_ = empty_list;
28 }
ParticleList outgoing_particles_
Initially this stores only the PDG codes of final-state particles.
Definition: action.h:363
std::array< einhard::Logger<>, std::tuple_size< LogArea::AreaTuple >::value > logg
An array that stores all pre-configured Logger objects.
Definition: logging.cc:39
static constexpr int LHyperSurfaceCrossing
Definition: binaryoutput.cc:22

◆ check_conservation()

double smash::HypersurfacecrossingAction::check_conservation ( const uint32_t  id_process) const
overridevirtual

Check various conservation laws.

Parameters
[in]id_processprocess id only used for debugging output
Returns
0.

This function overrides Action::check_conservation that returns the amount of energy density violation due to Pythia processes, which is 0. here.

Reimplemented from smash::Action.

Definition at line 30 of file hypersurfacecrossingaction.cc.

31  {
32  QuantumNumbers before(incoming_particles_);
33  QuantumNumbers after(outgoing_particles_);
34  if (before == after) {
35  // Conservation laws should not be conserved since particles are removed
36  // from the evolution
37  throw std::runtime_error(
38  "Conservation laws conserved in the hypersurface "
39  "crossing action. Particle was not properly removed in process: " +
40  std::to_string(id_process));
41  }
42 
43  if (outgoing_particles_.size() != 0) {
44  throw std::runtime_error(
45  "Particle was not removed successfully in "
46  "hypersurface crossing action.");
47  }
48  return 0.;
49 }

The documentation for this class was generated from the following files: