#include <bremsstrahlungaction.h>
BremsAction is a special action which takes two incoming particles and performs a perturbative scattering where a Bremsstrahlung photon is produced.
The final state particles are not further propagated, only written to the photon output.
Definition at line 26 of file bremsstrahlungaction.h.
Public Types | |
enum class | ReactionType { no_reaction , pi_z_pi_m , pi_z_pi_p , pi_p_pi_m , pi_m_pi_m , pi_p_pi_p , pi_z_pi_z } |
Enum for encoding the photon process. More... | |
Public Member Functions | |
BremsstrahlungAction (const ParticleList &in, const double time, const int n_frac_photons, const double hadronic_cross_section_input) | |
Construct a ScatterActionBrems object. More... | |
void | perform_bremsstrahlung (const OutputsList &outputs) |
Create the final state and write to output. More... | |
void | generate_final_state () override |
Generate the final-state for the Bremsstrahlung process. More... | |
void | sample_3body_phasespace () |
Sample the final state anisotropically, considering the differential cross sections with respect to theta and k. More... | |
double | get_total_weight () const override |
Return the weight of the last created photon. More... | |
double | hadronic_cross_section () const |
Return the total cross section of the underlying hadronic scattering It is necessary for the weighting procedure. More... | |
void | add_dummy_hadronic_process (double reaction_cross_section) |
Adds one hadronic process with a given cross-section. More... | |
void | add_single_process () |
Add the photonic process. More... | |
Public Member Functions inherited from smash::ScatterAction | |
ScatterAction (const ParticleData &in_part1, const ParticleData &in_part2, double time, bool isotropic=false, double string_formation_time=1.0, double box_length=-1.0, bool is_total_parametrized=false) | |
Construct a ScatterAction object. More... | |
void | add_collision (CollisionBranchPtr p) |
Add a new collision channel. More... | |
void | add_collisions (CollisionBranchList pv) |
Add several new collision channels at once. More... | |
double | transverse_distance_sqr () const |
Calculate the transverse distance of the two incoming particles in their local rest frame. More... | |
double | cov_transverse_distance_sqr () const |
Calculate the transverse distance of the two incoming particles in their local rest frame written in a covariant form. More... | |
double | mandelstam_s () const |
Determine the Mandelstam s variable,. More... | |
double | relative_velocity () const |
Get the relative velocity of the two incoming particles. More... | |
void | generate_final_state () override |
Generate the final-state of the scattering process. More... | |
double | get_total_weight () const override |
Get the total cross section of scattering particles. More... | |
double | get_partial_weight () const override |
Get the partial cross section of the chosen channel. More... | |
void | sample_angles (std::pair< double, double > masses, double kinetic_energy_cm) override |
Sample final-state angles in a 2->2 collision (possibly anisotropic). More... | |
void | add_all_scatterings (const ScatterActionsFinderParameters &finder_parameters) |
Add all possible scattering subprocesses for this action object. More... | |
void | set_parametrized_total_cross_section (const ScatterActionsFinderParameters &finder_parameters) |
Given the incoming particles, assigns the correct parametrization of the total cross section. More... | |
const CollisionBranchList & | collision_channels () |
Get list of possible collision channels. More... | |
void | set_string_interface (StringProcess *str_proc) |
Set the StringProcess object to be used. More... | |
virtual double | cross_section () const |
Get the total cross section of the scattering particles, either from a parametrization, or from the sum of partials. 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... | |
virtual double | check_conservation (const uint32_t id_process) const |
Check various conservation laws. 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, FourVector > | get_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... | |
Static Public Member Functions | |
static ReactionType | bremsstrahlung_reaction_type (const ParticleList &in) |
Determine photon process from incoming particles. More... | |
static bool | is_bremsstrahlung_reaction (const ParticleList &in) |
Check if particles can undergo an implemented photon process. More... | |
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... | |
Private Member Functions | |
void | create_interpolations () |
Create interpolation objects for tabularized cross sections: total cross section, differential dSigma/dk, differential dSigma/dtheta. More... | |
CollisionBranchList | brems_cross_sections () |
Computes the total cross section of the bremsstrahlung process. More... | |
std::pair< double, double > | brems_diff_cross_sections () |
Computes the differential cross sections dSigma/dk and dSigma/dtheta of the bremsstrahlung process. More... | |
Private Attributes | |
CollisionBranchList | collision_processes_bremsstrahlung_ |
Holds the bremsstrahlung branch. More... | |
const ReactionType | reac_ |
Reaction process as determined from incoming particles. More... | |
const int | number_of_fractional_photons_ |
Number of photons created for each hadronic scattering, needed for correct weighting. More... | |
double | weight_ = 0.0 |
Weight of the produced photon. More... | |
double | cross_section_bremsstrahlung_ = 0.0 |
Total cross section of bremsstrahlung process. More... | |
const double | hadronic_cross_section_ |
Total hadronic cross section. More... | |
double | k_ |
Sampled value of k (photon momentum) More... | |
double | theta_ |
Sampled value of theta (angle of the photon) More... | |
Additional Inherited Members | |
Protected Member Functions inherited from smash::ScatterAction | |
double | cm_momentum () const |
Get the momentum of the center of mass of the incoming particles in the calculation frame. More... | |
double | cm_momentum_squared () const |
Get the squared momentum of the center of mass of the incoming particles in the calculation frame. More... | |
ThreeVector | beta_cm () const |
Get the velocity of the center of mass of the scattering/incoming particles in the calculation frame. More... | |
double | gamma_cm () const |
Get the gamma factor corresponding to a boost to the center of mass frame of the colliding particles. More... | |
void | elastic_scattering () |
Perform an elastic two-body scattering, i.e. just exchange momentum. More... | |
void | inelastic_scattering () |
Perform an inelastic two-body scattering, i.e. new particles are formed. More... | |
void | two_to_many_scattering () |
Perform an inelastic two-to-many-body scattering (more than 2) More... | |
void | create_string_final_state () |
Creates the final states for string-processes after they are performed. More... | |
void | string_excitation () |
Todo(ryu): document better - it is not really UrQMD-based, isn't it? Perform the UrQMD-based string excitation and decay. More... | |
void | format_debug_output (std::ostream &out) const override |
Writes information about this scatter action to the out stream. 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... | |
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::ScatterAction | |
CollisionBranchList | collision_channels_ |
List of possible collisions. More... | |
double | sum_of_partial_cross_sections_ |
Current sum of partial hadronic cross sections. More... | |
double | partial_cross_section_ |
Partial cross-section to the chosen outgoing channel. More... | |
bool | isotropic_ = false |
Do this collision isotropically? More... | |
double | string_formation_time_ = 1.0 |
Time fragments take to be fully formed in hard string excitation. 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... | |
|
strong |
Enum for encoding the photon process.
It is uniquely determined by the incoming particles. The naming scheme is : Incoming_1_Incoming_2_.
Enumerator | |
---|---|
no_reaction | |
pi_z_pi_m | |
pi_z_pi_p | |
pi_p_pi_m | |
pi_m_pi_m | |
pi_p_pi_p | |
pi_z_pi_z |
Definition at line 105 of file bremsstrahlungaction.h.
smash::BremsstrahlungAction::BremsstrahlungAction | ( | const ParticleList & | in, |
const double | time, | ||
const int | n_frac_photons, | ||
const double | hadronic_cross_section_input | ||
) |
Construct a ScatterActionBrems object.
[in] | in | ParticleList of incoming particles. |
[in] | time | Time relative to underlying hadronic action. |
[in] | n_frac_photons | Number of photons to produce for each hadronic scattering. |
[in] | hadronic_cross_section_input | Cross-section of underlying hadronic cross-section. |
Definition at line 19 of file bremsstrahlungaction.cc.
void smash::BremsstrahlungAction::perform_bremsstrahlung | ( | const OutputsList & | outputs | ) |
Create the final state and write to output.
[in] | outputs | List of all outputs. Does not have to be a specific photon output, the function will take care of this. |
Definition at line 63 of file bremsstrahlungaction.cc.
|
overridevirtual |
Generate the final-state for the Bremsstrahlung process.
Generates only 3-body final state.
Implements smash::Action.
Definition at line 75 of file bremsstrahlungaction.cc.
void smash::BremsstrahlungAction::sample_3body_phasespace | ( | ) |
Sample the final state anisotropically, considering the differential cross sections with respect to theta and k.
Definition at line 145 of file bremsstrahlungaction.cc.
|
inlineoverridevirtual |
Return the weight of the last created photon.
Implements smash::Action.
Definition at line 68 of file bremsstrahlungaction.h.
|
inline |
Return the total cross section of the underlying hadronic scattering It is necessary for the weighting procedure.
Definition at line 76 of file bremsstrahlungaction.h.
void smash::BremsstrahlungAction::add_dummy_hadronic_process | ( | double | reaction_cross_section | ) |
Adds one hadronic process with a given cross-section.
The intended use is to add the hadronic cross-section from the already performed hadronic action without recomputing it.
[in] | reaction_cross_section | Total cross-section of underlying hadronic process [mb] |
Definition at line 171 of file bremsstrahlungaction.cc.
|
inline |
Add the photonic process.
Also compute the total cross section as a side effect.
Definition at line 94 of file bremsstrahlungaction.h.
|
static |
Determine photon process from incoming particles.
If incoming particles are not part of any implemented photonic process, return no_reaction.
[in] | in | ParticleList of incoming particles. |
Definition at line 28 of file bremsstrahlungaction.cc.
|
inlinestatic |
Check if particles can undergo an implemented photon process.
This function does not check the involved kinematics.
[in] | in | ParticleList of incoming particles. |
Definition at line 134 of file bremsstrahlungaction.h.
|
private |
Create interpolation objects for tabularized cross sections: total cross section, differential dSigma/dk, differential dSigma/dtheta.
Definition at line 320 of file bremsstrahlungaction.cc.
|
private |
Computes the total cross section of the bremsstrahlung process.
Definition at line 179 of file bremsstrahlungaction.cc.
|
private |
Computes the differential cross sections dSigma/dk and dSigma/dtheta of the bremsstrahlung process.
Definition at line 271 of file bremsstrahlungaction.cc.
|
private |
Holds the bremsstrahlung branch.
As of now, this will always hold only one branch.
Definition at line 143 of file bremsstrahlungaction.h.
|
private |
Reaction process as determined from incoming particles.
Definition at line 146 of file bremsstrahlungaction.h.
|
private |
Number of photons created for each hadronic scattering, needed for correct weighting.
Note that in generate_final_state() only one photon + two pions are created.
Definition at line 153 of file bremsstrahlungaction.h.
|
private |
Weight of the produced photon.
Definition at line 156 of file bremsstrahlungaction.h.
|
private |
Total cross section of bremsstrahlung process.
Definition at line 159 of file bremsstrahlungaction.h.
|
private |
Total hadronic cross section.
Definition at line 162 of file bremsstrahlungaction.h.
|
private |
Sampled value of k (photon momentum)
Definition at line 165 of file bremsstrahlungaction.h.
|
private |
Sampled value of theta (angle of the photon)
Definition at line 168 of file bremsstrahlungaction.h.