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
StandardLorentzianModel.cc
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
18
19#include <cmath>
20#include <string>
21
22#include "marley/marley_utils.hh"
23#include "marley/Error.hh"
24#include "marley/Logger.hh"
25#include "marley/StandardLorentzianModel.hh"
26
28
31{
32 // E1 giant resonance parameterization taken from the empirical fit for
33 // spherical nuclei given in the
34 // <a href="https://www-nds.iaea.org/RIPL-2/handbook/ripl2.pdf">
35 // RIPL-2 handbook</a>, p. 129
36 // @todo Consider updating E1 parameters to the new SLO fit from RIPL-3 (see
37 // equation 174 in the RIPL-3 Nuclear Data Sheets paper, and compare equation
38 // 173)
39 e_E1_ = 31.2*std::pow(A_, -1.0/3.0) + 20.6*std::pow(A_, -1.0/6.0); // MeV
40 gamma_E1_ = 0.026 * std::pow(e_E1_, 1.91); // MeV
41 sigma_E1_ = 1.2 * 120 * (A_ - Z_) * Z_/(A_ * marley_utils::pi * gamma_E1_)
42 * marley_utils::mb; // mb
43
44 // E2 giant resonance parameterization taken from the global fit given by
45 // Kopecky in the
46 // <a href="https://www-nds.iaea.org/ripl/readme/ripl_handbook.ps">RIPL-1
47 // handbook</a>, p. 103
48 // RIPL-2 and RIPL-3 do not update this parameterization for the SLO
49 e_E2_ = 63*std::pow(A_, -1.0/3.0); // MeV
50 gamma_E2_ = 6.11 - 0.012*A_; // MeV
51 sigma_E2_ = 0.00014 * std::pow(Z_, 2) * e_E2_
52 / (std::pow(A_, 1.0/3.0) * gamma_E2_) * marley_utils::mb; // mb
53
54 // M1 parameterization taken from the global SLO model fit given in the
55 // <a href="https://www-nds.iaea.org/RIPL-2/handbook/ripl2.pdf">RIPL-2
56 // handbook</a>, p. 132
59 constexpr double e_gamma_ref = 7.0; // MeV
60 double factor_m1 = strength_function(TrType::electric, 1, e_gamma_ref)
61 / (0.0588 * std::pow(A_, 0.878));
62 gamma_M1_ = 4.0; // MeV
63 e_M1_ = 41*std::pow(A_, -1.0/3.0); // MeV
64 sigma_M1_ = (std::pow(std::pow(e_gamma_ref, 2) - std::pow(e_M1_, 2), 2)
65 + std::pow(e_gamma_ref, 2) * std::pow(gamma_M1_, 2))
66 * (3 * std::pow(marley_utils::pi, 2) * factor_m1)
67 / (e_gamma_ref * std::pow(gamma_M1_, 2)); // mb
68}
69
70double marley::StandardLorentzianModel::strength_function_coefficient(
71 TrType type, int l, double e_gamma)
72{
73 check_multipolarity(l);
74
75 // The strength, energy, and width of the giant resonance for a transition of
76 // type x (E or M) and multipolarity l
77 double e_xl = 0.;
78 double gamma_xl = 0.;
79 double sigma_xl = 0.;
80
81 if (type == TrType::electric) {
82
83 if (l == 1) {
84 e_xl = e_E1_;
85 sigma_xl = sigma_E1_;
86 gamma_xl = gamma_E1_;
87 }
88
89 else if (l > 1) {
90
91 e_xl = e_E2_;
92 sigma_xl = sigma_E2_;
93 gamma_xl = gamma_E2_;
94
95 // If this is an E2 transition, we're done. Otherwise,
96 // compute the giant resonance strength iteratively
97 // l > 2 prescription taken from TALYS 1.6 manual
98 for (int i = 2; i < l; ++i) sigma_xl *= 8e-4;
99 }
100 }
101
102 else if (type == TrType::magnetic) {
103 e_xl = e_M1_;
104 sigma_xl = sigma_M1_;
105 gamma_xl = gamma_M1_;
106 // If this is an M1 transition, we're done. Otherwise,
107 // compute the giant resonance strength iteratively
108 // l > 1 prescription taken from TALYS 1.6 manual
109 for (int i = 1; i < l; ++i) sigma_xl *= 8e-4;
110 }
111
112 else if (type == TrType::unphysical) {
113 MARLEY_LOG( WARN, "physics.deexcitation" )
114 << "Unphysical EM transition encountered in"
115 << " StandardLorentzianModel::strength_function_coefficient()."
116 << " The strength function will be set to zero.";
117 return 0.;
118 }
119
121 else throw marley::Error(std::string("Invalid transition type")
122 + " given for gamma ray strength function calculation");
123
124 // Now that we have the appropriate giant resonance parameters,
125 // calculate the strength function using the Brink-Axel expression.
126 // Note that the strength function has units of MeV^(-3)
127 double coeff = (sigma_xl * std::pow(gamma_xl, 2)) / ((2*l + 1)
128 * std::pow(marley_utils::pi, 2) * (std::pow(std::pow(e_gamma, 2)
129 - std::pow(e_xl, 2), 2) + std::pow(e_gamma, 2) * std::pow(gamma_xl, 2)));
130
131 return coeff;
132}
133
135 double e_gamma)
136{
137 return std::pow(e_gamma, 3 - 2*l)
138 * strength_function_coefficient(type, l, e_gamma);
139}
140
142 int l, double e_gamma)
143{
144 // Eg^4 = (Eg^[2l + 1] * Eg^[3 - 2l]
145 return 2. * marley_utils::pi * strength_function_coefficient(type, l, e_gamma)
146 * std::pow(e_gamma, 4);
147}
TransitionType
Electromagnetic transitions in nuclei may be classified by their multipolarity (electric vs....
virtual double strength_function(TransitionType type, int l, double e_gamma) override
Returns the gamma-ray strength function (MeV –2 –1) for the requested gamma energy and multipolarity.
virtual double transmission_coefficient(TransitionType type, int l, double e_gamma) override
Returns the gamma-ray transmission coefficient (dimensionless) for the requested gamma energy and mul...