Skip to content

Commit

Permalink
Add Gd160 DBD decay to gs and first excited level
Browse files Browse the repository at this point in the history
  • Loading branch information
fmauger committed Dec 17, 2024
1 parent c1dfbbc commit c2b74dd
Show file tree
Hide file tree
Showing 7 changed files with 188 additions and 3 deletions.
4 changes: 3 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
endif()

cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(BxDecay0 VERSION 1.1.2)
project(BxDecay0 VERSION 1.1.3)
# - Version of the original fortran Decay0
set(BxDecay0_DECAY0_VERSION "2020-04-20")
set(BxDecay0_TAG "BxDecay0-${BxDecay0_VERSION}")
Expand Down Expand Up @@ -233,6 +233,7 @@ set(BxDecay0_HEADERS
bxdecay0/Zn65.h
bxdecay0/Zr92low.h
bxdecay0/Zr96.h
bxdecay0/Dy160low.h # Added 2024-12-17 (plain C++ implementation)
bxdecay0/Dy162low.h # Added from 2018-12-05
bxdecay0/Dy164low.h # Added from 2018-12-05
bxdecay0/Er168low.h # Added from 2018-12-05
Expand Down Expand Up @@ -421,6 +422,7 @@ set(BxDecay0_SOURCES
bxdecay0/Zn65.cc
bxdecay0/Zr92low.cc
bxdecay0/Zr96.cc
bxdecay0/Dy160low.cc # Added 2024-12-17 (plain C++ implementation)
bxdecay0/Dy162low.cc # Added from 2018-12-05
bxdecay0/Dy164low.cc # Added from 2018-12-05
bxdecay0/Er168low.cc # Added from 2018-12-05
Expand Down
6 changes: 6 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1020,6 +1020,7 @@ From the ``dbd_isotopes.lis`` resource file:
* ``Nd150``
* ``Dy156``
* ``Dy158``
* ``Gd160``
* ``W180``
* ``W186``
* ``Os184``
Expand Down Expand Up @@ -1404,6 +1405,11 @@ List of daughter nucleus excited states in double beta decay

0. 0+ (gs) {0 MeV}

* ``Gd160`` -> ``Gd160`` :

0. 0+ (gs) {0 MeV}
1. 2+ (1) {0.087 MeV}


.. raw:: pdf
Expand Down
84 changes: 84 additions & 0 deletions bxdecay0/Dy160low.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
// Copyright 2024 V.I. Tretyak
// Copyright 2024 F. Mauger
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

// Ourselves:
#include <bxdecay0/Dy160low.h>

// Standard library:
#include <cmath>
#include <sstream>
#include <stdexcept>

// This project:
#include <bxdecay0/PbAtShell.h>
#include <bxdecay0/alpha.h>
#include <bxdecay0/beta.h>
#include <bxdecay0/beta1.h>
#include <bxdecay0/beta2.h>
#include <bxdecay0/beta_1fu.h>
#include <bxdecay0/electron.h>
#include <bxdecay0/event.h>
#include <bxdecay0/gamma.h>
#include <bxdecay0/i_random.h>
#include <bxdecay0/nucltransK.h>
//#include <bxdecay0/nucltransKL.h>
//#include <bxdecay0/nucltransKLM.h>
//#include <bxdecay0/nucltransKLM_Pb.h>
//#include <bxdecay0/pair.h>
#include <bxdecay0/particle.h>
// #include <bxdecay0/positron.h>

namespace bxdecay0 {

void Dy160low(i_random & prng_, event & event_, const int levelkev_)
{
// Subroutine describes the deexcitation process in Dy160 nucleus
// after 2b-decay of Gd160 to ground and excited 2+ levels
// of Dy160 (NNDC site on 17.12.2024).
// Call : call Dy160low(levelkeV)
// Input : levelkeV - energy of Dy160 level (integer in keV) occupied
// initially; following levels can be occupied:
// 0+(gs) - 0 keV,
// 2+(1) - 87 keV,
double tdlev;
double p;
double tclev;
double thlev;
tclev = 0.;
if (levelkev_ == 87) {
goto label_87;
}
if (levelkev_ == 0) {
goto label_10000;
}
goto label_20000;
label_87:
thlev = 2.02e-9;
decay0_nucltransK(prng_, event_, 0.0867877, 0.054, 4.63, 0., tclev, thlev, tdlev);
return;
label_10000:
return;
label_20000:
// print *, 'Dy160: wrong level [keV] ', levelkev
return;
}

} // end of namespace bxdecay0

// end of Dy162low.cc
// Local Variables: --
// mode: c++ --
// End: --
17 changes: 17 additions & 0 deletions bxdecay0/Dy160low.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#ifndef BXDECAY0_DY160LOW_H
#define BXDECAY0_DY160LOW_H

namespace bxdecay0 {

class i_random;
class event;

void Dy160low(i_random & prng_, event & event_, const int levelkev_);

} // end of namespace bxdecay0

#endif // BXDECAY0_DY160LOW_H

// Local Variables: --
// mode: c++ --
// End: --
34 changes: 33 additions & 1 deletion bxdecay0/genbbsub.cc
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
#include <bxdecay0/Co60.h>
#include <bxdecay0/Cs136.h>
#include <bxdecay0/Cs137.h>
#include <bxdecay0/Dy160low.h>
#include <bxdecay0/Dy162low.h>
#include <bxdecay0/Dy164low.h>
#include <bxdecay0/Er168low.h>
Expand Down Expand Up @@ -1546,7 +1547,7 @@ namespace bxdecay0 {
// New in 2018-12-05:
bb_params_.Qbb = 0.655;
bb_params_.Zdbb = 70.;
bb_params_.Adbb = 174.;
bb_params_.Adbb = 170.; // Fixed 2024-12-17 : was 174.
bb_params_.EK = 0.061;
if (ilevel_ < 0 || ilevel_ > 1) {
std::cerr << "[error] "
Expand All @@ -1570,6 +1571,34 @@ namespace bxdecay0 {
if (ilevel_ == 1) {
bb_params_.itrans02 = 2;
}
} else if (name_starts_with(chnuclide_, "Gd160")) {
// Added 2024-12-17: Gd160 -> Dy160 (ground state or 2+, 87 keV)
bb_params_.Qbb = 1.729;
bb_params_.Zdbb = 66.;
bb_params_.Adbb = 160.;
bb_params_.EK = 0.054;
if (ilevel_ < 0 || ilevel_ > 1) {
std::cerr << "[error] "
<< "bxdecay0::genbbsub: "
<< "Illegal '" << chnuclide_ << "' daughter's level (" << ilevel_ << ") ! \n";
ier_ = 1;
if (trace) {
std::cerr << "[debug] bxdecay0::genbbsub: Exiting." << std::endl;
}
return;
}
if (ilevel_ == 0) {
bb_params_.levelE = 0;
}
if (ilevel_ == 1) {
bb_params_.levelE = 87;
}
if (ilevel_ == 0) {
bb_params_.itrans02 = 0;
}
if (ilevel_ == 1) {
bb_params_.itrans02 = 2;
}
} else if (name_starts_with(chnuclide_, "Yb168")) {
// New in 2018-12-05:
bb_params_.Qbb = 1.409;
Expand Down Expand Up @@ -2302,6 +2331,9 @@ namespace bxdecay0 {
if (name_starts_with(chnuclide_, "Dy158")) {
Gd158low(prng_, event_, bb_params_.levelE);
}
if (name_starts_with(chnuclide_, "Gd160")) {
Dy160low(prng_, event_, bb_params_.levelE); // New 2024-12-17
}
if (name_starts_with(chnuclide_, "Er162")) {
Dy162low(prng_, event_, bb_params_.levelE); // New 2018-12-05
}
Expand Down
45 changes: 44 additions & 1 deletion bxdecay0/testing/test_decay0_generator.cxx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/** test_decay0_generator.cxx
*
* Copyright 2017 François Mauger <mauger@lpccaen.in2p3.fr>
* Copyright 2017 Normandie Université
* Copyright 2017 LPC Caen, Université de Caen Normandie
*
* This file is part of BxDecay0.
*
Expand All @@ -28,6 +28,7 @@
#include <iostream>
#include <limits>
#include <random>
#include <fstream>

// GSL:
#include <gsl/gsl_histogram.h>
Expand All @@ -49,6 +50,7 @@ void test_backgrounds();
void test_cs137_mdl();
void test_cs137_mdlr();
void test20();
void test_Gd160_dbd();

int main()
{
Expand All @@ -63,6 +65,7 @@ int main()
test_cs137_mdl();
test_cs137_mdlr();
test20();
test_Gd160_dbd();
} catch (std::exception & error) {
std::cerr << "[error] " << error.what() << std::endl;
error_code = EXIT_FAILURE;
Expand Down Expand Up @@ -490,3 +493,43 @@ void test20()
decay0.reset();
return;
}

void test_Gd160_dbd()
{
std::clog << "\ntest_Gd160_dbd:\n";
unsigned int seed = 314159;
std::default_random_engine generator(seed);
bxdecay0::std_random prng(generator);

bxdecay0::decay0_generator decay0;
decay0.set_debug(true);
decay0.set_decay_category(bxdecay0::decay0_generator::DECAY_CATEGORY_DBD);
decay0.set_decay_isotope("Gd160");
decay0.set_decay_dbd_mode(bxdecay0::DBDMODE_1);
decay0.set_decay_dbd_level(0);
decay0.initialize(prng);
decay0.smart_dump(std::clog, "DBD generator: ", "[info] ");
std::ofstream fout("Gd160_dbd.data");
bxdecay0::event decay;
std::size_t nevents = 100;
for (std::size_t ievent = 0; ievent < nevents; ievent++) {
decay0.shoot(prng, decay);
decay.set_time(0.0);
if (ievent < 3) {
decay.print(std::clog, "DBD event:", "[info] ");
decay.store(std::cout);
}
const auto & particles = decay.get_particles();
auto el1 = particles[0];
auto el2 = particles[1];
auto p1 = el1.get_p();
auto p2 = el2.get_p();
const auto me = bxdecay0::electron_mass_MeV();
auto K1 = std::sqrt(me * me + p1 * p1) - me;
auto K2 = std::sqrt(me * me + p2 * p2) - me;
fout << K1 << ' ' << K1 << ' ' << (K1+K2) << '\n';
}
fout.close();
decay0.reset();
return;
}
1 change: 1 addition & 0 deletions resources/description/dbd_isotopes.lis
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Nd148
Nd150
Dy156
Dy158
Gd160
W180
W186
Os184
Expand Down

0 comments on commit c2b74dd

Please sign in to comment.