MARLEY (Model of Argon Reaction Low Energy Yields)  v1.2.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
OpticalModel.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 <complex>
19 
20 namespace marley {
21 
23  class OpticalModel {
24 
25  public:
26 
29  OpticalModel(int Z, int A) : Z_(Z), A_(A) {}
30 
31  virtual ~OpticalModel() = default;
32 
43  virtual std::complex<double> optical_model_potential(double r,
44  double fragment_KE_lab, int fragment_pdg, int two_j, int l, int two_s,
45  int target_charge = 0) = 0;
46 
54  virtual double transmission_coefficient(double total_KE_CM, int fragment_pdg,
55  int two_j, int l, int two_s, int target_charge = 0) = 0;
56 
79  virtual double total_cross_section(double fragment_KE_lab,
80  int fragment_pdg, int two_s, size_t l_max, int target_charge = 0) = 0;
81 
83  inline int Z() const;
84 
86  inline int A() const;
87 
88  protected:
89 
90  // Nuclear atomic and mass numbers
91  int Z_, A_;
92  };
93 
94  // Inline function definitions
95  inline int OpticalModel::Z() const { return Z_; }
96 
97  inline int OpticalModel::A() const { return A_; }
98 }
Abstract base class for nuclear optical model implementations.
Definition: OpticalModel.hh:23
OpticalModel(int Z, int A)
Definition: OpticalModel.hh:29
virtual std::complex< double > optical_model_potential(double r, double fragment_KE_lab, int fragment_pdg, int two_j, int l, int two_s, int target_charge=0)=0
Calculate the optical model potential (including the Coulomb potential)
int A() const
Get the mass number.
Definition: OpticalModel.hh:97
int Z() const
Get the atomic number.
Definition: OpticalModel.hh:95
virtual double transmission_coefficient(double total_KE_CM, int fragment_pdg, int two_j, int l, int two_s, int target_charge=0)=0
Calculate the transmission coefficient for a nuclear fragment.
virtual double total_cross_section(double fragment_KE_lab, int fragment_pdg, int two_s, size_t l_max, int target_charge=0)=0
Compute the energy-averaged total cross section (MeV -2) for a nuclear fragment projectile.