20     const ParticleList &in, 
const double time, 
const int n_frac_photons,
 
   21     const double hadronic_cross_section_input)
 
   23       reac_(bremsstrahlung_reaction_type(in)),
 
   24       number_of_fractional_photons_(n_frac_photons),
 
   25       hadronic_cross_section_(hadronic_cross_section_input) {}
 
   66     for (
const auto &output : outputs) {
 
   67       if (output->is_photon_output()) {
 
   69         output->at_interaction(*
this, 0.0);
 
   79         << 
"Problem in BremsstrahlungAction::generate_final_state().\nThe " 
   82         << 
" entries. It should however have 1.";
 
   83     throw std::runtime_error(
"");
 
  101   if ((k_max - k_min) < 0.0) {
 
  108     delta_k = (k_max - k_min);
 
  117   double diff_xs_k = diff_xs_pair.first;
 
  118   double diff_xs_theta = diff_xs_pair.second;
 
  121   const double W_theta = diff_xs_theta * (M_PI - 0.0);
 
  122   const double W_k = diff_xs_k * delta_k;
 
  123   weight_ = sqrt(W_theta * W_k) /
 
  130     new_particle.set_4position(interaction_point);
 
  131     new_particle.boost_momentum(-
beta_cm());
 
  145   const double sqrts = 
sqrt_s();
 
  146   const double E_ab = sqrts - m_c - 
k_;  
 
  147   const double pcm = 
pCM(sqrts, E_ab, m_c);  
 
  148   const double pcm_pions = 
pCM(E_ab, m_a, m_b);  
 
  155       pcm * phitheta_photon.
threevec() / std::sqrt(pcm * pcm + E_ab * E_ab);
 
  167     double reaction_cross_section) {
 
  168   CollisionBranchPtr dummy_process = make_unique<CollisionBranch>(
 
  175   CollisionBranchList process_list;
 
  199     double xsection_pipi = (*pipi_pipi_opp_interpolation)(sqrts);
 
  200     double xsection_pi0pi0 = (*pipi_pi0pi0_interpolation)(sqrts);
 
  203     xsection_pipi = (xsection_pipi <= 0.0) ? 
really_small : xsection_pipi;
 
  204     xsection_pi0pi0 = (xsection_pi0pi0 <= 0.0) ? 
really_small : xsection_pi0pi0;
 
  208     CollisionBranchList process_list_pipi;
 
  211     process_list_pipi.push_back(make_unique<CollisionBranch>(
 
  214     process_list_pipi.push_back(make_unique<CollisionBranch>(
 
  215         *pi_z_particle, *pi_z_particle, *photon_particle, xsection_pi0pi0,
 
  219     double total_cross_section = xsection_pipi + xsection_pi0pi0;
 
  221         choose_channel<CollisionBranch>(process_list_pipi, total_cross_section);
 
  223     xsection = proc->
weight();
 
  225     process_list.push_back(make_unique<CollisionBranch>(
 
  235       xsection = (*pipi_pipi_same_interpolation)(sqrts);
 
  238       xsection = (*pipi0_pipi0_interpolation)(sqrts);
 
  244     process_list.push_back(make_unique<CollisionBranch>(
 
  251     xsection = (*pi0pi0_pipi_interpolation)(sqrts);
 
  256     process_list.push_back(make_unique<CollisionBranch>(
 
  257         *pi_p_particle, *pi_m_particle, *photon_particle, xsection,
 
  260     throw std::runtime_error(
"Unknown ReactionType in BremsstrahlungAction.");
 
  268   const double collision_energy = 
sqrt_s();
 
  270   double dsigma_dtheta;
 
  276           (*pipi_pipi_opp_dsigma_dk_interpolation)(
k_, collision_energy);
 
  277       dsigma_dtheta = (*pipi_pipi_opp_dsigma_dtheta_interpolation)(
 
  278           theta_, collision_energy);
 
  281       dsigma_dk = (*pipi_pi0pi0_dsigma_dk_interpolation)(
k_, collision_energy);
 
  283           (*pipi_pi0pi0_dsigma_dtheta_interpolation)(
theta_, collision_energy);
 
  287     dsigma_dk = (*pipi_pipi_same_dsigma_dk_interpolation)(
k_, collision_energy);
 
  289         (*pipi_pipi_same_dsigma_dtheta_interpolation)(
theta_, collision_energy);
 
  292     dsigma_dk = (*pipi0_pipi0_dsigma_dk_interpolation)(
k_, collision_energy);
 
  294         (*pipi0_pipi0_dsigma_dtheta_interpolation)(
theta_, collision_energy);
 
  296     dsigma_dk = (*pi0pi0_pipi_dsigma_dk_interpolation)(
k_, collision_energy);
 
  298         (*pi0pi0_pipi_dsigma_dtheta_interpolation)(
theta_, collision_energy);
 
  300     throw std::runtime_error(
 
  301         "Unkown channel when computing differential cross sections for " 
  302         "bremsstrahlung processes.");
 
  306   dsigma_dk = (dsigma_dk < 0.0) ? 
really_small : dsigma_dk;
 
  307   dsigma_dtheta = (dsigma_dtheta < 0.0) ? 
really_small : dsigma_dtheta;
 
  310   std::pair<double, double> diff_x_sections = {dsigma_dk, dsigma_dtheta};
 
  312   return diff_x_sections;
 
  318   std::vector<double> photon_momentum = 
BREMS_K;
 
  330   std::vector<double> dsigma_dk_pipi_pipi_same =
 
  337   std::vector<double> dsigma_dtheta_pipi_pipi_opp =
 
  339   std::vector<double> dsigma_dtheta_pipi_pipi_same =
 
  341   std::vector<double> dsigma_dtheta_pipi0_pipi0 =
 
  343   std::vector<double> dsigma_dtheta_pipi_pi0pi0 =
 
  345   std::vector<double> dsigma_dtheta_pi0pi0_pipi =
 
  351       make_unique<InterpolateDataLinear<double>>(sqrts, sigma_pipi_pipi_opp);
 
  353       make_unique<InterpolateDataLinear<double>>(sqrts, sigma_pipi_pipi_same);
 
  355       make_unique<InterpolateDataLinear<double>>(sqrts, sigma_pipi0_pipi0);
 
  357       make_unique<InterpolateDataLinear<double>>(sqrts, sigma_pipi_pi0pi0);
 
  359       make_unique<InterpolateDataLinear<double>>(sqrts, sigma_pi0pi0_pipi);
 
  364       photon_momentum, sqrts, dsigma_dk_pipi_pipi_opp);
 
  366       photon_momentum, sqrts, dsigma_dk_pipi_pipi_same);
 
  368       photon_momentum, sqrts, dsigma_dk_pipi0_pipi0);
 
  370       photon_momentum, sqrts, dsigma_dk_pipi_pi0pi0);
 
  372       photon_momentum, sqrts, dsigma_dk_pi0pi0_pipi);
 
  377       make_unique<InterpolateData2DSpline>(photon_angle, sqrts,
 
  378                                            dsigma_dtheta_pipi_pipi_opp);
 
  380       make_unique<InterpolateData2DSpline>(photon_angle, sqrts,
 
  381                                            dsigma_dtheta_pipi_pipi_same);
 
  383       make_unique<InterpolateData2DSpline>(photon_angle, sqrts,
 
  384                                            dsigma_dtheta_pipi0_pipi0);
 
  386       make_unique<InterpolateData2DSpline>(photon_angle, sqrts,
 
  387                                            dsigma_dtheta_pipi_pi0pi0);
 
  389       make_unique<InterpolateData2DSpline>(photon_angle, sqrts,
 
  390                                            dsigma_dtheta_pi0pi0_pipi);