Version: SMASH-3.3
smash::ScatterActionPhoton Class Reference

#include <scatteractionphoton.h>

ScatterActionPhoton is a special action which takes two incoming particles and performs a perturbative electromagnetic scattering.

The final state particles are not further propagated, only written to the output.

Definition at line 27 of file scatteractionphoton.h.

Inheritance diagram for smash::ScatterActionPhoton:
smash::ScatterAction smash::Action

Public Types

enum class  ReactionType {
  no_reaction , pi_z_pi_p_rho_p , pi_z_pi_m_rho_m , pi_p_rho_z_pi_p ,
  pi_m_rho_z_pi_m , pi_m_rho_p_pi_z , pi_p_rho_m_pi_z , pi_z_rho_p_pi_p ,
  pi_z_rho_m_pi_m , pi_p_pi_m_rho_z , pi_z_rho_z_pi_z
}
 Enum for encoding the photon process. More...
 

Public Member Functions

 ScatterActionPhoton (const ParticleList &in, const double time, const int n_frac_photons, const double hadronic_cross_section_input, const SpinInteractionType spin_interaction_type=SpinInteractionType::Off)
 Construct a ScatterActionPhoton object. More...
 
void perform_photons (const OutputsList &outputs)
 Create the photon final state and write to output. More...
 
void generate_final_state () override
 Generate the final-state for the photon scatter process. 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. More...
 
double sample_out_hadron_mass (const ParticleTypePtr out_type)
 Sample the mass of the outgoing hadron. 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, const SpinInteractionType spin_interaction_type=SpinInteractionType::Off)
 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...
 
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, 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...
 
void assign_unpolarized_spin_vector_to_outgoing_particles ()
 Assign an unpolarized spin vector to all outgoing particles. More...
 

Static Public Member Functions

static ReactionType photon_reaction_type (const ParticleList &in)
 Determine photon process from incoming particles. More...
 
static bool is_photon_reaction (const ParticleList &in)
 Check if particles can undergo an implemented photon process. More...
 
static ParticleTypePtr outgoing_hadron_type (const ParticleList &in)
 Return ParticleTypePtr of hadron in the out channel, given the incoming particles. More...
 
static ParticleTypePtr outgoing_hadron_type (const ReactionType reaction)
 Return ParticleTypePtr of hadron in the out channel, given the ReactionType. More...
 
static bool is_kinematically_possible (const double s_sqrt, const ParticleList &in)
 Check if CM-energy is sufficient to produce hadron in final state. 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 Types

enum class  MediatorType { SUM , PION , OMEGA }
 Compile-time switch for setting the handling of processes which can happen via different mediating particles. More...
 

Private Member Functions

double rho_mass () const
 Find the mass of the participating rho-particle. More...
 
CollisionBranchList create_collision_branch ()
 Creates a CollisionBranchList containing the photon processes. More...
 
double total_cross_section (MediatorType mediator=default_mediator_) const
 Calculate the total cross section of the photon process. More...
 
double total_cross_section_w_ff (const double E_photon)
 Compute the total cross corrected for form factors. More...
 
double diff_cross_section (const double t, const double m_rho, MediatorType mediator=default_mediator_) const
 Calculate the differential cross section of the photon process. More...
 
double diff_cross_section_w_ff (const double t, const double m_rho, const double E_photon)
 Compute the differential cross section corrected for form factors. More...
 
double form_factor_pion (const double E_photon) const
 Compute the form factor for a process with a pion as the lightest exchange particle. More...
 
double form_factor_omega (const double E_photon) const
 Compute the form factor for a process with a omega as the lightest exchange particle. More...
 
std::pair< double, double > form_factor_pair (const double E_photon)
 For processes which can happen via (pi, a1, rho) and omega exchange, return the form factor for the (pi, a1, rho) process in the first argument, for the omega process in the second. More...
 
std::pair< double, double > total_cross_section_pair ()
 For processes which can happen via (pi, a1, rho) and omega exchange, return the total cross section for the (pi, a1, rho) process in the first argument, for the omega process in the second. More...
 
std::pair< double, double > diff_cross_section_pair (const double t, const double m_rho)
 For processes which can happen via (pi, a1, rho) and omega exchange, return the differential cross section for the (pi, a1, rho) process in the first argument, for the omega process in the second. More...
 

Private Attributes

CollisionBranchList collision_processes_photons_
 Holds the photon branch. More...
 
bool collision_branch_created_ = false
 Was the collision branch already created? More...
 
const ReactionType reac_
 Photonic 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...
 
const ParticleTypePtr hadron_out_t_
 ParticleTypePtr to the type of the outgoing hadron. More...
 
const double hadron_out_mass_
 Mass of outgoing hadron. More...
 
double weight_ = 0.0
 Weight of the produced photon. More...
 
double cross_section_photons_ = 0.0
 Total cross section of photonic process. More...
 
const double hadronic_cross_section_
 Total hadronic cross section. More...
 
const SpinInteractionType spin_interaction_type_
 Type of spin interaction to use. More...
 

Static Private Attributes

static constexpr MediatorType default_mediator_ = MediatorType::SUM
 Value used for default exchange particle. See MediatorType. 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 spin_interaction ()
 Perform spin interaction in binary interactions. More...
 
void string_spin_interaction ()
 Perform spin interaction in string excitations. 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...
 
virtual 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...
 

Member Enumeration Documentation

◆ ReactionType

Enum for encoding the photon process.

It is uniquely determined by the incoming particles. The naming scheme is : Incoming_1__Incoming_2__Outgoing_hadron. The photon is omitted in the naming.

Enumerator
no_reaction 
pi_z_pi_p_rho_p 
pi_z_pi_m_rho_m 
pi_p_rho_z_pi_p 
pi_m_rho_z_pi_m 
pi_m_rho_p_pi_z 
pi_p_rho_m_pi_z 
pi_z_rho_p_pi_p 
pi_z_rho_m_pi_m 
pi_p_pi_m_rho_z 
pi_z_rho_z_pi_z 

Definition at line 115 of file scatteractionphoton.h.

115  {
116  no_reaction,
117  pi_z_pi_p_rho_p,
118  pi_z_pi_m_rho_m,
119  pi_p_rho_z_pi_p,
120  pi_m_rho_z_pi_m,
121  pi_m_rho_p_pi_z,
122  pi_p_rho_m_pi_z,
123  pi_z_rho_p_pi_p,
124  pi_z_rho_m_pi_m,
125  pi_p_pi_m_rho_z,
126  pi_z_rho_z_pi_z
127  };

◆ MediatorType

Compile-time switch for setting the handling of processes which can happen via different mediating particles.

Relevant only for the processes pi0 + rho => pi + y and pi + rho => pi0 + gamma, which both can happen via exchange of (rho, a1, pi) or omega. If MediatorType::SUM is set, the cross section for both processes is added. If MediatorType::PION/ OMEGA is set, only the respective processes are computed.

Enumerator
SUM 
PION 
OMEGA 

Definition at line 221 of file scatteractionphoton.h.

221 { SUM, PION, OMEGA };

Constructor & Destructor Documentation

◆ ScatterActionPhoton()

smash::ScatterActionPhoton::ScatterActionPhoton ( const ParticleList &  in,
const double  time,
const int  n_frac_photons,
const double  hadronic_cross_section_input,
const SpinInteractionType  spin_interaction_type = SpinInteractionType::Off 
)

Construct a ScatterActionPhoton object.

Parameters
[in]inParticleList of incoming particles.
[in]timeTime relative to underlying hadronic action.
[in]n_frac_photonsNumber of photons to produce for each hadronic scattering.
[in]hadronic_cross_section_inputCross-section of underlying hadronic cross-section.
[in]spin_interaction_typeWhich type of spin interaction to use
Returns
The constructed object.

Definition at line 26 of file scatteractionphoton.cc.

30  : ScatterAction(in[0], in[1], time),
32  number_of_fractional_photons_(n_frac_photons),
35  hadronic_cross_section_(hadronic_cross_section_input),
36  spin_interaction_type_(spin_interaction_type) {}
const int number_of_fractional_photons_
Number of photons created for each hadronic scattering, needed for correct weighting.
const double hadronic_cross_section_
Total hadronic cross section.
const SpinInteractionType spin_interaction_type_
Type of spin interaction to use.
const ReactionType reac_
Photonic process as determined from incoming particles.
static ParticleTypePtr outgoing_hadron_type(const ParticleList &in)
Return ParticleTypePtr of hadron in the out channel, given the incoming particles.
const double hadron_out_mass_
Mass of outgoing hadron.
static ReactionType photon_reaction_type(const ParticleList &in)
Determine photon process from incoming particles.
const ParticleTypePtr hadron_out_t_
ParticleTypePtr to the type of the outgoing hadron.
double sample_out_hadron_mass(const ParticleTypePtr out_type)
Sample the mass of the outgoing hadron.
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, const SpinInteractionType spin_interaction_type=SpinInteractionType::Off)
Construct a ScatterAction object.

Member Function Documentation

◆ perform_photons()

void smash::ScatterActionPhoton::perform_photons ( const OutputsList &  outputs)

Create the photon final state and write to output.

Parameters
[in]outputsList of all outputs. Does not have to be a specific photon output, the function will take care of this.

Definition at line 91 of file scatteractionphoton.cc.

91  {
92  for (int i = 0; i < number_of_fractional_photons_; i++) {
94  for (const auto &output : outputs) {
95  if (output->is_photon_output()) {
96  // we do not care about the local density
97  output->at_interaction(*this, 0.0);
98  }
99  }
100  }
101 }
void generate_final_state() override
Generate the final-state for the photon scatter process.

◆ generate_final_state()

void smash::ScatterActionPhoton::generate_final_state ( )
overridevirtual

Generate the final-state for the photon scatter process.

Generates only one photon / hadron pair

Reimplemented from smash::ScatterAction.

Definition at line 192 of file scatteractionphoton.cc.

192  {
193  // we have only one reaction per incoming particle pair
194  if (collision_processes_photons_.size() != 1) {
195  logg[LScatterAction].fatal()
196  << "Problem in ScatterActionPhoton::generate_final_state().\n";
197  throw std::runtime_error("");
198  }
199  auto *proc = collision_processes_photons_[0].get();
200 
201  outgoing_particles_ = proc->particle_list();
202  process_type_ = proc->get_type();
203 
204  FourVector middle_point = get_interaction_point();
205 
206  // t is defined to be the momentum exchanged between the rho meson and the
207  // photon in pi + rho -> pi + photon channel. Therefore,
208  // get_t_range needs to be called with m2 being the rho mass instead of the
209  // pion mass. So, particles 1 and 2 are swapped if necessary.
210 
211  if (!incoming_particles_[0].pdgcode().is_pion()) {
212  std::swap(incoming_particles_[0], incoming_particles_[1]);
213  }
214 
215  // 2->2 inelastic scattering
216  // Sample the particle momenta in CM system
217  const double m1 = incoming_particles_[0].effective_mass();
218  const double m2 = incoming_particles_[1].effective_mass();
219 
220  const double &m_out = hadron_out_mass_;
221 
222  const double s = mandelstam_s();
223  const double sqrts = sqrt_s();
224  std::array<double, 2> mandelstam_t = get_t_range(sqrts, m1, m2, m_out, 0.0);
225  const double t1 = mandelstam_t[1];
226  const double t2 = mandelstam_t[0];
227  const double pcm_in = cm_momentum();
228  const double pcm_out = pCM(sqrts, m_out, 0.0);
229 
230  const double t = random::uniform(t1, t2);
231 
232  double costheta = (t - pow_int(m2, 2) +
233  0.5 * (s + pow_int(m2, 2) - pow_int(m1, 2)) *
234  (s - pow_int(m_out, 2)) / s) /
235  (pcm_in * (s - pow_int(m_out, 2)) / sqrts);
236 
237  // on very rare occasions near the kinematic threshold numerical issues give
238  // unphysical angles.
239  if (costheta > 1 || costheta < -1) {
240  logg[LScatterAction].warn()
241  << "Cos(theta)of photon scattering out of physical bounds in "
242  "the following scattering: "
243  << incoming_particles_ << "Clamping to [-1,1].";
244  if (costheta > 1.0)
245  costheta = 1.0;
246  if (costheta < -1.0)
247  costheta = -1.0;
248  }
249  Angles phitheta(random::uniform(0.0, twopi), costheta);
250  outgoing_particles_[0].set_4momentum(hadron_out_mass_,
251  phitheta.threevec() * pcm_out);
252  outgoing_particles_[1].set_4momentum(0.0, -phitheta.threevec() * pcm_out);
253 
254  // Set positions & boost to computational frame.
255  for (ParticleData &new_particle : outgoing_particles_) {
256  new_particle.set_4position(middle_point);
257  new_particle.boost_momentum(
259  }
260  // Set unpolarized spin vector for outgoing particles
263  }
264 
265  const double E_Photon = outgoing_particles_[1].momentum()[0];
266 
267  // Weighing of the fractional photons
269  // if rho in final state take already sampled mass (same as m_out). If rho
270  // is incoming take the mass of the incoming particle
271  const double m_rho = rho_mass();
272 
273  // compute the differential cross section with form factor included
274  const double diff_xs = diff_cross_section_w_ff(t, m_rho, E_Photon);
275 
276  weight_ = diff_xs * (t2 - t1) /
278  } else {
279  // compute the total cross section with form factor included
280  const double total_xs = total_cross_section_w_ff(E_Photon);
281 
282  weight_ = total_xs / hadronic_cross_section();
283  }
284  // Scale weight by cross section scaling factor of incoming particles
285  weight_ *= incoming_particles_[0].xsec_scaling_factor() *
286  incoming_particles_[1].xsec_scaling_factor();
287 
288  // Photons are not really part of the normal processes, so we have to set a
289  // constant arbitrary number.
290  const auto id_process = ID_PROCESS_PHOTON;
291  Action::check_conservation(id_process);
292 }
FourVector total_momentum_of_outgoing_particles() const
Calculate the total kinetic momentum of the outgoing particles.
Definition: action.cc:160
ParticleList outgoing_particles_
Initially this stores only the PDG codes of final-state particles.
Definition: action.h:372
void assign_unpolarized_spin_vector_to_outgoing_particles()
Assign an unpolarized spin vector to all outgoing particles.
Definition: action.cc:478
virtual double check_conservation(const uint32_t id_process) const
Check various conservation laws.
Definition: action.cc:484
double sqrt_s() const
Determine the total energy in the center-of-mass frame [GeV].
Definition: action.h:271
ParticleList incoming_particles_
List with data of incoming particles.
Definition: action.h:364
FourVector get_interaction_point() const
Get the interaction point.
Definition: action.cc:68
ProcessType process_type_
type of process
Definition: action.h:381
double total_cross_section_w_ff(const double E_photon)
Compute the total cross corrected for form factors.
double diff_cross_section_w_ff(const double t, const double m_rho, const double E_photon)
Compute the differential cross section corrected for form factors.
CollisionBranchList collision_processes_photons_
Holds the photon branch.
double rho_mass() const
Find the mass of the participating rho-particle.
double weight_
Weight of the produced photon.
double hadronic_cross_section() const
Return the total cross section of the underlying hadronic scattering.
double mandelstam_s() const
Determine the Mandelstam s variable,.
double cm_momentum() const
Get the momentum of the center of mass of the incoming particles in the calculation frame.
@ Off
No spin interactions.
std::array< einhard::Logger<>, std::tuple_size< LogArea::AreaTuple >::value > logg
An array that stores all pre-configured Logger objects.
Definition: logging.cc:40
T uniform(T min, T max)
Definition: random.h:88
T pCM(const T sqrts, const T mass_a, const T mass_b) noexcept
Definition: kinematics.h:79
constexpr std::uint32_t ID_PROCESS_PHOTON
Process ID for any photon process.
Definition: constants.h:122
constexpr double twopi
.
Definition: constants.h:49
std::array< T, 2 > get_t_range(const T sqrts, const T m1, const T m2, const T m3, const T m4)
Get the range of Mandelstam-t values allowed in a particular 2->2 process, see PDG 2014 booklet,...
Definition: kinematics.h:109
constexpr T pow_int(const T base, unsigned const exponent)
Efficient template for calculating integer powers using squaring.
Definition: pow.h:23
static constexpr int LScatterAction

◆ get_total_weight()

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

Return the weight of the last created photon.

Returns
The total weight.

Reimplemented from smash::ScatterAction.

Definition at line 67 of file scatteractionphoton.h.

67 { return weight_; }

◆ hadronic_cross_section()

double smash::ScatterActionPhoton::hadronic_cross_section ( ) const
inline

Return the total cross section of the underlying hadronic scattering.

Returns
total cross-section [mb]

Definition at line 74 of file scatteractionphoton.h.

74 { return hadronic_cross_section_; }

◆ sample_out_hadron_mass()

double smash::ScatterActionPhoton::sample_out_hadron_mass ( const ParticleTypePtr  out_type)

Sample the mass of the outgoing hadron.

Returns the pole mass if particle is stable.

Parameters
[in]out_typeTypePtr of the outgoing hadron.
Returns
Mass of outgoing hadron [GeV]

Definition at line 302 of file scatteractionphoton.cc.

303  {
304  double mass = out_t->mass();
305  const double cms_energy = sqrt_s();
306  if (cms_energy <= out_t->min_mass_kinematic()) {
307  throw InvalidResonanceFormation(
308  "Problem in ScatterActionPhoton::sample_hadron_mass");
309  }
310 
311  if (!out_t->is_stable()) {
312  mass = out_t->sample_resonance_mass(0, cms_energy);
313  }
314 
315  return mass;
316 }

◆ add_dummy_hadronic_process()

void smash::ScatterActionPhoton::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.

Parameters
[in]reaction_cross_sectionTotal cross-section of underlying hadronic process [mb]

Definition at line 294 of file scatteractionphoton.cc.

295  {
296  CollisionBranchPtr dummy_process = std::make_unique<CollisionBranch>(
297  incoming_particles_[0].type(), incoming_particles_[1].type(),
298  reaction_cross_section, ProcessType::TwoToTwo);
299  add_collision(std::move(dummy_process));
300 }
void add_collision(CollisionBranchPtr p)
Add a new collision channel.
@ TwoToTwo
See here for a short description.

◆ add_single_process()

void smash::ScatterActionPhoton::add_single_process ( )
inline

Add the photonic process.

Also compute the total cross section as a side effect.

Definition at line 103 of file scatteractionphoton.h.

103  {
104  add_processes<CollisionBranch>(create_collision_branch(),
107  }
double cross_section_photons_
Total cross section of photonic process.
CollisionBranchList create_collision_branch()
Creates a CollisionBranchList containing the photon processes.

◆ photon_reaction_type()

ScatterActionPhoton::ReactionType smash::ScatterActionPhoton::photon_reaction_type ( const ParticleList &  in)
static

Determine photon process from incoming particles.

If incoming particles are not part of any implemented photonic process, return no_reaction.

Parameters
[in]inParticleList of incoming particles.
Returns
ReactionType enum-member

Definition at line 38 of file scatteractionphoton.cc.

39  {
40  if (in.size() != 2) {
42  }
43 
44  PdgCode a = in[0].pdgcode();
45  PdgCode b = in[1].pdgcode();
46 
47  // swap so that pion is first and there are less cases to be listed
48  if (!a.is_pion()) {
49  std::swap(a, b);
50  }
51 
52  switch (pack(a.code(), b.code())) {
53  case (pack(pdg::pi_p, pdg::pi_z)):
54  case (pack(pdg::pi_z, pdg::pi_p)):
56 
57  case (pack(pdg::pi_m, pdg::pi_z)):
58  case (pack(pdg::pi_z, pdg::pi_m)):
60 
61  case (pack(pdg::pi_p, pdg::rho_z)):
63 
64  case (pack(pdg::pi_m, pdg::rho_z)):
66 
67  case (pack(pdg::pi_m, pdg::rho_p)):
69 
70  case (pack(pdg::pi_p, pdg::rho_m)):
72 
73  case (pack(pdg::pi_z, pdg::rho_p)):
75 
76  case (pack(pdg::pi_z, pdg::rho_m)):
78 
79  case (pack(pdg::pi_p, pdg::pi_m)):
80  case (pack(pdg::pi_m, pdg::pi_p)):
82 
83  case (pack(pdg::pi_z, pdg::rho_z)):
85 
86  default:
88  }
89 }
constexpr int pi_p
π⁺.
constexpr int rho_p
ρ⁺.
constexpr int rho_m
ρ⁻.
constexpr int pi_z
π⁰.
constexpr int rho_z
ρ⁰.
constexpr int pi_m
π⁻.
constexpr uint64_t pack(int32_t x, int32_t y)
Pack two int32_t into an uint64_t.

◆ is_photon_reaction()

static bool smash::ScatterActionPhoton::is_photon_reaction ( const ParticleList &  in)
inlinestatic

Check if particles can undergo an implemented photon process.

This function does not check the involved kinematics.

Parameters
[in]inParticleList of incoming particles.
Returns
bool if photon reaction implemented.

Definition at line 148 of file scatteractionphoton.h.

148  {
150  }

◆ outgoing_hadron_type() [1/2]

ParticleTypePtr smash::ScatterActionPhoton::outgoing_hadron_type ( const ParticleList &  in)
static

Return ParticleTypePtr of hadron in the out channel, given the incoming particles.

This function is overloaded since we need the hadron type in different places.

Parameters
[in]inParticleList of incoming particles.
Returns
ParticeTypePtr to hadron in outgoing channel.

Definition at line 149 of file scatteractionphoton.cc.

150  {
151  auto reac = photon_reaction_type(in);
152  return outgoing_hadron_type(reac);
153 }

◆ outgoing_hadron_type() [2/2]

ParticleTypePtr smash::ScatterActionPhoton::outgoing_hadron_type ( const ReactionType  reaction)
static

Return ParticleTypePtr of hadron in the out channel, given the ReactionType.

This function is overloaded since we need the hadron type in different places.

Parameters
[in]reactionReactionType, determined from incoming particles.
Returns
ParticeTypePtr to hadron in outgoing channel.

Definition at line 103 of file scatteractionphoton.cc.

104  {
105  static const ParticleTypePtr rho_z_particle_ptr =
107  static const ParticleTypePtr rho_p_particle_ptr =
109  static const ParticleTypePtr rho_m_particle_ptr =
111  static const ParticleTypePtr pi_z_particle_ptr =
113  static const ParticleTypePtr pi_p_particle_ptr =
115  static const ParticleTypePtr pi_m_particle_ptr =
117 
118  switch (reaction) {
120  return rho_p_particle_ptr;
121  break;
123  return rho_m_particle_ptr;
124  break;
126  return rho_z_particle_ptr;
127  break;
128 
131  return pi_p_particle_ptr;
132 
135  return pi_m_particle_ptr;
136 
140  return pi_z_particle_ptr;
141  break;
142  default:
143  // default constructor constructs p with invalid index
144  ParticleTypePtr p{};
145  return p;
146  }
147 }
static const ParticleType & find(PdgCode pdgcode)
Returns the ParticleType object for the given pdgcode.
Definition: particletype.cc:99
constexpr int p
Proton.

◆ is_kinematically_possible()

bool smash::ScatterActionPhoton::is_kinematically_possible ( const double  s_sqrt,
const ParticleList &  in 
)
static

Check if CM-energy is sufficient to produce hadron in final state.

Parameters
[in]s_sqrtCM-energy [GeV]
[in]inParticleList of incoming hadrons
Returns
true if particles can be produced.

Definition at line 155 of file scatteractionphoton.cc.

156  {
157  auto reac = photon_reaction_type(in);
158  auto hadron = outgoing_hadron_type(in);
159 
160  if (reac == ReactionType::no_reaction)
161  return false;
162 
165  return false;
166  }
167 
168  // C15 has only s-channel. Make sure that CM-energy is high
169  // enough to produce mediating omega meson
170  if ((reac == ReactionType::pi_m_rho_p_pi_z ||
173  if (s_sqrt < omega_mass) {
174  return false;
175  }
176  }
177 
178  // for all other processes: if cm-energy is not high enough to produce final
179  // state particle reject the collision.
180  if (hadron->is_stable() && s_sqrt < hadron->mass()) {
181  return false;
182  // Make sure energy is high enough to not only create final state particle,
183  // but to also assign momentum.
184  } else if (!hadron->is_stable() &&
185  s_sqrt < (hadron->min_mass_spectral() + really_small)) {
186  return false;
187  } else {
188  return true;
189  }
190 }
static constexpr MediatorType default_mediator_
Value used for default exchange particle. See MediatorType.
constexpr double really_small
Numerical error tolerance.
Definition: constants.h:41
constexpr double omega_mass
omega mass in GeV.
Definition: constants.h:83

◆ rho_mass()

double smash::ScatterActionPhoton::rho_mass ( ) const
private

Find the mass of the participating rho-particle.

In case of a rho in the incoming channel it is the mass of the incoming rho, in case of an rho in the outgoing channel it is the mass sampled in the constructor. When an rho acts in addition as a mediator, its mass is the same as the incoming / outgoing rho. This function returns the alrady sampled mass or the mass of the incoming rho, depending on the process.

Returns
mass of participating rho [GeV]

Definition at line 318 of file scatteractionphoton.cc.

318  {
319  assert(reac_ != ReactionType::no_reaction);
320  switch (reac_) {
321  // rho in final state. use already sampled mass
325  return hadron_out_mass_;
326  // rho in initial state, use its mass
334  return (incoming_particles_[0].is_rho())
335  ? incoming_particles_[0].effective_mass()
336  : incoming_particles_[1].effective_mass();
338  default:
339  throw std::runtime_error(
340  "Invalid ReactionType in ScatterActionPhoton::rho_mass()");
341  }
342 }

◆ create_collision_branch()

CollisionBranchList smash::ScatterActionPhoton::create_collision_branch ( )
private

Creates a CollisionBranchList containing the photon processes.

By construction (perturbative treatment) this list will always contain only one branch.

Returns
List containing the photon collision branch

Definition at line 344 of file scatteractionphoton.cc.

344  {
345  CollisionBranchList process_list;
346 
347  static ParticleTypePtr photon_particle = &ParticleType::find(pdg::photon);
348  double xsection = total_cross_section();
349 
350  process_list.push_back(std::make_unique<CollisionBranch>(
351  *hadron_out_t_, *photon_particle, xsection, ProcessType::TwoToTwo));
353  return process_list;
354 }
double total_cross_section(MediatorType mediator=default_mediator_) const
Calculate the total cross section of the photon process.
bool collision_branch_created_
Was the collision branch already created?
constexpr int photon
Photon.

◆ total_cross_section()

double smash::ScatterActionPhoton::total_cross_section ( MediatorType  mediator = default_mediator_) const
private

Calculate the total cross section of the photon process.

Formfactors are not included

Parameters
[in]mediatorSwitch for determing which mediating particle to use
Returns
Total cross section. [mb]

Definition at line 356 of file scatteractionphoton.cc.

356  {
357  CollisionBranchList process_list;
358  CrosssectionsPhoton<ComputationMethod::Analytic> xs_object;
359 
360  const double s = mandelstam_s();
361  // the mass of the mediating particle depends on the channel. For an incoming
362  // rho it is the mass of the incoming particle, for an outgoing rho it is the
363  // sampled mass
364  const double m_rho = rho_mass();
365  double xsection = 0.0;
366 
367  switch (reac_) {
369  xsection = xs_object.xs_pi_pi_rho0(s, m_rho);
370  break;
371 
374  xsection = xs_object.xs_pi_pi0_rho(s, m_rho);
375  break;
376 
379  xsection = xs_object.xs_pi_rho0_pi(s, m_rho);
380  break;
381 
384  if (mediator == MediatorType::SUM) {
385  xsection = xs_object.xs_pi_rho_pi0(s, m_rho);
386  break;
387  } else if (mediator == MediatorType::PION) {
388  xsection = xs_object.xs_pi_rho_pi0_rho_mediated(s, m_rho);
389  break;
390  } else if (mediator == MediatorType::OMEGA) {
391  xsection = xs_object.xs_pi_rho_pi0_omega_mediated(s, m_rho);
392  break;
393  } else {
394  throw std::runtime_error("");
395  }
398  if (mediator == MediatorType::SUM) {
399  xsection = xs_object.xs_pi0_rho_pi(s, m_rho);
400  break;
401  } else if (mediator == MediatorType::PION) {
402  xsection = xs_object.xs_pi0_rho_pi_rho_mediated(s, m_rho);
403  break;
404  } else if (mediator == MediatorType::OMEGA) {
405  xsection = xs_object.xs_pi0_rho_pi_omega_mediated(s, m_rho);
406  break;
407  } else {
408  throw std::runtime_error("");
409  }
410 
412  xsection = xs_object.xs_pi0_rho0_pi0(s, m_rho);
413  break;
414 
416  // never reached
417  break;
418  }
419 
420  if (xsection == 0.0) {
421  // Vanishing cross sections are problematic for the creation of a
422  // CollisionBranch. For infrastructure reasons it is however necessary to
423  // create such a collision branch whenever the underlying hadronic
424  // scattering is a candidate for a photon interaction. In these cases we
425  // need to manually set a dummy value for the cross section and produce the
426  // photon. This photon will however automatically be assigned a 0 weight
427  // because of the vanishing cross section and therefore not be of relevance
428  // for any analysis.
429  // In other cases, where the collision branch was already created, we
430  // do not want to overwrite the cross section, of course.
431  xsection = collision_branch_created_ ? 0.0 : 0.01;
432  } else if (xsection < 0) {
433  // Due to numerical reasons it can happen that the calculated cross sections
434  // are negative (approximately -1e-15) if sqrt(s) is close to the threshold
435  // energy. In those cases the cross section is manually set to 0.1 mb, which
436  // is a reasonable value for the processes we are looking at (C14,C15,C16).
437  xsection = 0.1;
438  logg[LScatterAction].warn(
439  "Calculated negative cross section.\nParticles ", incoming_particles_,
440  " mass rho particle: ", m_rho, ", sqrt_s: ", std::sqrt(s));
441  }
442  return xsection;
443 }

◆ total_cross_section_w_ff()

double smash::ScatterActionPhoton::total_cross_section_w_ff ( const double  E_photon)
private

Compute the total cross corrected for form factors.

Takes care of correct handling of reactions with multiple processes by reading the default_mediator_ member variable.

Parameters
[in]E_photonof outgoing photon [GeV]
Returns
total cross section including form factors [mb]

The form factor is assumed to be a hadronic dipole form factor which takes the shape: FF = (2*Lambda^2/(2*Lambda^2 - t))^2 with Lambda = 1.0 GeV. t depends on the lightest possible exchange particle in the different channels. This could either be a pion or an omega meson. For the computation the parametrizations given in (Turbide:2006zz [64]) are used.

Definition at line 445 of file scatteractionphoton.cc.

445  {
455  /* C12, C13, C15, C16 need special treatment. These processes have identical
456  incoming and outgoing particles, but diffrent mediating particles and
457  hence different form factors. If both channels are added up
458  (MediatorType::SUM), each contribution is corrected by the corresponding
459  form factor.
460  */
461  switch (reac_) {
467  std::pair<double, double> FF = form_factor_pair(E_photon);
468  std::pair<double, double> xs = total_cross_section_pair();
469  const double xs_ff =
470  pow_int(FF.first, 4) * xs.first + pow_int(FF.second, 4) * xs.second;
471  return cut_off(xs_ff);
472  } else if (default_mediator_ == MediatorType::PION) {
473  const double FF = form_factor_pion(E_photon);
474  const double xs = total_cross_section();
475  return cut_off(pow_int(FF, 4) * xs);
476  } else if (default_mediator_ == MediatorType::OMEGA) {
477  const double FF = form_factor_omega(E_photon);
478  const double xs = total_cross_section();
479  return cut_off(pow_int(FF, 4) * xs);
480  }
481  break;
482  }
488  const double FF = form_factor_pion(E_photon);
489  const double xs = total_cross_section();
490  const double xs_ff = pow_int(FF, 4) * xs;
491  return cut_off(xs_ff);
492  }
493 
495  const double FF = form_factor_omega(E_photon);
496  const double xs = total_cross_section();
497  const double xs_ff = pow_int(FF, 4) * xs;
498  return cut_off(xs_ff);
499  }
500 
502  default:
503  throw std::runtime_error("");
504  return 0;
505  }
506 }
std::pair< double, double > total_cross_section_pair()
For processes which can happen via (pi, a1, rho) and omega exchange, return the total cross section f...
double form_factor_omega(const double E_photon) const
Compute the form factor for a process with a omega as the lightest exchange particle.
double form_factor_pion(const double E_photon) const
Compute the form factor for a process with a pion as the lightest exchange particle.
std::pair< double, double > form_factor_pair(const double E_photon)
For processes which can happen via (pi, a1, rho) and omega exchange, return the form factor for the (...
double cut_off(const double sigma_mb)
Cross section after cut off.

◆ diff_cross_section()

double smash::ScatterActionPhoton::diff_cross_section ( const double  t,
const double  m_rho,
MediatorType  mediator = default_mediator_ 
) const
private

Calculate the differential cross section of the photon process.

Formfactors are not included

Parameters
[in]tMandelstam-t [GeV^2].
[in]m_rhoMass of the incoming or outgoing rho-particle [GeV]
[in]mediatorSwitch for determing which mediating particle to use
Returns
Differential cross section. [mb/ \(GeV^2\)]

Definition at line 508 of file scatteractionphoton.cc.

510  {
511  const double s = mandelstam_s();
512  double diff_xsection = 0.0;
513 
514  CrosssectionsPhoton<ComputationMethod::Analytic> xs_object;
515 
516  switch (reac_) {
518  diff_xsection = xs_object.xs_diff_pi_pi_rho0(s, t, m_rho);
519  break;
520 
523  diff_xsection = xs_object.xs_diff_pi_pi0_rho(s, t, m_rho);
524  break;
525 
528  diff_xsection = xs_object.xs_diff_pi_rho0_pi(s, t, m_rho);
529  break;
530 
533  if (mediator == MediatorType::SUM) {
534  diff_xsection =
535  xs_object.xs_diff_pi_rho_pi0_rho_mediated(s, t, m_rho) +
536  xs_object.xs_diff_pi_rho_pi0_omega_mediated(s, t, m_rho);
537  } else if (mediator == MediatorType::OMEGA) {
538  diff_xsection =
539  xs_object.xs_diff_pi_rho_pi0_omega_mediated(s, t, m_rho);
540  } else if (mediator == MediatorType::PION) {
541  diff_xsection = xs_object.xs_diff_pi_rho_pi0_rho_mediated(s, t, m_rho);
542  }
543  break;
544 
547  if (mediator == MediatorType::SUM) {
548  diff_xsection =
549  xs_object.xs_diff_pi0_rho_pi_rho_mediated(s, t, m_rho) +
550  xs_object.xs_diff_pi0_rho_pi_omega_mediated(s, t, m_rho);
551  } else if (mediator == MediatorType::OMEGA) {
552  diff_xsection =
553  xs_object.xs_diff_pi0_rho_pi_omega_mediated(s, t, m_rho);
554  } else if (mediator == MediatorType::PION) {
555  diff_xsection = xs_object.xs_diff_pi0_rho_pi_rho_mediated(s, t, m_rho);
556  }
557  break;
558 
560  diff_xsection = xs_object.xs_diff_pi0_rho0_pi0(s, t, m_rho);
561  break;
563  // never reached
564  break;
565  }
566 
567  // Rarely, it can happen that the computed differential cross sections slip
568  // slightly below zero for numerical reasons. This is unphysical. We
569  // approximate them with dSigma/dt = 0.01 mb/GeV^2, which is a reasonable
570  // value in the kinetic regime where this occurs.
571  if (diff_xsection < 0) {
572  diff_xsection = 0.01;
573  }
574  return diff_xsection;
575 }

◆ diff_cross_section_w_ff()

double smash::ScatterActionPhoton::diff_cross_section_w_ff ( const double  t,
const double  m_rho,
const double  E_photon 
)
private

Compute the differential cross section corrected for form factors.

Takes care of correct handling of reactions with multiple processes by reading the default_mediator_ member variable.

Parameters
[in]tMandelstam-t [GeV^2]
[in]m_rhoMass of the incoming or outgoing rho-particle [GeV]
[in]E_photonof outgoing photon [GeV]
Returns
diff. cross section [mb / GeV \(^2\)]

The form factor is assumed to be a hadronic dipole form factor which takes the shape: FF = (2*Lambda^2/(2*Lambda^2 - t))^2 with Lambda = 1.0 GeV. t depends on the lightest possible exchange particle in the different channels. This could either be a pion or an omega meson. For the computation the parametrizations given in (Turbide:2006zz [64]) are used.

Definition at line 577 of file scatteractionphoton.cc.

579  {
589  /* C12, C13, C15, C16 need special treatment. These processes have identical
590  incoming and outgoing particles, but diffrent mediating particles and
591  hence different form factors. If both channels are added up
592  (MediatorType::SUM), each contribution is corrected by the corresponding
593  form factor.
594  */
595  switch (reac_) {
601  std::pair<double, double> FF = form_factor_pair(E_photon);
602  std::pair<double, double> diff_xs = diff_cross_section_pair(t, m_rho);
603  const double xs_ff = pow_int(FF.first, 4) * diff_xs.first +
604  pow_int(FF.second, 4) * diff_xs.second;
605  return cut_off(xs_ff);
606  } else if (default_mediator_ == MediatorType::PION) {
607  const double FF = form_factor_pion(E_photon);
608  const double diff_xs = diff_cross_section(t, m_rho);
609  return cut_off(pow_int(FF, 4) * diff_xs);
610  } else if (default_mediator_ == MediatorType::OMEGA) {
611  const double FF = form_factor_omega(E_photon);
612  const double diff_xs = diff_cross_section(t, m_rho);
613  return cut_off(pow_int(FF, 4) * diff_xs);
614  }
615  break;
616  }
622  const double FF = form_factor_pion(E_photon);
623  const double xs = diff_cross_section(t, m_rho);
624  const double xs_ff = pow_int(FF, 4) * xs;
625  return cut_off(xs_ff);
626  }
627 
629  const double FF = form_factor_omega(E_photon);
630  const double xs = diff_cross_section(t, m_rho);
631  const double xs_ff = pow_int(FF, 4) * xs;
632  return cut_off(xs_ff);
633  }
634 
636  default:
637  throw std::runtime_error("");
638  return 0;
639  }
640 }
std::pair< double, double > diff_cross_section_pair(const double t, const double m_rho)
For processes which can happen via (pi, a1, rho) and omega exchange, return the differential cross se...
double diff_cross_section(const double t, const double m_rho, MediatorType mediator=default_mediator_) const
Calculate the differential cross section of the photon process.

◆ form_factor_pion()

double smash::ScatterActionPhoton::form_factor_pion ( const double  E_photon) const
private

Compute the form factor for a process with a pion as the lightest exchange particle.

See wiki for details how form factors are handled.

Parameters
[in]E_photonEnergy of photon [GeV]
Returns
form factor

Definition at line 642 of file scatteractionphoton.cc.

642  {
643  const double Lambda = 1.0;
644  const double Lambda2 = Lambda * Lambda;
645 
646  const double t_ff = 34.5096 * std::pow(E_photon, 0.737) -
647  67.557 * std::pow(E_photon, 0.7584) +
648  32.858 * std::pow(E_photon, 0.7806);
649  const double ff = 2 * Lambda2 / (2 * Lambda2 - t_ff);
650 
651  return ff * ff;
652 }
constexpr int Lambda
Λ.

◆ form_factor_omega()

double smash::ScatterActionPhoton::form_factor_omega ( const double  E_photon) const
private

Compute the form factor for a process with a omega as the lightest exchange particle.

See wiki for details how form factors are handled.

Parameters
[in]E_photonEnergy of photon [GeV]
Returns
form factor

Definition at line 654 of file scatteractionphoton.cc.

654  {
655  const double Lambda = 1.0;
656  const double Lambda2 = Lambda * Lambda;
657 
658  const double t_ff = -61.595 * std::pow(E_photon, 0.9979) +
659  28.592 * std::pow(E_photon, 1.1579) +
660  37.738 * std::pow(E_photon, 0.9317) -
661  5.282 * std::pow(E_photon, 1.3686);
662  const double ff = 2 * Lambda2 / (2 * Lambda2 - t_ff);
663 
664  return ff * ff;
665 }

◆ form_factor_pair()

std::pair< double, double > smash::ScatterActionPhoton::form_factor_pair ( const double  E_photon)
private

For processes which can happen via (pi, a1, rho) and omega exchange, return the form factor for the (pi, a1, rho) process in the first argument, for the omega process in the second.

If only one process exists, both values are the same. Helper function to easier combine processes with different mediating particles.

Parameters
[in]E_photonEnergy of the photon [GeV]
Returns
Form factor for (pi,a1,rho) in the first argument, for omega in the second.

Definition at line 667 of file scatteractionphoton.cc.

668  {
669  return std::pair<double, double>(form_factor_pion(E_photon),
670  form_factor_omega(E_photon));
671 }

◆ total_cross_section_pair()

std::pair< double, double > smash::ScatterActionPhoton::total_cross_section_pair ( )
private

For processes which can happen via (pi, a1, rho) and omega exchange, return the total cross section for the (pi, a1, rho) process in the first argument, for the omega process in the second.

If only one process exists, both values are the same.Helper function to easier combine processes with different mediating particles.

Returns
total cross section for (pi,a1,rho) in the first argument, for omega in the second.

Definition at line 673 of file scatteractionphoton.cc.

673  {
674  const double xs_pion = total_cross_section(MediatorType::PION);
675  const double xs_omega = total_cross_section(MediatorType::OMEGA);
676 
677  return std::pair<double, double>(xs_pion, xs_omega);
678 }

◆ diff_cross_section_pair()

std::pair< double, double > smash::ScatterActionPhoton::diff_cross_section_pair ( const double  t,
const double  m_rho 
)
private

For processes which can happen via (pi, a1, rho) and omega exchange, return the differential cross section for the (pi, a1, rho) process in the first argument, for the omega process in the second.

If only one process exists, both values are the same.Helper function to easier combine processes with different mediating particles.

Parameters
[in]tMandelstam-t [GeV^2]
[in]m_rhoMass of the incoming or outgoing rho-particle [GeV]
Returns
diff. cross section for (pi,a1,rho) in the first argument, for omega in the second.

Definition at line 680 of file scatteractionphoton.cc.

681  {
682  const double diff_xs_pion = diff_cross_section(t, m_rho, MediatorType::PION);
683  const double diff_xs_omega =
685 
686  return std::pair<double, double>(diff_xs_pion, diff_xs_omega);
687 }

Member Data Documentation

◆ collision_processes_photons_

CollisionBranchList smash::ScatterActionPhoton::collision_processes_photons_
private

Holds the photon branch.

As of now, this will always hold only one branch.

Definition at line 191 of file scatteractionphoton.h.

◆ collision_branch_created_

bool smash::ScatterActionPhoton::collision_branch_created_ = false
private

Was the collision branch already created?

Definition at line 194 of file scatteractionphoton.h.

◆ reac_

const ReactionType smash::ScatterActionPhoton::reac_
private

Photonic process as determined from incoming particles.

Definition at line 197 of file scatteractionphoton.h.

◆ number_of_fractional_photons_

const int smash::ScatterActionPhoton::number_of_fractional_photons_
private

Number of photons created for each hadronic scattering, needed for correct weighting.

Note that in generate_final_state() only one photon + hadron is created.

Definition at line 204 of file scatteractionphoton.h.

◆ hadron_out_t_

const ParticleTypePtr smash::ScatterActionPhoton::hadron_out_t_
private

ParticleTypePtr to the type of the outgoing hadron.

Definition at line 207 of file scatteractionphoton.h.

◆ hadron_out_mass_

const double smash::ScatterActionPhoton::hadron_out_mass_
private

Mass of outgoing hadron.

Definition at line 210 of file scatteractionphoton.h.

◆ default_mediator_

constexpr MediatorType smash::ScatterActionPhoton::default_mediator_ = MediatorType::SUM
staticconstexprprivate

Value used for default exchange particle. See MediatorType.

Definition at line 223 of file scatteractionphoton.h.

◆ weight_

double smash::ScatterActionPhoton::weight_ = 0.0
private

Weight of the produced photon.

Definition at line 226 of file scatteractionphoton.h.

◆ cross_section_photons_

double smash::ScatterActionPhoton::cross_section_photons_ = 0.0
private

Total cross section of photonic process.

Definition at line 229 of file scatteractionphoton.h.

◆ hadronic_cross_section_

const double smash::ScatterActionPhoton::hadronic_cross_section_
private

Total hadronic cross section.

Definition at line 232 of file scatteractionphoton.h.

◆ spin_interaction_type_

const SpinInteractionType smash::ScatterActionPhoton::spin_interaction_type_
private

Type of spin interaction to use.

Definition at line 235 of file scatteractionphoton.h.


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