MARLEY (Model of Argon Reaction Low Energy Yields) v2.0.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
Loading...
Searching...
No Matches
OpticalModel.hh
1
4//
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 <iostream>
19#include <complex>
20
21namespace marley {
22
25
26 public:
27
30 OpticalModel( int Z, int A ) : Z_( Z ), A_( A ) {}
31
32 virtual ~OpticalModel() = default;
33
44 virtual std::complex< double > optical_model_potential( double r,
45 double fragment_KE_lab, int fragment_pdg, int two_j, int l, int two_s,
46 int target_charge = 0 ) = 0;
47
55 virtual double transmission_coefficient( double total_KE_CM,
56 int fragment_pdg, int two_j, int l, int two_s,
57 int target_charge = 0 ) = 0;
58
84 virtual double total_cross_section( double fragment_KE_lab,
85 int fragment_pdg, int two_s, size_t l_max, int target_charge = 0 ) = 0;
86
88 inline int Z() const;
89
91 inline int A() const;
92
94 virtual void print( std::ostream& out ) const = 0;
95
96 protected:
97
98 // Nuclear atomic and mass numbers
99 int Z_, A_;
100 };
101
102 // Inline function definitions
103 inline int OpticalModel::Z() const { return Z_; }
104
105 inline int OpticalModel::A() const { return A_; }
106}
107
108inline std::ostream& operator<<( std::ostream& out,
109 const marley::OpticalModel& om )
110{
111 om.print( out );
112 return out;
113}
Abstract base class for nuclear optical model implementations.
OpticalModel(int Z, int A)
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.
int Z() const
Get the atomic number.
virtual void print(std::ostream &out) const =0
Print information about the optical model parameters.
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.