MARLEY (Model of Argon Reaction Low Energy Yields)  v1.2.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
ElectronReaction.hh
1 //
5 // This file is part of MARLEY (Model of Argon Reaction Low Energy Yields)
6 //
7 // MARLEY is free software: you can redistribute it and/or modify it under the
8 // terms of version 3 of the GNU General Public License as published by the
9 // Free Software Foundation.
10 //
11 // For the full text of the license please see COPYING or
12 // visit http://opensource.org/licenses/GPL-3.0
13 //
14 // Please respect the MCnet academic usage guidelines. See GUIDELINES
15 // or visit https://www.montecarlonet.org/GUIDELINES for details.
16 
17 #pragma once
18 #include <functional>
19 #include <string>
20 
21 #include "Event.hh"
22 #include "MassTable.hh"
23 #include "Reaction.hh"
24 
25 namespace marley {
26 
27  class Generator;
28 
29  // Represents a reaction in which an incident (anti)neutrino of any flavor
30  // elastically scatters off of an electron originally bound to an atom with
31  // atomic number Z_atom_. The cross section computed for this reaction is
32  // computed per atom (scaled up from the single-electron cross section by the
33  // atomic number Z_atom_, which is the same as the number of electron targets
34  // bound to the atom). The small binding energy of the electrons is currently
35  // neglected.
37 
38  public:
39 
40  ElectronReaction(int pdg_a, int target_atom_pdg);
41 
42  inline virtual marley::TargetAtom atomic_target() const override final
43  { return atom_; }
44 
45  // Total reaction cross section (in MeV^(-2)) for an incident
46  // projectile with lab-frame kinetic energy Ea
47  virtual double total_xs(int pdg_a, double KEa) const override;
48 
49  // Differential cross section (MeV^(-2)) in the CM frame
50  virtual double diff_xs(int pdg_a, double KEa, double cos_theta_c_cm)
51  const override;
52 
53  // Creates an event object for this reaction using the generator gen
54  virtual marley::Event create_event(int particle_id_a, double KEa,
55  marley::Generator& gen) const override;
56 
57  inline virtual double threshold_kinetic_energy() const override
58  { return KEa_threshold_; }
59 
60  inline double g1() const { return g1_; }
61  inline double g2() const { return g2_; }
62 
63  private:
64 
65  // Atomic target involved in this reaction
66  marley::TargetAtom atom_;
67 
68  // Coupling constants to use for cross section calculations (updated
69  // each time based on the projectile's particle ID)
70  double g1_, g2_;
71 
72  // Threshold kinetic energy of the projectile
73  double KEa_threshold_;
74 
79  void set_coupling_constants();
80 
81  // Sample a CM frame scattering cosine for the ejectile. The first
82  // argument is Mandelstam s. This function assumes that the coupling
83  // constants g1 and g2 have already been updated, so make sure to use it
84  // only after calling determine_coupling_constants.
85  double sample_cos_theta_c_cm(double s, marley::Generator& gen);
86  };
87 
88 }
Definition: ElectronReaction.hh:36
virtual marley::Event create_event(int particle_id_a, double KEa, marley::Generator &gen) const override
Create an event object for this reaction.
Definition: ElectronReaction.cc:153
virtual double threshold_kinetic_energy() const override
Get the minimum lab-frame kinetic energy (MeV) of the projectile that allows this reaction to proceed...
Definition: ElectronReaction.hh:57
virtual double diff_xs(int pdg_a, double KEa, double cos_theta_c_cm) const override
Differential cross section (MeV -2)
Definition: ElectronReaction.cc:117
virtual marley::TargetAtom atomic_target() const override final
Returns the target atom involved in this reaction.
Definition: ElectronReaction.hh:42
virtual double total_xs(int pdg_a, double KEa) const override
Compute the reaction's total cross section (MeV -2)
Definition: ElectronReaction.cc:86
Container for ingoing and outgoing momentum 4-vectors from a reaction.
Definition: Event.hh:66
The MARLEY Event generator.
Definition: Generator.hh:42
Abstract base class that represents a two-two scattering reaction.
Definition: Reaction.hh:38
int pdg_a() const
Get the projectile PDG code.
Definition: Reaction.hh:90
An atomic target for a lepton scattering reaction.
Definition: TargetAtom.hh:26