Import Geant4 9.5.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 16:46:55 +02:00
parent 89a9605df1
commit b1eb5424d2
10957 changed files with 888481 additions and 160139 deletions
@@ -0,0 +1,18 @@
#------------------------------------------------------------------------------
# CMakeLists.txt
# Module : G4had_lend
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_lend
#
# CMakeLists.txt for building a single granular library.
#
# Generated on : 24/9/2010
#
# $Id: CMakeLists.txt,v 1.1 2010-11-23 13:58:03 gcosmo Exp $
#
#------------------------------------------------------------------------------
if(GEANT4_BUILD_GRANULAR_LIBS)
include(Geant4MacroLibraryTargets)
GEANT4_GRANULAR_LIBRARY_TARGET(COMPONENT sources.cmake)
endif()
@@ -0,0 +1,46 @@
# $Id: GNUmakefile,v 1.2 2010-11-23 13:58:03 gcosmo Exp $
# -----------------------------------------------------------
# GNUmakefile for hadronic lend library.
# -----------------------------------------------------------
name := G4had_lend
ifndef G4INSTALL
G4INSTALL = ../../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -DG4PROCESSES_EXPORT
CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT
ifeq ($(G4SYSTEM), WIN32-VC)
CPPFLAGS += -I$(G4BASE)/externals/expat/include
endif
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/hadronic/management/include/ \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/low_energy/include \
-I$(G4BASE)/processes/hadronic/models/util/include \
-I$(G4BASE)/processes/hadronic/models/management/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -0,0 +1,324 @@
# $Id: History,v 1.8 2010-11-25 19:47:46 tkoi Exp $
# -----------------------------------------------------------
==================================================
Geant4 - an Object-Oriented Toolkit for Simulation
==================================================
History file for LEND Cross Section and Model
---------------------------------------------
This file should be used to summarize modifications introduced in the
code and to keep track of all tags.
---------------------------------------------------------------
* Please list in reverse chronological order (last date on top)
---------------------------------------------------------------
30 September 2011 Tatsumi Koi (hadr-lend-V09-04-24)
fix problem, after setting changes
include/G4LENDModel.hh
25 September 2011 Tatsumi Koi (hadr-lend-V09-04-23)
----------------------------------------------
migrate to integer A and Z
src/G4LENDModel.cc
src/G4LENDElastic.cc
src/G4LENDInelastic.cc
src/G4LENDCapture.cc
src/G4LENDFission.cc
13 September 2011 Tatsumi Koi (hadr-lend-V09-04-22)
----------------------------------------------
- Add protection of 0 or negative kinetic energy neutrons produced by numerical precision issues
src/G4LENDElastic.cc
12 September 2011 Tatsumi Koi (hadr-lend-V09-04-21)
----------------------------------------------
- Merge to new interface of VCrossSectionDataSet (hadr-cross-V09-04-14)
6 September 2011 Tatsumi Koi (hadr-lend-V09-04-20)
----------------------------------------------
- Introduce BuildPhysicsTable
include/G4LENDModel.hh
- Bug fix
src/G4LENDCaptureCrossSection.cc
src/G4LENDElasticCrossSection.cc
src/G4LENDFissionCrossSection.cc
src/G4LENDInelasticCrossSection.cc
6 September 2011 Tatsumi Koi (hadr-lend-V09-04-19)
----------------------------------------------
This tag keeps OLD interface of VCrossSectionDataSet
- Change for reducing output
include/G4LENDModel.hh
include/G4LENDCrossSection.hh
- Add UltraLowEnergyExtrapolatedXS
src/G4LENDCaptureCrossSection.cc
src/G4LENDElasticCrossSection.cc
src/G4LENDFissionCrossSection.cc
src/G4LENDInelasticCrossSection.cc
- Fix oddy output
src/G4LENDManager.cc
29 August 2011 Tatsumi Koi (hadr-lend-V09-04-18)
----------------------------------------------
- Migrate new interface of VCrossSectionDataSet (hadr-cross-V09-04-14)
src/G4LENDCrossSection.cc
include/G4LENDCrossSection.hh
16 June 2011 Ben Morgan (hadr-lend-V09-04-17)
----------------------------------------------
- sources.cmake : Add additional G4PROCESSES_EXPORT compile definition needed
for DLL build.
2 June 2011 Tatsumi Koi (hadr-lend-V09-04-16)
----------------------------------------------
- Fix gcc4.6 warning message
src/tpia_target.cc
2 June 2011 Tatsumi Koi (hadr-lend-V09-04-15)
----------------------------------------------
- Fix bug
include/tpia_target.h
2 June 2011 Ben Morgan (hadr-lend-V09-04-14)
----------------------------------------------
- sources.cmake : Added support for expat in the CMake build. The expat
include directories are added to the include path, and the module is linked
to the expat libraries.
The interface variables EXPAT_INCLUDE_DIRS and EXPAT_LIBRARIES are used
so there is no dependence on whether the internal or system expat is used.
1 June 2011 Tatsumi Koi (hadr-lend-V09-04-14)<-Actually I did not make this tag
------------------------------------------------
- Migrate recent update in G4CrossSectionDataStore
include/G4LENDCrossSection.hh
src/G4LENDCrossSection.cc
31 May 2011 Tatsumi Koi (hadr-lend-V09-04-13)
------------------------------------------------
- Set proper name for cross section
- Migrate minKinEnergy and maxKinEnergy in G4VCrossSectionDataSet
include/G4LENDElasticCrossSection.hh
include/G4LENDCaptureCrossSection.hh
include/G4LENDFissionCrossSection.hh
include/G4LENDInelasticCrossSection.hh
include/G4LENDCrossSection.hh
src/G4LENDCrossSection.cc
30 May 2011 Tatsumi Koi (hadr-lend-V09-04-12)
------------------------------------------------
- Set proper name
include/G4LENDElastic.hh
- Change format of output messages
src/G4LENDCrossSection.cc
src/G4LENDModel.cc
- Introduce verboseLevel and its changing method
include/G4LENDManager.hh
src/G4LENDManager.cc
30 May 2011 Gabriele Cosmo (hadr-lend-V09-04-11)
------------------------------------------------
- Renamed DLL_API macro to DLL_LEND.
27 May 2011 Tatsumi Koi (hadr-lend-V09-04-10)
------------------------------------------------
- Rename endlXXX -> lendXXX in private values
- Move create_used_target_map from constructor to BuildPhysicsTable
Cross Sections
- Set proper name
- Set proper modelName
- Fix link error undefined reference to `tpia_samplingMethods_linear'
include/tpia_target.h
26 May 20111 Gunter Folger (hadr-lend-V09-04-09)
------------------------------------------------
- Fix compiler warning in tpia_mac.cc on slc5/gcc43,
empty body of for() at line 321
26 May 2011 Gabriele Cosmo (hadr-lend-V09-04-08)
------------------------------------------------
- Added corrections to allow for generation of DLLs on Windows.
- Fixed file name for G4LENDUsedTarget.cc.
- Updated sources.cmake script.
24 May 2011 Gunter Folger (hadr-lend-V09-04-07)
------------------------------------------------
- Fix sources.cmake to reflect renamed header files
18 May 2011 Gunter Folger (hadr-lend-V09-04-06)
------------------------------------------------
- include expat headers froom externals on Windows
- xDataMisc.cc: imporve condition to include unistd.h/direct.h
to avoid warning on Windows from g++ dependency building.
5 May 2011 Tatsumi Koi (hadr-lend-V09-04-05)
------------------------------------------------
- protect by namescope GIDI
30 Apr 2011 Tatsumi Koi (hadr-lend-V09-04-04)
------------------------------------------------
- rename GIDI4GEANT to G4GIDI
30 Apr 2011 Tatsumi Koi (hadr-lend-V09-04-03)
------------------------------------------------
- rename .hpp to .hh
26 Apr 2011 Tatsumi Koi (hadr-lend-V09-04-02)
------------------------------------------------
- Migration to WIN-VC
src/statusMessageReporting.cc
src/tpia_decayChannel.cc
src/tpia_Legendre.cc
src/tpia_map.cc
src/tpia_misc.cc
src/xData.cc
src/xDataMisc.cc
25 Apr 2011 Tatsumi Koi (hadr-lend-V09-04-01)
------------------------------------------------
- delete unneccesary "namespace std"
src/G4LENDCapture.cc
src/G4LENDCaptureCrossSection.cc
src/G4LENDCrossSection.cc
src/G4LENDElastic.cc
src/G4LENDElasticCrossSection.cc
src/G4LENDFission.cc
src/G4LENDFissionCrossSection.cc
src/G4LENDInelastic.cc
src/G4LENDInelasticCrossSection.cc
src/G4LENDManager.cc
src/G4LENDModel.cc
src/G4LENDUesdTarget.cc
- move "namespace std" to proper position
src/GIDI4GEANT.cc
src/GIDI4GEANT_map.cc
src/GIDI4GEANT_target.cc
1 Apr 2011 Tatsumi Koi (hadr-lend-V09-04-00)
------------------------------------------------
- delete "namespace std" in headers
include/GIDI4GEANT_map.hpp
include/GIDI4GEANT.hpp
include/GIDI4GEANT_target.hpp
25 Nov 2010 Tatsumi Koi (hadr-lend-V09-03-07)
------------------------------------------------
- Modified expected value of G4LENDDATA
From LENDDATA/xmcf.n_1.map
To LENDDATA/
25 Nov 2010 Tatsumi Koi (hadr-lend-V09-03-06)
------------------------------------------------
- One more move "namespace std" in headers to sources
25 Nov 2010 Tatsumi Koi (hadr-lend-V09-03-05)
------------------------------------------------
- Fixed compile error in gcc4.4 and make printing out banner
Move "namespace std" in headers to sources
24 Nov 2010 Tatsumi Koi (hadr-lend-V09-03-04)
------------------------------------------------
- Fixed compile error in gcc4.4, however still have 17 warning in gcc 4.4
src/GIDI4GEANT_Misc.cc
24 Nov 2010 Tatsumi Koi (hadr-lend-V09-03-03)
------------------------------------------------
- Fixed warning messages, now we have no warning in gcc 4.1.2
24 Nov 2010 Tatsumi Koi (hadr-lend-V09-03-02)
------------------------------------------------
- Fixed most of warning messages, however still remain some
23 Nov 2010 Gabriele Cosmo (hadr-lend-V09-03-01)
------------------------------------------------
- Corrected GNUmakefile and added CMake scripts with dependencies.
18 Nov 2010 Tatsumi Koi (hadr-lend-V09-03-00)
---------------------------------------------
- First implementation of LEND (Low Energy Nuclear Data) Cross Section and Model
History
GNUMakefile
include/G4LENDCapture.hh
include/G4LENDCaptureCrossSection.hh
include/G4LENDCrossSection.hh
include/G4LENDElastic.hh
include/G4LENDElasticCrossSection.hh
include/G4LENDFission.hh
include/G4LENDFissionCrossSection.hh
include/G4LENDHeader.hh
include/G4LENDInelastic.hh
include/G4LENDInelasticCrossSection.hh
include/G4LENDManager.hh
include/G4LENDModel.hh
include/G4LENDUsedTarget.hh
src/G4LENDCapture.cc
src/G4LENDCaptureCrossSection.cc
src/G4LENDCrossSection.cc
src/G4LENDElastic.cc
src/G4LENDElasticCrossSection.cc
src/G4LENDFission.cc
src/G4LENDFissionCrossSection.cc
src/G4LENDInelastic.cc
src/G4LENDInelasticCrossSection.cc
src/G4LENDManager.cc
src/G4LENDModel.cc
src/G4LENDUesdTarget.cc
include/GIDI4GEANT.hpp
include/GIDI4GEANT_Misc.hpp
include/GIDI4GEANT_map.hpp
include/GIDI4GEANT_mass.hpp
include/GIDI4GEANT_target.hpp
src/GIDI4GEANT.cc
src/GIDI4GEANT_Misc.cc
src/GIDI4GEANT_map.cc
src/GIDI4GEANT_mass.cc
src/GIDI4GEANT_target.cc
include/tpi_IDs.h
include/tpia_depot.h
include/tpia_map.h
include/tpia_mass.h
include/tpia_misc.h
include/tpia_target.h
src/tpi_IDs.cc
src/tpia_Legendre.cc
src/tpia_angular.cc
src/tpia_angularEnergy.cc
src/tpia_channel.cc
src/tpia_decayChannel.cc
src/tpia_depot.cc
src/tpia_frame.cc
src/tpia_kinetics.cc
src/tpia_map.cc
src/tpia_mass.cc
src/tpia_misc.cc
src/tpia_multiplicity.cc
src/tpia_particle.cc
src/tpia_product.cc
src/tpia_samplingMethods.cc
src/tpia_target.cc
src/tpia_target_heated.cc
include/gString.h
include/statusMessageReporting.h
include/xData.h
include/xDataExtras.h
src/gString.cc
src/statusMessageReporting.cc
src/xData.cc
src/xDataExtras.cc
src/xDataMisc.cc
src/xData_1d_x.cc
src/xData_2d_xindex_y.cc
src/xData_2d_xshared_yhistogram.cc
src/xData_2d_xy.cc
src/xData_matrix.cc
@@ -0,0 +1,117 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef G4GIDI_h_included
#define G4GIDI_h_included 1
#include <string>
#include <list>
#include <vector>
#include <G4GIDI_Misc.hh>
#include <G4GIDI_map.hh>
#include <G4GIDI_target.hh>
#include <G4GIDI_mass.hh>
class G4GIDI {
private:
int projectileID;
std::list<G4GIDI_map *> dataDirectories;
std::vector<G4GIDI_target *> targets;
int init( int ip );
public:
G4GIDI( int ip, std::string &dataDirectory );
G4GIDI( int ip, std::list<std::string> &dataDirectory );
~G4GIDI( );
int numberOfDataDirectories( void );
int addDataDirectory( std::string &dataDirectory );
int removeDataDirectory( std::string &dataDirectory );
std::string getDataDirectoryAtIndex( int index );
std::vector<std::string> *getDataDirectories( void );
bool isThisDataAvailable( std::string &lib_name, int iZ, int iA, int iM = 0 );
bool isThisDataAvailable( std::string &lib_name, std::string &targetName );
char *dataFilename( std::string &lib_name, int iZ, int iA, int iM = 0 );
char *dataFilename( std::string &lib_name, std::string &targetName );
std::vector<std::string> *getNamesOfAvailableLibraries( int iZ, int iA, int iM = 0 );
std::vector<std::string> *getNamesOfAvailableLibraries( std::string &targetName );
std::vector<std::string> *getNamesOfAvailableTargets( void );
G4GIDI_target *readTarget( std::string &lib_name, int iZ, int iA, int iM = 0, bool bind = true );
G4GIDI_target *readTarget( std::string &lib_name, std::string &targetName, bool bind = true );
G4GIDI_target *getAlreadyReadTarget( int iZ, int iA, int iM = 0 );
G4GIDI_target *getAlreadyReadTarget( std::string &targetName );
int freeTarget( int iZ, int iA, int iM = 0 );
int freeTarget( std::string &targetSymbol );
int freeTarget( G4GIDI_target *target );
std::vector<std::string> *getListOfReadTargetsNames( void );
};
#endif // End of G4GIDI_h_included
@@ -0,0 +1,72 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef G4GIDI_Misc_h_included
#define G4GIDI_Misc_h_included 1
#include <tpia_map.h>
#include <tpia_target.h>
char *G4GIDI_Misc_Z_A_m_ToName( int iZ, int iA, int im = 0 );
char *G4GIDI_Misc_channelCompound( char *particle1, char *particle2 );
int G4GIDI_Misc_channelProductsCompare( GIDI::tpia_channel *channel, int nProducts, char **productNames );
int getNamesOfAvailableTargets_walker( GIDI::tpia_mapEntry *entry, int level, void *userData );
#endif // End of G4GIDI_Misc_h_included
@@ -0,0 +1,81 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef G4GIDI_map_h_included
#define G4GIDI_map_h_included 1
#include <string>
#include <tpia_map.h>
class G4GIDI_map {
public:
GIDI::statusMessageReporting smr;
GIDI::tpia_map *map;
G4GIDI_map( std::string &dataDirectory );
~G4GIDI_map( );
std::string path( void );
std::string fileName( void );
};
#endif // End of G4GIDI_map_h_included
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef G4GIDI_mass_h_included
#define G4GIDI_mass_h_included 1
double G4GIDI_targetMass( const char *targetSymbol );
double G4GIDI_Z_AMass( int iZ, int iA );
#endif // End of G4GIDI_mass_h_included
@@ -0,0 +1,141 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef G4GIDI_target_h_included
#define G4GIDI_target_h_included 1
#include <vector>
#include <string>
#include <tpia_target.h>
typedef struct crossSectionData_s crossSectionData;
typedef struct channelID_s channelID;
typedef struct G4GIDI_Product_s G4GIDI_Product;
struct crossSectionData_s {
int start, end;
std::vector<double> crossSection;
};
struct channelID_s {
std::string ID;
};
//typedef struct G4GIDI_Product_s {
struct G4GIDI_Product_s {
int A, Z, m;
double kineticEnergy, px, py, pz;
};
class G4GIDI_target {
public:
void init( const char *fileName );
std::string equalProbableBinSampleMethod;
int nElasticIndices, nCaptureIndices, nFissionIndices, nOthersIndices;
int *elasticIndices, *captureIndices, *fissionIndices, *othersIndices;
public:
GIDI::statusMessageReporting smr;
std::string name;
std::string sourceFilename;
double mass;
GIDI::tpia_target *target;
G4GIDI_target( const char *fileName );
G4GIDI_target( std::string &fileName );
~G4GIDI_target( );
std::string *getName( void );
std::string *getFilename( void );
int getZ( void );
int getA( void );
int getM( void );
double getMass( void );
int getTemperatures( double *temperatures );
int readTemperature( int index );
std::string getEqualProbableBinSampleMethod( void );
int setEqualProbableBinSampleMethod( std::string method );
int getNumberOfChannels( void );
int getNumberOfProductionChannels( void );
std::vector<channelID> *getChannelIDs( void );
std::vector<channelID> *getProductionChannelIDs( void );
std::vector<channelID> *getChannelIDs2( GIDI::tpia_channel **channels, int n );
std::vector<double> *getEnergyGridAtTIndex( int index );
double getTotalCrossSectionAtE( double e_in, double temperature );
double getElasticCrossSectionAtE( double e_in, double temperature );
double getCaptureCrossSectionAtE( double e_in, double temperature );
double getFissionCrossSectionAtE( double e_in, double temperature );
double getOthersCrossSectionAtE( double e_in, double temperature );
double sumChannelCrossSectionAtE( int nIndices, int *indices, double e_in, double temperature );
int sampleChannelCrossSectionAtE( int nIndices, int *indices, double e_in, double temperature, double (*rng)( void * ), void *rngState );
double getElasticFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState );
std::vector<G4GIDI_Product> *getCaptureFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState );
std::vector<G4GIDI_Product> *getFissionFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState );
std::vector<G4GIDI_Product> *getOthersFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState );
std::vector<G4GIDI_Product> *getFinalState( int nIndices, int *indices, double e_in, double temperature, double (*rng)( void * ), void *rngState );
};
#endif // End of G4GIDI_target_h_included
@@ -0,0 +1,64 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDCapture_h
#define G4LENDCapture_h 1
// Class Description
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDModel.hh"
class G4LENDCapture : public G4LENDModel
{
public:
G4LENDCapture( G4ParticleDefinition* pd )
:G4LENDModel( "LENDCapture" )
{
proj = pd;
// theModelName = "LENDCapture for ";
// theModelName += proj->GetParticleName();
create_used_target_map();
};
~G4LENDCapture(){;};
G4HadFinalState* ApplyYourself( const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus );
};
#endif
@@ -0,0 +1,66 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDCaptureCrossSection_h
#define G4LENDCaptureCrossSection_h 1
// Class Description
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDCrossSection.hh"
class G4LENDCaptureCrossSection : public G4LENDCrossSection
{
public:
//G4LENDCaptureCrossSection()
//{;};
G4LENDCaptureCrossSection( G4ParticleDefinition* pd )
:G4LENDCrossSection("LENDCaptureCrossSection")
{
proj = pd;
//name = "LEND Capture Cross Section for ";
//name += proj->GetParticleName();
//create_used_target_map();
};
~G4LENDCaptureCrossSection(){;};
private:
// ke temperature
G4double getLENDCrossSection( G4GIDI_target* , G4double , G4double );
};
#endif
@@ -0,0 +1,133 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDCrossSection_h
#define G4LENDCrossSection_h 1
// Class Description
// Cross Sections for a LEND (Low Energy Nuclear Data)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDHeader.hh"
#include "G4LENDManager.hh"
#include "G4LENDUsedTarget.hh"
#include "G4VCrossSectionDataSet.hh"
#include "G4DynamicParticle.hh"
#include "G4Element.hh"
#include "G4Material.hh"
#include "G4ParticleDefinition.hh"
#include "G4PhysicsTable.hh"
#include <map>
class G4LENDCrossSection : public G4VCrossSectionDataSet
{
//
//
// G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
// const G4Element* elm = 0,
// const G4Material* mat = 0);
//
// G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
// const G4Element* elm = 0,
// const G4Material* mat = 0);
//
public:
G4LENDCrossSection(const G4String name = "" );
~G4LENDCrossSection();
//G4bool IsApplicable( const G4DynamicParticle* , const G4Element* );
//TK110811
G4bool IsIsoApplicable( const G4DynamicParticle* , G4int /*Z*/ , G4int /*A*/ ,
const G4Element* , const G4Material* );
G4double GetIsoCrossSection( const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/ ,
const G4Isotope* , const G4Element* , const G4Material* );
void BuildPhysicsTable( const G4ParticleDefinition& );
void DumpPhysicsTable( const G4ParticleDefinition& );
//TK110810
//G4double GetCrossSection( const G4DynamicParticle* , const G4Element* , G4double aT );
//G4double GetCrossSection(const G4DynamicParticle*, G4int , const G4Material* );
void ChangeDefaultEvaluation( G4String name ){ default_evaluation = name; };
void AllowNaturalAbundanceTarget(){ allow_nat = true; };
void AllowAnyCandidateTarget(){ allow_any = true; };
//Hadronic Framework still does not handle isotope in GPIL
//G4VDiscreteProcess::PostStepGetPhysicalInteractionLenght()
// G4HadronicProcess::GetMeanFreePath()
// G4double GetCrossSection(const G4DynamicParticle*, const G4Material*)
// G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aTemperature);
//TK110810
//G4bool IsIsoApplicable( const G4DynamicParticle* , G4int /*ZZ*/, G4int /*AA*/) { return true; }
//G4bool IsZandAApplicable( const G4DynamicParticle* , G4int /*ZZ*/, G4int /*AA*/, const G4Element* , const G4Material* ) { return true; }
//TK110810
//G4double GetZandACrossSection(const G4DynamicParticle* , G4int /*Z*/, G4int /*A*/, G4double aTemperature);
//G4double GetZandACrossSection(const G4DynamicParticle* , G4int /*Z*/, G4int /*A*/, const G4Material* mat);
//TK110810
//G4double GetIsoCrossSection( const G4DynamicParticle* , const G4Isotope* , G4double );
// G4double GetIsoCrossSection( const G4DynamicParticle* , const G4Isotope* , const G4Material* mat );
private:
std::map< G4int , G4LENDUsedTarget* > usedTarget_map;
G4String default_evaluation;
G4bool allow_nat;
G4bool allow_any;
G4LENDManager* lend_manager;
void recreate_used_target_map();
protected :
//G4String name;
G4ParticleDefinition* proj;
void create_used_target_map();
virtual G4double getLENDCrossSection( G4GIDI_target* , G4double , G4double ) { return 0.0; };
// elow ehigh xs_elow xs_ehigh ke (<elow)
G4double GetUltraLowEnergyExtrapolatedXS( G4double , G4double , G4double , G4double , G4double );
};
#endif
@@ -0,0 +1,64 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDElastic_h
#define G4LENDElastic_h 1
// Class Description
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDModel.hh"
class G4LENDElastic : public G4LENDModel
{
public:
G4LENDElastic( G4ParticleDefinition* pd )
:G4LENDModel( "LENDElastic" )
{
proj = pd;
//theModelName = "LEND Elastic Model for ";
//theModelName += proj->GetParticleName();
create_used_target_map();
};
~G4LENDElastic(){;};
G4HadFinalState* ApplyYourself( const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus );
};
#endif
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDElasticCrossSection_h
#define G4LENDElasticCrossSection_h 1
// Class Description
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDCrossSection.hh"
class G4LENDElasticCrossSection : public G4LENDCrossSection
{
public:
//G4LENDElasticCrossSection()
//{;};
G4LENDElasticCrossSection( G4ParticleDefinition* pd )
:G4LENDCrossSection("LENDElasitcCrossSection")
{
proj = pd;
//name = "LEND Elastic Cross Section for ";
//name += proj->GetParticleName();
//create_used_target_map();
};
~G4LENDElasticCrossSection(){;};
private:
// ke temperature
G4double getLENDCrossSection( G4GIDI_target* , G4double , G4double );
};
#endif
@@ -0,0 +1,66 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDFission_h
#define G4LENDFission_h 1
// Class Description
// Manager of LEND (Low Energy Nuclear Data) target (nucleus)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDModel.hh"
class G4LENDFission : public G4LENDModel
{
public:
G4LENDFission( G4ParticleDefinition* pd )
:G4LENDModel( "LENDFission" )
{
proj = pd;
// theModelName = "LENDFission for ";
// theModelName += proj->GetParticleName();
create_used_target_map();
};
~G4LENDFission(){;};
G4HadFinalState* ApplyYourself( const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus );
};
#endif
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDFissionCrossSection_h
#define G4LENDFissionCrossSection_h 1
// Class Description
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDCrossSection.hh"
class G4LENDFissionCrossSection : public G4LENDCrossSection
{
public:
//G4LENDFissionCrossSection()
//{;};
G4LENDFissionCrossSection( G4ParticleDefinition* pd )
:G4LENDCrossSection("LENDEFissionCrossSection")
{
proj = pd;
//name = "LEND Fission Cross Section for ";
//name += proj->GetParticleName();
//create_used_target_map();
};
~G4LENDFissionCrossSection(){;};
private:
// ke temperature
G4double getLENDCrossSection( G4GIDI_target* , G4double , G4double );
};
#endif
@@ -0,0 +1,31 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef xENDF4GEANT_h
#define xENDF4GEANT_h 1
#include "G4GIDI.hh"
#endif
@@ -0,0 +1,64 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDInelastic_h
#define G4LENDInelastic_h 1
// Class Description
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDModel.hh"
class G4LENDInelastic : public G4LENDModel
{
public:
G4LENDInelastic( G4ParticleDefinition* pd )
:G4LENDModel( "LENDInelastic" )
{
proj = pd;
// theModelName = "LENDInelastic for ";
// theModelName += proj->GetParticleName();
create_used_target_map();
};
~G4LENDInelastic(){;};
G4HadFinalState* ApplyYourself( const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus );
};
#endif
@@ -0,0 +1,68 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDInelasticCrossSection_h
#define G4LENDInelasticCrossSection_h 1
// Class Description
// Manager of LEND (Low Energy Nuclear Data) target (nucleus)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDCrossSection.hh"
class G4LENDInelasticCrossSection : public G4LENDCrossSection
{
public:
G4LENDInelasticCrossSection()
{;};
G4LENDInelasticCrossSection( G4ParticleDefinition* pd )
:G4LENDCrossSection("LENDEInelasitcCrossSection")
{
proj = pd;
//name = "LEND Inelastic Cross Section for ";
//name += proj->GetParticleName();
//create_used_target_map();
};
~G4LENDInelasticCrossSection(){;};
private:
// ke temperature
G4double getLENDCrossSection( G4GIDI_target* , G4double , G4double );
};
#endif
@@ -0,0 +1,110 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDManager_h
#define G4LENDManager_h 1
// Class Description
// Manager of LEND (Low Energy Nuclear Data) target (nucleus)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDHeader.hh"
#include "G4ParticleDefinition.hh"
#include "G4NistElementBuilder.hh"
#include "G4IonTable.hh"
#include <map>
struct lend_target
{
// properties for the traget
G4GIDI* lend;
G4GIDI_target* target;
G4ParticleDefinition* proj;
G4int target_code;
G4String evaluation;
};
class G4LENDManager
{
static G4LENDManager* lend_manager;
protected:
G4LENDManager();
G4LENDManager( const G4LENDManager& ){;};
~G4LENDManager();
public:
static G4LENDManager* GetInstance()
{
if ( lend_manager == NULL) lend_manager = new G4LENDManager();
return lend_manager;
};
G4GIDI_target* GetLENDTarget( G4ParticleDefinition* , G4String , G4int iZ , G4int iA , G4int iM = 0 );
std::vector< G4String > IsLENDTargetAvailable( G4ParticleDefinition* , G4int iZ , G4int iA , G4int iM = 0 );
G4int GetNucleusEncoding ( G4int iZ , G4int iA ) // GroundState only
{ return ionTable->GetNucleusEncoding( iZ , iA ); };
G4NistElementBuilder* GetNistElementBuilder(){ return nistElementBuilder; };
G4int GetVerboseLevel(){ return verboseLevel; };
G4bool RequestChangeOfVerboseLevel( G4int );
private:
G4int verboseLevel;
std::vector< lend_target > v_lend_target;
// proj
std::map< G4ParticleDefinition* , G4GIDI* > proj_lend_map;
// std::map< G4ParticleDefinition* , std::vector< G4int > > proj_checked_map;
G4IonTable* ionTable;
G4NistElementBuilder* nistElementBuilder;
void printBanner();
};
#endif
@@ -0,0 +1,82 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDModel_h
#define G4LENDModel_h 1
// Class Description
// Final state production model for a LEND (Low Energy Nuclear Data)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// LEND is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDHeader.hh"
#include "G4LENDManager.hh"
#include "G4LENDUsedTarget.hh"
#include "G4HadronicInteraction.hh"
#include "globals.hh"
class G4LENDModel : public G4HadronicInteraction
{
public:
//G4LENDModel();
G4LENDModel( G4String name="LENDModel" );
~G4LENDModel();
virtual G4HadFinalState * ApplyYourself( const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus );
void ChangeDefaultEvaluation( G4String name ){ default_evaluation = name; recreate_used_target_map(); };
void AllowNaturalAbundanceTarget(){ allow_nat = true; recreate_used_target_map(); };
void AllowAnyCandidateTarget(){ allow_any = true; recreate_used_target_map(); };
//Same argument to the CrossSectionDataSet
void BuildPhysicsTable( const G4ParticleDefinition& ){ recreate_used_target_map(); };
private:
G4String default_evaluation;
G4bool allow_nat;
G4bool allow_any;
protected:
void create_used_target_map();
void recreate_used_target_map();
G4ParticleDefinition* proj;
G4LENDManager* lend_manager;
std::map< G4int , G4LENDUsedTarget* > usedTarget_map;
};
#endif
@@ -0,0 +1,134 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4LENDUsedTarget_h
#define G4LENDUsedTarget_h 1
// Class Description
// Container of LEND (Low Energy Nuclear Data) target (nucleus)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDHeader.hh"
#include "G4ParticleDefinition.hh"
class G4LENDUsedTarget
{
public:
G4LENDUsedTarget( G4ParticleDefinition* pd , G4String Evaluation , G4int iZ , G4int iA , G4int iM = 0 )
: allow_nat ( false )
, allow_anything ( false )
, min_Z ( 0 )
, max_Z ( 113 )
, min_A ( 1 )
, max_A ( 278 )
, min_M ( 0 )
, max_M ( 10 )
{
proj = pd;
wanted_Z = iZ;
wanted_A = iA;
wanted_M = iM;
wanted_Evaluation = Evaluation;
actual_Z = -1;
actual_A = -1;
actual_M = -1;
actual_Evaluation = "na";
searchTarget();
}
~G4LENDUsedTarget(){;};
void AllowNat()
{
allow_nat = true;
searchTarget();
};
void AllowAny()
{
allow_anything = true;
searchTarget();
};
G4int GetWantedZ(){ return wanted_Z; };
G4int GetWantedA(){ return wanted_A; };
G4int GetWantedM(){ return wanted_M; };
G4int GetActualZ(){ return actual_Z; };
G4int GetActualA(){ return actual_A; };
G4int GetActualM(){ return actual_M; };
G4String GetWantedEvaluation(){ return wanted_Evaluation; };
G4String GetActualEvaluation(){ return actual_Evaluation; };
G4GIDI_target* GetTarget(){ return target; };
private:
void searchTarget();
G4ParticleDefinition* proj;
G4int wanted_Z;
G4int wanted_A;
G4int wanted_M;
G4String wanted_Evaluation;
G4bool allow_nat;
G4bool allow_anything;
G4GIDI_target* target;
G4int actual_Z;
G4int actual_A;
G4int actual_M;
G4String actual_Evaluation;
G4int min_Z;
G4int max_Z;
G4int min_A;
G4int max_A;
G4int min_M;
G4int max_M;
};
#endif
@@ -0,0 +1,72 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef gString_h_included
#define gString_h_included
#if defined __cplusplus
extern "C" {
#endif
#include "statusMessageReporting.h"
#if defined __cplusplus
namespace GIDI {
#endif
#define gString_minIncrement sizeof( char * )
typedef struct gString_s gString;
struct gString_s {
int length, allocated, increment;
char *gStr;
};
int gString_initialize( statusMessageReporting *smr, gString *gStr, int size, int increment );
int gString_release( statusMessageReporting *smr, gString *gStr );
int gString_clear( statusMessageReporting *smr, gString *gStr );
int gString_addTo( statusMessageReporting *smr, gString *gStr, char const *str );
char const *gString_string( statusMessageReporting *smr, gString *gStr );
int gString_length( statusMessageReporting *smr, gString *gStr );
int gString_allocated( statusMessageReporting *smr, gString *gStr );
int gString_increment( statusMessageReporting *smr, gString *gStr );
#if defined __cplusplus
}
}
#endif
#endif /* End of gString_h_included. */
@@ -0,0 +1,80 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef statusMessageReporting_h_included
#define statusMessageReporting_h_included
#include <stdio.h>
#include <stdarg.h>
#if defined __cplusplus
namespace GIDI {
extern "C" {
#endif
#define smr_maximumPackageNameSize 256
enum smr_status { smr_status_Ok, smr_status_Info, smr_status_Error, smr_status_Fatal };
typedef int (*smr_userInterface)( void *userData, char **smr );
typedef struct statusMessageReporting {
enum smr_status status;
char packageName[smr_maximumPackageNameSize]; /* Do not free this. */
int line;
int code;
char *message; /* User must free this when done. Should use smr_release. */
} statusMessageReporting;
int smr_initialize( statusMessageReporting *smr );
int smr_release( statusMessageReporting *smr );
int smr_setMessageInfo( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, ... );
int smr_vsetMessageInfo( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, va_list *args );
int smr_setMessageError( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, ... );
int smr_vsetMessageError( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, va_list *args );
char *smr_allocateFormatMessage( const char *fmt, ... );
char *smr_vallocateFormatMessage( const char *fmt, va_list *args );
int smr_isOk( statusMessageReporting *smr );
int smr_isInfo( statusMessageReporting *smr );
int smr_isError( statusMessageReporting *smr );
int smr_isFatal( statusMessageReporting *smr );
const char *smr_getMessage( statusMessageReporting *smr );
char *smr_getFullMessage( statusMessageReporting *smr );
void smr_print( statusMessageReporting *smr, FILE *f, int clear );
#if defined __cplusplus
}
}
#endif
#endif /* End of statusMessageReporting_h_included. */
@@ -0,0 +1,103 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef tpi_IDs_h_included
#define tpi_IDs_h_included
#if defined __cplusplus
extern "C" {
#endif
#include <statusMessageReporting.h>
#include <gString.h>
#include <xData.h>
#if defined __cplusplus
namespace GIDI {
#endif
typedef struct tpi_channelID_s tpi_channelID;
typedef struct tpi_spectralID_s tpi_spectralID;
typedef struct tpi_spectralIDQualifier_s tpi_spectralIDQualifier;
struct tpi_spectralIDQualifier_s {
tpi_spectralIDQualifier *next;
char *name;
char *value;
};
struct tpi_spectralID_s {
tpi_spectralID *next;
char *name;
tpi_spectralIDQualifier *qualifiers;
char *revision; /* Points to revision value in qualifiers if present, otherwise NULL. */
char *multiplicityStr; /* Points to multiplicity value in qualifiers if present, otherwise NULL. */
int multiplicity; /* Value of multiplicityStr if it is an integer. */
double level; /* Value of levelStr if it is a number. */
char *levelStr; /* Points to level value in qualifiers if present, otherwise NULL. */
tpi_channelID *decayChannel;
};
struct tpi_channelID_s {
tpi_spectralID *spectralIDs;
};
tpi_channelID *tpi_channelID_allocate( statusMessageReporting *smr );
int tpi_channelID_initialize( statusMessageReporting *smr, tpi_channelID *channelID );
void *tpi_channelID_free( statusMessageReporting *smr, tpi_channelID *channelID );
int tpi_channelID_release( statusMessageReporting *smr, tpi_channelID *channelID );
tpi_channelID *tpi_channelID_parse( statusMessageReporting *smr, char const *str, char **EOP );
int tpi_channelID_toString( statusMessageReporting *smr, tpi_channelID *channelID, gString *gStr );
int tpi_channelID_toStringSanRevision( statusMessageReporting *smr, tpi_channelID *channelID, gString *gStr );
int tpi_channelID_toStringSans( statusMessageReporting *smr, tpi_channelID *channelID, gString *gStr, char *sans[] );
tpi_spectralID *tpi_spectralID_allocate( statusMessageReporting *smr );
int tpi_spectralID_initialize( statusMessageReporting *smr, tpi_spectralID *spectralID );
void *tpi_spectralID_free( statusMessageReporting *smr, tpi_spectralID *spectralID );
int tpi_spectralID_release( statusMessageReporting *smr, tpi_spectralID *spectralID );
tpi_spectralID *tpi_spectralID_parse( statusMessageReporting *smr, char const *str, char **EOP );
int tpi_spectralID_toString( statusMessageReporting *smr, tpi_spectralID *spectralID, gString *gStr );
int tpi_spectralID_toStringSanRevision( statusMessageReporting *smr, tpi_spectralID *spectralID, gString *gStr );
int tpi_spectralID_toStringSans( statusMessageReporting *smr, tpi_spectralID *spectralID, gString *gStr, char *sans[] );
char const *tpi_misc_firstNonWhiteSpace( statusMessageReporting *smr, char const *str );
char *tpi_misc_allocateAndCopyNCharacters( statusMessageReporting *smr, char const *str, int n );
#if defined __cplusplus
}
}
#endif
#endif /* End of tpi_IDs_h_included. */
@@ -0,0 +1,22 @@
#ifndef tpia_defs_h_included
#define tpia_defs_h_included
#ifdef WIN32
//
// Define DLL export macro for WIN32 systems for
// importing/exporting external symbols to DLLs
//
#if defined G4LIB_BUILD_DLL
#if defined G4PROCESSES_EXPORT
#define DLL_LEND __declspec( dllexport )
#else
#define DLL_LEND __declspec( dllimport )
#endif
#else
#define DLL_LEND
#endif
#else
#define DLL_LEND
#endif
#endif /* End of tpia_defs_h_included. */
@@ -0,0 +1,82 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef tpia_depot_h_included
#define tpia_depot_h_included
#if defined __cplusplus
extern "C" {
#endif
#include <tpia_map.h>
#include <tpia_target.h>
#if defined __cplusplus
namespace GIDI {
#endif
typedef struct tpia_targetEntry_s tpia_targetEntry;
typedef struct tpia_depot_s tpia_depot;
struct tpia_targetEntry_s {
tpia_targetEntry *next;
tpia_target *target;
};
struct tpia_depot_s {
int status;
char *projectileName;
int numberOfTargets;
tpia_targetEntry *targets;
tpia_map *map;
};
tpia_depot *tpia_depot_create( statusMessageReporting *smr, const char *projectileName );
int tpia_depot_initialize( statusMessageReporting *smr, tpia_depot *depot, const char *projectileName );
tpia_depot *tpia_depot_free( tpia_depot *depot, int freeMap );
int tpia_depot_release( tpia_depot *depot, int freeMap );
int tpia_depot_setMap( statusMessageReporting *smr, tpia_depot *depot, tpia_map *map );
int tpia_depot_setMapFromFilename( statusMessageReporting *smr, tpia_depot *depot, const char *basePath, const char *mapFileName );
tpia_map *tpia_depot_releaseMap( tpia_depot *depot );
int tpia_depot_freeMap( tpia_depot *depot );
tpia_target *tpia_depot_addTarget( statusMessageReporting *smr, tpia_depot *depot, const char *evaluation, const char *targetName );
tpia_target *tpia_depot_addTargetFromMap( statusMessageReporting *smr, tpia_depot *depot, tpia_map *map, const char *evaluation, const char *targetName );
#if defined __cplusplus
}
}
#endif
#endif /* End of tpia_depot_h_included. */
@@ -0,0 +1,103 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef tpia_map_h_included
#define tpia_map_h_included
#if defined __cplusplus
extern "C" {
#endif
#include <xData.h>
#if defined __cplusplus
namespace GIDI {
#endif
enum tpia_map_status { tpia_map_status_Ok, tpia_map_status_memory, tpia_map_status_mapParsing,
tpia_map_status_UnknownType };
enum tpia_mapEntry_type { tpia_mapEntry_type_target, tpia_mapEntry_type_path };
typedef struct tpia_map_s tpia_map;
typedef struct tpia_mapEntry_s tpia_mapEntry;
typedef struct tpia_map_smr_s tpia_map_smr;
struct tpia_map_smr_s {
smr_userInterface smrUserInterface;
tpia_map *map;
};
struct tpia_mapEntry_s {
tpia_mapEntry *next;
enum tpia_mapEntry_type type;
char *schema;
char *path;
char *evaluation;
char *projectile;
char *targetName;
tpia_map *map;
};
struct tpia_map_s {
enum tpia_map_status status;
tpia_map_smr smrUserInterface;
char *path;
char *mapFileName;
int numberOfEntries;
tpia_mapEntry *mapEntries;
};
tpia_map *tpia_map_create( statusMessageReporting *smr );
int tpia_map_initialize( statusMessageReporting *smr, tpia_map *map );
tpia_map *tpia_map_readFile( statusMessageReporting *smr, const char *basePath, const char *mapFileName );
void *tpia_map_free( statusMessageReporting *smr, tpia_map *map );
void tpia_map_release( statusMessageReporting *smr, tpia_map *map );
tpia_mapEntry *tpia_map_getFirstEntry( tpia_map *map );
tpia_mapEntry *tpia_map_getNextEntry( tpia_mapEntry *entry );
int tpia_map_addTarget( statusMessageReporting *smr, tpia_map *map, const char *method, const char *path, const char *evaluation, const char *projectile, const char *targetName );
int tpia_map_addPath( statusMessageReporting *smr, tpia_map *map, const char *path, const char *projectile );
char *tpia_map_findTarget( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectile, const char *targetName );
tpia_map *tpia_map_findAllOfTarget( statusMessageReporting *smr, tpia_map *map, const char *projectile, const char *targetName );
char *tpia_map_getFullPath( statusMessageReporting *smr, tpia_map *map, const char *endPath );
int tpia_map_walkTree( statusMessageReporting *smr, tpia_map *map, int (*handler)( tpia_mapEntry *entry, int level, void *userData), void *userData );
char *tpia_map_toXMLString( statusMessageReporting *smr, tpia_map *map );
void tpia_map_simpleWrite( FILE *f, tpia_map *map );
#if defined __cplusplus
}
}
#endif
#endif /* End of tpia_map_h_included. */
@@ -0,0 +1,51 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef tpia_mass_h_included
#define tpia_mass_h_included
#if defined __cplusplus
namespace GIDI {
extern "C" {
#endif
double tpia_particleMass_AMU( statusMessageReporting *smr, const char *name );
#if defined __cplusplus
}
}
#endif
#endif /* End of tpia_mass_h_included. */
@@ -0,0 +1,60 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#if defined __cplusplus
namespace GIDI {
extern "C" {
#endif
#define tpia_misc_pointerToAttributeIfAllOk2( smr, element, required, attributes, name ) \
tpia_misc_pointerToAttributeIfAllOk( smr, element, NULL, required, attributes, name, __FILE__, __LINE__ )
#define tpia_misc_pointerToAttributeIfAllOk3( smr, path, required, attributes, name ) \
tpia_misc_pointerToAttributeIfAllOk( smr, NULL, path, required, attributes, name, __FILE__, __LINE__ )
char *tpia_misc_pointerToAttributeIfAllOk( statusMessageReporting *smr, xData_element *element, const char *path, int required,
xData_attributionList *attributes, const char *name, const char *file, int line );
int tpia_misc_setMessageError_Element( statusMessageReporting *smr, void *userInterface, xData_element *element, const char *file, int line, int code,
const char *fmt, ... );
xData_Int tpia_misc_binarySearch( xData_Int n, double *ds, double d );
tpia_EqualProbableBinSpectrum *tpia_misc_getEqualProbableBin( statusMessageReporting *smr, xData_element *parent, xData_Int *n, xData_Int *nBins );
tpia_EqualProbableBinSpectrum *tpia_misc_getEqualProbableBins( statusMessageReporting *smr, xData_element *parent, const char *name, xData_Int nBins,
xData_Int *n );
#if defined __cplusplus
}
}
#endif
@@ -0,0 +1,499 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef tpia_target_h_included
#define tpia_target_h_included
#if defined __cplusplus
extern "C" {
#endif
#include <xData.h>
#include <tpia_defs.h>
#include <tpia_map.h>
#include <tpi_IDs.h>
#if defined __cplusplus
namespace GIDI {
#endif
typedef struct tpia_particle_s tpia_particle;
typedef struct tpia_target_s tpia_target;
typedef struct tpia_target_heated_info_s tpia_target_heated_info;
typedef struct tpia_target_heated_sorted_s tpia_target_heated_sorted;
typedef struct tpia_target_heated_s tpia_target_heated;
typedef struct tpia_decaySamplingInfo_s tpia_decaySamplingInfo;
typedef struct tpia_productOutgoingData_s tpia_productOutgoingData;
typedef struct tpia_multiplicity_s tpia_multiplicity;
typedef struct tpia_samplingMethods_s tpia_samplingMethods;
typedef struct tpia_EqualProbableBinSpectra_s tpia_EqualProbableBinSpectra;
typedef struct tpia_EqualProbableBinSpectrum_s tpia_EqualProbableBinSpectrum;
typedef struct tpia_LegendreBin_s tpia_LegendreBin;
typedef struct tpia_angularEnergyBin_s tpia_angularEnergyBin;
typedef struct tpia_angular_s tpia_angular;
typedef struct tpia_Legendre_s tpia_Legendre;
typedef struct tpia_angularEnergy_s tpia_angularEnergy;
typedef struct tpia_decayChannel_s tpia_decayChannel;
typedef struct tpia_product_s tpia_product;
typedef struct tpia_1dData_s tpia_1dData;
typedef struct tpia_2dData_s tpia_2dData;
typedef struct tpia_channel_s tpia_channel;
typedef struct tpia_data_frame_s tpia_data_frame;
//#include <xData.h>
#include <tpia_mass.h>
//#include <tpia_map.h>
//#include <tpi_IDs.h>
#define tpia_mode_MonteCarlo 1
#define tpia_mode_Pn 2
#define tpia_maxNumberOfFrames 8
#define tpia_referenceFrame_None 0
#define tpia_referenceFrame_COM 1
#define tpia_referenceFrame_lab 2
#define tpia_referenceFrame_Max tpia_referenceFrame_lab
#define tpia_crossSectionType_grouped 1
#define tpia_crossSectionType_pointwise 2
#define tpia_m_depositionEnergy 1
#define tpia_m_multiplicity ( 1 << 1 )
#define tpia_m_decayChannel ( 1 << 2 )
#define tpia_m_commonShift 3
#define tpia_m_angular ( 1 << 3 )
#define tpia_m_formFactor ( 1 << 4 )
#define tpia_m_Legendre ( 1 << 5 )
#define tpia_m_angular_energy ( 1 << 6 )
#define tpia_speedOfLight_cm_sec 2.99792458e10
#define tpia_AMU2MeV 931.494028
extern DLL_LEND const char *tpia_productGenre_unknown, *tpia_productGenre_twoBody_angular, *tpia_productGenre_twoBody_formFactor,
*tpia_productGenre_NBody_Legendre, *tpia_productGenre_NBody_angular_energy, *tpia_productGenre_NBody_uncorrelate_Legendre,
*tpia_productGenre_NBody_pairProduction;
extern DLL_LEND const char *tpia_samplingMethods_constant, *tpia_samplingMethods_linear;
//extern const char *tpia_samplingMethods_constant = "constant";
//extern const char *tpia_samplingMethods_linear = "linear";
//#define tpia_samplingMethods_isConstant( method ) ( method == tpia_samplingMethods_constant )
//#define tpia_samplingMethods_isLinear( method ) ( method == tpia_samplingMethods_linear )
//tpia_samplingMethods_constant and tpia_samplingMethods_linear are defined in src/tpia_samplingMethods.cc in namespace GIDI.
//So TK directory write the values in follwoing macros. 110527
//#define tpia_samplingMethods_isConstant( method ) ( method == "constant" )
//#define tpia_samplingMethods_isLinear( method ) ( method == "linear" )
//Fix above bug. 110602
#define tpia_samplingMethods_isConstant( method ) ( strcmp ( method , "constant" ) == 0 )
#define tpia_samplingMethods_isLinear( method ) ( strcmp ( method , "linear" ) == 0 )
struct tpia_particle_s {
tpia_particle *prior;
tpia_particle *next;
int ordinal;
int Z, A, m;
double mass;
double fullMass_MeV;
char *name;
tpi_spectralID *spectralID;
};
struct tpia_samplingMethods_s {
const char *angular_equalProbableBinMethod;
};
struct tpia_data_frame_s {
unsigned int frames;
};
struct tpia_1dData_s {
xData_Int start, end, length;
double *data;
};
struct tpia_decaySamplingInfo_s {
double e_in;
tpia_samplingMethods *samplingMethods;
int isVelocity;
tpia_data_frame frame;
double (*rng)( void * );
void *rngState;
tpia_particle *productID;
char const *genre;
double mu;
double Ep;
};
struct tpia_productOutgoingData_s {
char const *genre;
int isVelocity;
tpia_data_frame frame;
tpia_particle *productID;
double kineticEnergy;
double px_vx;
double py_vy;
double pz_vz;
tpia_decayChannel *decayChannel;
};
struct tpia_multiplicity_s {
tpia_multiplicity *next;
tpia_data_frame frame;
double timeScale; /* Only for delay neutrons from fission, otherwise -1. */
xData_Int numberOfPointwise;
tpia_1dData grouped;
double *pointwise;
};
/*
* This data is used for discrete 2-body data where mu is give in equal probable bins vs E and
* for isotropic scattering where the outgoing E' is give in equal probable bins vs E.
*/
struct tpia_EqualProbableBinSpectrum_s {
int nBins, index;
double value;
double *bins;
};
struct tpia_EqualProbableBinSpectra_s {
int iValue;
int nBins;
int numberOfEs;
double dValue;
tpia_EqualProbableBinSpectrum *energies;
};
struct tpia_LegendreBin_s {
int numberOfLs;
tpia_EqualProbableBinSpectra *ls;
};
struct tpia_angularEnergyBin_s {
int nBins, numberOfEs;
tpia_EqualProbableBinSpectra *energies;
};
struct tpia_decayChannel_s {
int numberOfProducts;
tpia_product *products;
double m1_fullMass_MeV; /* Currently, only used for 2-body decay. Either the mass of the projectile and target, respectively; */
double m2_fullMass_MeV; /* or, the mass of the decaying particle and 0., respectively. */
};
struct tpia_angular_s {
tpia_data_frame frame;
tpia_EqualProbableBinSpectra binned;
};
struct tpia_Legendre_s {
tpia_data_frame frame;
tpia_LegendreBin binned;
};
struct tpia_angularEnergy_s {
tpia_data_frame frame;
tpia_angularEnergyBin binned;
};
struct tpia_product_s {
tpia_product *next;
tpia_channel *channel;
tpia_product *parentProduct; /* If this product is the result of a particle decaying, then this the the parent particle. */
xData_attributionList attributes;
tpia_particle *productID;
char const *genre;
long b_dataPresent;
long b_dataRequired;
tpia_1dData depositionEnergyGrouped;
int multiplicity; /* If 0, the multiplicity is either 'energyDependent' or 'partialProduction'. */
tpia_multiplicity *multiplicityVsEnergy;
tpia_multiplicity *delayedNeutronMultiplicityVsEnergy; /* Fission delayed neutron multiplicities. */
tpia_angular angular;
tpia_Legendre Legendre;
tpia_angularEnergy angularEnergy;
tpia_decayChannel decayChannel;
};
struct tpia_channel_s {
tpia_target_heated *target;
char *outputChannel;
char *genre;
xData_attributionList attributes;
int ENDL_C, ENDF_MT;
char *QString;
char *fission;
int QIsFloat;
double Q;
tpia_data_frame crossSectionFrame;
tpia_1dData crossSectionPointwise;
tpia_1dData crossSectionGrouped;
tpia_1dData availableEnergyGrouped;
tpia_decayChannel decayChannel;
};
struct tpia_target_heated_s {
int ordinal;
char *path; /* Partial path of input file. */
char *absPath; /* Full absolute path of input file. */
tpia_particle *projectileID;
tpia_particle *targetID;
int nGroups;
xData_Int energyGridLength;
double *energyGrid;
tpia_1dData totalCrossSectionPointwise;
tpia_1dData totalCrossSectionGrouped;
xData_attributionList attributes;
char *contents;
int nChannels, nProductionChannels;
tpia_channel **channels;
tpia_channel **productionChannels;
double *kerma;
};
struct tpia_target_heated_info_s {
int ordinal;
double temperature;
char *path; /* Full path of input file. */
char *contents;
tpia_target_heated *heatedTarget;
};
struct tpia_target_s {
char *path; /* Full path of input file. */
char *absPath; /* Full absolute path of input file. */
tpia_particle *projectileID;
tpia_particle *targetID;
xData_attributionList attributes;
tpia_samplingMethods samplingMethods;
int nHeatedTargets, nReadHeatedTargets;
tpia_target_heated *baseHeatedTarget; /* The lowest temperature whose contents is "all" data, (e.g, not just "crossSection"). */
tpia_target_heated_info *heatedTargets; /* List of heated targets in order by temperature. */
tpia_target_heated_info **readHeatedTargets; /* List of "read in" heated targets in order by temperature. */
};
/*
* Routines in tpia_target.c
*/
tpia_target *tpia_target_create( statusMessageReporting *smr );
int tpia_target_initialize( statusMessageReporting *smr, tpia_target *target );
tpia_target *tpia_target_createRead( statusMessageReporting *smr, const char *fileName );
int tpia_target_readFromMap( statusMessageReporting *smr, tpia_target *target, tpia_map *map, const char *evaluation, const char *projectileName,
const char *targetName );
tpia_target *tpia_target_createReadFromMap( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectileName,
const char *targetName );
tpia_target *tpia_target_free( statusMessageReporting *smr, tpia_target *target );
int tpia_target_release( statusMessageReporting *smr, tpia_target *target );
int tpia_target_read( statusMessageReporting *smr, tpia_target *target, const char *fileName );
char *tpia_target_getAttributesValue( statusMessageReporting *smr, tpia_target *target, char const *name );
int tpia_target_getTemperatures( statusMessageReporting *smr, tpia_target *target, double *temperatures );
int tpia_target_readHeatedTarget( statusMessageReporting *smr, tpia_target *target, int index, int checkElememtsForAccess );
tpia_target_heated *tpia_target_getHeatedTargetAtIndex_ReadIfNeeded( statusMessageReporting *smr, tpia_target *target, int index );
int tpia_target_numberOfChannels( statusMessageReporting *smr, tpia_target *target );
int tpia_target_numberOfProductionChannels( statusMessageReporting *smr, tpia_target *target );
xData_Int tpia_target_getEnergyGridAtTIndex( statusMessageReporting *smr, tpia_target *target, int index, double **energyGrid );
tpia_1dData *tpia_target_getTotalCrossSectionAtTIndex( statusMessageReporting *smr, tpia_target *target, int index, int crossSectionType );
double tpia_target_getTotalCrossSectionAtTAndE( statusMessageReporting *smr, tpia_target *target, double T, xData_Int iEg, double e_in,
int crossSectionType );
double tpia_target_getIndexChannelCrossSectionAtE( statusMessageReporting *smr, tpia_target *target, int index, double T, xData_Int iEg, double e_in,
int crossSectionType );
int tpia_target_sampleIndexChannelProductsAtE( statusMessageReporting *smr, tpia_target *target, int index, double T,
tpia_decaySamplingInfo *decaySamplingInfo, int nProductData, tpia_productOutgoingData *productData );
/*
* Routines in tpia_target_heated.c
*/
tpia_target_heated *tpia_target_heated_create( statusMessageReporting *smr );
int tpia_target_heated_initialize( statusMessageReporting *smr, tpia_target_heated *target );
tpia_target_heated *tpia_target_heated_createRead( statusMessageReporting *smr, const char *fileName, int checkElememtsForAccess );
tpia_target_heated *tpia_target_heated_free( statusMessageReporting *smr, tpia_target_heated *target );
int tpia_target_heated_release( statusMessageReporting *smr, tpia_target_heated *target );
int tpia_target_heated_read( statusMessageReporting *smr, tpia_target_heated *target, const char *fileName, int checkElememtsForAccess );
int tpia_target_heated_numberOfChannels( statusMessageReporting *smr, tpia_target_heated *target );
int tpia_target_heated_numberOfProductionChannels( statusMessageReporting *smr, tpia_target_heated *target );
tpia_channel *tpia_target_heated_getChannelAtIndex( tpia_target_heated *target, int index );
tpia_channel *tpia_target_heated_getChannelAtIndex_smr( statusMessageReporting *smr, tpia_target_heated *target, int index );
tpia_channel *tpia_target_heated_getProductionChannelAtIndex( tpia_target_heated *target, int index );
xData_Int tpia_target_heated_getEnergyGrid( statusMessageReporting *smr, tpia_target_heated *target, double **energyGrid );
xData_Int tpia_target_heated_getEIndex( tpia_target_heated *target, double e_in );
double tpia_target_heated_getTotalCrossSectionAtE( statusMessageReporting *smr, tpia_target_heated *target, xData_Int gE, double e_in,
int crossSectionType );
double tpia_target_heated_getIndexChannelCrossSectionAtE( statusMessageReporting *smr, tpia_target_heated *target, int index, xData_Int iEg, double e_in,
int crossSectionType );
int tpia_target_heated_sampleIndexChannelProductsAtE( statusMessageReporting *smr, tpia_target_heated *target, int index,
tpia_decaySamplingInfo *decaySamplingInfo, int nProductData, tpia_productOutgoingData *productData );
/*
* Routines in tpia_channel.c
*/
tpia_channel *tpia_channel_create( statusMessageReporting *smr );
int tpia_channel_initialize( statusMessageReporting *smr, tpia_channel *channel );
tpia_channel *tpia_channel_createGetFromElement( statusMessageReporting *smr, tpia_target_heated *target, xData_element *channelElement,
int pointwiseRequired );
tpia_channel *tpia_channel_free( statusMessageReporting *smr, tpia_channel *channel );
int tpia_channel_release( statusMessageReporting *smr, tpia_channel *channel );
int tpia_channel_getFromElement( statusMessageReporting *smr, tpia_target_heated *target, xData_element *channelElement, tpia_channel *channel,
int pointwiseRequired );
tpia_product *tpia_channel_getFirstProduct( tpia_channel *channel );
tpia_product *tpia_channel_getProductByIndex( statusMessageReporting *smr, tpia_channel *channel, int index );
int tpia_channel_numberOfProducts( statusMessageReporting *smr, tpia_channel *channel );
int tpia_channel_isProduction( statusMessageReporting *smr, tpia_channel *channel );
double tpia_channel_getCrossSectionAtE( statusMessageReporting *smr, tpia_channel *channel, xData_Int iEg, double e_in, int crossSectionType );
/*
* Routines in tpia_particle.c
*/
tpia_particle *tpia_particle_create( statusMessageReporting *smr );
int tpia_particle_initialize( statusMessageReporting *smr, tpia_particle *particle );
tpia_particle *tpia_particle_free( statusMessageReporting *smr, tpia_particle *particle );
int tpia_particle_release( statusMessageReporting *smr, tpia_particle *particle );
int tpia_particle_freeInternalList( statusMessageReporting *smr );
tpia_particle *tpia_particle_getInternalID( statusMessageReporting *smr, const char * const name );
int tpia_particle_printInternalSortedList( statusMessageReporting *smr );
/*
* Routines in tpia_product.c
*/
tpia_product *tpia_product_create( statusMessageReporting *smr );
int tpia_product_initialize( statusMessageReporting *smr, tpia_product *product );
tpia_product *tpia_product_createGetFromElement( statusMessageReporting *smr, tpia_channel *channel, tpia_product *parentProduct,
xData_element *productElement );
tpia_product *tpia_product_free( statusMessageReporting *smr, tpia_product *product );
int tpia_product_release( statusMessageReporting *smr, tpia_product *product);
int tpia_product_getFromElement( statusMessageReporting *smr, tpia_channel *channel, tpia_product *parentProduct, xData_element *productElement,
tpia_product *product );
int tpia_product_getDecayChannelFromElement( statusMessageReporting *smr, xData_element *parentElement, tpia_channel *channel, tpia_product *parentProduct,
tpia_product **priorProductNext );
long tpia_product_dataRequired( statusMessageReporting *smr, tpia_product *product );
tpia_product *tpia_product_getFirstProduct( tpia_product *product );
tpia_product *tpia_product_getProductByIndex( statusMessageReporting *smr, tpia_product *product, int index );
int tpia_product_doesDecay( statusMessageReporting *smr, tpia_product *product );
int tpia_product_numberOfProducts( statusMessageReporting *smr, tpia_product *product );
int tpia_product_isDataPresent( statusMessageReporting *smr, tpia_product *product, int b_data );
int tpia_product_sampleMultiplicity( statusMessageReporting *smr, tpia_product *product, double e_in, double r );
/*
* Routines in tpia_decayChannel.c
*/
tpia_product *tpia_decayChannel_getFirstProduct( tpia_decayChannel *decayChannel );
tpia_product *tpia_decayChannel_getNextProduct( tpia_product *product );
int tpia_decayChannel_sampleProductsAtE( statusMessageReporting *smr, tpia_decayChannel *decayChannel, tpia_decaySamplingInfo *decaySamplingInfo,
int nProductData, tpia_productOutgoingData *productData );
/*
* Routines in tpia_kinetics.c
*/
int tpia_kinetics_2BodyReaction( statusMessageReporting *smr, tpia_decayChannel *decayChannel, double K, double mu, double phi,
tpia_productOutgoingData *outgoingData );
int tpia_kinetics_COMKineticEnergy2LabEnergyAndMomentum( statusMessageReporting *smr, double beta, double e_kinetic_com, double mu, double phi,
double m3cc, double m4cc, tpia_productOutgoingData *outgoingData );
/*
* Routines in tpia_frame.c
*/
int tpia_frame_clear( statusMessageReporting *smr, tpia_data_frame *frame );
int tpia_frame_setFromElement( statusMessageReporting *smr, xData_element *element, int dimension, tpia_data_frame *frame );
int tpia_frame_setFromString( statusMessageReporting *smr, const char *forItem, const char *value, int dimension, tpia_data_frame *frame );
int tpia_frame_getDimensions( statusMessageReporting *smr, tpia_data_frame *frame );
char *tpia_frame_toString( statusMessageReporting *smr, const char *fromItem, tpia_data_frame *frame );
int tpia_frame_setColumns( statusMessageReporting *smr, tpia_data_frame *frame, int nColumns, int *values );
int tpia_frame_setColumn( statusMessageReporting *smr, tpia_data_frame *frame, int column, int value );
int tpia_frame_getColumn( statusMessageReporting *smr, tpia_data_frame *frame, int column );
/*
* Routines in tpia_multiplicity.c
*/
tpia_multiplicity *tpia_multiplicity_create( statusMessageReporting *smr );
int tpia_multiplicity_initialize( statusMessageReporting *smr, tpia_multiplicity *multiplicity );
tpia_multiplicity *tpia_multiplicity_free( statusMessageReporting *smr, tpia_multiplicity *multiplicity );
int tpia_multiplicity_release( statusMessageReporting *smr, tpia_multiplicity *multiplicity );
tpia_multiplicity *tpia_multiplicity_createGetFromElement( statusMessageReporting *smr, xData_element *multiplicityElement, int nGroups );
int tpia_multiplicity_getFromElement( statusMessageReporting *smr, xData_element *multiplicityElement, tpia_multiplicity *multiplicity, int nGroups );
int tpia_multiplicity_getTimeScaleFromElement( statusMessageReporting *smr, xData_element *element, const char **timeScale, int *isDelayedNeutrons,
double *dTimeScale );
/*
* Routines in tpia_angular.c
*/
int tpia_angular_initialize( statusMessageReporting *smr, tpia_angular *angular );
int tpia_angular_release( statusMessageReporting *smr, tpia_angular *angular );
int tpia_angular_getFromElement( statusMessageReporting *smr, xData_element *angularElement, tpia_angular *angular );
int tpia_angular_SampleMu( statusMessageReporting *smr, tpia_angular *angular, tpia_decaySamplingInfo *decaySamplingInfo );
/*
* Routines in tpia_Legendre.c
*/
int tpia_Legendre_initialize( statusMessageReporting *smr, tpia_Legendre *Legendre );
int tpia_Legendre_release( statusMessageReporting *smr, tpia_Legendre *Legendre );
int tpia_Legendre_getFromElement( statusMessageReporting *smr, xData_element *LegendreElement, tpia_Legendre *Legendre );
int tpia_Legendre_SampleEp( statusMessageReporting *smr, tpia_Legendre *Legendre, int sampleMu, tpia_decaySamplingInfo *decaySamplingInfo );
/*
* Routines in tpia_angularEnergy.c
*/
int tpia_angularEnergy_initialize( statusMessageReporting *smr, tpia_angularEnergy *angularEnergy );
int tpia_angularEnergy_release( statusMessageReporting *smr, tpia_angularEnergy *angularEnergy );
int tpia_angularEnergy_getFromElement( statusMessageReporting *smr, xData_element *angularEnergyElement, tpia_angularEnergy *angularEnergy );
int tpia_angularEnergy_SampleEp( statusMessageReporting *smr, tpia_angularEnergy *angularEnergy, tpia_decaySamplingInfo *decaySamplingInfo );
/*
* Routines in tpia_samplingMethods.c
*/
int tpia_samplingMethods_initialize( statusMessageReporting *smr, tpia_samplingMethods *samplingMethods );
/*
* Routines in tpia_misc.c
*/
int tpia_misc_NumberOfZSymbols( void );
const char *tpia_misc_ZToSymbol( int iZ );
int tpia_misc_symbolToZ( const char *Z );
int tpia_miscNameToZAm( statusMessageReporting *smr, const char *name, int *Z, int *A, int *m );
char *tpia_misc_pointerToAttributeIfAllOk( statusMessageReporting *smr, xData_element *element, const char *path, int required,
xData_attributionList *attributes, const char *name, const char *file, int line );
double *tpia_misc_get2dx_y_data( statusMessageReporting *smr, xData_element *element, xData_Int *length );
double *tpia_misc_get2dxindex_y_data( statusMessageReporting *smr, xData_element *element, xData_Int *start, xData_Int *end, double *xValues );
double *tpia_misc_get2d_xShared_yHistogram_data( statusMessageReporting *smr, xData_element *element, xData_Int *start, xData_Int *end, xData_Int *length );
int tpia_misc_get2d_xShared_yHistogram_data_Grouped( statusMessageReporting *smr, xData_element *element, tpia_1dData *group );
double tpia_misc_getPointwiseCrossSectionAtE( statusMessageReporting *smr, tpia_1dData *crossSection, double *energyGrid, xData_Int index, double e_in );
double tpia_misc_drng( double (*rng)( void * ), void *rngState );
int tpia_misc_sampleEqualProbableBin( statusMessageReporting *smr, tpia_decaySamplingInfo *decaySamplingInfo, double e_in, int nBins,
tpia_EqualProbableBinSpectra *binned, double *value_ );
#if defined __cplusplus
}
}
#endif
#endif /* End of tpia_target_h_included. */
@@ -0,0 +1,322 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef xData_h_included
#define xData_h_included
#if defined __cplusplus
extern "C" {
#endif
#include <expat.h>
#include "statusMessageReporting.h"
#if defined __cplusplus
namespace GIDI {
#endif
typedef int xData_Int;
#ifndef XMLCALL
#define XMLCALL
#endif
#ifndef XML_Char
#define XML_Char char
#endif
#ifndef XML_Size
#define XML_Size long
#endif
//TK move follwoing reference from source
//extern char const * const xData_oned_x_ID;
//extern char const * const xData_twod_xy_ID;
//extern char const * const xData_twod_xindex_y_ID;
//extern char const * const xData_twod_xShared_yHistogram_ID;
//extern char const * const xData_matrix_ID;
char const * const xData_oned_x_ID = "1d.x";
char const * const xData_twod_xy_ID = "2d.xy";
char const * const xData_twod_xindex_y_ID = "2d.xindex_y";
char const * const xData_twod_xShared_yHistogram_ID = "2d_xShared_yHistogram";
char const * const xData_matrix_ID = "matrix";
enum xData_status { xData_statusParsing = 1, xData_statusCompleted, xData_statusError };
enum xData_errorCodes { xData_errNone, xData_errXML_ParserCreate, xData_errFileError,
xData_errXMLParser };
enum xData_itemMode { xData_itemModeEnd = 0, xData_itemModeElement, xData_itemModeText };
enum xData_xDataType { xData_xDataType_Ok, xData_xDataType_ConvertingToData, xData_xDataType_ConvertingToString };
typedef struct xData_docInfo_s xData_docInfo;
typedef struct xData_attribute_s xData_attribute;
typedef struct xData_attributionList_s xData_attributionList;
typedef struct xData_rootElement_s xData_rootElement;
typedef struct xData_element_s xData_element;
typedef struct xData_text_s xData_text;
typedef struct xDataType_s xDataType;
typedef struct xData_smr_s xData_smr;
typedef struct xData_document_s xData_document;
typedef struct xData_item_s xData_item;
typedef struct xData_2d_xindex_y_s xData_2d_xindex_y;
typedef struct xData_matrix_s xData_matrix;
typedef struct xData_matrix_rowStartEnd_s xData_matrix_rowStartEnd;
typedef struct xData_elementListItem_s xData_elementListItem;
typedef struct xData_elementList_s xData_elementList;
typedef int (*xData_sortElementFunc)( const void *, const void * );
struct xData_2d_xindex_y_s {
xData_Int index;
double value;
};
struct xData_matrix_rowStartEnd_s {
xData_Int row, start, end;
};
struct xData_matrix_s {
xData_Int rows, columns;
xData_matrix_rowStartEnd *rowStartEnds;
double *values;
};
struct xData_docInfo_s {
size_t line;
size_t column;
};
struct xData_attribute_s {
char *name;
char *value;
};
struct xData_attributionList_s {
int number;
size_t size;
xData_attribute *attributes;
};
struct xData_text_s {
xData_docInfo docInfo;
size_t allocated;
size_t length;
char *text;
};
typedef int (*xData_xDataTypeOk)( char const *name, xData_document *doc, void *userData );
typedef int (*xDT_toDataFunction)( statusMessageReporting *smr, xDataType *, xData_attributionList *, const char * );
typedef char *(*xDT_toStringFunction)( statusMessageReporting *smr, xDataType * );
typedef int (*xDT_releaseFunction)( statusMessageReporting *smr, xDataType * );
struct xData_elementListItem_s {
xData_element *element;
const char *sortString;
};
struct xData_elementList_s {
int n;
xData_elementListItem *items;
};
struct xDataType_s {
enum xData_xDataType status;
const char *typeString;
xData_element *element;
xDT_toDataFunction toData;
xDT_toStringFunction toString;
xDT_releaseFunction release;
signed char indexPresent, startPresent, endPresent, lengthPresent;
xData_Int index, start, end, length;
void *data;
};
struct xData_rootElement_s {
xData_document *xData_doc;
xData_element *parentElement;
xData_rootElement *parentRoot;
int depth;
int numberOfElements;
xData_element *children;
xData_element *currentChild;
};
struct xData_element_s {
xData_docInfo docInfo;
int ordinal; /* Counting from 0. */
int index; /* Value from "index" attribute if present or -1 */
int accessed; /* For the convenience of the users, not used internally. */
xData_rootElement *parentRoot;
xData_rootElement childrenRoot;
xData_element *next;
char *name; /* Allocated in xData_parseAddElementToRoot. */
char *fullName; /* Allocated in xData_parseAddElementToRoot. */
xData_attributionList attributes; /* attributes->abbributes is allocated in xData_parseAddElementToRoot. */
xDataType xDataTypeInfo;
size_t textOffset;
xData_text text;
};
struct xData_smr_s {
smr_userInterface smrUserInterface;
xData_document *doc;
};
struct xData_document_s {
enum xData_status status;
enum xData_errorCodes error;
enum XML_Error err;
XML_Size err_line, err_column;
char *fileName;
xData_xDataTypeOk xDataTypeOk_userFunction;
void *xDataTypeOk_userData;
xData_smr smrUserInterface;
statusMessageReporting *smr;
XML_Parser xmlParser;
xData_rootElement root;
xData_rootElement *currentRoot;
};
struct xData_item_s {
xData_element *parentElement;
xData_element *element;
enum xData_itemMode mode;
size_t textOffset;
size_t textLength;
char *text;
};
xData_document *xData_parseReadFile( statusMessageReporting *smr, const char *fileName, xData_xDataTypeOk func, void *userData );
xData_document *xData_parseString( statusMessageReporting *smr, const char *str, xData_xDataTypeOk func, void *userData );
xData_document *xData_parseMalloc( statusMessageReporting *smr, xData_xDataTypeOk func, void *userData );
int xData_parseInitialize( statusMessageReporting *smr, xData_document *xData_doc, xData_xDataTypeOk func, void *userData );
int xData_parseEndOfXML( statusMessageReporting *smr, xData_document *xData_doc );
void *xData_parseFree( statusMessageReporting *smr, xData_document *xData_doc );
int xData_parse( xData_document *xData_doc, const char *s );
int xData_parseIsError( xData_document *xData_doc );
xData_element *xData_getDocumentsElement( xData_document *xData_doc );
xData_element *xData_getFirstElement( xData_element *element );
xData_element *xData_getNextElement( xData_element *element );
enum xData_itemMode xData_getFirstItem( xData_element *element, xData_item *item );
enum xData_itemMode xData_getNextItem( xData_item *item );
char *xData_getAttributesValue( xData_attributionList *attributes, const char *name );
const char *xData_getAttributesValueInElement( xData_element *element, const char *name );
int xData_initializeAttributionList( statusMessageReporting *smr, xData_attributionList *attributes );
int xData_copyAttributionList( statusMessageReporting *smr, xData_attributionList *dest, xData_attributionList *src );
int xData_releaseAttributionList( statusMessageReporting *smr, xData_attributionList *attributes );
int xData_attributeListLength( xData_attributionList *attributes );
xData_attribute *xData_attributeByIndex( xData_attributionList *attributes, int index );
xData_element *xData_getElements_xDataElement( statusMessageReporting *smr, xData_element *element );
int xData_getCommonData( statusMessageReporting *smr, xData_element *element, xData_Int *index, xData_Int *start, xData_Int *end,
xData_Int *length );
int xData_xDataTypeConvertAttributes( statusMessageReporting *smr, xData_element *element );
xData_Int xData_convertAttributeTo_xData_Int( statusMessageReporting *smr, xData_element *element, const char *name, xData_Int *n );
int xData_convertAttributeToDouble( statusMessageReporting *smr, xData_element *element, const char *name, double *d );
int xData_numberOfElementsByTagName( statusMessageReporting *smr, xData_element *element, const char *tagName );
xData_elementList *xData_getElementsByTagName( statusMessageReporting *smr, xData_element *element, const char *tagName );
xData_elementList *xData_getElementsByTagNameAndSort( statusMessageReporting *smr, xData_element *element, const char *tagName,
const char *sortAttributeName, xData_sortElementFunc sortFunction );
xData_element *xData_getOneElementByTagName( statusMessageReporting *smr, xData_element *element, char *name, int required );
void xData_freeElementList( statusMessageReporting *smr, xData_elementList *list );
int xData_addToAccessed( statusMessageReporting *smr, xData_element *element, int increment );
int xData_getAccessed( statusMessageReporting *smr, xData_element *element );
int xData_init_1d_x( statusMessageReporting *smr, xData_element *element );
int xData_is_1d_x( statusMessageReporting *smr, xDataType *xDT, int setMsg );
int xData_isElement_1d_x( statusMessageReporting *smr, xData_element *element, int setMsg );
int xData_1d_x_copyData( statusMessageReporting *smr, xData_element *element, xData_Int nAllocatedBytes, double *d );
double *xData_1d_x_allocateCopyData( statusMessageReporting *smr, xData_element *element );
int xData_1d_x_free_copyData( statusMessageReporting *smr, void *data );
int xData_init_2d_xindex_y( statusMessageReporting *smr, xData_element *element );
int xData_is_2d_xindex_y( statusMessageReporting *smr, xDataType *xDT, int setMsg );
int xData_isElement_2d_xindex_y( statusMessageReporting *smr, xData_element *element, int setMsg );
xData_Int *xData_2d_xindex_y_rawIndices( statusMessageReporting *smr, xData_element *element );
int xData_2d_xindex_y_free_rawIndices( statusMessageReporting *smr, void *data );
double *xData_2d_xindex_y_toXYs( statusMessageReporting *smr, xData_element *element, double *Xs );
double *xData_2d_xindex_y_toFilledYs( statusMessageReporting *smr, xData_element *element, double *Xs );
int xData_2d_xindex_y_free_toFilledYs( statusMessageReporting *smr, void *data );
double *xData_2d_xindex_y_toFilledXYs( statusMessageReporting *smr, xData_element *element, double *Xs );
int xData_init_2d_xy( statusMessageReporting *smr, xData_element *element );
int xData_is_2d_xy( statusMessageReporting *smr, xDataType *xDT, int setMsg );
int xData_isElement_2d_xy( statusMessageReporting *smr, xData_element *element, int setMsg );
double *xData_2d_xy_allocateCopyData( statusMessageReporting *smr, xData_element *element, xData_Int *length );
int xData_2d_xy_free_copyData( statusMessageReporting *smr, void *data );
int xData_init_2d_xShared_yHistogram( statusMessageReporting *smr, xData_element *element );
int xData_is_2d_xShared_yHistogram( statusMessageReporting *smr, xDataType *xDT, int setMsg );
int xData_isElement_2d_xShared_yHistogram( statusMessageReporting *smr, xData_element *element, int setMsg );
double *xData_2d_xShared_yHistogram_copyData( statusMessageReporting *smr, xData_element *element, xData_Int *n );
int xData_2d_xShared_yHistogram_free_copyData( statusMessageReporting *smr, void *data );
double *xData_2d_xShared_yHistogram_toFilledXYs( xDataType *xDT, xData_Int nXs, double *Xs );
int xData_init_matrix( statusMessageReporting *smr, xData_element *element );
int xData_is_matrix( statusMessageReporting *smr, xDataType *xDT, int setMsg );
int xData_isElement_matrix( statusMessageReporting *smr, xData_element *element, int setMsg );
xData_matrix *xData_matrix_copyData( statusMessageReporting *smr, xData_element *element );
int xData_matrix_free_copyData( statusMessageReporting *smr, void *data );
int getRowStartEndAtIndex( statusMessageReporting *smr, xDataType *xDT, xData_Int index, xData_Int *row, xData_Int *start, xData_Int *end );
int xData_is_xDataType( statusMessageReporting *smr, xDataType *xDT, char const * const type, int setMsg );
char const *xData_getFileName( xData_document *doc );
int xData_setFileName( statusMessageReporting *smr, xData_document *doc, char const *fileName );
xData_document *xData_getElementsDocument( xData_element *element );
void *xData_get_smrUserInterfaceFromDocument( xData_document *doc );
void *xData_get_smrUserInterfaceFromElement( xData_element *element );
int xData_stringTo_xData_Int( statusMessageReporting *smr, void *smrUserInterface, char const *c, xData_Int *value, char const *endings, char **e );
int xData_stringTo_double( statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e );
/*
* Stuff in xDataMisc.c
*/
void *xData_malloc( statusMessageReporting *smr, size_t size, int zero, const char *forItem, const char *file, int line );
void *xData_realloc( statusMessageReporting *smr, void *pOld, size_t size, const char *forItem, const char *routine, int line );
void *xData_free( statusMessageReporting *smr, void *p );
char *xDataMisc_allocateCopyString( statusMessageReporting *smr, const char *s, const char *forItem, const char *routine, int line );
char *xDataMisc_getAbsPath( statusMessageReporting *smr, const char *fileName );
int xData_setMessageError_ReturnInt( int value, statusMessageReporting *smr, void *userData, const char *file, int line, int code, const char *fmt, ... );
#define xData_malloc2( smr, size, zero, forItem ) xData_malloc( smr, size, zero, forItem, __FILE__, __LINE__ )
#define xData_realloc2( smr, old, size, forItem ) xData_realloc( smr, old, size, forItem, __FILE__, __LINE__ )
#define xDataMisc_allocateCopyString2( smr, s, forItem ) xDataMisc_allocateCopyString( smr, s, forItem, __FILE__, __LINE__ )
#if defined __cplusplus
}
}
#endif
#endif /* End of xData_h_included. */
@@ -0,0 +1,57 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#ifndef xDataExtras_h_included
#define xDataExtras_h_included
#if defined __cplusplus
extern "C" {
#endif
#include "xData.h"
#if defined __cplusplus
namespace GIDI {
#endif
char *xData_parseReconstructXML( xData_document *xData_doc );
int xData_parseOutline( FILE *f, xData_document *xData_doc, int outputText );
#if defined __cplusplus
}
}
#endif
#endif /* End of xDataExtras_h_included. */
@@ -0,0 +1,176 @@
#------------------------------------------------------------------------------
# sources.cmake
# Module : G4had_lend
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_models.G4had_lend
#
# Sources description for a library.
# Lists the sources and headers of the code explicitely.
# Lists include paths needed.
# Lists the internal granular and global dependencies of the library.
# Source specific properties should be added at the end.
#
# Generated on : 24/9/2010
#
# $Id: sources.cmake,v 1.1 2010-11-23 13:58:03 gcosmo Exp $
#
#------------------------------------------------------------------------------
# List external includes needed.
include_directories(${CLHEP_INCLUDE_DIRS})
include_directories(${EXPAT_INCLUDE_DIRS})
# List internal includes needed.
include_directories(${CMAKE_SOURCE_DIR}/source/geometry/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/geometry/volumes/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/HEPGeometry/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/HEPRandom/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/materials/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/bosons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/barions/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/ions/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/mesons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/leptons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/cross_sections/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/de_excitation/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/de_excitation/photon_evaporation/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/de_excitation/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/low_energy/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/processes/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/track/include)
#
# Define the Geant4 Module.
#
include(Geant4MacroDefineModule)
GEANT4_DEFINE_MODULE(NAME G4had_lend
HEADERS
G4GIDI.hh
G4GIDI_Misc.hh
G4GIDI_map.hh
G4GIDI_mass.hh
G4GIDI_target.hh
G4LENDCapture.hh
G4LENDCaptureCrossSection.hh
G4LENDCrossSection.hh
G4LENDElastic.hh
G4LENDElasticCrossSection.hh
G4LENDFission.hh
G4LENDFissionCrossSection.hh
G4LENDHeader.hh
G4LENDInelastic.hh
G4LENDInelasticCrossSection.hh
G4LENDManager.hh
G4LENDModel.hh
G4LENDUsedTarget.hh
gString.h
statusMessageReporting.h
tpi_IDs.h
tpia_defs.h
tpia_depot.h
tpia_map.h
tpia_mass.h
tpia_misc.h
tpia_target.h
xData.h
xDataExtras.h
SOURCES
G4GIDI.cc
G4GIDI_Misc.cc
G4GIDI_map.cc
G4GIDI_mass.cc
G4GIDI_target.cc
G4LENDCapture.cc
G4LENDCaptureCrossSection.cc
G4LENDCrossSection.cc
G4LENDElastic.cc
G4LENDElasticCrossSection.cc
G4LENDFission.cc
G4LENDFissionCrossSection.cc
G4LENDInelastic.cc
G4LENDInelasticCrossSection.cc
G4LENDManager.cc
G4LENDModel.cc
G4LENDUsedTarget.cc
gString.cc
statusMessageReporting.cc
tpi_IDs.cc
tpia_angular.cc
tpia_angularEnergy.cc
tpia_channel.cc
tpia_decayChannel.cc
tpia_depot.cc
tpia_frame.cc
tpia_kinetics.cc
tpia_Legendre.cc
tpia_map.cc
tpia_mass.cc
tpia_misc.cc
tpia_multiplicity.cc
tpia_particle.cc
tpia_product.cc
tpia_samplingMethods.cc
tpia_target.cc
tpia_target_heated.cc
xData.cc
xDataExtras.cc
xDataMisc.cc
xData_1d_x.cc
xData_2d_xindex_y.cc
xData_2d_xshared_yhistogram.cc
xData_2d_xy.cc
xData_matrix.cc
GRANULAR_DEPENDENCIES
G4baryons
G4bosons
G4geometrymng
G4globman
G4had_mod_man
G4had_mod_util
G4hadronic_LE
G4hadronic_deex_management
G4hadronic_deex_photon_evaporation
G4hadronic_deex_util
G4hadronic_mgt
G4hadronic_proc
G4hadronic_util
G4hadronic_xsect
G4ions
G4leptons
G4materials
G4mesons
G4partman
G4procman
G4track
G4volumes
GLOBAL_DEPENDENCIES
G4geometry
G4global
G4materials
G4particles
G4track
LINK_LIBRARIES
${EXPAT_LIBRARIES}
)
# List any source specific properties here
#
# Not this again... Need to add *another* compile definition to lend sources
# for DLLs....
# We do this quick and dirty, add the definition directly. I *don't want it
# polluting compile of all other processes modules
# in global mode
#
set_source_files_properties(
${G4had_lend_SOURCES}
PROPERTIES COMPILE_DEFINITIONS G4PROCESSES_EXPORT
)
@@ -0,0 +1,404 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <iostream>
#include "G4GIDI.hh"
using namespace std;
using namespace GIDI;
/*
***************************************************************
*/
G4GIDI::G4GIDI( int ip, string &dataDirectory ) {
init( ip );
addDataDirectory( dataDirectory );
}
/*
***************************************************************
*/
G4GIDI::G4GIDI( int ip, list<string> &dataDirectoryList ) {
list<string>::iterator iter;
init( ip );
for( iter = dataDirectoryList.begin( ); iter != dataDirectoryList.end( ); ++iter ) addDataDirectory( *iter );
}
/*
***************************************************************
*/
G4GIDI::~G4GIDI( void ) {
G4GIDI_target *target;
list<G4GIDI_map *>::iterator iter;
while( targets.size( ) > 0 ) {
target = targets.back( );
targets.pop_back( );
delete target;
}
while( ( iter = dataDirectories.begin( ) ) != dataDirectories.end( ) ) {
delete *iter;
dataDirectories.pop_front( );
}
}
/*
***************************************************************
*/
int G4GIDI::init( int ip ) {
projectileID = ip;
return( 0 );
}
/*
***************************************************************
*/
int G4GIDI::numberOfDataDirectories( void ) {
return( dataDirectories.size( ) );
}
/*
***************************************************************
*/
int G4GIDI::addDataDirectory( string &dataDirectory ) {
list<G4GIDI_map *>::iterator iter;
for( iter = dataDirectories.begin( ); iter != dataDirectories.end( ); iter++ ) {
if( (*iter)->path( ) == dataDirectory ) return( 0 );
}
G4GIDI_map *map = new G4GIDI_map( dataDirectory );
dataDirectories.push_back( map );
return( 0 );
}
/*
***************************************************************
*/
int G4GIDI::removeDataDirectory( string &dataDirectory ) {
list<G4GIDI_map *>::iterator iter;
for( iter = dataDirectories.begin( ); iter != dataDirectories.end( ); iter++ ) {
if( dataDirectory == (*iter)->path( ) ) {
}
}
return( 0 );
}
/*
***************************************************************
*/
//string G4GIDI::getDataDirectoryAtIndex( int index ) {
string G4GIDI::getDataDirectoryAtIndex( int ) {
#if 0
list<G4GIDI_map *>::iterator iter;
unsigned i = (unsigned) index;
if( i < 0 ) return( "" );
if( i >= dataDirectories.size( ) ) return( "" );
for( iter = dataDirectories.begin( ); iter != dataDirectories.end( ); iter++, i-- ) {
if( i == 0 ) return( (*iter)->fileName( ) );
}
#endif
return( "" );
}
/*
***************************************************************
*/
vector<string> *G4GIDI::getDataDirectories( void ) {
int i = 0;
list<G4GIDI_map *>::iterator iter;
vector<string> *v = new vector<string>( numberOfDataDirectories( ) );
for( iter = dataDirectories.begin( ); iter != dataDirectories.end( ); iter++, i++ ) (*v)[i] = string( (*iter)->fileName( ) );
return( v );
}
/*
***************************************************************
*/
bool G4GIDI::isThisDataAvailable( string &lib_name, int iZ, int iA, int iM ) {
bool b;
char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM );
if( targetName == NULL ) return( false );
string targetSymbol( targetName );
b = isThisDataAvailable( lib_name, targetSymbol );
xData_free( NULL, targetName );
return( b );
}
/*
***************************************************************
*/
bool G4GIDI::isThisDataAvailable( string &lib_name, string &targetName ) {
char *path = dataFilename( lib_name, targetName );
if( path != NULL ) {
xData_free( NULL, path );
return( true );
}
return( false );
}
/*
***************************************************************
*/
char *G4GIDI::dataFilename( string &lib_name, int iZ, int iA, int iM ) {
char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM ), *fileName;
if( targetName == NULL ) return( NULL );
string targetSymbol( targetName );
fileName = dataFilename( lib_name, targetSymbol );
xData_free( NULL, targetName );
return( fileName );
}
/*
***************************************************************
*/
char *G4GIDI::dataFilename( string &lib_name, string &targetSymbol ) {
//char *path, *projectile = "n_1";
char *path, *projectile = (char*)"n_1";
list<G4GIDI_map *>::iterator iter;
for( iter = dataDirectories.begin( ); iter != dataDirectories.end( ); iter++ ) {
if( ( path = tpia_map_findTarget( &((*iter)->smr), (*iter)->map, lib_name.c_str( ), projectile, targetSymbol.c_str( ) ) ) != NULL ) {
return( path );
}
}
return( NULL );
}
/*
***************************************************************
*/
vector<string> *G4GIDI::getNamesOfAvailableLibraries( int iZ, int iA, int iM ) {
char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM );
vector<string> *listOfLibraries;
if( targetName == NULL ) return( new vector<string>( ) );
string targetSymbol( targetName );
listOfLibraries = getNamesOfAvailableLibraries( targetSymbol );
xData_free( NULL, targetName );
return( listOfLibraries );
}
/*
***************************************************************
*/
vector<string> *G4GIDI::getNamesOfAvailableLibraries( string &targetName ) {
//char *projectile = "n_1";
char *projectile = (char*)"n_1";
list<G4GIDI_map *>::iterator iter;
vector<string> *listOfLibraries = new vector<string>( );
tpia_map *map;
tpia_mapEntry *entry;
for( iter = dataDirectories.begin( ); iter != dataDirectories.end( ); iter++ ) {
map = tpia_map_findAllOfTarget( &((*iter)->smr), (*iter)->map, projectile, targetName.c_str( ) );
for( entry = tpia_map_getFirstEntry( map ); entry != NULL; entry = tpia_map_getNextEntry( entry ) ) {
listOfLibraries->push_back( entry->evaluation );
}
tpia_map_free( NULL, map );
}
return( listOfLibraries );
}
/*
***************************************************************
*/
vector<string> *G4GIDI::getNamesOfAvailableTargets( void ) {
vector<string> *listOfTargets;
list<G4GIDI_map *>::iterator iter_map;
listOfTargets = new vector<string>( );
if( listOfTargets == NULL ) return( NULL );
for( iter_map = dataDirectories.begin( ); iter_map != dataDirectories.end( ); iter_map++ ) {
if( tpia_map_walkTree( NULL, (*iter_map)->map, getNamesOfAvailableTargets_walker, (void *) listOfTargets ) != 0 ) {
delete listOfTargets;
return( NULL );
}
}
return( listOfTargets );
}
/*
***************************************************************
*/
G4GIDI_target *G4GIDI::readTarget( string &lib_name, int iZ, int iA, int iM, bool bind ) {
char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM );
G4GIDI_target *target;
if( targetName == NULL ) return( NULL );
string targetSymbol( targetName );
target = readTarget( lib_name, targetSymbol, bind );
xData_free( NULL, targetName );
return( target );
}
/*
***************************************************************
*/
G4GIDI_target *G4GIDI::readTarget( string &lib_name, string &targetName, bool bind ) {
vector<G4GIDI_target *>::iterator iter_targets;
for( iter_targets = targets.begin( ); iter_targets != targets.end( ); iter_targets++ ) {
if( (*iter_targets)->name == targetName ) return( NULL );
}
char *path = dataFilename( lib_name, targetName );
if( path == NULL ) return( NULL );
G4GIDI_target *target = new G4GIDI_target( path );
if( bind ) targets.push_back( target );
xData_free( NULL, path );
return( target );
}
/*
***************************************************************
*/
G4GIDI_target *G4GIDI::getAlreadyReadTarget( int iZ, int iA, int iM ) {
char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM );
G4GIDI_target *target;
if( targetName == NULL ) return( NULL );
string targetSymbol( targetName );
target = getAlreadyReadTarget( targetSymbol );
xData_free( NULL, targetName );
return( target );
}
/*
***************************************************************
*/
G4GIDI_target *G4GIDI::getAlreadyReadTarget( string &targetSymbol ) {
vector<G4GIDI_target *>::iterator iter_targets;
for( iter_targets = targets.begin( ); iter_targets != targets.end( ); iter_targets++ ) {
if( ( (*iter_targets)->name == targetSymbol ) ) return( *iter_targets );
}
return( NULL );
}
/*
***************************************************************
*/
int G4GIDI::freeTarget( G4GIDI_target *target ) {
vector<G4GIDI_target *>::iterator iter_targets;
for( iter_targets = targets.begin( ); iter_targets != targets.end( ); iter_targets++ ) {
if( *iter_targets == target ) {
targets.erase( iter_targets );
delete target;
return( 0 );
}
}
return( 1 );
}
/*
***************************************************************
*/
int G4GIDI::freeTarget( int iZ, int iA, int iM ) {
int status;
char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM );
if( targetName == NULL ) return( 1 );
string targetSymbol( targetName );
status = freeTarget( targetSymbol );
xData_free( NULL, targetName );
return( status );
}
/*
***************************************************************
*/
int G4GIDI::freeTarget( string &targetSymbol ) {
vector<G4GIDI_target *>::iterator iter_targets;
for( iter_targets = targets.begin( ); iter_targets != targets.end( ); iter_targets++ ) {
if( (*iter_targets)->name == targetSymbol ) return( freeTarget( *iter_targets ) );
}
return( 1 );
}
/*
***************************************************************
*/
vector<string> *G4GIDI::getListOfReadTargetsNames( void ) {
vector<G4GIDI_target *>::iterator iter_targets;
vector<string> *listOfTargets;
listOfTargets = new vector<string>( );
if( listOfTargets == NULL ) return( NULL );
for( iter_targets = targets.begin( ); iter_targets != targets.end( ); iter_targets++ ) {
listOfTargets->push_back( *(*iter_targets)->getName( ) );
}
return( listOfTargets );
}
@@ -0,0 +1,138 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <iostream>
#include <string>
#include <vector>
#include <xData.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#include <string.h>
#include "G4GIDI_Misc.hh"
using namespace std;
using namespace GIDI;
/*
***************************************************************
*/
char *G4GIDI_Misc_Z_A_m_ToName( int iZ, int iA, int im ) {
const char *Z = tpia_misc_ZToSymbol( iZ );
char S[128], mS[32], *name;
if( Z == NULL ) return( NULL );
if( iA == 0 ) {
if( im != 0 ) return( NULL );
sprintf( S, "%s_natural", Z ); }
else {
sprintf( S, "%s_%d", Z, iA );
if( im != 0 ) {
sprintf( mS, "_m%d", im );
strcat( S, mS );
}
}
name = (char *) xData_malloc2( NULL, strlen( S ) + 1, 0, "name" );
if( name != NULL ) strcpy( name, S );
return( name );
}
/*
***************************************************************
*/
char *G4GIDI_Misc_channelCompound( char *particle1, char *particle2 ) {
int Z1, A1, m1, Z2, A2, m2;
if( tpia_miscNameToZAm( NULL, particle1, &Z1, &A1, &m1 ) ) return( NULL );
if( tpia_miscNameToZAm( NULL, particle2, &Z2, &A2, &m2 ) ) return( NULL );
if( A1 == 0 ) A2 = 0;
if( A2 == 0 ) A1 = 0;
return( G4GIDI_Misc_Z_A_m_ToName( Z1 + Z2, A1 + A2, 0 ) );
}
/*
***************************************************************
*/
int G4GIDI_Misc_channelProductsCompare( tpia_channel *channel, int nProducts, char **productNames ) {
int i;
tpia_product *product;
if( channel->decayChannel.numberOfProducts != nProducts ) return( 0 );
for( product = tpia_channel_getFirstProduct( channel ), i = 0; product != NULL; product = tpia_decayChannel_getNextProduct( product ), i++ ) {
if( strcmp( product->productID->name, productNames[i] ) ) return( 0 );
}
return( 1 );
}
/*
***************************************************************
*/
//int getNamesOfAvailableTargets_walker( tpia_mapEntry *entry, int level, void *userData ) {
int getNamesOfAvailableTargets_walker( tpia_mapEntry *entry, int , void *userData ) {
vector<string> *listOfTargets = (vector<string> *) userData;
vector<string>::iterator iter;
if( entry->type != tpia_mapEntry_type_target ) return( 0 );
for( iter = listOfTargets->begin( ); iter != listOfTargets->end( ); iter++ ) {
if( entry->targetName == iter->c_str( ) ) return( 0 );
}
listOfTargets->push_back( entry->targetName );
return( 0 );
}
@@ -0,0 +1,100 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include "G4GIDI_map.hh"
using namespace std;
using namespace GIDI;
/*
***************************************************************
*/
G4GIDI_map::G4GIDI_map( string &dataDirectory ) {
smr_initialize( &smr );
map = tpia_map_readFile( &smr, NULL, dataDirectory.c_str( ) );
if( !smr_isOk( &smr ) ) {
smr_print( &smr, stderr, 1 );
throw 1;
}
}
/*
***************************************************************
*/
G4GIDI_map::~G4GIDI_map( void ) {
if( map != NULL ) tpia_map_free( NULL, map );
smr_release( &smr );
}
/*
***************************************************************
*/
string G4GIDI_map::fileName( void ) {
return( map->mapFileName );
}
/*
***************************************************************
*/
string G4GIDI_map::path( void ) {
return( map->path );
}
@@ -0,0 +1,932 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string>
#include <string.h>
#include <xData.h>
#include "G4GIDI_mass.hh"
#include "G4GIDI_Misc.hh"
using namespace GIDI;
struct ZAMass {
//char *symbol;
std::string symbol;
double mass;
};
static struct ZAMass ZAMasses[] = {
{ "n_1", 1.008664915740000e+00 }, { "H_natural", 1.007900000000000e+00 }, { "H_1", 1.007825032070000e+00 }, { "H_2", 2.014101777850000e+00 },
{ "H_3", 3.016049277670000e+00 }, { "H_4", 4.027806424000000e+00 }, { "H_5", 5.035311488000000e+00 }, { "H_6", 6.044942594000000e+00 },
{ "H_7", 7.052749000000000e+00 }, { "He_natural", 4.002600000000000e+00 }, { "He_3", 3.016029319140000e+00 }, { "He_4", 4.002603254150000e+00 },
{ "He_5", 5.012223624000000e+00 }, { "He_6", 6.018889124000000e+00 }, { "He_7", 7.028020618000000e+00 }, { "He_8", 8.033921897000001e+00 },
{ "He_9", 9.043950285999999e+00 }, { "He_10", 1.005239883700000e+01 }, { "Li_natural", 6.941000000000000e+00 }, { "Li_3", 3.030775000000000e+00 },
{ "Li_4", 4.027185558000000e+00 }, { "Li_5", 5.012537800000000e+00 }, { "Li_6", 6.015122794000000e+00 }, { "Li_7", 7.016004548000000e+00 },
{ "Li_8", 8.022487362000000e+00 }, { "Li_9", 9.026789505000000e+00 }, { "Li_10", 1.003548125900000e+01 }, { "Li_11", 1.104379771500000e+01 },
{ "Li_12", 1.205378000000000e+01 }, { "Be_natural", 9.012180000000001e+00 }, { "Be_5", 5.040790000000000e+00 }, { "Be_6", 6.019726317000000e+00 },
{ "Be_7", 7.016929828000000e+00 }, { "Be_8", 8.005305103000000e+00 }, { "Be_9", 9.012182201000000e+00 }, { "Be_10", 1.001353381800000e+01 },
{ "Be_11", 1.102165774900000e+01 }, { "Be_12", 1.202692073700000e+01 }, { "Be_13", 1.303569300700000e+01 }, { "Be_14", 1.404289292000000e+01 },
{ "Be_15", 1.505346000000000e+01 }, { "Be_16", 1.606192000000000e+01 }, { "B_natural", 1.081000000000000e+01 }, { "B_6", 6.046810000000000e+00 },
{ "B_7", 7.029917901000000e+00 }, { "B_8", 8.024607232999999e+00 }, { "B_9", 9.013328782000000e+00 }, { "B_10", 1.001293699200000e+01 },
{ "B_11", 1.100930540600000e+01 }, { "B_12", 1.201435210400000e+01 }, { "B_13", 1.301778021700000e+01 }, { "B_14", 1.402540400900000e+01 },
{ "B_15", 1.503110302100000e+01 }, { "B_16", 1.603980882900000e+01 }, { "B_17", 1.704698990600000e+01 }, { "B_18", 1.805617000000000e+01 },
{ "B_19", 1.906373000000000e+01 }, { "C_natural", 1.201100000000000e+01 }, { "C_8", 8.037675025000000e+00 }, { "C_9", 9.031036689000000e+00 },
{ "C_10", 1.001685322800000e+01 }, { "C_11", 1.101143361300000e+01 }, { "C_12", 1.200000000000000e+01 }, { "C_13", 1.300335483778000e+01 },
{ "C_14", 1.400324198870000e+01 }, { "C_15", 1.501059925600000e+01 }, { "C_16", 1.601470125200000e+01 }, { "C_17", 1.702258611600000e+01 },
{ "C_18", 1.802675935400000e+01 }, { "C_19", 1.903480501800000e+01 }, { "C_20", 2.004031975400000e+01 }, { "C_21", 2.104934000000000e+01 },
{ "C_23", 2.205720000000000e+01 }, { "N_natural", 1.400670000000000e+01 }, { "N_10", 1.004165367400000e+01 }, { "N_11", 1.102609095600000e+01 },
{ "N_12", 1.201861319700000e+01 }, { "N_13", 1.300573860900000e+01 }, { "N_14", 1.400307400478000e+01 }, { "N_15", 1.500010889823000e+01 },
{ "N_16", 1.600610165800000e+01 }, { "N_17", 1.700845026100000e+01 }, { "N_18", 1.801407895900000e+01 }, { "N_19", 1.901702869700000e+01 },
{ "N_20", 2.002336580700000e+01 }, { "N_21", 2.102710824000000e+01 }, { "N_22", 2.203439493400000e+01 }, { "N_23", 2.304122000000000e+01 },
{ "N_24", 2.405104000000000e+01 }, { "N_25", 2.506066000000000e+01 }, { "O_natural", 1.599940000000000e+01 }, { "O_12", 1.203440489500000e+01 },
{ "O_13", 1.302481221300000e+01 }, { "O_14", 1.400859625000000e+01 }, { "O_15", 1.500306561700000e+01 }, { "O_16", 1.599491461956000e+01 },
{ "O_17", 1.699913170300000e+01 }, { "O_18", 1.799916100100000e+01 }, { "O_19", 1.900358013000000e+01 }, { "O_20", 2.000407674200000e+01 },
{ "O_21", 2.100865588600000e+01 }, { "O_22", 2.200996694700000e+01 }, { "O_23", 2.301568765900000e+01 }, { "O_24", 2.402047291700000e+01 },
{ "O_25", 2.502946000000000e+01 }, { "O_26", 2.603834000000000e+01 }, { "O_27", 2.704826000000000e+01 }, { "O_28", 2.805781000000000e+01 },
{ "F_natural", 1.899840300000000e+01 }, { "F_14", 1.403506000000000e+01 }, { "F_15", 1.501800910300000e+01 }, { "F_16", 1.601146572400000e+01 },
{ "F_17", 1.700209523700000e+01 }, { "F_18", 1.800093795600000e+01 }, { "F_19", 1.899840322400000e+01 }, { "F_20", 1.999998131500000e+01 },
{ "F_21", 2.099994895100000e+01 }, { "F_22", 2.200299881500000e+01 }, { "F_23", 2.300357463100000e+01 }, { "F_24", 2.400811548500000e+01 },
{ "F_25", 2.501210174700000e+01 }, { "F_26", 2.601961555500000e+01 }, { "F_27", 2.702676008600000e+01 }, { "F_28", 2.803567000000000e+01 },
{ "F_29", 2.904326000000000e+01 }, { "F_30", 3.005250000000000e+01 }, { "F_31", 3.106042900000000e+01 }, { "Ne_natural", 2.017900000000000e+01 },
{ "Ne_16", 1.602576126200000e+01 }, { "Ne_17", 1.701767150400000e+01 }, { "Ne_18", 1.800570821300000e+01 }, { "Ne_19", 1.900188024800000e+01 },
{ "Ne_20", 1.999244017542000e+01 }, { "Ne_21", 2.099384668400000e+01 }, { "Ne_22", 2.199138511300000e+01 }, { "Ne_23", 2.299446690400000e+01 },
{ "Ne_24", 2.399361077900000e+01 }, { "Ne_25", 2.499773688800000e+01 }, { "Ne_26", 2.600046120600000e+01 }, { "Ne_27", 2.700758990300000e+01 },
{ "Ne_28", 2.801207157500000e+01 }, { "Ne_29", 2.901938593300000e+01 }, { "Ne_30", 3.002480104500000e+01 }, { "Ne_31", 3.103311000000000e+01 },
{ "Ne_32", 3.204002000000000e+01 }, { "Ne_33", 3.304938000000000e+01 }, { "Ne_34", 3.405702800000000e+01 }, { "Na_natural", 2.298977000000000e+01 },
{ "Na_18", 1.802596900000000e+01 }, { "Na_19", 1.901387749900000e+01 }, { "Na_20", 2.000735132800000e+01 }, { "Na_21", 2.099765520600000e+01 },
{ "Na_22", 2.199443642500000e+01 }, { "Na_23", 2.298976928087000e+01 }, { "Na_24", 2.399096278200000e+01 }, { "Na_25", 2.498995396800000e+01 },
{ "Na_26", 2.599263300000000e+01 }, { "Na_27", 2.699407678800000e+01 }, { "Na_28", 2.799893800000000e+01 }, { "Na_29", 2.900286100000000e+01 },
{ "Na_30", 3.000897600000000e+01 }, { "Na_31", 3.101358545200000e+01 }, { "Na_32", 3.202046656000000e+01 }, { "Na_33", 3.302671975600000e+01 },
{ "Na_34", 3.403517000000000e+01 }, { "Na_35", 3.504249300000000e+01 }, { "Na_36", 3.605148000000000e+01 }, { "Na_37", 3.705934000000000e+01 },
{ "Mg_natural", 2.430500000000000e+01 }, { "Mg_19", 1.903547000000000e+01 }, { "Mg_20", 2.001886254500000e+01 }, { "Mg_21", 2.101171291000000e+01 },
{ "Mg_22", 2.199957384300000e+01 }, { "Mg_23", 2.299412366900000e+01 }, { "Mg_24", 2.398504169900000e+01 }, { "Mg_25", 2.498583691700000e+01 },
{ "Mg_26", 2.598259292900000e+01 }, { "Mg_27", 2.698434058500000e+01 }, { "Mg_28", 2.798387682500000e+01 }, { "Mg_29", 2.898860000000000e+01 },
{ "Mg_30", 2.999043400000000e+01 }, { "Mg_31", 3.099654600000000e+01 }, { "Mg_32", 3.199897500000000e+01 }, { "Mg_33", 3.300525400000000e+01 },
{ "Mg_34", 3.400945642400000e+01 }, { "Mg_35", 3.501734000000000e+01 }, { "Mg_36", 3.602300000000000e+01 }, { "Mg_37", 3.703140000000000e+01 },
{ "Mg_38", 3.803757000000000e+01 }, { "Mg_39", 3.904677200000000e+01 }, { "Mg_40", 4.005393000000000e+01 }, { "Al_natural", 2.698154000000000e+01 },
{ "Al_21", 2.102804000000000e+01 }, { "Al_22", 2.201952000000000e+01 }, { "Al_23", 2.300726743200000e+01 }, { "Al_24", 2.399993886500000e+01 },
{ "Al_25", 2.499042809500000e+01 }, { "Al_26", 2.598689169200000e+01 }, { "Al_27", 2.698153862700000e+01 }, { "Al_28", 2.798191030600000e+01 },
{ "Al_29", 2.898044504600000e+01 }, { "Al_30", 2.998296025600000e+01 }, { "Al_31", 3.098394661900000e+01 }, { "Al_32", 3.198812448900000e+01 },
{ "Al_33", 3.299084333600000e+01 }, { "Al_34", 3.399685183700000e+01 }, { "Al_35", 3.499986023500000e+01 }, { "Al_36", 3.600620720400000e+01 },
{ "Al_37", 3.701067782000000e+01 }, { "Al_38", 3.801723102100000e+01 }, { "Al_39", 3.902297000000000e+01 }, { "Al_40", 4.003145000000000e+01 },
{ "Al_41", 4.103833000000000e+01 }, { "Al_42", 4.204689000000000e+01 }, { "Si_natural", 2.808550000000000e+01 }, { "Si_22", 2.203453000000000e+01 },
{ "Si_23", 2.302552000000000e+01 }, { "Si_24", 2.401154561600000e+01 }, { "Si_25", 2.500410557400000e+01 }, { "Si_26", 2.599232992100000e+01 },
{ "Si_27", 2.698670490500000e+01 }, { "Si_28", 2.797692653246000e+01 }, { "Si_29", 2.897649470000000e+01 }, { "Si_30", 2.997377017100000e+01 },
{ "Si_31", 3.097536322700000e+01 }, { "Si_32", 3.197414808200000e+01 }, { "Si_33", 3.297800022000000e+01 }, { "Si_34", 3.397857552400000e+01 },
{ "Si_35", 3.498458357500000e+01 }, { "Si_36", 3.598659947700000e+01 }, { "Si_37", 3.699293608000000e+01 }, { "Si_38", 3.799563360100000e+01 },
{ "Si_39", 3.900207001300000e+01 }, { "Si_40", 4.000586912100000e+01 }, { "Si_41", 4.101456000000000e+01 }, { "Si_42", 4.201979000000000e+01 },
{ "Si_43", 4.302866000000000e+01 }, { "Si_44", 4.403526000000000e+01 }, { "P_natural", 3.097376000000000e+01 }, { "P_24", 2.403435000000000e+01 },
{ "P_25", 2.502026000000000e+01 }, { "P_26", 2.601178000000000e+01 }, { "P_27", 2.699923023600000e+01 }, { "P_28", 2.799231476100000e+01 },
{ "P_29", 2.898180060600000e+01 }, { "P_30", 2.997831378900000e+01 }, { "P_31", 3.097376162900000e+01 }, { "P_32", 3.197390727400000e+01 },
{ "P_33", 3.297172554300000e+01 }, { "P_34", 3.397363625700000e+01 }, { "P_35", 3.497331411700000e+01 }, { "P_36", 3.597825968000000e+01 },
{ "P_37", 3.697960894600000e+01 }, { "P_38", 3.798415682700000e+01 }, { "P_39", 3.898617947500000e+01 }, { "P_40", 3.999129695100000e+01 },
{ "P_41", 4.099433543500000e+01 }, { "P_42", 4.200100791300000e+01 }, { "P_43", 4.300619000000000e+01 }, { "P_44", 4.401299000000000e+01 },
{ "P_45", 4.501922000000000e+01 }, { "P_46", 4.602738000000000e+01 }, { "S_natural", 3.206000000000000e+01 }, { "S_26", 2.602788000000000e+01 },
{ "S_27", 2.701883300000000e+01 }, { "S_28", 2.800437276300000e+01 }, { "S_29", 2.899660804900000e+01 }, { "S_30", 2.998490324900000e+01 },
{ "S_31", 3.097955472800000e+01 }, { "S_32", 3.197207099900000e+01 }, { "S_33", 3.297145875900000e+01 }, { "S_34", 3.396786690200000e+01 },
{ "S_35", 3.496903216100000e+01 }, { "S_36", 3.596708076000000e+01 }, { "S_37", 3.697112556700000e+01 }, { "S_38", 3.797116331700000e+01 },
{ "S_39", 3.897513430600000e+01 }, { "S_40", 3.997545172800000e+01 }, { "S_41", 4.097958214900000e+01 }, { "S_42", 4.198102241900000e+01 },
{ "S_43", 4.298715479000000e+01 }, { "S_44", 4.399021339000000e+01 }, { "S_45", 4.499650811200000e+01 }, { "S_46", 4.600075000000000e+01 },
{ "S_47", 4.700859000000000e+01 }, { "S_48", 4.801417000000000e+01 }, { "S_49", 4.902361900000000e+01 }, { "Cl_natural", 3.545300000000000e+01 },
{ "Cl_28", 2.802851000000000e+01 }, { "Cl_29", 2.901411000000000e+01 }, { "Cl_30", 3.000477000000000e+01 }, { "Cl_31", 3.099241308600000e+01 },
{ "Cl_32", 3.198568990100000e+01 }, { "Cl_33", 3.297745188700000e+01 }, { "Cl_34", 3.397376281900000e+01 }, { "Cl_35", 3.496885268200000e+01 },
{ "Cl_36", 3.596830698100000e+01 }, { "Cl_37", 3.696590259100000e+01 }, { "Cl_38", 3.796801042500000e+01 }, { "Cl_39", 3.896800816400000e+01 },
{ "Cl_40", 3.997041547200000e+01 }, { "Cl_41", 4.097068452500000e+01 }, { "Cl_42", 4.197325480400000e+01 }, { "Cl_43", 4.297405440300000e+01 },
{ "Cl_44", 4.397828107100000e+01 }, { "Cl_45", 4.498028688600000e+01 }, { "Cl_46", 4.598421004000000e+01 }, { "Cl_47", 4.698871000000000e+01 },
{ "Cl_48", 4.799495000000000e+01 }, { "Cl_49", 4.900032000000000e+01 }, { "Cl_50", 5.000784000000000e+01 }, { "Cl_51", 5.101449000000000e+01 },
{ "Ar_natural", 3.994800000000000e+01 }, { "Ar_30", 3.002156000000000e+01 }, { "Ar_31", 3.101212300000000e+01 }, { "Ar_32", 3.199763798400000e+01 },
{ "Ar_33", 3.298992570900000e+01 }, { "Ar_34", 3.398027124400000e+01 }, { "Ar_35", 3.497525758500000e+01 }, { "Ar_36", 3.596754510500000e+01 },
{ "Ar_37", 3.696677632000000e+01 }, { "Ar_38", 3.796273239400000e+01 }, { "Ar_39", 3.896431323100000e+01 }, { "Ar_40", 3.996238312251000e+01 },
{ "Ar_41", 4.096450061100000e+01 }, { "Ar_42", 4.196304573600000e+01 }, { "Ar_43", 4.296563605600000e+01 }, { "Ar_44", 4.396492403300000e+01 },
{ "Ar_45", 4.496803995600000e+01 }, { "Ar_46", 4.596809412900000e+01 }, { "Ar_47", 4.697218679200000e+01 }, { "Ar_48", 4.797454000000000e+01 },
{ "Ar_49", 4.898052000000000e+01 }, { "Ar_50", 4.998443000000000e+01 }, { "Ar_51", 5.099163000000000e+01 }, { "Ar_52", 5.199678000000000e+01 },
{ "Ar_53", 5.300494000000000e+01 }, { "K_natural", 3.909830000000000e+01 }, { "K_32", 3.202192000000000e+01 }, { "K_33", 3.300726000000000e+01 },
{ "K_34", 3.399841000000000e+01 }, { "K_35", 3.498800969200000e+01 }, { "K_36", 3.598129223500000e+01 }, { "K_37", 3.697337588900000e+01 },
{ "K_38", 3.796908118400000e+01 }, { "K_39", 3.896370667900000e+01 }, { "K_40", 3.996399847500000e+01 }, { "K_41", 4.096182576200000e+01 },
{ "K_42", 4.196240281000000e+01 }, { "K_43", 4.296071554000000e+01 }, { "K_44", 4.396155680400000e+01 }, { "K_45", 4.496069949300000e+01 },
{ "K_46", 4.596197686400000e+01 }, { "K_47", 4.696167847300000e+01 }, { "K_48", 4.796551353500000e+01 }, { "K_49", 4.896745092800000e+01 },
{ "K_50", 4.997278335500000e+01 }, { "K_51", 5.097638000000000e+01 }, { "K_52", 5.198261000000000e+01 }, { "K_53", 5.298712000000000e+01 },
{ "K_54", 5.399420000000000e+01 }, { "K_55", 5.499971000000000e+01 }, { "Ca_natural", 4.008000000000000e+01 }, { "Ca_34", 3.401412000000000e+01 },
{ "Ca_35", 3.500494000000000e+01 }, { "Ca_36", 3.599308706300000e+01 }, { "Ca_37", 3.698587026900000e+01 }, { "Ca_38", 3.797631845200000e+01 },
{ "Ca_39", 3.897071972500000e+01 }, { "Ca_40", 3.996259098300000e+01 }, { "Ca_41", 4.096227806200000e+01 }, { "Ca_42", 4.195861801400000e+01 },
{ "Ca_43", 4.295876662800000e+01 }, { "Ca_44", 4.395548175400000e+01 }, { "Ca_45", 4.495618656600000e+01 }, { "Ca_46", 4.595369258700000e+01 },
{ "Ca_47", 4.695454600600000e+01 }, { "Ca_48", 4.795253417700000e+01 }, { "Ca_49", 4.895567414800000e+01 }, { "Ca_50", 4.995751896200000e+01 },
{ "Ca_51", 5.096149921400000e+01 }, { "Ca_52", 5.196510000000000e+01 }, { "Ca_53", 5.297005000000000e+01 }, { "Ca_54", 5.397435000000000e+01 },
{ "Ca_55", 5.498055000000000e+01 }, { "Ca_56", 5.598557000000000e+01 }, { "Ca_57", 5.699235600000000e+01 }, { "Sc_natural", 4.495590000000000e+01 },
{ "Sc_36", 3.601492000000000e+01 }, { "Sc_37", 3.700305000000000e+01 }, { "Sc_38", 3.799470000000000e+01 }, { "Sc_39", 3.898479000200000e+01 },
{ "Sc_40", 3.997796740700000e+01 }, { "Sc_41", 4.096925112500000e+01 }, { "Sc_42", 4.196551642900000e+01 }, { "Sc_43", 4.296115065800000e+01 },
{ "Sc_44", 4.395940275200000e+01 }, { "Sc_45", 4.495591190900000e+01 }, { "Sc_46", 4.595517189000000e+01 }, { "Sc_47", 4.695240750800000e+01 },
{ "Sc_48", 4.795223146800000e+01 }, { "Sc_49", 4.895002397500000e+01 }, { "Sc_50", 4.995218768500000e+01 }, { "Sc_51", 5.095360336800000e+01 },
{ "Sc_52", 5.195667546800000e+01 }, { "Sc_53", 5.295961000000000e+01 }, { "Sc_54", 5.396326456100000e+01 }, { "Sc_55", 5.496824394900000e+01 },
{ "Sc_56", 5.597287000000000e+01 }, { "Sc_57", 5.697779000000000e+01 }, { "Sc_58", 5.798371000000000e+01 }, { "Sc_59", 5.898922000000000e+01 },
{ "Sc_60", 5.999571000000000e+01 }, { "Ti_natural", 4.790000000000000e+01 }, { "Ti_38", 3.800977000000000e+01 }, { "Ti_39", 3.900161000000000e+01 },
{ "Ti_40", 3.999049883800000e+01 }, { "Ti_41", 4.098314500000000e+01 }, { "Ti_42", 4.197303090200000e+01 }, { "Ti_43", 4.296852249900000e+01 },
{ "Ti_44", 4.395969006900000e+01 }, { "Ti_45", 4.495812561600000e+01 }, { "Ti_46", 4.595263155500000e+01 }, { "Ti_47", 4.695176308800000e+01 },
{ "Ti_48", 4.794794628100000e+01 }, { "Ti_49", 4.894786998200000e+01 }, { "Ti_50", 4.994479119400000e+01 }, { "Ti_51", 5.094661495500000e+01 },
{ "Ti_52", 5.194689731100000e+01 }, { "Ti_53", 5.294972717100000e+01 }, { "Ti_54", 5.395105240100000e+01 }, { "Ti_55", 5.495526505600000e+01 },
{ "Ti_56", 5.595819963900000e+01 }, { "Ti_57", 5.696398913700000e+01 }, { "Ti_58", 5.796697000000000e+01 }, { "Ti_59", 5.897293000000000e+01 },
{ "Ti_60", 5.997676000000000e+01 }, { "Ti_61", 6.098320000000000e+01 }, { "Ti_62", 6.198749000000000e+01 }, { "Ti_63", 6.299442000000000e+01 },
{ "V_natural", 5.094150000000000e+01 }, { "V_40", 4.001109000000000e+01 }, { "V_41", 4.099978000000000e+01 }, { "V_42", 4.199123000000000e+01 },
{ "V_43", 4.298065000000000e+01 }, { "V_44", 4.397411000000000e+01 }, { "V_45", 4.496577580800000e+01 }, { "V_46", 4.596020048100000e+01 },
{ "V_47", 4.695490894000000e+01 }, { "V_48", 4.795225370700000e+01 }, { "V_49", 4.894851610100000e+01 }, { "V_50", 4.994715848500000e+01 },
{ "V_51", 5.094395950700000e+01 }, { "V_52", 5.194477547900000e+01 }, { "V_53", 5.294433797900000e+01 }, { "V_54", 5.394643985400000e+01 },
{ "V_55", 5.494723370100000e+01 }, { "V_56", 5.595053096600000e+01 }, { "V_57", 5.695256143200000e+01 }, { "V_58", 5.795683413600000e+01 },
{ "V_59", 5.896020740700000e+01 }, { "V_60", 5.996502686200000e+01 }, { "V_61", 6.096848000000000e+01 }, { "V_62", 6.197378000000000e+01 },
{ "V_63", 6.297755000000000e+01 }, { "V_64", 6.398347000000000e+01 }, { "V_65", 6.498792000000000e+01 }, { "Cr_natural", 5.199600000000000e+01 },
{ "Cr_42", 4.200643000000000e+01 }, { "Cr_43", 4.299771000000000e+01 }, { "Cr_44", 4.398554900000000e+01 }, { "Cr_45", 4.497964000000000e+01 },
{ "Cr_46", 4.596835863500000e+01 }, { "Cr_47", 4.696290004600000e+01 }, { "Cr_48", 4.795403171600000e+01 }, { "Cr_49", 4.895133572100000e+01 },
{ "Cr_50", 4.994604420500000e+01 }, { "Cr_51", 5.094476743100000e+01 }, { "Cr_52", 5.194050747200000e+01 }, { "Cr_53", 5.294064938600000e+01 },
{ "Cr_54", 5.393888039500000e+01 }, { "Cr_55", 5.494083967200000e+01 }, { "Cr_56", 5.594065313900000e+01 }, { "Cr_57", 5.694361301300000e+01 },
{ "Cr_58", 5.794435312900000e+01 }, { "Cr_59", 5.894858636700000e+01 }, { "Cr_60", 5.995007603300000e+01 }, { "Cr_61", 6.095471720400000e+01 },
{ "Cr_62", 6.195661319000000e+01 }, { "Cr_63", 6.296186000000000e+01 }, { "Cr_64", 6.396441000000000e+01 }, { "Cr_65", 6.497016000000001e+01 },
{ "Cr_66", 6.597338000000001e+01 }, { "Cr_67", 6.697955000000000e+01 }, { "Mn_natural", 5.493800000000000e+01 }, { "Mn_44", 4.400687000000000e+01 },
{ "Mn_45", 4.499451000000000e+01 }, { "Mn_46", 4.598672000000000e+01 }, { "Mn_47", 4.697610000000000e+01 }, { "Mn_48", 4.796852000000000e+01 },
{ "Mn_49", 4.895961800500000e+01 }, { "Mn_50", 4.995423823000000e+01 }, { "Mn_51", 5.094821078700000e+01 }, { "Mn_52", 5.194556546400000e+01 },
{ "Mn_53", 5.294129011700000e+01 }, { "Mn_54", 5.394035885400000e+01 }, { "Mn_55", 5.493804514100000e+01 }, { "Mn_56", 5.593890491000000e+01 },
{ "Mn_57", 5.693828537800000e+01 }, { "Mn_58", 5.793998154900000e+01 }, { "Mn_59", 5.894044023700000e+01 }, { "Mn_60", 5.994291124600000e+01 },
{ "Mn_61", 6.094465263800000e+01 }, { "Mn_62", 6.194842822000000e+01 }, { "Mn_63", 6.295023999000000e+01 }, { "Mn_64", 6.395424909000000e+01 },
{ "Mn_65", 6.495633606500000e+01 }, { "Mn_66", 6.596108000000000e+01 }, { "Mn_67", 6.696414000000000e+01 }, { "Mn_68", 6.796930000000000e+01 },
{ "Mn_69", 6.897284000000001e+01 }, { "Fe_natural", 5.584700000000000e+01 }, { "Fe_45", 4.501457800000000e+01 }, { "Fe_46", 4.600081000000000e+01 },
{ "Fe_47", 4.699289000000000e+01 }, { "Fe_48", 4.798050400000000e+01 }, { "Fe_49", 4.897361000000000e+01 }, { "Fe_50", 4.996298898200000e+01 },
{ "Fe_51", 5.095681953800000e+01 }, { "Fe_52", 5.194811387500000e+01 }, { "Fe_53", 5.294530794200000e+01 }, { "Fe_54", 5.393961050100000e+01 },
{ "Fe_55", 5.493829335700000e+01 }, { "Fe_56", 5.593493747500000e+01 }, { "Fe_57", 5.693539396900000e+01 }, { "Fe_58", 5.793327555800000e+01 },
{ "Fe_59", 5.893487546400000e+01 }, { "Fe_60", 5.993407168300000e+01 }, { "Fe_61", 6.093674528100000e+01 }, { "Fe_62", 6.193676744200000e+01 },
{ "Fe_63", 6.294036909100000e+01 }, { "Fe_64", 6.394120126500000e+01 }, { "Fe_65", 6.494538027000000e+01 }, { "Fe_66", 6.594678063800001e+01 },
{ "Fe_67", 6.695094724400001e+01 }, { "Fe_68", 6.795370000000000e+01 }, { "Fe_69", 6.895878000000000e+01 }, { "Fe_70", 6.996146000000000e+01 },
{ "Fe_71", 7.096672000000000e+01 }, { "Fe_72", 7.196962000000001e+01 }, { "Co_natural", 5.893320000000000e+01 }, { "Co_47", 4.701149000000000e+01 },
{ "Co_48", 4.800176000000000e+01 }, { "Co_49", 4.898972000000000e+01 }, { "Co_50", 4.998154000000000e+01 }, { "Co_51", 5.097072000000000e+01 },
{ "Co_52", 5.196359000000000e+01 }, { "Co_53", 5.295421889600000e+01 }, { "Co_54", 5.394845963500000e+01 }, { "Co_55", 5.494199902900000e+01 },
{ "Co_56", 5.593983927800000e+01 }, { "Co_57", 5.693629137300000e+01 }, { "Co_58", 5.793575281400000e+01 }, { "Co_59", 5.893319504800000e+01 },
{ "Co_60", 5.993381705900000e+01 }, { "Co_61", 6.093247576300000e+01 }, { "Co_62", 6.193405056300000e+01 }, { "Co_63", 6.293361161100000e+01 },
{ "Co_64", 6.393580990800000e+01 }, { "Co_65", 6.493647846000000e+01 }, { "Co_66", 6.593976200400000e+01 }, { "Co_67", 6.694088952900000e+01 },
{ "Co_68", 6.794487305800000e+01 }, { "Co_69", 6.894632000000000e+01 }, { "Co_70", 6.995099999999999e+01 }, { "Co_71", 7.095290000000000e+01 },
{ "Co_72", 7.195780999999999e+01 }, { "Co_73", 7.296024000000000e+01 }, { "Co_74", 7.396538000000000e+01 }, { "Co_75", 7.496832999999999e+01 },
{ "Ni_natural", 5.870000000000000e+01 }, { "Ni_48", 4.801975000000000e+01 }, { "Ni_49", 4.900966000000000e+01 }, { "Ni_50", 4.999593000000000e+01 },
{ "Ni_51", 5.098772000000000e+01 }, { "Ni_52", 5.197568000000000e+01 }, { "Ni_53", 5.296847000000000e+01 }, { "Ni_54", 5.395790549500000e+01 },
{ "Ni_55", 5.495133025100000e+01 }, { "Ni_56", 5.594213202200000e+01 }, { "Ni_57", 5.693979352600000e+01 }, { "Ni_58", 5.793534290700000e+01 },
{ "Ni_59", 5.893434670500000e+01 }, { "Ni_60", 5.993078637200000e+01 }, { "Ni_61", 6.093105603300000e+01 }, { "Ni_62", 6.192834511500000e+01 },
{ "Ni_63", 6.292966937400000e+01 }, { "Ni_64", 6.392796595900000e+01 }, { "Ni_65", 6.493008430400000e+01 }, { "Ni_66", 6.592913933400000e+01 },
{ "Ni_67", 6.693156941399999e+01 }, { "Ni_68", 6.793186878900001e+01 }, { "Ni_69", 6.893561026899999e+01 }, { "Ni_70", 6.993650000000000e+01 },
{ "Ni_71", 7.094073628300001e+01 }, { "Ni_72", 7.194209268199999e+01 }, { "Ni_73", 7.294647000000001e+01 }, { "Ni_74", 7.394807000000000e+01 },
{ "Ni_75", 7.495287000000000e+01 }, { "Ni_76", 7.595533000000000e+01 }, { "Ni_77", 7.696055000000000e+01 }, { "Ni_78", 7.796317999999999e+01 },
{ "Cu_natural", 6.354600000000000e+01 }, { "Cu_52", 5.199718000000000e+01 }, { "Cu_53", 5.298555000000000e+01 }, { "Cu_54", 5.397671000000000e+01 },
{ "Cu_55", 5.496605000000000e+01 }, { "Cu_56", 5.595856000000000e+01 }, { "Cu_57", 5.694921107800000e+01 }, { "Cu_58", 5.794453849900000e+01 },
{ "Cu_59", 5.893949802800000e+01 }, { "Cu_60", 5.993736503000000e+01 }, { "Cu_61", 6.093345782100000e+01 }, { "Cu_62", 6.193258374500000e+01 },
{ "Cu_63", 6.292959747400000e+01 }, { "Cu_64", 6.392976418300000e+01 }, { "Cu_65", 6.492778948500001e+01 }, { "Cu_66", 6.592886881299999e+01 },
{ "Cu_67", 6.692773031400000e+01 }, { "Cu_68", 6.792961088900000e+01 }, { "Cu_69", 6.892942926900000e+01 }, { "Cu_70", 6.993239234300000e+01 },
{ "Cu_71", 7.093267683300000e+01 }, { "Cu_72", 7.193582030700000e+01 }, { "Cu_73", 7.293667528200000e+01 }, { "Cu_74", 7.393987486200000e+01 },
{ "Cu_75", 7.494190000000000e+01 }, { "Cu_76", 7.594527502600000e+01 }, { "Cu_77", 7.694785000000000e+01 }, { "Cu_78", 7.795196000000000e+01 },
{ "Cu_79", 7.895456000000000e+01 }, { "Cu_80", 7.996087000000000e+01 }, { "Zn_natural", 6.538000000000000e+01 }, { "Zn_54", 5.399295000000000e+01 },
{ "Zn_55", 5.498398000000000e+01 }, { "Zn_56", 5.597238000000000e+01 }, { "Zn_57", 5.696478800000000e+01 }, { "Zn_58", 5.795459155500000e+01 },
{ "Zn_59", 5.894926376400000e+01 }, { "Zn_60", 5.994182703500000e+01 }, { "Zn_61", 6.093951063500000e+01 }, { "Zn_62", 6.193432976400000e+01 },
{ "Zn_63", 6.293321156600000e+01 }, { "Zn_64", 6.392914222200000e+01 }, { "Zn_65", 6.492924098400000e+01 }, { "Zn_66", 6.592603341900001e+01 },
{ "Zn_67", 6.692712734500000e+01 }, { "Zn_68", 6.792484415400000e+01 }, { "Zn_69", 6.892655028100000e+01 }, { "Zn_70", 6.992531927400000e+01 },
{ "Zn_71", 7.092772159899999e+01 }, { "Zn_72", 7.192685795100000e+01 }, { "Zn_73", 7.292977910400000e+01 }, { "Zn_74", 7.392945860899999e+01 },
{ "Zn_75", 7.493293674100001e+01 }, { "Zn_76", 7.593329357000000e+01 }, { "Zn_77", 7.693695896700000e+01 }, { "Zn_78", 7.793844021600000e+01 },
{ "Zn_79", 7.894265200000000e+01 }, { "Zn_80", 7.994434234800001e+01 }, { "Zn_81", 8.095048000000000e+01 }, { "Zn_82", 8.195442000000000e+01 },
{ "Zn_83", 8.296102999999999e+01 }, { "Ga_natural", 6.972000000000000e+01 }, { "Ga_56", 5.599491000000000e+01 }, { "Ga_57", 5.698293000000000e+01 },
{ "Ga_58", 5.797425000000000e+01 }, { "Ga_59", 5.896337000000000e+01 }, { "Ga_60", 5.995706000000000e+01 }, { "Ga_61", 6.094944628700000e+01 },
{ "Ga_62", 6.194417523800000e+01 }, { "Ga_63", 6.293929419600000e+01 }, { "Ga_64", 6.393683874700000e+01 }, { "Ga_65", 6.493273475399999e+01 },
{ "Ga_66", 6.593158901000000e+01 }, { "Ga_67", 6.692820170300000e+01 }, { "Ga_68", 6.792798008400000e+01 }, { "Ga_69", 6.892557358700000e+01 },
{ "Ga_70", 6.992602197200000e+01 }, { "Ga_71", 7.092470134900000e+01 }, { "Ga_72", 7.192636626800000e+01 }, { "Ga_73", 7.292517468200001e+01 },
{ "Ga_74", 7.392694576200000e+01 }, { "Ga_75", 7.492650024600000e+01 }, { "Ga_76", 7.592882762600000e+01 }, { "Ga_77", 7.692915429999999e+01 },
{ "Ga_78", 7.793160818000000e+01 }, { "Ga_79", 7.893289326000000e+01 }, { "Ga_80", 7.993651578100000e+01 }, { "Ga_81", 8.093775235500000e+01 },
{ "Ga_82", 8.194298999999999e+01 }, { "Ga_83", 8.294698000000000e+01 }, { "Ga_84", 8.395265000000001e+01 }, { "Ga_85", 8.495699999999999e+01 },
{ "Ga_86", 8.596312000000000e+01 }, { "Ge_natural", 7.259000000000000e+01 }, { "Ge_58", 5.799101000000000e+01 }, { "Ge_59", 5.898175000000000e+01 },
{ "Ge_60", 5.997019000000000e+01 }, { "Ge_61", 6.096379000000000e+01 }, { "Ge_62", 6.195465000000000e+01 }, { "Ge_63", 6.294964000000000e+01 },
{ "Ge_64", 6.394165300000000e+01 }, { "Ge_65", 6.493943640600000e+01 }, { "Ge_66", 6.593384345299999e+01 }, { "Ge_67", 6.693273407000000e+01 },
{ "Ge_68", 6.792809423999999e+01 }, { "Ge_69", 6.892796453299999e+01 }, { "Ge_70", 6.992424738100000e+01 }, { "Ge_71", 7.092495095400000e+01 },
{ "Ge_72", 7.192207581500000e+01 }, { "Ge_73", 7.292345894499999e+01 }, { "Ge_74", 7.392117776700000e+01 }, { "Ge_75", 7.492285894800000e+01 },
{ "Ge_76", 7.592140255699999e+01 }, { "Ge_77", 7.692354859100000e+01 }, { "Ge_78", 7.792285273900001e+01 }, { "Ge_79", 7.892540099500000e+01 },
{ "Ge_80", 7.992537239200000e+01 }, { "Ge_81", 8.092882046699999e+01 }, { "Ge_82", 8.192954972500000e+01 }, { "Ge_83", 8.293462000000000e+01 },
{ "Ge_84", 8.393747000000000e+01 }, { "Ge_85", 8.494302999999999e+01 }, { "Ge_86", 8.594649000000000e+01 }, { "Ge_87", 8.695251000000000e+01 },
{ "Ge_88", 8.795690999999999e+01 }, { "Ge_89", 8.896383000000000e+01 }, { "As_natural", 7.492160000000000e+01 }, { "As_60", 5.999313000000000e+01 },
{ "As_61", 6.098062000000000e+01 }, { "As_62", 6.197320000000000e+01 }, { "As_63", 6.296369000000000e+01 }, { "As_64", 6.395757200000000e+01 },
{ "As_65", 6.494956400000000e+01 }, { "As_66", 6.594471000000000e+01 }, { "As_67", 6.693918607099999e+01 }, { "As_68", 6.793676906899999e+01 },
{ "As_69", 6.893227367500000e+01 }, { "As_70", 6.993092482599999e+01 }, { "As_71", 7.092711242800000e+01 }, { "As_72", 7.192675228300000e+01 },
{ "As_73", 7.292382484399999e+01 }, { "As_74", 7.392392869200000e+01 }, { "As_75", 7.492159647800000e+01 }, { "As_76", 7.592239402100000e+01 },
{ "As_77", 7.692064728600000e+01 }, { "As_78", 7.792182728100001e+01 }, { "As_79", 7.892094793400000e+01 }, { "As_80", 7.992253381600000e+01 },
{ "As_81", 8.092213228700000e+01 }, { "As_82", 8.192450406700000e+01 }, { "As_83", 8.292498002400001e+01 }, { "As_84", 8.392905800000000e+01 },
{ "As_85", 8.493201999999999e+01 }, { "As_86", 8.593650000000000e+01 }, { "As_87", 8.693989999999999e+01 }, { "As_88", 8.794494000000000e+01 },
{ "As_89", 8.894938999999999e+01 }, { "As_90", 8.995550000000000e+01 }, { "As_91", 9.096043000000000e+01 }, { "As_92", 9.196680000000001e+01 },
{ "Se_natural", 7.895999999999999e+01 }, { "Se_65", 6.496465999999999e+01 }, { "Se_66", 6.595520999999999e+01 }, { "Se_67", 6.695009000000000e+01 },
{ "Se_68", 6.794179800000001e+01 }, { "Se_69", 6.893955781699999e+01 }, { "Se_70", 6.993339064400000e+01 }, { "Se_71", 7.093224182199999e+01 },
{ "Se_72", 7.192711235199999e+01 }, { "Se_73", 7.292676534500001e+01 }, { "Se_74", 7.392247643600000e+01 }, { "Se_75", 7.492252336800000e+01 },
{ "Se_76", 7.591921359700000e+01 }, { "Se_77", 7.691991403800000e+01 }, { "Se_78", 7.791730909000000e+01 }, { "Se_79", 7.891849909800000e+01 },
{ "Se_80", 7.991652127099999e+01 }, { "Se_81", 8.091799247400000e+01 }, { "Se_82", 8.191669940100000e+01 }, { "Se_83", 8.291911847300000e+01 },
{ "Se_84", 8.391846235400000e+01 }, { "Se_85", 8.492224505300000e+01 }, { "Se_86", 8.592427157900001e+01 }, { "Se_87", 8.692852135800000e+01 },
{ "Se_88", 8.793142399800000e+01 }, { "Se_89", 8.893644999999999e+01 }, { "Se_90", 8.993996000000000e+01 }, { "Se_91", 9.094596000000000e+01 },
{ "Se_92", 9.194992000000001e+01 }, { "Se_93", 9.295629000000000e+01 }, { "Se_94", 9.396048999999999e+01 }, { "Br_natural", 7.990400000000000e+01 },
{ "Br_67", 6.696478999999999e+01 }, { "Br_68", 6.795851600000000e+01 }, { "Br_69", 6.895010600000001e+01 }, { "Br_70", 6.994479200000001e+01 },
{ "Br_71", 7.093874000000000e+01 }, { "Br_72", 7.193664457200001e+01 }, { "Br_73", 7.293169152400000e+01 }, { "Br_74", 7.392989103399999e+01 },
{ "Br_75", 7.492577620700000e+01 }, { "Br_76", 7.592454146900000e+01 }, { "Br_77", 7.692137908200000e+01 }, { "Br_78", 7.792114570600000e+01 },
{ "Br_79", 7.891833708700000e+01 }, { "Br_80", 7.991852929600000e+01 }, { "Br_81", 8.091629056300000e+01 }, { "Br_82", 8.191680411900001e+01 },
{ "Br_83", 8.291518042100000e+01 }, { "Br_84", 8.391647897400000e+01 }, { "Br_85", 8.491560840299999e+01 }, { "Br_86", 8.591879757700001e+01 },
{ "Br_87", 8.692071132400000e+01 }, { "Br_88", 8.792406592600000e+01 }, { "Br_89", 8.892638533400000e+01 }, { "Br_90", 8.993062773699999e+01 },
{ "Br_91", 9.093396809500000e+01 }, { "Br_92", 9.193925871400000e+01 }, { "Br_93", 9.294305000000000e+01 }, { "Br_94", 9.394868000000000e+01 },
{ "Br_95", 9.495287000000000e+01 }, { "Br_96", 9.595853000000000e+01 }, { "Br_97", 9.696280000000000e+01 }, { "Kr_natural", 8.380000000000000e+01 },
{ "Kr_69", 6.896518000000000e+01 }, { "Kr_70", 6.995525900000000e+01 }, { "Kr_71", 7.094962573799999e+01 }, { "Kr_72", 7.194209203800000e+01 },
{ "Kr_73", 7.293928919500000e+01 }, { "Kr_74", 7.393308436900000e+01 }, { "Kr_75", 7.493094574600001e+01 }, { "Kr_76", 7.592591007800000e+01 },
{ "Kr_77", 7.692467000000001e+01 }, { "Kr_78", 7.792036478300000e+01 }, { "Kr_79", 7.892008243100000e+01 }, { "Kr_80", 7.991637896500001e+01 },
{ "Kr_81", 8.091659201500001e+01 }, { "Kr_82", 8.191348360000001e+01 }, { "Kr_83", 8.291413609900000e+01 }, { "Kr_84", 8.391150668700000e+01 },
{ "Kr_85", 8.491252733100001e+01 }, { "Kr_86", 8.591061072900000e+01 }, { "Kr_87", 8.691335486200001e+01 }, { "Kr_88", 8.791444696900000e+01 },
{ "Kr_89", 8.891763058100000e+01 }, { "Kr_90", 8.991951655500000e+01 }, { "Kr_91", 9.092344521500000e+01 }, { "Kr_92", 9.192615621000000e+01 },
{ "Kr_93", 9.293127435700001e+01 }, { "Kr_94", 9.393436000000000e+01 }, { "Kr_95", 9.493984000000000e+01 }, { "Kr_96", 9.594307000000001e+01 },
{ "Kr_97", 9.694856000000000e+01 }, { "Kr_98", 9.795191000000000e+01 }, { "Kr_99", 9.895760000000000e+01 }, { "Kr_100", 9.996114000000000e+01 },
{ "Rb_natural", 8.546780000000000e+01 }, { "Rb_71", 7.096532000000001e+01 }, { "Rb_72", 7.195908000000000e+01 }, { "Rb_73", 7.295056099999999e+01 },
{ "Rb_74", 7.394426475100001e+01 }, { "Rb_75", 7.493857000000000e+01 }, { "Rb_76", 7.593507222600000e+01 }, { "Rb_77", 7.693040800000000e+01 },
{ "Rb_78", 7.792814100000000e+01 }, { "Rb_79", 7.892398946000000e+01 }, { "Rb_80", 7.992251924999999e+01 }, { "Rb_81", 8.091899591300000e+01 },
{ "Rb_82", 8.191820859800001e+01 }, { "Rb_83", 8.291510970100001e+01 }, { "Rb_84", 8.391438482100000e+01 }, { "Rb_85", 8.491178973700001e+01 },
{ "Rb_86", 8.591116741899999e+01 }, { "Rb_87", 8.690918052600000e+01 }, { "Rb_88", 8.791131558799999e+01 }, { "Rb_89", 8.891227801600000e+01 },
{ "Rb_90", 8.991480169400000e+01 }, { "Rb_91", 9.091653695799999e+01 }, { "Rb_92", 9.191972890000000e+01 }, { "Rb_93", 9.292204187599999e+01 },
{ "Rb_94", 9.392640494600001e+01 }, { "Rb_95", 9.492930288900000e+01 }, { "Rb_96", 9.593427263700001e+01 }, { "Rb_97", 9.693735191600000e+01 },
{ "Rb_98", 9.794179066800000e+01 }, { "Rb_99", 9.894537928299999e+01 }, { "Rb_100", 9.994987000000000e+01 }, { "Rb_101", 1.009531964450000e+02 },
{ "Rb_102", 1.019588700000000e+02 }, { "Sr_natural", 8.762000000000000e+01 }, { "Sr_73", 7.296597000000000e+01 }, { "Sr_74", 7.395631000000000e+01 },
{ "Sr_75", 7.494994956799999e+01 }, { "Sr_76", 7.594176678200000e+01 }, { "Sr_77", 7.693794478200000e+01 }, { "Sr_78", 7.793218000000000e+01 },
{ "Sr_79", 7.892970800000001e+01 }, { "Sr_80", 7.992452101300000e+01 }, { "Sr_81", 8.092321184600000e+01 }, { "Sr_82", 8.191840163900000e+01 },
{ "Sr_83", 8.291755670100000e+01 }, { "Sr_84", 8.391342527499999e+01 }, { "Sr_85", 8.491293280300000e+01 }, { "Sr_86", 8.590926020400001e+01 },
{ "Sr_87", 8.690887712400000e+01 }, { "Sr_88", 8.790561212400000e+01 }, { "Sr_89", 8.890745067500001e+01 }, { "Sr_90", 8.990773788800000e+01 },
{ "Sr_91", 9.091020309500000e+01 }, { "Sr_92", 9.191103785800000e+01 }, { "Sr_93", 9.291402563400000e+01 }, { "Sr_94", 9.391536131200000e+01 },
{ "Sr_95", 9.491935876600000e+01 }, { "Sr_96", 9.592169680200000e+01 }, { "Sr_97", 9.692615292300000e+01 }, { "Sr_98", 9.792845293400001e+01 },
{ "Sr_99", 9.893324092600000e+01 }, { "Sr_100", 9.993535191100000e+01 }, { "Sr_101", 1.009405178880000e+02 }, { "Sr_102", 1.019430189870000e+02 },
{ "Sr_103", 1.029489500000000e+02 }, { "Sr_104", 1.039523300000000e+02 }, { "Sr_105", 1.049585800000000e+02 }, { "Y_natural", 8.890590000000000e+01 },
{ "Y_76", 7.595845000000000e+01 }, { "Y_77", 7.694964500000000e+01 }, { "Y_78", 7.794361000000001e+01 }, { "Y_79", 7.893735163400000e+01 },
{ "Y_80", 7.993428000000000e+01 }, { "Y_81", 8.092912746800000e+01 }, { "Y_82", 8.192679245100000e+01 }, { "Y_83", 8.292235424300000e+01 },
{ "Y_84", 8.392038826400000e+01 }, { "Y_85", 8.491643303900000e+01 }, { "Y_86", 8.591488557600000e+01 }, { "Y_87", 8.691087573000000e+01 },
{ "Y_88", 8.790950114600000e+01 }, { "Y_89", 8.890584829500000e+01 }, { "Y_90", 8.990715188599999e+01 }, { "Y_91", 9.090730479100000e+01 },
{ "Y_92", 9.190894914300000e+01 }, { "Y_93", 9.290958271300001e+01 }, { "Y_94", 9.391159524500000e+01 }, { "Y_95", 9.491282062099999e+01 },
{ "Y_96", 9.591589134300000e+01 }, { "Y_97", 9.691813399500001e+01 }, { "Y_98", 9.792220302000000e+01 }, { "Y_99", 9.892463620400000e+01 },
{ "Y_100", 9.992775658600000e+01 }, { "Y_101", 1.009303138500000e+02 }, { "Y_102", 1.019335556950000e+02 }, { "Y_103", 1.029367300000000e+02 },
{ "Y_104", 1.039410500000000e+02 }, { "Y_105", 1.049448700000000e+02 }, { "Y_106", 1.059497900000000e+02 }, { "Y_107", 1.069541400000000e+02 },
{ "Y_108", 1.079594800000000e+02 }, { "Zr_natural", 9.122000000000000e+01 }, { "Zr_78", 7.795523000000000e+01 }, { "Zr_79", 7.894916000000001e+01 },
{ "Zr_80", 7.994040000000000e+01 }, { "Zr_81", 8.093721002600000e+01 }, { "Zr_82", 8.193108700000001e+01 }, { "Zr_83", 8.292865380100000e+01 },
{ "Zr_84", 8.392325000000000e+01 }, { "Zr_85", 8.492147118200000e+01 }, { "Zr_86", 8.591647359100000e+01 }, { "Zr_87", 8.691481625199999e+01 },
{ "Zr_88", 8.791022690400000e+01 }, { "Zr_89", 8.890888950000000e+01 }, { "Zr_90", 8.990470441600000e+01 }, { "Zr_91", 9.090564576700000e+01 },
{ "Zr_92", 9.190504084700000e+01 }, { "Zr_93", 9.290647600600001e+01 }, { "Zr_94", 9.390631519199999e+01 }, { "Zr_95", 9.490804260000000e+01 },
{ "Zr_96", 9.590827338600000e+01 }, { "Zr_97", 9.691095310900000e+01 }, { "Zr_98", 9.791273489200000e+01 }, { "Zr_99", 9.891651210600000e+01 },
{ "Zr_100", 9.991776188900000e+01 }, { "Zr_101", 1.009211404150000e+02 }, { "Zr_102", 1.019229812850000e+02 }, { "Zr_103", 1.029265996060000e+02 },
{ "Zr_104", 1.039287800000000e+02 }, { "Zr_105", 1.049330500000000e+02 }, { "Zr_106", 1.059359100000000e+02 }, { "Zr_107", 1.069407500000000e+02 },
{ "Zr_108", 1.079439600000000e+02 }, { "Zr_109", 1.089492400000000e+02 }, { "Zr_110", 1.099528700000000e+02 }, { "Nb_natural", 9.290640000000000e+01 },
{ "Nb_81", 8.094902999999999e+01 }, { "Nb_82", 8.194313000000000e+01 }, { "Nb_83", 8.293670538200000e+01 }, { "Nb_84", 8.393357000000000e+01 },
{ "Nb_85", 8.492791244700000e+01 }, { "Nb_86", 8.592503832600001e+01 }, { "Nb_87", 8.692036110799999e+01 }, { "Nb_88", 8.791833216300000e+01 },
{ "Nb_89", 8.891341824500000e+01 }, { "Nb_90", 8.991126484500001e+01 }, { "Nb_91", 9.090699624299999e+01 }, { "Nb_92", 9.190719388799999e+01 },
{ "Nb_93", 9.290637805800000e+01 }, { "Nb_94", 9.390728388799999e+01 }, { "Nb_95", 9.490683579200000e+01 }, { "Nb_96", 9.590810064700000e+01 },
{ "Nb_97", 9.690809855600000e+01 }, { "Nb_98", 9.791032841200000e+01 }, { "Nb_99", 9.891161837500000e+01 }, { "Nb_100", 9.991418161900000e+01 },
{ "Nb_101", 1.009152520250000e+02 }, { "Nb_102", 1.019180376140000e+02 }, { "Nb_103", 1.029191438420000e+02 }, { "Nb_104", 1.039224647010000e+02 },
{ "Nb_105", 1.049239365450000e+02 }, { "Nb_106", 1.059279700000000e+02 }, { "Nb_107", 1.069303100000000e+02 }, { "Nb_108", 1.079348400000000e+02 },
{ "Nb_109", 1.089376300000000e+02 }, { "Nb_110", 1.099424400000000e+02 }, { "Nb_111", 1.109456500000000e+02 }, { "Nb_112", 1.119508300000000e+02 },
{ "Nb_113", 1.129547000000000e+02 }, { "Mo_natural", 9.594000000000000e+01 }, { "Mo_83", 8.294874000000000e+01 }, { "Mo_84", 8.394009000000000e+01 },
{ "Mo_85", 8.493655000000000e+01 }, { "Mo_86", 8.593069590400000e+01 }, { "Mo_87", 8.692732650200000e+01 }, { "Mo_88", 8.792195324100000e+01 },
{ "Mo_89", 8.891948000900000e+01 }, { "Mo_90", 8.991393689600000e+01 }, { "Mo_91", 9.091175019400001e+01 }, { "Mo_92", 9.190681099100000e+01 },
{ "Mo_93", 9.290681261000000e+01 }, { "Mo_94", 9.390508826900000e+01 }, { "Mo_95", 9.490584212900001e+01 }, { "Mo_96", 9.590467947700000e+01 },
{ "Mo_97", 9.690602146499999e+01 }, { "Mo_98", 9.790540816900000e+01 }, { "Mo_99", 9.890771187000000e+01 }, { "Mo_100", 9.990747733600000e+01 },
{ "Mo_101", 1.009103470010000e+02 }, { "Mo_102", 1.019102973600000e+02 }, { "Mo_103", 1.029132071420000e+02 }, { "Mo_104", 1.039137636250000e+02 },
{ "Mo_105", 1.049169746100000e+02 }, { "Mo_106", 1.059181368020000e+02 }, { "Mo_107", 1.069216926040000e+02 }, { "Mo_108", 1.079234530000000e+02 },
{ "Mo_109", 1.089278100000000e+02 }, { "Mo_110", 1.099297300000000e+02 }, { "Mo_111", 1.109344100000000e+02 }, { "Mo_112", 1.119368400000000e+02 },
{ "Mo_113", 1.129418800000000e+02 }, { "Mo_114", 1.139449200000000e+02 }, { "Mo_115", 1.149502900000000e+02 }, { "Tc_natural", 9.800000000000000e+01 },
{ "Tc_85", 8.494883000000000e+01 }, { "Tc_86", 8.594288000000000e+01 }, { "Tc_87", 8.693653000000000e+01 }, { "Tc_88", 8.793267800000000e+01 },
{ "Tc_89", 8.892716700000000e+01 }, { "Tc_90", 8.992355656399999e+01 }, { "Tc_91", 9.091842763900000e+01 }, { "Tc_92", 9.191526016600000e+01 },
{ "Tc_93", 9.291024898400001e+01 }, { "Tc_94", 9.390965700200000e+01 }, { "Tc_95", 9.490765708399999e+01 }, { "Tc_96", 9.590787138300000e+01 },
{ "Tc_97", 9.690636535800000e+01 }, { "Tc_98", 9.790721596600000e+01 }, { "Tc_99", 9.890625474700001e+01 }, { "Tc_100", 9.990765777999999e+01 },
{ "Tc_101", 1.009073146590000e+02 }, { "Tc_102", 1.019092150190000e+02 }, { "Tc_103", 1.029091813510000e+02 }, { "Tc_104", 1.039114474540000e+02 },
{ "Tc_105", 1.049116605660000e+02 }, { "Tc_106", 1.059143579270000e+02 }, { "Tc_107", 1.069150795720000e+02 }, { "Tc_108", 1.079184612260000e+02 },
{ "Tc_109", 1.089199826650000e+02 }, { "Tc_110", 1.099238204830000e+02 }, { "Tc_111", 1.109256928300000e+02 }, { "Tc_112", 1.119291464930000e+02 },
{ "Tc_113", 1.129315900000000e+02 }, { "Tc_114", 1.139358800000000e+02 }, { "Tc_115", 1.149386900000000e+02 }, { "Tc_116", 1.159433700000000e+02 },
{ "Tc_117", 1.169464800000000e+02 }, { "Tc_118", 1.179514800000000e+02 }, { "Ru_natural", 1.010700000000000e+02 }, { "Ru_87", 8.694918000000000e+01 },
{ "Ru_88", 8.794025999999999e+01 }, { "Ru_89", 8.893611000000000e+01 }, { "Ru_90", 8.992989000000000e+01 }, { "Ru_91", 9.092629200000000e+01 },
{ "Ru_92", 9.192012000000000e+01 }, { "Ru_93", 9.291705203399999e+01 }, { "Ru_94", 9.391135971100000e+01 }, { "Ru_95", 9.491041292900000e+01 },
{ "Ru_96", 9.590759783500000e+01 }, { "Ru_97", 9.690755470000001e+01 }, { "Ru_98", 9.790528713200000e+01 }, { "Ru_99", 9.890593930199999e+01 },
{ "Ru_100", 9.990421947599999e+01 }, { "Ru_101", 1.009055820870000e+02 }, { "Ru_102", 1.019043493120000e+02 }, { "Ru_103", 1.029063238470000e+02 },
{ "Ru_104", 1.039054327010000e+02 }, { "Ru_105", 1.049077528660000e+02 }, { "Ru_106", 1.059073294330000e+02 }, { "Ru_107", 1.069099050890000e+02 },
{ "Ru_108", 1.079101734650000e+02 }, { "Ru_109", 1.089132032330000e+02 }, { "Ru_110", 1.099141360410000e+02 }, { "Ru_111", 1.109176960000000e+02 },
{ "Ru_112", 1.119189650000000e+02 }, { "Ru_113", 1.129224871940000e+02 }, { "Ru_114", 1.139242810000000e+02 }, { "Ru_115", 1.149286861730000e+02 },
{ "Ru_116", 1.159308100000000e+02 }, { "Ru_117", 1.169355800000000e+02 }, { "Ru_118", 1.179378200000000e+02 }, { "Ru_119", 1.189428400000000e+02 },
{ "Ru_120", 1.199453100000000e+02 }, { "Rh_natural", 1.029055000000000e+02 }, { "Rh_89", 8.894883700000000e+01 }, { "Rh_90", 8.994287000000000e+01 },
{ "Rh_91", 9.093655000000000e+01 }, { "Rh_92", 9.193198000000000e+01 }, { "Rh_93", 9.292574000000000e+01 }, { "Rh_94", 9.392169800000001e+01 },
{ "Rh_95", 9.491589874000000e+01 }, { "Rh_96", 9.591446063100000e+01 }, { "Rh_97", 9.691133679700000e+01 }, { "Rh_98", 9.791070815800001e+01 },
{ "Rh_99", 9.890813210400000e+01 }, { "Rh_100", 9.990812155000000e+01 }, { "Rh_101", 1.009061636250000e+02 }, { "Rh_102", 1.019068431960000e+02 },
{ "Rh_103", 1.029055042920000e+02 }, { "Rh_104", 1.039066555180000e+02 }, { "Rh_105", 1.049056938210000e+02 }, { "Rh_106", 1.059072871350000e+02 },
{ "Rh_107", 1.069067484230000e+02 }, { "Rh_108", 1.079087280180000e+02 }, { "Rh_109", 1.089087372890000e+02 }, { "Rh_110", 1.099111364110000e+02 },
{ "Rh_111", 1.109115859130000e+02 }, { "Rh_112", 1.119143941590000e+02 }, { "Rh_113", 1.129155306270000e+02 }, { "Rh_114", 1.139188060000000e+02 },
{ "Rh_115", 1.149203340000000e+02 }, { "Rh_116", 1.159240620000000e+02 }, { "Rh_117", 1.169259800000000e+02 }, { "Rh_118", 1.179300700000000e+02 },
{ "Rh_119", 1.189321100000000e+02 }, { "Rh_120", 1.199364100000000e+02 }, { "Rh_121", 1.209387200000000e+02 }, { "Rh_122", 1.219432100000000e+02 },
{ "Pd_natural", 1.064000000000000e+02 }, { "Pd_91", 9.094911000000000e+01 }, { "Pd_92", 9.194042000000000e+01 }, { "Pd_93", 9.293591000000001e+01 },
{ "Pd_94", 9.392877000000000e+01 }, { "Pd_95", 9.492469000000000e+01 }, { "Pd_96", 9.591816435900000e+01 }, { "Pd_97", 9.691647907300000e+01 },
{ "Pd_98", 9.791272090200000e+01 }, { "Pd_99", 9.891176783300000e+01 }, { "Pd_100", 9.990850588600000e+01 }, { "Pd_101", 1.009082892420000e+02 },
{ "Pd_102", 1.019056085440000e+02 }, { "Pd_103", 1.029060873070000e+02 }, { "Pd_104", 1.039040358340000e+02 }, { "Pd_105", 1.049050849200000e+02 },
{ "Pd_106", 1.059034857150000e+02 }, { "Pd_107", 1.069051334810000e+02 }, { "Pd_108", 1.079038917010000e+02 }, { "Pd_109", 1.089059504510000e+02 },
{ "Pd_110", 1.099051532540000e+02 }, { "Pd_111", 1.109076707340000e+02 }, { "Pd_112", 1.119073140580000e+02 }, { "Pd_113", 1.129101529080000e+02 },
{ "Pd_114", 1.139103626380000e+02 }, { "Pd_115", 1.149136838240000e+02 }, { "Pd_116", 1.159141586620000e+02 }, { "Pd_117", 1.169178413380000e+02 },
{ "Pd_118", 1.179189843000000e+02 }, { "Pd_119", 1.189231100000000e+02 }, { "Pd_120", 1.199246918780000e+02 }, { "Pd_121", 1.209288700000000e+02 },
{ "Pd_122", 1.219305500000000e+02 }, { "Pd_123", 1.229349300000000e+02 }, { "Pd_124", 1.239368800000000e+02 }, { "Ag_natural", 1.078680000000000e+02 },
{ "Ag_93", 9.294978000000000e+01 }, { "Ag_94", 9.394278000000000e+01 }, { "Ag_95", 9.493548000000000e+01 }, { "Ag_96", 9.593068000000000e+01 },
{ "Ag_97", 9.692397241200000e+01 }, { "Ag_98", 9.792156620100000e+01 }, { "Ag_99", 9.891759717799999e+01 }, { "Ag_100", 9.991610425499999e+01 },
{ "Ag_101", 1.009128022330000e+02 }, { "Ag_102", 1.019116850000000e+02 }, { "Ag_103", 1.029089727200000e+02 }, { "Ag_104", 1.039086291570000e+02 },
{ "Ag_105", 1.049065286610000e+02 }, { "Ag_106", 1.059066689210000e+02 }, { "Ag_107", 1.069050968200000e+02 }, { "Ag_108", 1.079059555560000e+02 },
{ "Ag_109", 1.089047522920000e+02 }, { "Ag_110", 1.099061072310000e+02 }, { "Ag_111", 1.109052911570000e+02 }, { "Ag_112", 1.119070048140000e+02 },
{ "Ag_113", 1.129065665790000e+02 }, { "Ag_114", 1.139088037040000e+02 }, { "Ag_115", 1.149087626980000e+02 }, { "Ag_116", 1.159113599330000e+02 },
{ "Ag_117", 1.169116845620000e+02 }, { "Ag_118", 1.179145827680000e+02 }, { "Ag_119", 1.189156650590000e+02 }, { "Ag_120", 1.199187873840000e+02 },
{ "Ag_121", 1.209198480460000e+02 }, { "Ag_122", 1.219235300000000e+02 }, { "Ag_123", 1.229249000000000e+02 }, { "Ag_124", 1.239286400000000e+02 },
{ "Ag_125", 1.249304300000000e+02 }, { "Ag_126", 1.259345000000000e+02 }, { "Ag_127", 1.269367700000000e+02 }, { "Ag_128", 1.279411700000000e+02 },
{ "Ag_129", 1.289436900000000e+02 }, { "Ag_130", 1.299504480000000e+02 }, { "Cd_natural", 1.124100000000000e+02 }, { "Cd_95", 9.494987000000000e+01 },
{ "Cd_96", 9.593977000000000e+01 }, { "Cd_97", 9.693494000000000e+01 }, { "Cd_98", 9.792739554600000e+01 }, { "Cd_99", 9.892501000000000e+01 },
{ "Cd_100", 9.992028952500000e+01 }, { "Cd_101", 1.009186815380000e+02 }, { "Cd_102", 1.019144622580000e+02 }, { "Cd_103", 1.029134192460000e+02 },
{ "Cd_104", 1.039098494750000e+02 }, { "Cd_105", 1.049094679050000e+02 }, { "Cd_106", 1.059064594100000e+02 }, { "Cd_107", 1.069066179280000e+02 },
{ "Cd_108", 1.079041836830000e+02 }, { "Cd_109", 1.089049822930000e+02 }, { "Cd_110", 1.099030020700000e+02 }, { "Cd_111", 1.109041781070000e+02 },
{ "Cd_112", 1.119027578090000e+02 }, { "Cd_113", 1.129044016620000e+02 }, { "Cd_114", 1.139033585400000e+02 }, { "Cd_115", 1.149054309690000e+02 },
{ "Cd_116", 1.159047558090000e+02 }, { "Cd_117", 1.169072186180000e+02 }, { "Cd_118", 1.179069145300000e+02 }, { "Cd_119", 1.189099215970000e+02 },
{ "Cd_120", 1.199098501290000e+02 }, { "Cd_121", 1.209129773630000e+02 }, { "Cd_122", 1.219133324320000e+02 }, { "Cd_123", 1.229170029990000e+02 },
{ "Cd_124", 1.239176476160000e+02 }, { "Cd_125", 1.249212463700000e+02 }, { "Cd_126", 1.259223533210000e+02 }, { "Cd_127", 1.269264438640000e+02 },
{ "Cd_128", 1.279277622850000e+02 }, { "Cd_129", 1.289321500000000e+02 }, { "Cd_130", 1.299339019370000e+02 }, { "Cd_131", 1.309406700000000e+02 },
{ "Cd_132", 1.319455500000000e+02 }, { "In_natural", 1.148200000000000e+02 }, { "In_97", 9.694954000000000e+01 }, { "In_98", 9.794213999999999e+01 },
{ "In_99", 9.893422000000000e+01 }, { "In_100", 9.993111085100000e+01 }, { "In_101", 1.009263400000000e+02 }, { "In_102", 1.019240902380000e+02 },
{ "In_103", 1.029199141880000e+02 }, { "In_104", 1.039182961710000e+02 }, { "In_105", 1.049146735400000e+02 }, { "In_106", 1.059134654110000e+02 },
{ "In_107", 1.069102951000000e+02 }, { "In_108", 1.079096981800000e+02 }, { "In_109", 1.089071505070000e+02 }, { "In_110", 1.099071652740000e+02 },
{ "In_111", 1.109051032780000e+02 }, { "In_112", 1.119055323310000e+02 }, { "In_113", 1.129040577610000e+02 }, { "In_114", 1.139049138760000e+02 },
{ "In_115", 1.149038784840000e+02 }, { "In_116", 1.159052597030000e+02 }, { "In_117", 1.169045135640000e+02 }, { "In_118", 1.179063543670000e+02 },
{ "In_119", 1.189058453500000e+02 }, { "In_120", 1.199079596080000e+02 }, { "In_121", 1.209078458220000e+02 }, { "In_122", 1.219102760100000e+02 },
{ "In_123", 1.229104382760000e+02 }, { "In_124", 1.239131752310000e+02 }, { "In_125", 1.249136005880000e+02 }, { "In_126", 1.259164638570000e+02 },
{ "In_127", 1.269173530910000e+02 }, { "In_128", 1.279201723280000e+02 }, { "In_129", 1.289216969800000e+02 }, { "In_130", 1.299249700490000e+02 },
{ "In_131", 1.309268517670000e+02 }, { "In_132", 1.319329902600000e+02 }, { "In_133", 1.329378100000000e+02 }, { "In_134", 1.339441500000000e+02 },
{ "In_135", 1.349493300000000e+02 }, { "Sn_natural", 1.186900000000000e+02 }, { "Sn_99", 9.894933000000000e+01 }, { "Sn_100", 9.993904434300001e+01 },
{ "Sn_101", 1.009360600000000e+02 }, { "Sn_102", 1.019302953240000e+02 }, { "Sn_103", 1.029281000000000e+02 }, { "Sn_104", 1.039231432230000e+02 },
{ "Sn_105", 1.049213494370000e+02 }, { "Sn_106", 1.059168806200000e+02 }, { "Sn_107", 1.069156443290000e+02 }, { "Sn_108", 1.079119253780000e+02 },
{ "Sn_109", 1.089112832140000e+02 }, { "Sn_110", 1.099078427910000e+02 }, { "Sn_111", 1.109077344600000e+02 }, { "Sn_112", 1.119048182070000e+02 },
{ "Sn_113", 1.129051705770000e+02 }, { "Sn_114", 1.139027788690000e+02 }, { "Sn_115", 1.149033423970000e+02 }, { "Sn_116", 1.159017405300000e+02 },
{ "Sn_117", 1.169029516560000e+02 }, { "Sn_118", 1.179016031670000e+02 }, { "Sn_119", 1.189033076300000e+02 }, { "Sn_120", 1.199021946760000e+02 },
{ "Sn_121", 1.209042354800000e+02 }, { "Sn_122", 1.219034390460000e+02 }, { "Sn_123", 1.229057208380000e+02 }, { "Sn_124", 1.239052739460000e+02 },
{ "Sn_125", 1.249077841250000e+02 }, { "Sn_126", 1.259076532800000e+02 }, { "Sn_127", 1.269103600240000e+02 }, { "Sn_128", 1.279105366240000e+02 },
{ "Sn_129", 1.289134790000000e+02 }, { "Sn_130", 1.299139672950000e+02 }, { "Sn_131", 1.309169997690000e+02 }, { "Sn_132", 1.319178157130000e+02 },
{ "Sn_133", 1.329238292490000e+02 }, { "Sn_134", 1.339282917650000e+02 }, { "Sn_135", 1.349347300000000e+02 }, { "Sn_136", 1.359393400000000e+02 },
{ "Sn_137", 1.369459900000000e+02 }, { "Sb_natural", 1.217500000000000e+02 }, { "Sb_103", 1.029396900000000e+02 }, { "Sb_104", 1.039364720000000e+02 },
{ "Sb_105", 1.049314863480000e+02 }, { "Sb_106", 1.059287910000000e+02 }, { "Sb_107", 1.069241500000000e+02 }, { "Sb_108", 1.079221600000000e+02 },
{ "Sb_109", 1.089181324260000e+02 }, { "Sb_110", 1.099167530000000e+02 }, { "Sb_111", 1.109131630000000e+02 }, { "Sb_112", 1.119123980090000e+02 },
{ "Sb_113", 1.129093716720000e+02 }, { "Sb_114", 1.139092690000000e+02 }, { "Sb_115", 1.149065980000000e+02 }, { "Sb_116", 1.159067936290000e+02 },
{ "Sb_117", 1.169048359410000e+02 }, { "Sb_118", 1.179055287310000e+02 }, { "Sb_119", 1.189039420090000e+02 }, { "Sb_120", 1.199050724270000e+02 },
{ "Sb_121", 1.209038156860000e+02 }, { "Sb_122", 1.219051736510000e+02 }, { "Sb_123", 1.229042139700000e+02 }, { "Sb_124", 1.239059357430000e+02 },
{ "Sb_125", 1.249052538180000e+02 }, { "Sb_126", 1.259072474800000e+02 }, { "Sb_127", 1.269069236090000e+02 }, { "Sb_128", 1.279091690010000e+02 },
{ "Sb_129", 1.289091484420000e+02 }, { "Sb_130", 1.299116563240000e+02 }, { "Sb_131", 1.309119822750000e+02 }, { "Sb_132", 1.319144668960000e+02 },
{ "Sb_133", 1.329152516300000e+02 }, { "Sb_134", 1.339203797440000e+02 }, { "Sb_135", 1.349251657710000e+02 }, { "Sb_136", 1.359303500000000e+02 },
{ "Sb_137", 1.369353100000000e+02 }, { "Sb_138", 1.379407900000000e+02 }, { "Sb_139", 1.389459800000000e+02 }, { "Te_natural", 1.276000000000000e+02 },
{ "Te_105", 1.049436400000000e+02 }, { "Te_106", 1.059375042370000e+02 }, { "Te_107", 1.069350060000000e+02 }, { "Te_108", 1.079294445970000e+02 },
{ "Te_109", 1.089274155150000e+02 }, { "Te_110", 1.099224073160000e+02 }, { "Te_111", 1.109211106920000e+02 }, { "Te_112", 1.119170136720000e+02 },
{ "Te_113", 1.129158910000000e+02 }, { "Te_114", 1.139120890000000e+02 }, { "Te_115", 1.149119020000000e+02 }, { "Te_116", 1.159084600000000e+02 },
{ "Te_117", 1.169086447190000e+02 }, { "Te_118", 1.179058275810000e+02 }, { "Te_119", 1.189064036450000e+02 }, { "Te_120", 1.199040202220000e+02 },
{ "Te_121", 1.209049364240000e+02 }, { "Te_122", 1.219030438980000e+02 }, { "Te_123", 1.229042700290000e+02 }, { "Te_124", 1.239028178960000e+02 },
{ "Te_125", 1.249044307310000e+02 }, { "Te_126", 1.259033116960000e+02 }, { "Te_127", 1.269052263360000e+02 }, { "Te_128", 1.279044630560000e+02 },
{ "Te_129", 1.289065982380000e+02 }, { "Te_130", 1.299062243990000e+02 }, { "Te_131", 1.309085238640000e+02 }, { "Te_132", 1.319085531600000e+02 },
{ "Te_133", 1.329109553060000e+02 }, { "Te_134", 1.339113687370000e+02 }, { "Te_135", 1.349164485920000e+02 }, { "Te_136", 1.359201012460000e+02 },
{ "Te_137", 1.369253229540000e+02 }, { "Te_138", 1.379292200000000e+02 }, { "Te_139", 1.389347300000000e+02 }, { "Te_140", 1.399388500000000e+02 },
{ "Te_141", 1.409446500000000e+02 }, { "Te_142", 1.419490800000000e+02 }, { "I_natural", 1.269045000000000e+02 }, { "I_108", 1.079434750000000e+02 },
{ "I_109", 1.089381494170000e+02 }, { "I_110", 1.099352420000000e+02 }, { "I_111", 1.109302760000000e+02 }, { "I_112", 1.119279700000000e+02 },
{ "I_113", 1.129236405830000e+02 }, { "I_114", 1.139218500000000e+02 }, { "I_115", 1.149180480000000e+02 }, { "I_116", 1.159168086330000e+02 },
{ "I_117", 1.169136500000000e+02 }, { "I_118", 1.179130740000000e+02 }, { "I_119", 1.189100740000000e+02 }, { "I_120", 1.199100481730000e+02 },
{ "I_121", 1.209073668110000e+02 }, { "I_122", 1.219075892840000e+02 }, { "I_123", 1.229055889650000e+02 }, { "I_124", 1.239062098520000e+02 },
{ "I_125", 1.249046301640000e+02 }, { "I_126", 1.259056241530000e+02 }, { "I_127", 1.269044726810000e+02 }, { "I_128", 1.279058094430000e+02 },
{ "I_129", 1.289049877220000e+02 }, { "I_130", 1.299066742470000e+02 }, { "I_131", 1.309061246090000e+02 }, { "I_132", 1.319079973810000e+02 },
{ "I_133", 1.329077969390000e+02 }, { "I_134", 1.339097444650000e+02 }, { "I_135", 1.349100481210000e+02 }, { "I_136", 1.359146539930000e+02 },
{ "I_137", 1.369178708400000e+02 }, { "I_138", 1.379223495910000e+02 }, { "I_139", 1.389260994780000e+02 }, { "I_140", 1.399310000000000e+02 },
{ "I_141", 1.409350300000000e+02 }, { "I_142", 1.419401800000000e+02 }, { "I_143", 1.429445600000000e+02 }, { "I_144", 1.439499900000000e+02 },
{ "Xe_natural", 1.313000000000000e+02 }, { "Xe_110", 1.099442780680000e+02 }, { "Xe_111", 1.109416020000000e+02 }, { "Xe_112", 1.119356231120000e+02 },
{ "Xe_113", 1.129333411740000e+02 }, { "Xe_114", 1.139279803060000e+02 }, { "Xe_115", 1.149262939200000e+02 }, { "Xe_116", 1.159215810870000e+02 },
{ "Xe_117", 1.169203587350000e+02 }, { "Xe_118", 1.179161786550000e+02 }, { "Xe_119", 1.189154106880000e+02 }, { "Xe_120", 1.199117842440000e+02 },
{ "Xe_121", 1.209114618290000e+02 }, { "Xe_122", 1.219083676320000e+02 }, { "Xe_123", 1.229084819100000e+02 }, { "Xe_124", 1.239058930030000e+02 },
{ "Xe_125", 1.249063954640000e+02 }, { "Xe_126", 1.259042736340000e+02 }, { "Xe_127", 1.269051837230000e+02 }, { "Xe_128", 1.279035312750000e+02 },
{ "Xe_129", 1.289047794350000e+02 }, { "Xe_130", 1.299035080070000e+02 }, { "Xe_131", 1.309050823620000e+02 }, { "Xe_132", 1.319041534570000e+02 },
{ "Xe_133", 1.329059107220000e+02 }, { "Xe_134", 1.339053944640000e+02 }, { "Xe_135", 1.349072274950000e+02 }, { "Xe_136", 1.359072187940000e+02 },
{ "Xe_137", 1.369115621250000e+02 }, { "Xe_138", 1.379139544750000e+02 }, { "Xe_139", 1.389187929360000e+02 }, { "Xe_140", 1.399216409430000e+02 },
{ "Xe_141", 1.409266480490000e+02 }, { "Xe_142", 1.419297095900000e+02 }, { "Xe_143", 1.429351100000000e+02 }, { "Xe_144", 1.439385100000000e+02 },
{ "Xe_145", 1.449440700000000e+02 }, { "Xe_146", 1.459477500000000e+02 }, { "Xe_147", 1.469535600000000e+02 }, { "Cs_natural", 1.329054000000000e+02 },
{ "Cs_112", 1.119503010000000e+02 }, { "Cs_113", 1.129444932740000e+02 }, { "Cs_114", 1.139414500000000e+02 }, { "Cs_115", 1.149359100000000e+02 },
{ "Cs_116", 1.159333670000000e+02 }, { "Cs_117", 1.169286707010000e+02 }, { "Cs_118", 1.179265594940000e+02 }, { "Cs_119", 1.189223773040000e+02 },
{ "Cs_120", 1.199206772530000e+02 }, { "Cs_121", 1.209172292090000e+02 }, { "Cs_122", 1.219161134340000e+02 }, { "Cs_123", 1.229129960360000e+02 },
{ "Cs_124", 1.239122577980000e+02 }, { "Cs_125", 1.249097282700000e+02 }, { "Cs_126", 1.259094519770000e+02 }, { "Cs_127", 1.269074175250000e+02 },
{ "Cs_128", 1.279077488660000e+02 }, { "Cs_129", 1.289060644260000e+02 }, { "Cs_130", 1.299067085520000e+02 }, { "Cs_131", 1.309054639260000e+02 },
{ "Cs_132", 1.319064342600000e+02 }, { "Cs_133", 1.329054519320000e+02 }, { "Cs_134", 1.339067184750000e+02 }, { "Cs_135", 1.349059770080000e+02 },
{ "Cs_136", 1.359073115760000e+02 }, { "Cs_137", 1.369070894730000e+02 }, { "Cs_138", 1.379110167040000e+02 }, { "Cs_139", 1.389133639990000e+02 },
{ "Cs_140", 1.399172823540000e+02 }, { "Cs_141", 1.409200457520000e+02 }, { "Cs_142", 1.419242989270000e+02 }, { "Cs_143", 1.429273517500000e+02 },
{ "Cs_144", 1.439320769140000e+02 }, { "Cs_145", 1.449355261700000e+02 }, { "Cs_146", 1.459402894230000e+02 }, { "Cs_147", 1.469441550080000e+02 },
{ "Cs_148", 1.479492181530000e+02 }, { "Cs_149", 1.489529300000000e+02 }, { "Cs_150", 1.499581700000000e+02 }, { "Cs_151", 1.509621900000000e+02 },
{ "Ba_natural", 1.373300000000000e+02 }, { "Ba_114", 1.139506754050000e+02 }, { "Ba_115", 1.149473700000000e+02 }, { "Ba_116", 1.159413800000000e+02 },
{ "Ba_117", 1.169384990000000e+02 }, { "Ba_118", 1.179330400000000e+02 }, { "Ba_119", 1.189306596610000e+02 }, { "Ba_120", 1.199260449740000e+02 },
{ "Ba_121", 1.209240544990000e+02 }, { "Ba_122", 1.219199040000000e+02 }, { "Ba_123", 1.229187810360000e+02 }, { "Ba_124", 1.239150936030000e+02 },
{ "Ba_125", 1.249144729120000e+02 }, { "Ba_126", 1.259112501770000e+02 }, { "Ba_127", 1.269110937970000e+02 }, { "Ba_128", 1.279083176980000e+02 },
{ "Ba_129", 1.289086794390000e+02 }, { "Ba_130", 1.299063208110000e+02 }, { "Ba_131", 1.309069411180000e+02 }, { "Ba_132", 1.319050612880000e+02 },
{ "Ba_133", 1.329060074900000e+02 }, { "Ba_134", 1.339045083830000e+02 }, { "Ba_135", 1.349056885910000e+02 }, { "Ba_136", 1.359045759450000e+02 },
{ "Ba_137", 1.369058273840000e+02 }, { "Ba_138", 1.379052472370000e+02 }, { "Ba_139", 1.389088413410000e+02 }, { "Ba_140", 1.399106045050000e+02 },
{ "Ba_141", 1.409144110090000e+02 }, { "Ba_142", 1.419164534100000e+02 }, { "Ba_143", 1.429206267190000e+02 }, { "Ba_144", 1.439229528530000e+02 },
{ "Ba_145", 1.449276270320000e+02 }, { "Ba_146", 1.459302195720000e+02 }, { "Ba_147", 1.469349450000000e+02 }, { "Ba_148", 1.479377200470000e+02 },
{ "Ba_149", 1.489425800000000e+02 }, { "Ba_150", 1.499456800000000e+02 }, { "Ba_151", 1.509508100000000e+02 }, { "Ba_152", 1.519542700000000e+02 },
{ "Ba_153", 1.529596100000000e+02 }, { "La_natural", 1.389055000000000e+02 }, { "La_117", 1.169500680000000e+02 }, { "La_118", 1.179467300000000e+02 },
{ "La_119", 1.189409900000000e+02 }, { "La_120", 1.199380700000000e+02 }, { "La_121", 1.209330100000000e+02 }, { "La_122", 1.219307100000000e+02 },
{ "La_123", 1.229262400000000e+02 }, { "La_124", 1.239245742750000e+02 }, { "La_125", 1.249208160340000e+02 }, { "La_126", 1.259195126670000e+02 },
{ "La_127", 1.269163754480000e+02 }, { "La_128", 1.279155851770000e+02 }, { "La_129", 1.289126928150000e+02 }, { "La_130", 1.299123687240000e+02 },
{ "La_131", 1.309100700000000e+02 }, { "La_132", 1.319101011450000e+02 }, { "La_133", 1.329082180000000e+02 }, { "La_134", 1.339085140110000e+02 },
{ "La_135", 1.349069768440000e+02 }, { "La_136", 1.359076355360000e+02 }, { "La_137", 1.369064935980000e+02 }, { "La_138", 1.379071119300000e+02 },
{ "La_139", 1.389063532670000e+02 }, { "La_140", 1.399094776450000e+02 }, { "La_141", 1.409109621520000e+02 }, { "La_142", 1.419140791300000e+02 },
{ "La_143", 1.429160627200000e+02 }, { "La_144", 1.439195996470000e+02 }, { "La_145", 1.449216454010000e+02 }, { "La_146", 1.459257934600000e+02 },
{ "La_147", 1.469282352840000e+02 }, { "La_148", 1.479322288680000e+02 }, { "La_149", 1.489347340000000e+02 }, { "La_150", 1.499387700000000e+02 },
{ "La_151", 1.509417200000000e+02 }, { "La_152", 1.519462500000000e+02 }, { "La_153", 1.529496200000000e+02 }, { "La_154", 1.539545000000000e+02 },
{ "La_155", 1.549583500000000e+02 }, { "Ce_natural", 1.401200000000000e+02 }, { "Ce_119", 1.189527600000000e+02 }, { "Ce_120", 1.199466400000000e+02 },
{ "Ce_121", 1.209434200000000e+02 }, { "Ce_122", 1.219379100000000e+02 }, { "Ce_123", 1.229354000000000e+02 }, { "Ce_124", 1.239304100000000e+02 },
{ "Ce_125", 1.249284400000000e+02 }, { "Ce_126", 1.259239710000000e+02 }, { "Ce_127", 1.269227310000000e+02 }, { "Ce_128", 1.279189110000000e+02 },
{ "Ce_129", 1.289181020000000e+02 }, { "Ce_130", 1.299147360000000e+02 }, { "Ce_131", 1.309144220000000e+02 }, { "Ce_132", 1.319114604870000e+02 },
{ "Ce_133", 1.329115150200000e+02 }, { "Ce_134", 1.339089248210000e+02 }, { "Ce_135", 1.349091513960000e+02 }, { "Ce_136", 1.359071724220000e+02 },
{ "Ce_137", 1.369078055770000e+02 }, { "Ce_138", 1.379059913210000e+02 }, { "Ce_139", 1.389066526510000e+02 }, { "Ce_140", 1.399054387060000e+02 },
{ "Ce_141", 1.409082762700000e+02 }, { "Ce_142", 1.419092442050000e+02 }, { "Ce_143", 1.429123859100000e+02 }, { "Ce_144", 1.439136473360000e+02 },
{ "Ce_145", 1.449172331350000e+02 }, { "Ce_146", 1.459187590090000e+02 }, { "Ce_147", 1.469226739540000e+02 }, { "Ce_148", 1.479244324100000e+02 },
{ "Ce_149", 1.489283998830000e+02 }, { "Ce_150", 1.499304089310000e+02 }, { "Ce_151", 1.509339761960000e+02 }, { "Ce_152", 1.519365400000000e+02 },
{ "Ce_153", 1.529405800000000e+02 }, { "Ce_154", 1.539434200000000e+02 }, { "Ce_155", 1.549480400000000e+02 }, { "Ce_156", 1.559512600000000e+02 },
{ "Ce_157", 1.569563400000000e+02 }, { "Pr_natural", 1.409077000000000e+02 }, { "Pr_121", 1.209553640000000e+02 }, { "Pr_122", 1.219518100000000e+02 },
{ "Pr_123", 1.229459600000000e+02 }, { "Pr_124", 1.239429600000000e+02 }, { "Pr_125", 1.249378300000000e+02 }, { "Pr_126", 1.259353100000000e+02 },
{ "Pr_127", 1.269308300000000e+02 }, { "Pr_128", 1.279287910000000e+02 }, { "Pr_129", 1.289250950000000e+02 }, { "Pr_130", 1.299235900000000e+02 },
{ "Pr_131", 1.309202590000000e+02 }, { "Pr_132", 1.319192550000000e+02 }, { "Pr_133", 1.329163305320000e+02 }, { "Pr_134", 1.339157117370000e+02 },
{ "Pr_135", 1.349131117450000e+02 }, { "Pr_136", 1.359126916110000e+02 }, { "Pr_137", 1.369107054550000e+02 }, { "Pr_138", 1.379107546360000e+02 },
{ "Pr_139", 1.389089383990000e+02 }, { "Pr_140", 1.399090758740000e+02 }, { "Pr_141", 1.409076527690000e+02 }, { "Pr_142", 1.419100448060000e+02 },
{ "Pr_143", 1.429108169260000e+02 }, { "Pr_144", 1.439133052450000e+02 }, { "Pr_145", 1.449145117000000e+02 }, { "Pr_146", 1.459176443360000e+02 },
{ "Pr_147", 1.469189959920000e+02 }, { "Pr_148", 1.479221350260000e+02 }, { "Pr_149", 1.489237176510000e+02 }, { "Pr_150", 1.499266729970000e+02 },
{ "Pr_151", 1.509283186180000e+02 }, { "Pr_152", 1.519314992250000e+02 }, { "Pr_153", 1.529338389050000e+02 }, { "Pr_154", 1.539375181530000e+02 },
{ "Pr_155", 1.549401200000000e+02 }, { "Pr_156", 1.559442700000000e+02 }, { "Pr_157", 1.569474300000000e+02 }, { "Pr_158", 1.579519800000000e+02 },
{ "Pr_159", 1.589555000000000e+02 }, { "Nd_natural", 1.442400000000000e+02 }, { "Nd_124", 1.239522300000000e+02 }, { "Nd_125", 1.249488800000000e+02 },
{ "Nd_126", 1.259432200000000e+02 }, { "Nd_127", 1.269405000000000e+02 }, { "Nd_128", 1.279353900000000e+02 }, { "Nd_129", 1.289331880000000e+02 },
{ "Nd_130", 1.299285060000000e+02 }, { "Nd_131", 1.309272470000000e+02 }, { "Nd_132", 1.319233212370000e+02 }, { "Nd_133", 1.329223480000000e+02 },
{ "Nd_134", 1.339187901810000e+02 }, { "Nd_135", 1.349181811600000e+02 }, { "Nd_136", 1.359149760350000e+02 }, { "Nd_137", 1.369145671370000e+02 },
{ "Nd_138", 1.379119499610000e+02 }, { "Nd_139", 1.389119782880000e+02 }, { "Nd_140", 1.399095520000000e+02 }, { "Nd_141", 1.409096098540000e+02 },
{ "Nd_142", 1.419077232970000e+02 }, { "Nd_143", 1.429098142900000e+02 }, { "Nd_144", 1.439100872740000e+02 }, { "Nd_145", 1.449125736360000e+02 },
{ "Nd_146", 1.459131169390000e+02 }, { "Nd_147", 1.469161004410000e+02 }, { "Nd_148", 1.479168932880000e+02 }, { "Nd_149", 1.489201488420000e+02 },
{ "Nd_150", 1.499208908880000e+02 }, { "Nd_151", 1.509238289290000e+02 }, { "Nd_152", 1.519246822190000e+02 }, { "Nd_153", 1.529276982320000e+02 },
{ "Nd_154", 1.539294773070000e+02 }, { "Nd_155", 1.549329320000000e+02 }, { "Nd_156", 1.559350181140000e+02 }, { "Nd_157", 1.569390300000000e+02 },
{ "Nd_158", 1.579416000000000e+02 }, { "Nd_159", 1.589460900000000e+02 }, { "Nd_160", 1.599490900000000e+02 }, { "Nd_161", 1.609538800000000e+02 },
{ "Pm_natural", 1.450000000000000e+02 }, { "Pm_126", 1.259575200000000e+02 }, { "Pm_127", 1.269516300000000e+02 }, { "Pm_128", 1.279484200000000e+02 },
{ "Pm_129", 1.289431600000000e+02 }, { "Pm_130", 1.299404500000000e+02 }, { "Pm_131", 1.309358700000000e+02 }, { "Pm_132", 1.319337500000000e+02 },
{ "Pm_133", 1.329297820000000e+02 }, { "Pm_134", 1.339283530000000e+02 }, { "Pm_135", 1.349248760000000e+02 }, { "Pm_136", 1.359235658290000e+02 },
{ "Pm_137", 1.369204794930000e+02 }, { "Pm_138", 1.379195482810000e+02 }, { "Pm_139", 1.389168040820000e+02 }, { "Pm_140", 1.399160417890000e+02 },
{ "Pm_141", 1.409135550540000e+02 }, { "Pm_142", 1.419128744710000e+02 }, { "Pm_143", 1.429109326160000e+02 }, { "Pm_144", 1.439125908430000e+02 },
{ "Pm_145", 1.449127490230000e+02 }, { "Pm_146", 1.459146963050000e+02 }, { "Pm_147", 1.469151385450000e+02 }, { "Pm_148", 1.479174746180000e+02 },
{ "Pm_149", 1.489183341550000e+02 }, { "Pm_150", 1.499209835610000e+02 }, { "Pm_151", 1.509212069730000e+02 }, { "Pm_152", 1.519234967950000e+02 },
{ "Pm_153", 1.529241168890000e+02 }, { "Pm_154", 1.539264639430000e+02 }, { "Pm_155", 1.549281012670000e+02 }, { "Pm_156", 1.559310567360000e+02 },
{ "Pm_157", 1.569330393690000e+02 }, { "Pm_158", 1.579365614070000e+02 }, { "Pm_159", 1.589389700000000e+02 }, { "Pm_160", 1.599429900000000e+02 },
{ "Pm_161", 1.609458600000000e+02 }, { "Pm_162", 1.619502900000000e+02 }, { "Pm_163", 1.629536800000000e+02 }, { "Sm_natural", 1.504000000000000e+02 },
{ "Sm_128", 1.279580800000000e+02 }, { "Sm_129", 1.289546400000000e+02 }, { "Sm_130", 1.299489200000000e+02 }, { "Sm_131", 1.309461100000000e+02 },
{ "Sm_132", 1.319406900000000e+02 }, { "Sm_133", 1.329386700000000e+02 }, { "Sm_134", 1.339339700000000e+02 }, { "Sm_135", 1.349325200000000e+02 },
{ "Sm_136", 1.359282755270000e+02 }, { "Sm_137", 1.369269717460000e+02 }, { "Sm_138", 1.379232439610000e+02 }, { "Sm_139", 1.389222966050000e+02 },
{ "Sm_140", 1.399189946870000e+02 }, { "Sm_141", 1.409184764880000e+02 }, { "Sm_142", 1.419151976410000e+02 }, { "Sm_143", 1.429146283380000e+02 },
{ "Sm_144", 1.439119994780000e+02 }, { "Sm_145", 1.449134103530000e+02 }, { "Sm_146", 1.459130409000000e+02 }, { "Sm_147", 1.469148979230000e+02 },
{ "Sm_148", 1.479148226740000e+02 }, { "Sm_149", 1.489171847350000e+02 }, { "Sm_150", 1.499172755390000e+02 }, { "Sm_151", 1.509199324090000e+02 },
{ "Sm_152", 1.519197324250000e+02 }, { "Sm_153", 1.529220973560000e+02 }, { "Sm_154", 1.539222092730000e+02 }, { "Sm_155", 1.549246401610000e+02 },
{ "Sm_156", 1.559255278870000e+02 }, { "Sm_157", 1.569283587170000e+02 }, { "Sm_158", 1.579299913170000e+02 }, { "Sm_159", 1.589332112710000e+02 },
{ "Sm_160", 1.599351400000000e+02 }, { "Sm_161", 1.609388300000000e+02 }, { "Sm_162", 1.619412200000000e+02 }, { "Sm_163", 1.629453600000000e+02 },
{ "Sm_164", 1.639482800000000e+02 }, { "Sm_165", 1.649529800000000e+02 }, { "Eu_natural", 1.519600000000000e+02 }, { "Eu_130", 1.299635690000000e+02 },
{ "Eu_131", 1.309577530000000e+02 }, { "Eu_132", 1.319543700000000e+02 }, { "Eu_133", 1.329492400000000e+02 }, { "Eu_134", 1.339465100000000e+02 },
{ "Eu_135", 1.349418200000000e+02 }, { "Eu_136", 1.359396000000000e+02 }, { "Eu_137", 1.369355700000000e+02 }, { "Eu_138", 1.379337090000000e+02 },
{ "Eu_139", 1.389297922800000e+02 }, { "Eu_140", 1.399280876070000e+02 }, { "Eu_141", 1.409249307200000e+02 }, { "Eu_142", 1.419234349450000e+02 },
{ "Eu_143", 1.429202975090000e+02 }, { "Eu_144", 1.439188168230000e+02 }, { "Eu_145", 1.449162652370000e+02 }, { "Eu_146", 1.459172058170000e+02 },
{ "Eu_147", 1.469167461110000e+02 }, { "Eu_148", 1.479180858950000e+02 }, { "Eu_149", 1.489179312380000e+02 }, { "Eu_150", 1.499197018190000e+02 },
{ "Eu_151", 1.509198501610000e+02 }, { "Eu_152", 1.519217445340000e+02 }, { "Eu_153", 1.529212303390000e+02 }, { "Eu_154", 1.539229792370000e+02 },
{ "Eu_155", 1.549228932600000e+02 }, { "Eu_156", 1.559247522490000e+02 }, { "Eu_157", 1.569254236470000e+02 }, { "Eu_158", 1.579278453020000e+02 },
{ "Eu_159", 1.589290888610000e+02 }, { "Eu_160", 1.599319710000000e+02 }, { "Eu_161", 1.609336800000000e+02 }, { "Eu_162", 1.619370400000000e+02 },
{ "Eu_163", 1.629392100000000e+02 }, { "Eu_164", 1.639429900000000e+02 }, { "Eu_165", 1.649457200000000e+02 }, { "Eu_166", 1.659499700000000e+02 },
{ "Eu_167", 1.669532100000000e+02 }, { "Gd_natural", 1.572500000000000e+02 }, { "Gd_134", 1.339553700000000e+02 }, { "Gd_135", 1.349525700000000e+02 },
{ "Gd_136", 1.359473400000000e+02 }, { "Gd_137", 1.369450200000000e+02 }, { "Gd_138", 1.379401200000000e+02 }, { "Gd_139", 1.389382400000000e+02 },
{ "Gd_140", 1.399336740000000e+02 }, { "Gd_141", 1.409321260000000e+02 }, { "Gd_142", 1.419281160000000e+02 }, { "Gd_143", 1.429267495100000e+02 },
{ "Gd_144", 1.439229630000000e+02 }, { "Gd_145", 1.449217092520000e+02 }, { "Gd_146", 1.459183106080000e+02 }, { "Gd_147", 1.469190944200000e+02 },
{ "Gd_148", 1.479181145240000e+02 }, { "Gd_149", 1.489193409150000e+02 }, { "Gd_150", 1.499186588760000e+02 }, { "Gd_151", 1.509203484820000e+02 },
{ "Gd_152", 1.519197909960000e+02 }, { "Gd_153", 1.529217495430000e+02 }, { "Gd_154", 1.539208655980000e+02 }, { "Gd_155", 1.549226220220000e+02 },
{ "Gd_156", 1.559221227430000e+02 }, { "Gd_157", 1.569239601350000e+02 }, { "Gd_158", 1.579241039120000e+02 }, { "Gd_159", 1.589263886580000e+02 },
{ "Gd_160", 1.599270541460000e+02 }, { "Gd_161", 1.609296692110000e+02 }, { "Gd_162", 1.619309847510000e+02 }, { "Gd_163", 1.629339900000000e+02 },
{ "Gd_164", 1.639358600000000e+02 }, { "Gd_165", 1.649393800000000e+02 }, { "Gd_166", 1.659416000000000e+02 }, { "Gd_167", 1.669455700000000e+02 },
{ "Gd_168", 1.679483600000000e+02 }, { "Gd_169", 1.689528700000000e+02 }, { "Tb_natural", 1.589254000000000e+02 }, { "Tb_136", 1.359613800000000e+02 },
{ "Tb_137", 1.369559800000000e+02 }, { "Tb_138", 1.379531600000000e+02 }, { "Tb_139", 1.389482900000000e+02 }, { "Tb_140", 1.399458050490000e+02 },
{ "Tb_141", 1.409414480000000e+02 }, { "Tb_142", 1.419387440000000e+02 }, { "Tb_143", 1.429351210000000e+02 }, { "Tb_144", 1.439330450000000e+02 },
{ "Tb_145", 1.449292740000000e+02 }, { "Tb_146", 1.459272465840000e+02 }, { "Tb_147", 1.469240445850000e+02 }, { "Tb_148", 1.479242717010000e+02 },
{ "Tb_149", 1.489232459090000e+02 }, { "Tb_150", 1.499236596860000e+02 }, { "Tb_151", 1.509231025430000e+02 }, { "Tb_152", 1.519240744380000e+02 },
{ "Tb_153", 1.529234345880000e+02 }, { "Tb_154", 1.539246780190000e+02 }, { "Tb_155", 1.549235052360000e+02 }, { "Tb_156", 1.559247472130000e+02 },
{ "Tb_157", 1.569240246040000e+02 }, { "Tb_158", 1.579254131370000e+02 }, { "Tb_159", 1.589253467570000e+02 }, { "Tb_160", 1.599271676060000e+02 },
{ "Tb_161", 1.609275699190000e+02 }, { "Tb_162", 1.619294882340000e+02 }, { "Tb_163", 1.629306475360000e+02 }, { "Tb_164", 1.639333508380000e+02 },
{ "Tb_165", 1.649348800000000e+02 }, { "Tb_166", 1.659379919590000e+02 }, { "Tb_167", 1.669400500000000e+02 }, { "Tb_168", 1.679436400000000e+02 },
{ "Tb_169", 1.689462200000000e+02 }, { "Tb_170", 1.699502500000000e+02 }, { "Tb_171", 1.709533000000000e+02 }, { "Dy_natural", 1.625000000000000e+02 },
{ "Dy_138", 1.379624900000000e+02 }, { "Dy_139", 1.389595400000000e+02 }, { "Dy_140", 1.399540100000000e+02 }, { "Dy_141", 1.409513500000000e+02 },
{ "Dy_142", 1.419463660000000e+02 }, { "Dy_143", 1.429438300000000e+02 }, { "Dy_144", 1.439392540000000e+02 }, { "Dy_145", 1.449374250000000e+02 },
{ "Dy_146", 1.459328453690000e+02 }, { "Dy_147", 1.469310915000000e+02 }, { "Dy_148", 1.479271498310000e+02 }, { "Dy_149", 1.489273047870000e+02 },
{ "Dy_150", 1.499255851840000e+02 }, { "Dy_151", 1.509261846010000e+02 }, { "Dy_152", 1.519247183000000e+02 }, { "Dy_153", 1.529257646700000e+02 },
{ "Dy_154", 1.539244244570000e+02 }, { "Dy_155", 1.549257537750000e+02 }, { "Dy_156", 1.559242831100000e+02 }, { "Dy_157", 1.569254660950000e+02 },
{ "Dy_158", 1.579244094870000e+02 }, { "Dy_159", 1.589257392140000e+02 }, { "Dy_160", 1.599251975170000e+02 }, { "Dy_161", 1.609269333640000e+02 },
{ "Dy_162", 1.619267984470000e+02 }, { "Dy_163", 1.629287311590000e+02 }, { "Dy_164", 1.639291747510000e+02 }, { "Dy_165", 1.649317033330000e+02 },
{ "Dy_166", 1.659328067410000e+02 }, { "Dy_167", 1.669356554620000e+02 }, { "Dy_168", 1.679371287690000e+02 }, { "Dy_169", 1.689403076140000e+02 },
{ "Dy_170", 1.699423900000000e+02 }, { "Dy_171", 1.709462000000000e+02 }, { "Dy_172", 1.719487600000000e+02 }, { "Dy_173", 1.729530000000000e+02 },
{ "Ho_natural", 1.649304000000000e+02 }, { "Ho_140", 1.399685390000000e+02 }, { "Ho_141", 1.409630980000000e+02 }, { "Ho_142", 1.419597700000000e+02 },
{ "Ho_143", 1.429546100000000e+02 }, { "Ho_144", 1.439514800000000e+02 }, { "Ho_145", 1.449472000000000e+02 }, { "Ho_146", 1.459446400000000e+02 },
{ "Ho_147", 1.469400560000000e+02 }, { "Ho_148", 1.479377180000000e+02 }, { "Ho_149", 1.489337747710000e+02 }, { "Ho_150", 1.499334961820000e+02 },
{ "Ho_151", 1.509316881420000e+02 }, { "Ho_152", 1.519317137140000e+02 }, { "Ho_153", 1.529301987890000e+02 }, { "Ho_154", 1.539306015790000e+02 },
{ "Ho_155", 1.549291034910000e+02 }, { "Ho_156", 1.559298390000000e+02 }, { "Ho_157", 1.569282561880000e+02 }, { "Ho_158", 1.579289410070000e+02 },
{ "Ho_159", 1.589277119590000e+02 }, { "Ho_160", 1.599287294780000e+02 }, { "Ho_161", 1.609278547760000e+02 }, { "Ho_162", 1.619290955040000e+02 },
{ "Ho_163", 1.629287339030000e+02 }, { "Ho_164", 1.639302335070000e+02 }, { "Ho_165", 1.649303220700000e+02 }, { "Ho_166", 1.659322841620000e+02 },
{ "Ho_167", 1.669331326330000e+02 }, { "Ho_168", 1.679355157080000e+02 }, { "Ho_169", 1.689368722730000e+02 }, { "Ho_170", 1.699396189290000e+02 },
{ "Ho_171", 1.709414651500000e+02 }, { "Ho_172", 1.719448200000000e+02 }, { "Ho_173", 1.729472900000000e+02 }, { "Ho_174", 1.739511500000000e+02 },
{ "Ho_175", 1.749540500000000e+02 }, { "Er_natural", 1.672600000000000e+02 }, { "Er_143", 1.429663400000000e+02 }, { "Er_144", 1.439603800000000e+02 },
{ "Er_145", 1.449573900000000e+02 }, { "Er_146", 1.459520000000000e+02 }, { "Er_147", 1.469494900000000e+02 }, { "Er_148", 1.479445500000000e+02 },
{ "Er_149", 1.489423060000000e+02 }, { "Er_150", 1.499379138390000e+02 }, { "Er_151", 1.509374489030000e+02 }, { "Er_152", 1.519350503890000e+02 },
{ "Er_153", 1.529350634920000e+02 }, { "Er_154", 1.539327830810000e+02 }, { "Er_155", 1.549332089490000e+02 }, { "Er_156", 1.559310646980000e+02 },
{ "Er_157", 1.569319160000000e+02 }, { "Er_158", 1.579298934740000e+02 }, { "Er_159", 1.589306840660000e+02 }, { "Er_160", 1.599290832920000e+02 },
{ "Er_161", 1.609299953090000e+02 }, { "Er_162", 1.619287782640000e+02 }, { "Er_163", 1.629300327490000e+02 }, { "Er_164", 1.639292002290000e+02 },
{ "Er_165", 1.649307260030000e+02 }, { "Er_166", 1.659302930610000e+02 }, { "Er_167", 1.669320481590000e+02 }, { "Er_168", 1.679323702240000e+02 },
{ "Er_169", 1.689345903640000e+02 }, { "Er_170", 1.699354643120000e+02 }, { "Er_171", 1.709380298080000e+02 }, { "Er_172", 1.719393561130000e+02 },
{ "Er_173", 1.729424000000000e+02 }, { "Er_174", 1.739442300000000e+02 }, { "Er_175", 1.749477700000000e+02 }, { "Er_176", 1.759500800000000e+02 },
{ "Er_177", 1.769540500000000e+02 }, { "Tm_natural", 1.689342000000000e+02 }, { "Tm_145", 1.449700730000000e+02 }, { "Tm_146", 1.459664250000000e+02 },
{ "Tm_147", 1.469609610000000e+02 }, { "Tm_148", 1.479578400000000e+02 }, { "Tm_149", 1.489527200000000e+02 }, { "Tm_150", 1.499499600000000e+02 },
{ "Tm_151", 1.509454834900000e+02 }, { "Tm_152", 1.519444220000000e+02 }, { "Tm_153", 1.529420121120000e+02 }, { "Tm_154", 1.539415678080000e+02 },
{ "Tm_155", 1.549391994590000e+02 }, { "Tm_156", 1.559389799330000e+02 }, { "Tm_157", 1.569369730000000e+02 }, { "Tm_158", 1.579369795250000e+02 },
{ "Tm_159", 1.589349750000000e+02 }, { "Tm_160", 1.599352628010000e+02 }, { "Tm_161", 1.609335490000000e+02 }, { "Tm_162", 1.619339946820000e+02 },
{ "Tm_163", 1.629326511240000e+02 }, { "Tm_164", 1.639335600000000e+02 }, { "Tm_165", 1.649324354920000e+02 }, { "Tm_166", 1.659335541310000e+02 },
{ "Tm_167", 1.669328516220000e+02 }, { "Tm_168", 1.679341727760000e+02 }, { "Tm_169", 1.689342132500000e+02 }, { "Tm_170", 1.699358013970000e+02 },
{ "Tm_171", 1.709364294400000e+02 }, { "Tm_172", 1.719384000440000e+02 }, { "Tm_173", 1.729396036070000e+02 }, { "Tm_174", 1.739421686050000e+02 },
{ "Tm_175", 1.749438368530000e+02 }, { "Tm_176", 1.759469946850000e+02 }, { "Tm_177", 1.769490400000000e+02 }, { "Tm_178", 1.779526400000000e+02 },
{ "Tm_179", 1.789553400000000e+02 }, { "Yb_natural", 1.730400000000000e+02 }, { "Yb_148", 1.479674200000000e+02 }, { "Yb_149", 1.489640400000000e+02 },
{ "Yb_150", 1.499584200000000e+02 }, { "Yb_151", 1.509554007690000e+02 }, { "Yb_152", 1.519502889190000e+02 }, { "Yb_153", 1.529494800000000e+02 },
{ "Yb_154", 1.539463939280000e+02 }, { "Yb_155", 1.549457823320000e+02 }, { "Yb_156", 1.559428182150000e+02 }, { "Yb_157", 1.569426278480000e+02 },
{ "Yb_158", 1.579398656170000e+02 }, { "Yb_159", 1.589400500990000e+02 }, { "Yb_160", 1.599375523440000e+02 }, { "Yb_161", 1.609379016780000e+02 },
{ "Yb_162", 1.619357682100000e+02 }, { "Yb_163", 1.629363343050000e+02 }, { "Yb_164", 1.639344894160000e+02 }, { "Yb_165", 1.649352790000000e+02 },
{ "Yb_166", 1.659338820420000e+02 }, { "Yb_167", 1.669349496050000e+02 }, { "Yb_168", 1.679338968950000e+02 }, { "Yb_169", 1.689351898020000e+02 },
{ "Yb_170", 1.699347618370000e+02 }, { "Yb_171", 1.709363257990000e+02 }, { "Yb_172", 1.719363814690000e+02 }, { "Yb_173", 1.729382107870000e+02 },
{ "Yb_174", 1.739388620890000e+02 }, { "Yb_175", 1.749412764500000e+02 }, { "Yb_176", 1.759425716830000e+02 }, { "Yb_177", 1.769452608220000e+02 },
{ "Yb_178", 1.779466466800000e+02 }, { "Yb_179", 1.789501700000000e+02 }, { "Yb_180", 1.799523300000000e+02 }, { "Yb_181", 1.809561500000000e+02 },
{ "Lu_natural", 1.749670000000000e+02 }, { "Lu_150", 1.499732280000000e+02 }, { "Lu_151", 1.509675770000000e+02 }, { "Lu_152", 1.519641200000000e+02 },
{ "Lu_153", 1.529587673310000e+02 }, { "Lu_154", 1.539575220000000e+02 }, { "Lu_155", 1.549543162160000e+02 }, { "Lu_156", 1.559530325230000e+02 },
{ "Lu_157", 1.569500983000000e+02 }, { "Lu_158", 1.579493132830000e+02 }, { "Lu_159", 1.589466287760000e+02 }, { "Lu_160", 1.599460330000000e+02 },
{ "Lu_161", 1.609435720000000e+02 }, { "Lu_162", 1.619432772880000e+02 }, { "Lu_163", 1.629411790000000e+02 }, { "Lu_164", 1.639413390000000e+02 },
{ "Lu_165", 1.649394067240000e+02 }, { "Lu_166", 1.659398590000000e+02 }, { "Lu_167", 1.669382700000000e+02 }, { "Lu_168", 1.679387391110000e+02 },
{ "Lu_169", 1.689376514390000e+02 }, { "Lu_170", 1.699384749680000e+02 }, { "Lu_171", 1.709379131360000e+02 }, { "Lu_172", 1.719390856690000e+02 },
{ "Lu_173", 1.729389306020000e+02 }, { "Lu_174", 1.739403374800000e+02 }, { "Lu_175", 1.749407718190000e+02 }, { "Lu_176", 1.759426863100000e+02 },
{ "Lu_177", 1.769437580550000e+02 }, { "Lu_178", 1.779459545590000e+02 }, { "Lu_179", 1.789473274430000e+02 }, { "Lu_180", 1.799498811600000e+02 },
{ "Lu_181", 1.809519700000000e+02 }, { "Lu_182", 1.819550400000000e+02 }, { "Lu_183", 1.829575700000000e+02 }, { "Lu_184", 1.839609100000000e+02 },
{ "Hf_natural", 1.784900000000000e+02 }, { "Hf_153", 1.529706900000000e+02 }, { "Hf_154", 1.539648600000000e+02 }, { "Hf_155", 1.549633900000000e+02 },
{ "Hf_156", 1.559593640250000e+02 }, { "Hf_157", 1.569583960000000e+02 }, { "Hf_158", 1.579547993660000e+02 }, { "Hf_159", 1.589539948700000e+02 },
{ "Hf_160", 1.599506843790000e+02 }, { "Hf_161", 1.609502748440000e+02 }, { "Hf_162", 1.619472104980000e+02 }, { "Hf_163", 1.629470890000000e+02 },
{ "Hf_164", 1.639443672840000e+02 }, { "Hf_165", 1.649445670000000e+02 }, { "Hf_166", 1.659421800000000e+02 }, { "Hf_167", 1.669426000000000e+02 },
{ "Hf_168", 1.679405680000000e+02 }, { "Hf_169", 1.689412590000000e+02 }, { "Hf_170", 1.699396090000000e+02 }, { "Hf_171", 1.709404920000000e+02 },
{ "Hf_172", 1.719394483010000e+02 }, { "Hf_173", 1.729405130000000e+02 }, { "Hf_174", 1.739400461780000e+02 }, { "Hf_175", 1.749415091810000e+02 },
{ "Hf_176", 1.759414086310000e+02 }, { "Hf_177", 1.769432206510000e+02 }, { "Hf_178", 1.779436987660000e+02 }, { "Hf_179", 1.789458161450000e+02 },
{ "Hf_180", 1.799465499530000e+02 }, { "Hf_181", 1.809491012460000e+02 }, { "Hf_182", 1.819505540960000e+02 }, { "Hf_183", 1.829535304390000e+02 },
{ "Hf_184", 1.839554465150000e+02 }, { "Hf_185", 1.849588200000000e+02 }, { "Hf_186", 1.859608900000000e+02 }, { "Hf_187", 1.869645900000000e+02 },
{ "Hf_188", 1.879668500000000e+02 }, { "Ta_natural", 1.809479000000000e+02 }, { "Ta_155", 1.549745920000000e+02 }, { "Ta_156", 1.559723030000000e+02 },
{ "Ta_157", 1.569681924450000e+02 }, { "Ta_158", 1.579666990000000e+02 }, { "Ta_159", 1.589630181730000e+02 }, { "Ta_160", 1.599614860560000e+02 },
{ "Ta_161", 1.609584170000000e+02 }, { "Ta_162", 1.619572918590000e+02 }, { "Ta_163", 1.629543302710000e+02 }, { "Ta_164", 1.639535340000000e+02 },
{ "Ta_165", 1.649507725140000e+02 }, { "Ta_166", 1.659505120000000e+02 }, { "Ta_167", 1.669480930000000e+02 }, { "Ta_168", 1.679480470000000e+02 },
{ "Ta_169", 1.689460110000000e+02 }, { "Ta_170", 1.699461750000000e+02 }, { "Ta_171", 1.709444760000000e+02 }, { "Ta_172", 1.719448950000000e+02 },
{ "Ta_173", 1.729437500000000e+02 }, { "Ta_174", 1.739444540000000e+02 }, { "Ta_175", 1.749437370000000e+02 }, { "Ta_176", 1.759448570000000e+02 },
{ "Ta_177", 1.769444724030000e+02 }, { "Ta_178", 1.779457782210000e+02 }, { "Ta_179", 1.789459295350000e+02 }, { "Ta_180", 1.799474648310000e+02 },
{ "Ta_181", 1.809479957630000e+02 }, { "Ta_182", 1.819501518490000e+02 }, { "Ta_183", 1.829513726160000e+02 }, { "Ta_184", 1.839540079660000e+02 },
{ "Ta_185", 1.849555593750000e+02 }, { "Ta_186", 1.859585520230000e+02 }, { "Ta_187", 1.869605300000000e+02 }, { "Ta_188", 1.879637000000000e+02 },
{ "Ta_189", 1.889658300000000e+02 }, { "Ta_190", 1.899692300000000e+02 }, { "W_natural", 1.838500000000000e+02 }, { "W_158", 1.579745620000000e+02 },
{ "W_159", 1.589729180000000e+02 }, { "W_160", 1.599684788050000e+02 }, { "W_161", 1.609673570000000e+02 }, { "W_162", 1.619634974170000e+02 },
{ "W_163", 1.629625235420000e+02 }, { "W_164", 1.639589543820000e+02 }, { "W_165", 1.649582799490000e+02 }, { "W_166", 1.659550272530000e+02 },
{ "W_167", 1.669548160140000e+02 }, { "W_168", 1.679518083940000e+02 }, { "W_169", 1.689517787900000e+02 }, { "W_170", 1.699492284820000e+02 },
{ "W_171", 1.709494510000000e+02 }, { "W_172", 1.719472920000000e+02 }, { "W_173", 1.729476890000000e+02 }, { "W_174", 1.739460790000000e+02 },
{ "W_175", 1.749467170000000e+02 }, { "W_176", 1.759456340000000e+02 }, { "W_177", 1.769466430000000e+02 }, { "W_178", 1.779458762360000e+02 },
{ "W_179", 1.789470704470000e+02 }, { "W_180", 1.799467044590000e+02 }, { "W_181", 1.809481972480000e+02 }, { "W_182", 1.819482041560000e+02 },
{ "W_183", 1.829502229510000e+02 }, { "W_184", 1.839509311880000e+02 }, { "W_185", 1.849534192640000e+02 }, { "W_186", 1.859543641270000e+02 },
{ "W_187", 1.869571604660000e+02 }, { "W_188", 1.879584891050000e+02 }, { "W_189", 1.889619128680000e+02 }, { "W_190", 1.899631813780000e+02 },
{ "W_191", 1.909666000000000e+02 }, { "W_192", 1.919681700000000e+02 }, { "Re_natural", 1.862070000000000e+02 }, { "Re_160", 1.599821150000000e+02 },
{ "Re_161", 1.609775891190000e+02 }, { "Re_162", 1.619760020000000e+02 }, { "Re_163", 1.629720805350000e+02 }, { "Re_164", 1.639703230000000e+02 },
{ "Re_165", 1.649670885570000e+02 }, { "Re_166", 1.659658080000000e+02 }, { "Re_167", 1.669626010000000e+02 }, { "Re_168", 1.679615726080000e+02 },
{ "Re_169", 1.689587910960000e+02 }, { "Re_170", 1.699582200710000e+02 }, { "Re_171", 1.709557160000000e+02 }, { "Re_172", 1.719554229610000e+02 },
{ "Re_173", 1.729532430000000e+02 }, { "Re_174", 1.739531150000000e+02 }, { "Re_175", 1.749513810000000e+02 }, { "Re_176", 1.759516230000000e+02 },
{ "Re_177", 1.769503280000000e+02 }, { "Re_178", 1.779509890000000e+02 }, { "Re_179", 1.789499876410000e+02 }, { "Re_180", 1.799507890840000e+02 },
{ "Re_181", 1.809500679160000e+02 }, { "Re_182", 1.819512100800000e+02 }, { "Re_183", 1.829508198410000e+02 }, { "Re_184", 1.839525207560000e+02 },
{ "Re_185", 1.849529549820000e+02 }, { "Re_186", 1.859549860840000e+02 }, { "Re_187", 1.869557531090000e+02 }, { "Re_188", 1.879581144380000e+02 },
{ "Re_189", 1.889592290070000e+02 }, { "Re_190", 1.899618179770000e+02 }, { "Re_191", 1.909631252420000e+02 }, { "Re_192", 1.919659600000000e+02 },
{ "Re_193", 1.929674700000000e+02 }, { "Re_194", 1.939704200000000e+02 }, { "Os_natural", 1.902000000000000e+02 }, { "Os_162", 1.619844310000000e+02 },
{ "Os_163", 1.629826900000000e+02 }, { "Os_164", 1.639780356490000e+02 }, { "Os_165", 1.649767620000000e+02 }, { "Os_166", 1.659726907530000e+02 },
{ "Os_167", 1.669715479690000e+02 }, { "Os_168", 1.679678036780000e+02 }, { "Os_169", 1.689670192700000e+02 }, { "Os_170", 1.699635770280000e+02 },
{ "Os_171", 1.709631848190000e+02 }, { "Os_172", 1.719600233030000e+02 }, { "Os_173", 1.729598084090000e+02 }, { "Os_174", 1.739570622020000e+02 },
{ "Os_175", 1.749569458350000e+02 }, { "Os_176", 1.759548060000000e+02 }, { "Os_177", 1.769549653240000e+02 }, { "Os_178", 1.779532512410000e+02 },
{ "Os_179", 1.789538160170000e+02 }, { "Os_180", 1.799523788030000e+02 }, { "Os_181", 1.809532440000000e+02 }, { "Os_182", 1.819521101860000e+02 },
{ "Os_183", 1.829531261020000e+02 }, { "Os_184", 1.839524890710000e+02 }, { "Os_185", 1.849540422650000e+02 }, { "Os_186", 1.859538381580000e+02 },
{ "Os_187", 1.869557504580000e+02 }, { "Os_188", 1.879558382280000e+02 }, { "Os_189", 1.889581474700000e+02 }, { "Os_190", 1.899584470480000e+02 },
{ "Os_191", 1.909609297180000e+02 }, { "Os_192", 1.919614806900000e+02 }, { "Os_193", 1.929641515630000e+02 }, { "Os_194", 1.939651820830000e+02 },
{ "Os_195", 1.949681266610000e+02 }, { "Os_196", 1.959696393330000e+02 }, { "Ir_natural", 1.922200000000000e+02 }, { "Ir_164", 1.639922010000000e+02 },
{ "Ir_165", 1.649875200000000e+02 }, { "Ir_166", 1.659858240000000e+02 }, { "Ir_167", 1.669816651560000e+02 }, { "Ir_168", 1.679798810000000e+02 },
{ "Ir_169", 1.689762949420000e+02 }, { "Ir_170", 1.699749650000000e+02 }, { "Ir_171", 1.709716260420000e+02 }, { "Ir_172", 1.719704560000000e+02 },
{ "Ir_173", 1.729675017390000e+02 }, { "Ir_174", 1.739668610450000e+02 }, { "Ir_175", 1.749641128950000e+02 }, { "Ir_176", 1.759636486880000e+02 },
{ "Ir_177", 1.769613015000000e+02 }, { "Ir_178", 1.779610820000000e+02 }, { "Ir_179", 1.789591222660000e+02 }, { "Ir_180", 1.799592294460000e+02 },
{ "Ir_181", 1.809576252970000e+02 }, { "Ir_182", 1.819580762960000e+02 }, { "Ir_183", 1.829568464580000e+02 }, { "Ir_184", 1.839574760000000e+02 },
{ "Ir_185", 1.849566980000000e+02 }, { "Ir_186", 1.859579461040000e+02 }, { "Ir_187", 1.869573633610000e+02 }, { "Ir_188", 1.879588531210000e+02 },
{ "Ir_189", 1.889587189350000e+02 }, { "Ir_190", 1.899605459680000e+02 }, { "Ir_191", 1.909605940460000e+02 }, { "Ir_192", 1.919626050120000e+02 },
{ "Ir_193", 1.929629264300000e+02 }, { "Ir_194", 1.939650783780000e+02 }, { "Ir_195", 1.949659795730000e+02 }, { "Ir_196", 1.959683965420000e+02 },
{ "Ir_197", 1.969696532850000e+02 }, { "Ir_198", 1.979722800000000e+02 }, { "Ir_199", 1.989738045830000e+02 }, { "Pt_natural", 1.950900000000000e+02 },
{ "Pt_166", 1.659948550000000e+02 }, { "Pt_167", 1.669929790000000e+02 }, { "Pt_168", 1.679881507420000e+02 }, { "Pt_169", 1.689867150000000e+02 },
{ "Pt_170", 1.699824952890000e+02 }, { "Pt_171", 1.709812445420000e+02 }, { "Pt_172", 1.719773471280000e+02 }, { "Pt_173", 1.729764447540000e+02 },
{ "Pt_174", 1.739728187670000e+02 }, { "Pt_175", 1.749724205520000e+02 }, { "Pt_176", 1.759689446220000e+02 }, { "Pt_177", 1.769684694810000e+02 },
{ "Pt_178", 1.779656487240000e+02 }, { "Pt_179", 1.789653634040000e+02 }, { "Pt_180", 1.799630314770000e+02 }, { "Pt_181", 1.809630972850000e+02 },
{ "Pt_182", 1.819611706560000e+02 }, { "Pt_183", 1.829615967030000e+02 }, { "Pt_184", 1.839599222510000e+02 }, { "Pt_185", 1.849606190000000e+02 },
{ "Pt_186", 1.859593508130000e+02 }, { "Pt_187", 1.869605870000000e+02 }, { "Pt_188", 1.879593953910000e+02 }, { "Pt_189", 1.889608336860000e+02 },
{ "Pt_190", 1.899599316550000e+02 }, { "Pt_191", 1.909616766610000e+02 }, { "Pt_192", 1.919610380050000e+02 }, { "Pt_193", 1.929629874010000e+02 },
{ "Pt_194", 1.939626802530000e+02 }, { "Pt_195", 1.949647911340000e+02 }, { "Pt_196", 1.959649515210000e+02 }, { "Pt_197", 1.969673401820000e+02 },
{ "Pt_198", 1.979678927900000e+02 }, { "Pt_199", 1.989705930940000e+02 }, { "Pt_200", 1.999714406770000e+02 }, { "Pt_201", 2.009745128680000e+02 },
{ "Pt_202", 2.019757400000000e+02 }, { "Au_natural", 1.969665000000000e+02 }, { "Au_169", 1.689980800000000e+02 }, { "Au_170", 1.699961220000000e+02 },
{ "Au_171", 1.709918788810000e+02 }, { "Au_172", 1.719900350000000e+02 }, { "Au_173", 1.729862373800000e+02 }, { "Au_174", 1.739847610000000e+02 },
{ "Au_175", 1.749812741070000e+02 }, { "Au_176", 1.759800990000000e+02 }, { "Au_177", 1.769768649080000e+02 }, { "Au_178", 1.779760319200000e+02 },
{ "Au_179", 1.789732128120000e+02 }, { "Au_180", 1.799725211240000e+02 }, { "Au_181", 1.809700790480000e+02 }, { "Au_182", 1.819696178740000e+02 },
{ "Au_183", 1.829675930340000e+02 }, { "Au_184", 1.839674515240000e+02 }, { "Au_185", 1.849657894110000e+02 }, { "Au_186", 1.859659527030000e+02 },
{ "Au_187", 1.869645675410000e+02 }, { "Au_188", 1.879653236610000e+02 }, { "Au_189", 1.889639482860000e+02 }, { "Au_190", 1.899647003390000e+02 },
{ "Au_191", 1.909637042250000e+02 }, { "Au_192", 1.919648129530000e+02 }, { "Au_193", 1.929641497150000e+02 }, { "Au_194", 1.939653652500000e+02 },
{ "Au_195", 1.949650346400000e+02 }, { "Au_196", 1.959665698130000e+02 }, { "Au_197", 1.969665686620000e+02 }, { "Au_198", 1.979682423030000e+02 },
{ "Au_199", 1.989687651930000e+02 }, { "Au_200", 1.999707256470000e+02 }, { "Au_201", 2.009716572400000e+02 }, { "Au_202", 2.019738058380000e+02 },
{ "Au_203", 2.029751545420000e+02 }, { "Au_204", 2.039777240000000e+02 }, { "Au_205", 2.049798700000000e+02 }, { "Hg_natural", 2.005900000000000e+02 },
{ "Hg_171", 1.710037600000000e+02 }, { "Hg_172", 1.719988326860000e+02 }, { "Hg_173", 1.729972420000000e+02 }, { "Hg_174", 1.739928636950000e+02 },
{ "Hg_175", 1.749914232700000e+02 }, { "Hg_176", 1.759873545800000e+02 }, { "Hg_177", 1.769862791580000e+02 }, { "Hg_178", 1.779824831430000e+02 },
{ "Hg_179", 1.789818338610000e+02 }, { "Hg_180", 1.799782663940000e+02 }, { "Hg_181", 1.809778193110000e+02 }, { "Hg_182", 1.819746899640000e+02 },
{ "Hg_183", 1.829744498410000e+02 }, { "Hg_184", 1.839717130510000e+02 }, { "Hg_185", 1.849718990860000e+02 }, { "Hg_186", 1.859693617900000e+02 },
{ "Hg_187", 1.869698142360000e+02 }, { "Hg_188", 1.879675770490000e+02 }, { "Hg_189", 1.889681900340000e+02 }, { "Hg_190", 1.899663224490000e+02 },
{ "Hg_191", 1.909671571050000e+02 }, { "Hg_192", 1.919656343270000e+02 }, { "Hg_193", 1.929666654210000e+02 }, { "Hg_194", 1.939654394090000e+02 },
{ "Hg_195", 1.949667201130000e+02 }, { "Hg_196", 1.959658326490000e+02 }, { "Hg_197", 1.969672129080000e+02 }, { "Hg_198", 1.979667690320000e+02 },
{ "Hg_199", 1.989682799320000e+02 }, { "Hg_200", 1.999683260040000e+02 }, { "Hg_201", 2.009703022680000e+02 }, { "Hg_202", 2.019706430110000e+02 },
{ "Hg_203", 2.029728724840000e+02 }, { "Hg_204", 2.039734939330000e+02 }, { "Hg_205", 2.049760733860000e+02 }, { "Hg_206", 2.059775140660000e+02 },
{ "Hg_207", 2.069825885450000e+02 }, { "Hg_208", 2.079859400000000e+02 }, { "Hg_209", 2.089910400000000e+02 }, { "Hg_210", 2.099945100000000e+02 },
{ "Tl_natural", 2.043700000000000e+02 }, { "Tl_176", 1.760005900000000e+02 }, { "Tl_177", 1.769964272860000e+02 }, { "Tl_178", 1.779948970000000e+02 },
{ "Tl_179", 1.789910890820000e+02 }, { "Tl_180", 1.799899060000000e+02 }, { "Tl_181", 1.809862574470000e+02 }, { "Tl_182", 1.819856671040000e+02 },
{ "Tl_183", 1.829821928020000e+02 }, { "Tl_184", 1.839818731220000e+02 }, { "Tl_185", 1.849787913050000e+02 }, { "Tl_186", 1.859783250000000e+02 },
{ "Tl_187", 1.869759058970000e+02 }, { "Tl_188", 1.879760097820000e+02 }, { "Tl_189", 1.889735884280000e+02 }, { "Tl_190", 1.899738771490000e+02 },
{ "Tl_191", 1.909717861540000e+02 }, { "Tl_192", 1.919722250000000e+02 }, { "Tl_193", 1.929706720000000e+02 }, { "Tl_194", 1.939712000000000e+02 },
{ "Tl_195", 1.949697743350000e+02 }, { "Tl_196", 1.959704811510000e+02 }, { "Tl_197", 1.969695745110000e+02 }, { "Tl_198", 1.979704834950000e+02 },
{ "Tl_199", 1.989698770000000e+02 }, { "Tl_200", 1.999709626720000e+02 }, { "Tl_201", 2.009708188910000e+02 }, { "Tl_202", 2.019721058080000e+02 },
{ "Tl_203", 2.029723442200000e+02 }, { "Tl_204", 2.039738635220000e+02 }, { "Tl_205", 2.049744275410000e+02 }, { "Tl_206", 2.059761103200000e+02 },
{ "Tl_207", 2.069774194290000e+02 }, { "Tl_208", 2.079820187000000e+02 }, { "Tl_209", 2.089853589520000e+02 }, { "Tl_210", 2.099900736890000e+02 },
{ "Tl_211", 2.109934770000000e+02 }, { "Tl_212", 2.119982280000000e+02 }, { "Pb_natural", 2.072000000000000e+02 }, { "Pb_178", 1.780038301910000e+02 },
{ "Pb_179", 1.790021500000000e+02 }, { "Pb_180", 1.799979181730000e+02 }, { "Pb_181", 1.809966239580000e+02 }, { "Pb_182", 1.819926718420000e+02 },
{ "Pb_183", 1.829918746290000e+02 }, { "Pb_184", 1.839881423390000e+02 }, { "Pb_185", 1.849876099440000e+02 }, { "Pb_186", 1.859842389450000e+02 },
{ "Pb_187", 1.869839183700000e+02 }, { "Pb_188", 1.879808743380000e+02 }, { "Pb_189", 1.889808070000000e+02 }, { "Pb_190", 1.899780815170000e+02 },
{ "Pb_191", 1.909782650000000e+02 }, { "Pb_192", 1.919757851710000e+02 }, { "Pb_193", 1.929761732340000e+02 }, { "Pb_194", 1.939740120700000e+02 },
{ "Pb_195", 1.949745420500000e+02 }, { "Pb_196", 1.959727741090000e+02 }, { "Pb_197", 1.969734311240000e+02 }, { "Pb_198", 1.979720339590000e+02 },
{ "Pb_199", 1.989729166500000e+02 }, { "Pb_200", 1.999718266750000e+02 }, { "Pb_201", 2.009728845110000e+02 }, { "Pb_202", 2.019721591330000e+02 },
{ "Pb_203", 2.029733905210000e+02 }, { "Pb_204", 2.039730435890000e+02 }, { "Pb_205", 2.049744817550000e+02 }, { "Pb_206", 2.059744652780000e+02 },
{ "Pb_207", 2.069758968870000e+02 }, { "Pb_208", 2.079766520710000e+02 }, { "Pb_209", 2.089810901200000e+02 }, { "Pb_210", 2.099841885270000e+02 },
{ "Pb_211", 2.109887369640000e+02 }, { "Pb_212", 2.119918975430000e+02 }, { "Pb_213", 2.129965814990000e+02 }, { "Pb_214", 2.139998054080000e+02 },
{ "Pb_215", 2.150048070000000e+02 }, { "Bi_natural", 2.089804000000000e+02 }, { "Bi_184", 1.840011240000000e+02 }, { "Bi_185", 1.849976250000000e+02 },
{ "Bi_186", 1.859965976250000e+02 }, { "Bi_187", 1.869931578350000e+02 }, { "Bi_188", 1.879922651540000e+02 }, { "Bi_189", 1.889891990120000e+02 },
{ "Bi_190", 1.899882951290000e+02 }, { "Bi_191", 1.909857861190000e+02 }, { "Bi_192", 1.919854579540000e+02 }, { "Bi_193", 1.929829597710000e+02 },
{ "Bi_194", 1.939828339600000e+02 }, { "Bi_195", 1.949806507370000e+02 }, { "Bi_196", 1.959806665090000e+02 }, { "Bi_197", 1.969788644540000e+02 },
{ "Bi_198", 1.979792060000000e+02 }, { "Bi_199", 1.989776719610000e+02 }, { "Bi_200", 1.999781318290000e+02 }, { "Bi_201", 2.009770090360000e+02 },
{ "Bi_202", 2.019777423240000e+02 }, { "Bi_203", 2.029768760010000e+02 }, { "Bi_204", 2.039778127360000e+02 }, { "Bi_205", 2.049773893660000e+02 },
{ "Bi_206", 2.059784991300000e+02 }, { "Bi_207", 2.069784706790000e+02 }, { "Bi_208", 2.079797421960000e+02 }, { "Bi_209", 2.089803987340000e+02 },
{ "Bi_210", 2.099841203710000e+02 }, { "Bi_211", 2.109872694600000e+02 }, { "Bi_212", 2.119912857240000e+02 }, { "Bi_213", 2.129943846660000e+02 },
{ "Bi_214", 2.139987115390000e+02 }, { "Bi_215", 2.150017697760000e+02 }, { "Bi_216", 2.160063059430000e+02 }, { "Bi_217", 2.170094700000000e+02 },
{ "Bi_218", 2.180143160000000e+02 }, { "Po_natural", 2.090000000000000e+02 }, { "Po_188", 1.879994220480000e+02 }, { "Po_189", 1.889984805620000e+02 },
{ "Po_190", 1.899951011850000e+02 }, { "Po_191", 1.909945744850000e+02 }, { "Po_192", 1.919913351490000e+02 }, { "Po_193", 1.929910252750000e+02 },
{ "Po_194", 1.939881856060000e+02 }, { "Po_195", 1.949881107280000e+02 }, { "Po_196", 1.959855345800000e+02 }, { "Po_197", 1.969856596300000e+02 },
{ "Po_198", 1.979833886160000e+02 }, { "Po_199", 1.989836660630000e+02 }, { "Po_200", 1.999817986040000e+02 }, { "Po_201", 2.009822597640000e+02 },
{ "Po_202", 2.019807575410000e+02 }, { "Po_203", 2.029814201030000e+02 }, { "Po_204", 2.039803181210000e+02 }, { "Po_205", 2.049812033220000e+02 },
{ "Po_206", 2.059804810990000e+02 }, { "Po_207", 2.069815931730000e+02 }, { "Po_208", 2.079812457020000e+02 }, { "Po_209", 2.089824304350000e+02 },
{ "Po_210", 2.099828736730000e+02 }, { "Po_211", 2.109866531540000e+02 }, { "Po_212", 2.119888679690000e+02 }, { "Po_213", 2.129928572800000e+02 },
{ "Po_214", 2.139952013500000e+02 }, { "Po_215", 2.149994199880000e+02 }, { "Po_216", 2.160019150350000e+02 }, { "Po_217", 2.170063347960000e+02 },
{ "Po_218", 2.180089730370000e+02 }, { "Po_219", 2.190137440000000e+02 }, { "Po_220", 2.200166020000000e+02 }, { "At_natural", 2.100000000000000e+02 },
{ "At_193", 1.929998431120000e+02 }, { "At_194", 1.939987250850000e+02 }, { "At_195", 1.949962680980000e+02 }, { "At_196", 1.959957880770000e+02 },
{ "At_197", 1.969931892150000e+02 }, { "At_198", 1.979928372020000e+02 }, { "At_199", 1.989905322540000e+02 }, { "At_200", 1.999903512640000e+02 },
{ "At_201", 2.009884169990000e+02 }, { "At_202", 2.019886302360000e+02 }, { "At_203", 2.029869419840000e+02 }, { "At_204", 2.039872513260000e+02 },
{ "At_205", 2.049860744830000e+02 }, { "At_206", 2.059866670360000e+02 }, { "At_207", 2.069857835020000e+02 }, { "At_208", 2.079865899770000e+02 },
{ "At_209", 2.089861731430000e+02 }, { "At_210", 2.099871477100000e+02 }, { "At_211", 2.109874962710000e+02 }, { "At_212", 2.119907447710000e+02 },
{ "At_213", 2.129929366460000e+02 }, { "At_214", 2.139963717330000e+02 }, { "At_215", 2.149986525700000e+02 }, { "At_216", 2.160024232570000e+02 },
{ "At_217", 2.170047188220000e+02 }, { "At_218", 2.180086943360000e+02 }, { "At_219", 2.190111616910000e+02 }, { "At_220", 2.200154076820000e+02 },
{ "At_221", 2.210180500000000e+02 }, { "At_222", 2.220223300000000e+02 }, { "At_223", 2.230251900000000e+02 }, { "Rn_natural", 2.220000000000000e+02 },
{ "Rn_195", 1.950054376960000e+02 }, { "Rn_196", 1.960021152230000e+02 }, { "Rn_197", 1.970015843510000e+02 }, { "Rn_198", 1.979986786630000e+02 },
{ "Rn_199", 1.989983702970000e+02 }, { "Rn_200", 1.999956993000000e+02 }, { "Rn_201", 2.009956283350000e+02 }, { "Rn_202", 2.019932634920000e+02 },
{ "Rn_203", 2.029933866870000e+02 }, { "Rn_204", 2.039914287400000e+02 }, { "Rn_205", 2.049917187990000e+02 }, { "Rn_206", 2.059902141040000e+02 },
{ "Rn_207", 2.069907342250000e+02 }, { "Rn_208", 2.079896424700000e+02 }, { "Rn_209", 2.089904147420000e+02 }, { "Rn_210", 2.099896962160000e+02 },
{ "Rn_211", 2.109906005230000e+02 }, { "Rn_212", 2.119907035290000e+02 }, { "Rn_213", 2.129938826680000e+02 }, { "Rn_214", 2.139953625540000e+02 },
{ "Rn_215", 2.149987454830000e+02 }, { "Rn_216", 2.160002743700000e+02 }, { "Rn_217", 2.170039276750000e+02 }, { "Rn_218", 2.180056012560000e+02 },
{ "Rn_219", 2.190094802040000e+02 }, { "Rn_220", 2.200113939810000e+02 }, { "Rn_221", 2.210155367820000e+02 }, { "Rn_222", 2.220175777380000e+02 },
{ "Rn_223", 2.230217900000000e+02 }, { "Rn_224", 2.240240900000000e+02 }, { "Rn_225", 2.250284400000000e+02 }, { "Rn_226", 2.260308900000000e+02 },
{ "Rn_227", 2.270354070000000e+02 }, { "Rn_228", 2.280379860000000e+02 }, { "Fr_natural", 2.230000000000000e+02 }, { "Fr_199", 1.990072581470000e+02 },
{ "Fr_200", 2.000065724900000e+02 }, { "Fr_201", 2.010038608670000e+02 }, { "Fr_202", 2.020033728470000e+02 }, { "Fr_203", 2.030009246470000e+02 },
{ "Fr_204", 2.040006532040000e+02 }, { "Fr_205", 2.049985939600000e+02 }, { "Fr_206", 2.059986660660000e+02 }, { "Fr_207", 2.069969494140000e+02 },
{ "Fr_208", 2.079971387830000e+02 }, { "Fr_209", 2.089959535550000e+02 }, { "Fr_210", 2.099964077380000e+02 }, { "Fr_211", 2.109955365440000e+02 },
{ "Fr_212", 2.119962022440000e+02 }, { "Fr_213", 2.129961890810000e+02 }, { "Fr_214", 2.139989711450000e+02 }, { "Fr_215", 2.150003414970000e+02 },
{ "Fr_216", 2.160031979900000e+02 }, { "Fr_217", 2.170046319510000e+02 }, { "Fr_218", 2.180075783220000e+02 }, { "Fr_219", 2.190092521490000e+02 },
{ "Fr_220", 2.200123274050000e+02 }, { "Fr_221", 2.210142547620000e+02 }, { "Fr_222", 2.220175517300000e+02 }, { "Fr_223", 2.230197358570000e+02 },
{ "Fr_224", 2.240232499510000e+02 }, { "Fr_225", 2.250255654140000e+02 }, { "Fr_226", 2.260293862310000e+02 }, { "Fr_227", 2.270318359380000e+02 },
{ "Fr_228", 2.280357290000000e+02 }, { "Fr_229", 2.290384502280000e+02 }, { "Fr_230", 2.300425100000000e+02 }, { "Fr_231", 2.310454400000000e+02 },
{ "Fr_232", 2.320497720000000e+02 }, { "Ra_natural", 2.260000000000000e+02 }, { "Ra_202", 2.020098906860000e+02 }, { "Ra_203", 2.030092716190000e+02 },
{ "Ra_204", 2.040064996680000e+02 }, { "Ra_205", 2.050062685700000e+02 }, { "Ra_206", 2.060038272700000e+02 }, { "Ra_207", 2.070037981050000e+02 },
{ "Ra_208", 2.080018399400000e+02 }, { "Ra_209", 2.090019913730000e+02 }, { "Ra_210", 2.100004949780000e+02 }, { "Ra_211", 2.110008979870000e+02 },
{ "Ra_212", 2.119997944990000e+02 }, { "Ra_213", 2.130003839590000e+02 }, { "Ra_214", 2.140001078940000e+02 }, { "Ra_215", 2.150027198340000e+02 },
{ "Ra_216", 2.160035330350000e+02 }, { "Ra_217", 2.170063203270000e+02 }, { "Ra_218", 2.180071402300000e+02 }, { "Ra_219", 2.190100850780000e+02 },
{ "Ra_220", 2.200110283840000e+02 }, { "Ra_221", 2.210139173380000e+02 }, { "Ra_222", 2.220153745300000e+02 }, { "Ra_223", 2.230185021710000e+02 },
{ "Ra_224", 2.240202118210000e+02 }, { "Ra_225", 2.250236115640000e+02 }, { "Ra_226", 2.260254098230000e+02 }, { "Ra_227", 2.270291778420000e+02 },
{ "Ra_228", 2.280310702920000e+02 }, { "Ra_229", 2.290349575770000e+02 }, { "Ra_230", 2.300370563940000e+02 }, { "Ra_231", 2.310412200000000e+02 },
{ "Ra_232", 2.320436380000000e+02 }, { "Ra_233", 2.330480600000000e+02 }, { "Ra_234", 2.340507040000000e+02 }, { "Ac_natural", 2.270000000000000e+02 },
{ "Ac_206", 2.060145049800000e+02 }, { "Ac_207", 2.070119497480000e+02 }, { "Ac_208", 2.080115515510000e+02 }, { "Ac_209", 2.090094948630000e+02 },
{ "Ac_210", 2.100094359860000e+02 }, { "Ac_211", 2.110077348350000e+02 }, { "Ac_212", 2.120078138220000e+02 }, { "Ac_213", 2.130066076430000e+02 },
{ "Ac_214", 2.140069017980000e+02 }, { "Ac_215", 2.150064536250000e+02 }, { "Ac_216", 2.160087200750000e+02 }, { "Ac_217", 2.170093469140000e+02 },
{ "Ac_218", 2.180116414530000e+02 }, { "Ac_219", 2.190124203890000e+02 }, { "Ac_220", 2.200147629790000e+02 }, { "Ac_221", 2.210155912480000e+02 },
{ "Ac_222", 2.220178438510000e+02 }, { "Ac_223", 2.230191374680000e+02 }, { "Ac_224", 2.240217228660000e+02 }, { "Ac_225", 2.250232295850000e+02 },
{ "Ac_226", 2.260260980890000e+02 }, { "Ac_227", 2.270277521270000e+02 }, { "Ac_228", 2.280310211120000e+02 }, { "Ac_229", 2.290330152430000e+02 },
{ "Ac_230", 2.300362941780000e+02 }, { "Ac_231", 2.310385587860000e+02 }, { "Ac_232", 2.320420274380000e+02 }, { "Ac_233", 2.330445500000000e+02 },
{ "Ac_234", 2.340484200000000e+02 }, { "Ac_235", 2.350512320000000e+02 }, { "Ac_236", 2.360552960000000e+02 }, { "Th_natural", 2.320381000000000e+02 },
{ "Th_209", 2.090177156820000e+02 }, { "Th_210", 2.100150753420000e+02 }, { "Th_211", 2.110149284130000e+02 }, { "Th_212", 2.120129802880000e+02 },
{ "Th_213", 2.130130101400000e+02 }, { "Th_214", 2.140114997700000e+02 }, { "Th_215", 2.150117303300000e+02 }, { "Th_216", 2.160110621150000e+02 },
{ "Th_217", 2.170131143280000e+02 }, { "Th_218", 2.180132844990000e+02 }, { "Th_219", 2.190155368950000e+02 }, { "Th_220", 2.200157477620000e+02 },
{ "Th_221", 2.210181836740000e+02 }, { "Th_222", 2.220184681210000e+02 }, { "Th_223", 2.230208114480000e+02 }, { "Th_224", 2.240214668950000e+02 },
{ "Th_225", 2.250239510210000e+02 }, { "Th_226", 2.260249030690000e+02 }, { "Th_227", 2.270277040700000e+02 }, { "Th_228", 2.280287411270000e+02 },
{ "Th_229", 2.290317624300000e+02 }, { "Th_230", 2.300331338430000e+02 }, { "Th_231", 2.310363043430000e+02 }, { "Th_232", 2.320380553250000e+02 },
{ "Th_233", 2.330415818430000e+02 }, { "Th_234", 2.340436012300000e+02 }, { "Th_235", 2.350475100740000e+02 }, { "Th_236", 2.360498700000000e+02 },
{ "Th_237", 2.370538940000000e+02 }, { "Th_238", 2.380564960000000e+02 }, { "Pa_natural", 2.310000000000000e+02 }, { "Pa_212", 2.120232041380000e+02 },
{ "Pa_213", 2.130211093400000e+02 }, { "Pa_214", 2.140209184170000e+02 }, { "Pa_215", 2.150191858650000e+02 }, { "Pa_216", 2.160191095640000e+02 },
{ "Pa_217", 2.170183239860000e+02 }, { "Pa_218", 2.180200418890000e+02 }, { "Pa_219", 2.190198831430000e+02 }, { "Pa_220", 2.200218753030000e+02 },
{ "Pa_221", 2.210218779830000e+02 }, { "Pa_222", 2.220237420000000e+02 }, { "Pa_223", 2.230239622730000e+02 }, { "Pa_224", 2.240256257380000e+02 },
{ "Pa_225", 2.250261306780000e+02 }, { "Pa_226", 2.260279477530000e+02 }, { "Pa_227", 2.270288050720000e+02 }, { "Pa_228", 2.280310513760000e+02 },
{ "Pa_229", 2.290320967930000e+02 }, { "Pa_230", 2.300345407540000e+02 }, { "Pa_231", 2.310358839900000e+02 }, { "Pa_232", 2.320385915920000e+02 },
{ "Pa_233", 2.330402472770000e+02 }, { "Pa_234", 2.340433080580000e+02 }, { "Pa_235", 2.350454436150000e+02 }, { "Pa_236", 2.360486812840000e+02 },
{ "Pa_237", 2.370511456590000e+02 }, { "Pa_238", 2.380545027100000e+02 }, { "Pa_239", 2.390572600000000e+02 }, { "Pa_240", 2.400609800000000e+02 },
{ "U_natural", 2.380290000000000e+02 }, { "U_217", 2.170243687910000e+02 }, { "U_218", 2.180235356710000e+02 }, { "U_219", 2.190249191600000e+02 },
{ "U_220", 2.200247230000000e+02 }, { "U_221", 2.210263990000000e+02 }, { "U_222", 2.220260860000000e+02 }, { "U_223", 2.230277386000000e+02 },
{ "U_224", 2.240276047780000e+02 }, { "U_225", 2.250293907170000e+02 }, { "U_226", 2.260293387020000e+02 }, { "U_227", 2.270311563670000e+02 },
{ "U_228", 2.280313740060000e+02 }, { "U_229", 2.290335059390000e+02 }, { "U_230", 2.300339397840000e+02 }, { "U_231", 2.310362937040000e+02 },
{ "U_232", 2.320371561520000e+02 }, { "U_233", 2.330396352070000e+02 }, { "U_234", 2.340409520880000e+02 }, { "U_235", 2.350439299180000e+02 },
{ "U_236", 2.360455680060000e+02 }, { "U_237", 2.370487301840000e+02 }, { "U_238", 2.380507882470000e+02 }, { "U_239", 2.390542932990000e+02 },
{ "U_240", 2.400565919880000e+02 }, { "U_241", 2.410603300000000e+02 }, { "U_242", 2.420629310000000e+02 }, { "Np_natural", 2.370000000000000e+02 },
{ "Np_225", 2.250339139330000e+02 }, { "Np_226", 2.260351450000000e+02 }, { "Np_227", 2.270349567890000e+02 }, { "Np_228", 2.280361800000000e+02 },
{ "Np_229", 2.290362638080000e+02 }, { "Np_230", 2.300378275970000e+02 }, { "Np_231", 2.310382450850000e+02 }, { "Np_232", 2.320401080000000e+02 },
{ "Np_233", 2.330407405460000e+02 }, { "Np_234", 2.340428950380000e+02 }, { "Np_235", 2.350440632670000e+02 }, { "Np_236", 2.360465696000000e+02 },
{ "Np_237", 2.370481734440000e+02 }, { "Np_238", 2.380509464050000e+02 }, { "Np_239", 2.390529390250000e+02 }, { "Np_240", 2.400561621820000e+02 },
{ "Np_241", 2.410582524310000e+02 }, { "Np_242", 2.420616411800000e+02 }, { "Np_243", 2.430642790000000e+02 }, { "Np_244", 2.440678500000000e+02 },
{ "Pu_natural", 2.440000000000000e+02 }, { "Pu_228", 2.280387423280000e+02 }, { "Pu_229", 2.290401502120000e+02 }, { "Pu_230", 2.300396498860000e+02 },
{ "Pu_231", 2.310411011070000e+02 }, { "Pu_232", 2.320411870970000e+02 }, { "Pu_233", 2.330429973750000e+02 }, { "Pu_234", 2.340433170760000e+02 },
{ "Pu_235", 2.350452860500000e+02 }, { "Pu_236", 2.360460579640000e+02 }, { "Pu_237", 2.370484096580000e+02 }, { "Pu_238", 2.380495598940000e+02 },
{ "Pu_239", 2.390521633810000e+02 }, { "Pu_240", 2.400538135450000e+02 }, { "Pu_241", 2.410568514560000e+02 }, { "Pu_242", 2.420587426110000e+02 },
{ "Pu_243", 2.430620030920000e+02 }, { "Pu_244", 2.440642039070000e+02 }, { "Pu_245", 2.450677471540000e+02 }, { "Pu_246", 2.460702046270000e+02 },
{ "Pu_247", 2.470740700000000e+02 }, { "Am_natural", 2.430000000000000e+02 }, { "Am_231", 2.310455600000000e+02 }, { "Am_232", 2.320465900000000e+02 },
{ "Am_233", 2.330463480000000e+02 }, { "Am_234", 2.340478090000000e+02 }, { "Am_235", 2.350479460000000e+02 }, { "Am_236", 2.360495790000000e+02 },
{ "Am_237", 2.370499960000000e+02 }, { "Am_238", 2.380519843240000e+02 }, { "Am_239", 2.390530244790000e+02 }, { "Am_240", 2.400553001790000e+02 },
{ "Am_241", 2.410568291440000e+02 }, { "Am_242", 2.420595491590000e+02 }, { "Am_243", 2.430613810800000e+02 }, { "Am_244", 2.440642848470000e+02 },
{ "Am_245", 2.450664521140000e+02 }, { "Am_246", 2.460697746190000e+02 }, { "Am_247", 2.470720930000000e+02 }, { "Am_248", 2.480757520000000e+02 },
{ "Am_249", 2.490784800000000e+02 }, { "Cm_natural", 2.470000000000000e+02 }, { "Cm_233", 2.330507712320000e+02 }, { "Cm_234", 2.340501598410000e+02 },
{ "Cm_235", 2.350514340000000e+02 }, { "Cm_236", 2.360514130000000e+02 }, { "Cm_237", 2.370529010000000e+02 }, { "Cm_238", 2.380530286970000e+02 },
{ "Cm_239", 2.390549570000000e+02 }, { "Cm_240", 2.400555295390000e+02 }, { "Cm_241", 2.410576530010000e+02 }, { "Cm_242", 2.420588358240000e+02 },
{ "Cm_243", 2.430613891140000e+02 }, { "Cm_244", 2.440627525780000e+02 }, { "Cm_245", 2.450654912490000e+02 }, { "Cm_246", 2.460672236620000e+02 },
{ "Cm_247", 2.470703535400000e+02 }, { "Cm_248", 2.480723485080000e+02 }, { "Cm_249", 2.490759534130000e+02 }, { "Cm_250", 2.500783569590000e+02 },
{ "Cm_251", 2.510822846050000e+02 }, { "Cm_252", 2.520848700000000e+02 }, { "Bk_natural", 2.470000000000000e+02 }, { "Bk_235", 2.350565800000000e+02 },
{ "Bk_236", 2.360573300000000e+02 }, { "Bk_237", 2.370570030000000e+02 }, { "Bk_238", 2.380582810000000e+02 }, { "Bk_239", 2.390582790000000e+02 },
{ "Bk_240", 2.400597590000000e+02 }, { "Bk_241", 2.410602300000000e+02 }, { "Bk_242", 2.420619810000000e+02 }, { "Bk_243", 2.430630075720000e+02 },
{ "Bk_244", 2.440651807740000e+02 }, { "Bk_245", 2.450663616160000e+02 }, { "Bk_246", 2.460686729470000e+02 }, { "Bk_247", 2.470703070800000e+02 },
{ "Bk_248", 2.480730860000000e+02 }, { "Bk_249", 2.490749866570000e+02 }, { "Bk_250", 2.500783165200000e+02 }, { "Bk_251", 2.510807601720000e+02 },
{ "Bk_252", 2.520843100000000e+02 }, { "Bk_253", 2.530868800000000e+02 }, { "Bk_254", 2.540906000000000e+02 }, { "Cf_natural", 2.510000000000000e+02 },
{ "Cf_237", 2.370620700000000e+02 }, { "Cf_238", 2.380614100000000e+02 }, { "Cf_239", 2.390624220000000e+02 }, { "Cf_240", 2.400623020000000e+02 },
{ "Cf_241", 2.410637260000000e+02 }, { "Cf_242", 2.420637015520000e+02 }, { "Cf_243", 2.430654270000000e+02 }, { "Cf_244", 2.440660006890000e+02 },
{ "Cf_245", 2.450680486120000e+02 }, { "Cf_246", 2.460688053090000e+02 }, { "Cf_247", 2.470710005890000e+02 }, { "Cf_248", 2.480721848610000e+02 },
{ "Cf_249", 2.490748535370000e+02 }, { "Cf_250", 2.500764060660000e+02 }, { "Cf_251", 2.510795867880000e+02 }, { "Cf_252", 2.520816258460000e+02 },
{ "Cf_253", 2.530851331450000e+02 }, { "Cf_254", 2.540873229090000e+02 }, { "Cf_255", 2.550910460000000e+02 }, { "Cf_256", 2.560934400000000e+02 },
{ "Es_natural", 2.520000000000000e+02 }, { "Es_120", 1.175000000000000e+02 }, { "Es_121", 1.165460000000000e+02 }, { "Es_122", 1.185440000000000e+02 },
{ "Es_125", 1.175000000000000e+02 }, { "Es_240", 2.400689200000000e+02 }, { "Es_241", 2.410685380000000e+02 }, { "Es_242", 2.420697450000000e+02 },
{ "Es_243", 2.430695480000000e+02 }, { "Es_244", 2.440708830000000e+02 }, { "Es_245", 2.450713240000000e+02 }, { "Es_246", 2.460728960000000e+02 },
{ "Es_247", 2.470736560000000e+02 }, { "Es_248", 2.480754710000000e+02 }, { "Es_249", 2.490764110000000e+02 }, { "Es_250", 2.500786120000000e+02 },
{ "Es_251", 2.510799921420000e+02 }, { "Es_252", 2.520829785120000e+02 }, { "Es_253", 2.530848246970000e+02 }, { "Es_254", 2.540880220210000e+02 },
{ "Es_255", 2.550902731220000e+02 }, { "Es_256", 2.560935980000000e+02 }, { "Es_257", 2.570959790000000e+02 }, { "Es_258", 2.580995200000000e+02 },
{ "Fm_natural", 2.570000000000000e+02 }, { "Fm_242", 2.420734300000000e+02 }, { "Fm_243", 2.430743530000000e+02 }, { "Fm_244", 2.440740840000000e+02 },
{ "Fm_245", 2.450753850000000e+02 }, { "Fm_246", 2.460752990230000e+02 }, { "Fm_247", 2.470768470000000e+02 }, { "Fm_248", 2.480771947140000e+02 },
{ "Fm_249", 2.490790340000000e+02 }, { "Fm_250", 2.500795212640000e+02 }, { "Fm_251", 2.510815750170000e+02 }, { "Fm_252", 2.520824668550000e+02 },
{ "Fm_253", 2.530851852360000e+02 }, { "Fm_254", 2.540868542200000e+02 }, { "Fm_255", 2.550899622020000e+02 }, { "Fm_256", 2.560917731170000e+02 },
{ "Fm_257", 2.570951047240000e+02 }, { "Fm_258", 2.580970760000000e+02 }, { "Fm_259", 2.591005950000000e+02 }, { "Fm_260", 2.601026780000000e+02 },
{ "Md_natural", 2.580000000000000e+02 }, { "Md_245", 2.450808290000000e+02 }, { "Md_246", 2.460818860000000e+02 }, { "Md_247", 2.470816350000000e+02 },
{ "Md_248", 2.480828230000000e+02 }, { "Md_249", 2.490830130000000e+02 }, { "Md_250", 2.500844200000000e+02 }, { "Md_251", 2.510848390000000e+02 },
{ "Md_252", 2.520865600000000e+02 }, { "Md_253", 2.530872800000000e+02 }, { "Md_254", 2.540896560000000e+02 }, { "Md_255", 2.550910827050000e+02 },
{ "Md_256", 2.560940590250000e+02 }, { "Md_257", 2.570955413680000e+02 }, { "Md_258", 2.580984313190000e+02 }, { "Md_259", 2.591005090000000e+02 },
{ "Md_260", 2.601036520000000e+02 }, { "Md_261", 2.611057210000000e+02 }, { "Md_262", 2.621088650000000e+02 }, { "No_natural", 2.590000000000000e+02 },
{ "No_248", 2.480865960000000e+02 }, { "No_249", 2.490878330000000e+02 }, { "No_250", 2.500875100000000e+02 }, { "No_251", 2.510890120000000e+02 },
{ "No_252", 2.520889765210000e+02 }, { "No_253", 2.530906780000000e+02 }, { "No_254", 2.540909552530000e+02 }, { "No_255", 2.550932411310000e+02 },
{ "No_256", 2.560942826660000e+02 }, { "No_257", 2.570968771900000e+02 }, { "No_258", 2.580982070000000e+02 }, { "No_259", 2.591010310000000e+02 },
{ "No_260", 2.601026430000000e+02 }, { "No_261", 2.611057490000000e+02 }, { "No_262", 2.621073010000000e+02 }, { "No_263", 2.631105520000000e+02 },
{ "No_264", 2.641123450000000e+02 }, { "Lr_natural", 2.600000000000000e+02 }, { "Lr_251", 2.510943600000000e+02 }, { "Lr_252", 2.520953710000000e+02 },
{ "Lr_253", 2.530952100000000e+02 }, { "Lr_254", 2.540964540000000e+02 }, { "Lr_255", 2.550966810000000e+02 }, { "Lr_256", 2.560986290000000e+02 },
{ "Lr_257", 2.570995550000000e+02 }, { "Lr_258", 2.581018140000000e+02 }, { "Lr_259", 2.591029010000000e+02 }, { "Lr_260", 2.601055040000000e+02 },
{ "Lr_261", 2.611068830000000e+02 }, { "Lr_262", 2.621096340000000e+02 }, { "Lr_263", 2.631112930000000e+02 }, { "Lr_264", 2.641140380000000e+02 },
{ "Lr_265", 2.651158390000000e+02 }, { "Lr_266", 2.661193050000000e+02 }, { "Rf_natural", 2.610000000000000e+02 }, { "Rf_253", 2.531006890000000e+02 },
{ "Rf_254", 2.541001840000000e+02 }, { "Rf_255", 2.551013400000000e+02 }, { "Rf_256", 2.561011661940000e+02 }, { "Rf_257", 2.571029900000000e+02 },
{ "Rf_258", 2.581034890000000e+02 }, { "Rf_259", 2.591056370000000e+02 }, { "Rf_260", 2.601064400000000e+02 }, { "Rf_261", 2.611087665560000e+02 },
{ "Rf_262", 2.621099250000000e+02 }, { "Rf_263", 2.631125470000000e+02 }, { "Rf_264", 2.641139850000000e+02 }, { "Rf_265", 2.651167040000000e+02 },
{ "Rf_266", 2.661179560000000e+02 }, { "Rf_267", 2.671215290000000e+02 }, { "Rf_268", 2.681236440000000e+02 }, { "Db_natural", 2.620000000000000e+02 },
{ "Db_255", 2.551073980000000e+02 }, { "Db_256", 2.561081270000000e+02 }, { "Db_257", 2.571077220000000e+02 }, { "Db_258", 2.581092310000000e+02 },
{ "Db_259", 2.591096100000000e+02 }, { "Db_260", 2.601113000000000e+02 }, { "Db_261", 2.611120560000000e+02 }, { "Db_262", 2.621140840000000e+02 },
{ "Db_263", 2.631149880000000e+02 }, { "Db_264", 2.641174040000000e+02 }, { "Db_265", 2.651186010000000e+02 }, { "Db_266", 2.661210290000000e+02 },
{ "Db_267", 2.671223770000000e+02 }, { "Db_268", 2.681254450000000e+02 }, { "Db_269", 2.691274600000000e+02 }, { "Db_270", 2.701307120000000e+02 },
{ "Sg_natural", 2.630000000000000e+02 }, { "Sg_258", 2.581131680000000e+02 }, { "Sg_259", 2.591145000000000e+02 }, { "Sg_260", 2.601144220710000e+02 },
{ "Sg_261", 2.611161170000000e+02 }, { "Sg_262", 2.621163980000000e+02 }, { "Sg_263", 2.631183220000000e+02 }, { "Sg_264", 2.641189310000000e+02 },
{ "Sg_265", 2.651211146930000e+02 }, { "Sg_266", 2.661220650000000e+02 }, { "Sg_267", 2.671244250000000e+02 }, { "Sg_268", 2.681256060000000e+02 },
{ "Sg_269", 2.691287550000000e+02 }, { "Sg_270", 2.701303290000000e+02 }, { "Sg_271", 2.711334720000000e+02 }, { "Sg_272", 2.721351580000000e+02 },
{ "Sg_273", 2.731382200000000e+02 }, { "Bh_260", 2.601219700000000e+02 }, { "Bh_261", 2.611216640000000e+02 }, { "Bh_262", 2.621228920000000e+02 },
{ "Bh_263", 2.631230350000000e+02 }, { "Bh_264", 2.641246040000000e+02 }, { "Bh_265", 2.651251470000000e+02 }, { "Bh_266", 2.661269420000000e+02 },
{ "Bh_267", 2.671276500000000e+02 }, { "Bh_268", 2.681297550000000e+02 }, { "Bh_269", 2.691306940000000e+02 }, { "Bh_270", 2.701336160000000e+02 },
{ "Bh_271", 2.711351790000000e+02 }, { "Bh_272", 2.721380320000000e+02 }, { "Bh_273", 2.731396180000000e+02 }, { "Bh_274", 2.741424400000000e+02 },
{ "Bh_275", 2.751442500000000e+02 }, { "Hs_263", 2.631285580000000e+02 }, { "Hs_264", 2.641283948850000e+02 }, { "Hs_265", 2.651300850000000e+02 },
{ "Hs_266", 2.661300970000000e+02 }, { "Hs_267", 2.671317890000000e+02 }, { "Hs_268", 2.681321620000000e+02 }, { "Hs_269", 2.691340560000000e+02 },
{ "Hs_270", 2.701346500000000e+02 }, { "Hs_271", 2.711376570000000e+02 }, { "Hs_272", 2.721390520000000e+02 }, { "Hs_273", 2.731419860000000e+02 },
{ "Hs_274", 2.741431310000000e+02 }, { "Hs_275", 2.751459520000000e+02 }, { "Hs_276", 2.761472080000000e+02 }, { "Hs_277", 2.771498410000000e+02 },
{ "Mt_265", 2.651361510000000e+02 }, { "Mt_266", 2.661372990000000e+02 }, { "Mt_267", 2.671373070000000e+02 }, { "Mt_268", 2.681387280000000e+02 },
{ "Mt_269", 2.691390550000000e+02 }, { "Mt_270", 2.701406570000000e+02 }, { "Mt_271", 2.711411390000000e+02 }, { "Mt_272", 2.721437380000000e+02 },
{ "Mt_273", 2.731449130000000e+02 }, { "Mt_274", 2.741474920000000e+02 }, { "Mt_275", 2.751486470000000e+02 }, { "Mt_276", 2.761511560000000e+02 },
{ "Mt_277", 2.771524200000000e+02 }, { "Mt_278", 2.781548120000000e+02 }, { "Mt_279", 2.791561930000000e+02 }, { "Uun_267", 2.671443410000000e+02 },
{ "Uun_268", 2.681437950000000e+02 }, { "Uun_269", 2.691451240000000e+02 }, { "Uun_270", 2.701447200000000e+02 }, { "Uun_271", 2.711460620000000e+02 },
{ "Uun_272", 2.721463170000000e+02 }, { "Uun_273", 2.731488630000000e+02 }, { "Uun_274", 2.741494920000000e+02 }, { "Uun_275", 2.751521760000000e+02 },
{ "Uun_276", 2.761530340000000e+02 }, { "Uun_277", 2.771556470000000e+02 }, { "Uun_278", 2.781564690000000e+02 }, { "Uun_279", 2.791588610000000e+02 },
{ "Uun_280", 2.801597950000000e+02 }, { "Uun_281", 2.811620610000000e+02 }, { "Uuu_272", 2.721536150000000e+02 }, { "Uuu_273", 2.731536820000000e+02 },
{ "Uuu_274", 2.741557130000000e+02 }, { "Uuu_275", 2.751561420000000e+02 }, { "Uuu_276", 2.761584930000000e+02 }, { "Uuu_277", 2.771595190000000e+02 },
{ "Uuu_278", 2.781616040000000e+02 }, { "Uuu_279", 2.791624680000000e+02 }, { "Uuu_280", 2.801644730000000e+02 }, { "Uuu_281", 2.811653720000000e+02 },
{ "Uuu_282", 2.821674860000000e+02 }, { "Uuu_283", 2.831684150000000e+02 }, { "Uub_277", 2.771639430000000e+02 }, { "Uub_278", 2.781643120000000e+02 },
{ "Uub_279", 2.791665460000000e+02 }, { "Uub_280", 2.801670390000000e+02 }, { "Uub_281", 2.811692860000000e+02 }, { "Uub_282", 2.821697650000000e+02 },
{ "Uub_283", 2.831717920000000e+02 }, { "Uub_284", 2.841723840000000e+02 }, { "Uub_285", 2.851741050000000e+02 }, { "_283", 2.831764510000000e+02 },
{ "_284", 2.841780800000000e+02 }, { "_285", 2.851787320000000e+02 }, { "_286", 2.861804810000000e+02 }, { "_287", 2.871810450000000e+02 },
{ "Uuq_285", 2.851836980000000e+02 }, { "Uuq_286", 2.861838550000000e+02 }, { "Uuq_287", 2.871855990000000e+02 }, { "Uuq_288", 2.881856890000000e+02 },
{ "Uuq_289", 2.891872790000000e+02 }, { "_287", 2.871911860000000e+02 }, { "_288", 2.881924920000000e+02 }, { "_289", 2.891927150000000e+02 },
{ "_290", 2.901941410000000e+02 }, { "_291", 2.911943840000000e+02 }, { "Uuh_289", 2.891988620000000e+02 }, { "Uuh_290", 2.901985900000000e+02 },
{ "Uuh_291", 2.912000110000000e+02 }, { "Uuh_292", 2.921997860000000e+02 }, { "_291", 2.912065640000000e+02 }, { "_292", 2.922075490000000e+02 },
{ "Uuo_293", 2.932146700000000e+02 } };
/*
***************************************************************
*/
double G4GIDI_targetMass( const char *targetSymbol ) {
int i, n = sizeof( ZAMasses ) / sizeof( ZAMasses[0] );
double mass = -1.0;
//TK modified
std::string target(targetSymbol);
for( i = 0; i < n; i++ ) {
//TK modified
//if( !strcmp( ZAMasses[i].symbol, targetSymbol ) ) {
if( ZAMasses[i].symbol == target ) {
mass = ZAMasses[i].mass;
break;
}
}
return( mass );
}
/*
***************************************************************
*/
double G4GIDI_Z_AMass( int iZ, int iA ) {
char *name = G4GIDI_Misc_Z_A_m_ToName( iZ, iA );
double mass;
if( name == NULL ) return( -1.0 );
mass = G4GIDI_targetMass( name );
xData_free( NULL, name );
return( mass );
}
@@ -0,0 +1,433 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include "G4GIDI_target.hh"
#include "G4GIDI_mass.hh"
#include "G4GIDI_Misc.hh"
using namespace std;
using namespace GIDI;
/*
***************************************************************
*/
G4GIDI_target::G4GIDI_target( const char *fileName ) {
init( fileName );
}
/*
***************************************************************
*/
G4GIDI_target::G4GIDI_target( string &fileName ) {
init( fileName.c_str( ) );
}
/*
***************************************************************
*/
void G4GIDI_target::init( const char *fileName ) {
int i, j, n, *p, *q;
tpia_channel *channel;
smr_initialize( &smr );
sourceFilename = fileName;
target = tpia_target_createRead( &smr, fileName );
if( !smr_isOk( &smr ) ) {
smr_print( &smr, stderr, 1 );
throw 1;
}
name = target->targetID->name;
mass = G4GIDI_targetMass( target->targetID->name );
equalProbableBinSampleMethod = "constant";
elasticIndices = NULL;
nElasticIndices = nCaptureIndices = nFissionIndices = nOthersIndices = 0;
if( ( n = tpia_target_numberOfChannels( &smr, target ) ) > 0 ) {
p = elasticIndices = (int *) xData_malloc2( NULL, n * sizeof( double ), 1, "elasticIndices" );
for( i = 0; i < n; i++ ) { /* Find elastic channel(s). */
channel = tpia_target_heated_getChannelAtIndex( target->baseHeatedTarget, i );
if( channel->ENDL_C == 10 ) {
*(p++) = i;
nElasticIndices++;
}
}
captureIndices = p;
for( i = 0; i < n; i++ ) { /* Find capture channel(s). */
channel = tpia_target_heated_getChannelAtIndex( target->baseHeatedTarget, i );
if( channel->ENDL_C == 46 ) {
*(p++) = i;
nCaptureIndices++;
}
}
fissionIndices = p;
for( i = 0; i < n; i++ ) { /* Find fission channel(s). */
channel = tpia_target_heated_getChannelAtIndex( target->baseHeatedTarget, i );
if( channel->fission != NULL ) {
*(p++) = i;
nFissionIndices++;
}
}
othersIndices = p;
for( i = 0; i < n; i++ ) { /* Find other channel(s). */
for( j = 0, q = elasticIndices; j < nElasticIndices; j++, q++ ) if( *q == i ) break;
if( j < nElasticIndices ) continue;
for( j = 0, q = captureIndices; j < nCaptureIndices; j++, q++ ) if( *q == i ) break;
if( j < nCaptureIndices ) continue;
for( j = 0, q = fissionIndices; j < nFissionIndices; j++, q++ ) if( *q == i ) break;
if( j < nFissionIndices ) continue;
*p = i;
p++;
nOthersIndices++;
}
}
}
/*
***************************************************************
*/
G4GIDI_target::~G4GIDI_target( ) {
tpia_target_free( &smr, target );
xData_free( &smr, elasticIndices );
smr_release( &smr );
}
/*
***************************************************************
*/
string *G4GIDI_target::getName( void ) { return( &name ); }
/*
***************************************************************
*/
string *G4GIDI_target::getFilename( void ) { return( &sourceFilename ); }
/*
***************************************************************
*/
int G4GIDI_target::getZ( void ) {
return( target->targetID->Z );
}
/*
***************************************************************
*/
int G4GIDI_target::getA( void ) {
return( target->targetID->A );
}
/*
***************************************************************
*/
int G4GIDI_target::getM( void ) {
return( target->targetID->m );
}
/*
***************************************************************
*/
double G4GIDI_target::getMass( void ) {
return( mass );
}
/*
***************************************************************
*/
int G4GIDI_target::getTemperatures( double *temperatures ) {
return( tpia_target_getTemperatures( &smr, target, temperatures ) );
}
/*
***************************************************************
*/
int G4GIDI_target::readTemperature( int index ) {
return( tpia_target_readHeatedTarget( &smr, target, index, 0 ) );
}
/*
***************************************************************
*/
string G4GIDI_target::getEqualProbableBinSampleMethod( void ) {
return( equalProbableBinSampleMethod );
}
/*
***************************************************************
*/
int G4GIDI_target::setEqualProbableBinSampleMethod( string method ) {
if( method == "constant" ) {
equalProbableBinSampleMethod = "constant"; }
if( method == "linear" ) {
equalProbableBinSampleMethod = "linear"; }
else {
return( 1 );
}
return( 0 );
}
/*
***************************************************************
*/
int G4GIDI_target::getNumberOfChannels( void ) {
return( tpia_target_numberOfChannels( &smr, target ) );
}
/*
***************************************************************
*/
int G4GIDI_target::getNumberOfProductionChannels( void ) {
return( tpia_target_numberOfProductionChannels( &smr, target ) );
}
/*
***************************************************************
*/
vector<channelID> *G4GIDI_target::getChannelIDs( void ) {
return( getChannelIDs2( target->baseHeatedTarget->channels, tpia_target_numberOfChannels( &smr, target ) ) );
}
/*
***************************************************************
*/
vector<channelID> *G4GIDI_target::getProductionChannelIDs( void ) {
return( getChannelIDs2( target->baseHeatedTarget->productionChannels, tpia_target_numberOfProductionChannels( &smr, target ) ) );
}
/*
***************************************************************
*/
vector<channelID> *G4GIDI_target::getChannelIDs2( tpia_channel **channels, int n ) {
int i = 0;
vector<channelID> *listOfChannels;
listOfChannels = new vector<channelID>( n );
for( i = 0; i < n; i++ ) (*listOfChannels)[i].ID = channels[i]->outputChannel;
return( listOfChannels );
}
/*
***************************************************************
*/
vector<double> *G4GIDI_target::getEnergyGridAtTIndex( int index ) {
xData_Int i, n;
double *dEnergyGrid;
vector<double> *energyGrid;
vector<double>::iterator iter;
n = tpia_target_getEnergyGridAtTIndex( &smr, target, index, &dEnergyGrid );
if( n < 0 ) return( NULL );
energyGrid = new vector<double>( n );
for( i = 0, iter = energyGrid->begin( ); i < n; i++, iter++ ) *iter = dEnergyGrid[i];
return( energyGrid );
}
/*
***************************************************************
*/
double G4GIDI_target::getTotalCrossSectionAtE( double e_in, double temperature ) {
return( tpia_target_getTotalCrossSectionAtTAndE( NULL, target, temperature, -1, e_in, tpia_crossSectionType_pointwise ) );
}
/*
***************************************************************
*/
double G4GIDI_target::getElasticCrossSectionAtE( double e_in, double temperature ) {
return( sumChannelCrossSectionAtE( nElasticIndices, elasticIndices, e_in, temperature ) );
}
/*
***************************************************************
*/
double G4GIDI_target::getCaptureCrossSectionAtE( double e_in, double temperature ) {
return( sumChannelCrossSectionAtE( nCaptureIndices, captureIndices, e_in, temperature ) );
}
/*
***************************************************************
*/
double G4GIDI_target::getFissionCrossSectionAtE( double e_in, double temperature ) {
return( sumChannelCrossSectionAtE( nFissionIndices, fissionIndices, e_in, temperature ) );
}
/*
***************************************************************
*/
double G4GIDI_target::getOthersCrossSectionAtE( double e_in, double temperature ) {
return( sumChannelCrossSectionAtE( nOthersIndices, othersIndices, e_in, temperature ) );
}
/*
***************************************************************
*/
double G4GIDI_target::sumChannelCrossSectionAtE( int nIndices, int *indices, double e_in, double temperature ) {
int i;
double xsec = 0.;
for( i = 0; i < nIndices; i++ )
xsec += tpia_target_getIndexChannelCrossSectionAtE( &smr, target, indices[i], temperature, -1, e_in, tpia_crossSectionType_pointwise );
return( xsec );
}
/*
***************************************************************
*/
int G4GIDI_target::sampleChannelCrossSectionAtE( int nIndices, int *indices, double e_in, double temperature,
double (*rng)( void * ), void *rngState ) {
int i;
double xsec = 0., rxsec = sumChannelCrossSectionAtE( nIndices, indices, e_in, temperature ) * tpia_misc_drng( rng, rngState );
for( i = 0; i < nIndices - 1; i++ ) {
xsec += tpia_target_getIndexChannelCrossSectionAtE( &smr, target, indices[i], temperature, -1, e_in, tpia_crossSectionType_pointwise );
if( xsec >= rxsec ) break;
}
return( indices[i] );
}
/*
***************************************************************
*/
//double G4GIDI_target::getElasticFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ) {
double G4GIDI_target::getElasticFinalState( double e_in, double , double (*rng)( void * ), void *rngState ) {
tpia_decaySamplingInfo decaySamplingInfo;
tpia_channel *channel = tpia_target_heated_getChannelAtIndex_smr( &smr, target->baseHeatedTarget, elasticIndices[0] );
tpia_product *product;
decaySamplingInfo.e_in = e_in;
decaySamplingInfo.isVelocity = 0;
tpia_frame_setColumn( &smr, &(decaySamplingInfo.frame), 0, tpia_referenceFrame_lab );
decaySamplingInfo.samplingMethods = &(target->samplingMethods);
decaySamplingInfo.rng = rng;
decaySamplingInfo.rngState = rngState;
product = tpia_decayChannel_getFirstProduct( &(channel->decayChannel) );
tpia_angular_SampleMu( &smr, &(product->angular), &decaySamplingInfo );
return( decaySamplingInfo.mu );
}
/*
***************************************************************
*/
vector<G4GIDI_Product> *G4GIDI_target::getCaptureFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ) {
return( getFinalState( nCaptureIndices, captureIndices, e_in, temperature, rng, rngState ) );
}
/*
***************************************************************
*/
vector<G4GIDI_Product> *G4GIDI_target::getFissionFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ) {
return( getFinalState( nFissionIndices, fissionIndices, e_in, temperature, rng, rngState ) );
}
/*
***************************************************************
*/
vector<G4GIDI_Product> *G4GIDI_target::getOthersFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ) {
return( getFinalState( nOthersIndices, othersIndices, e_in, temperature, rng, rngState ) );
}
/*
***************************************************************
*/
vector<G4GIDI_Product> *G4GIDI_target::getFinalState( int nIndices, int *indices, double e_in, double temperature, double (*rng)( void * ), void *rngState ) {
#define nProductsMax 50
int index = 0, i, n;
vector<G4GIDI_Product> *products = NULL;
tpia_decaySamplingInfo decaySamplingInfo;
tpia_productOutgoingData productDatas[nProductsMax], *productData;
decaySamplingInfo.e_in = e_in;
decaySamplingInfo.samplingMethods = &(target->samplingMethods);
decaySamplingInfo.isVelocity = 0;
tpia_frame_setColumn( &smr, &(decaySamplingInfo.frame), 0, tpia_referenceFrame_lab );
decaySamplingInfo.rng = rng;
decaySamplingInfo.rngState = rngState;
if( nIndices == 0 ) {
return( NULL ); }
else {
if( nIndices == 1 ) {
index = indices[0]; }
else {
index = sampleChannelCrossSectionAtE( nIndices, indices, e_in, temperature, rng, rngState );
}
}
n = tpia_target_heated_sampleIndexChannelProductsAtE( &smr, target->baseHeatedTarget, index, &decaySamplingInfo, nProductsMax, productDatas );
if( n > 0 ) {
if( ( products = new vector<G4GIDI_Product>( n ) ) != NULL ) {
for( i = 0; i < n; i++ ) {
productData = &(productDatas[i]);
(*products)[i].A = productData->productID->A;
(*products)[i].Z = productData->productID->Z;
(*products)[i].m = productData->productID->m;
(*products)[i].kineticEnergy = productData->kineticEnergy;
(*products)[i].px = productData->px_vx;
(*products)[i].py = productData->py_vy;
(*products)[i].pz = productData->pz_vz;
}
}
}
return( products );
#undef nProductsMax
}
@@ -0,0 +1,118 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4LENDCapture.hh"
#include "G4Nucleus.hh"
#include "G4ParticleTable.hh"
G4HadFinalState * G4LENDCapture::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTarg )
{
G4double temp = aTrack.GetMaterial()->GetTemperature();
//G4int iZ = int ( aTarg.GetZ() );
//G4int iA = int ( aTarg.GetN() );
//migrate to integer A and Z (GetN_asInt returns number of neutrons in the nucleus since this)
G4int iZ = aTarg.GetZ_asInt();
G4int iA = aTarg.GetA_asInt();
G4double ke = aTrack.GetKineticEnergy();
G4HadFinalState* theResult = &theParticleChange;
theResult->Clear();
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
std::vector<G4GIDI_Product>* products = aTarget->getCaptureFinalState( ke*MeV, temp, NULL, NULL );
if ( products != NULL )
{
G4ThreeVector p(0,0,0);
G4int totN = 0;
for ( G4int j = 0; j < int( products->size() ); j++ )
{
G4int jZ = (*products)[j].Z;
G4int jA = (*products)[j].A;
//G4cout << "ZA = " << 1000 * (*products)[j].Z + (*products)[j].A << " EK = "
// << (*products)[j].kineticEnergy
// << " px " << (*products)[j].px
// << " py " << (*products)[j].py
// << " pz " << (*products)[j].pz
// << G4endl;
G4ThreeVector dp((*products)[j].px,(*products)[j].py,(*products)[j].pz);
p += dp;
G4DynamicParticle* theSec = new G4DynamicParticle;
if ( jA == 1 && jZ == 1 )
{
theSec->SetDefinition( G4Proton::Proton() );
totN += 1;
}
else if ( jA == 1 && jZ == 0 )
{
theSec->SetDefinition( G4Neutron::Neutron() );
totN += 1;
}
else if ( jZ > 0 )
{
if ( jA != 0 )
{
theSec->SetDefinition( G4ParticleTable::GetParticleTable()->FindIon( jZ , jA , 0 , 0 ) );
totN += jA;
}
else
{
theSec->SetDefinition( G4ParticleTable::GetParticleTable()->FindIon( jZ , iA+1-totN , 0 , 0 ) );
}
}
else
{
theSec->SetDefinition( G4Gamma::Gamma() );
}
theSec->SetMomentum( G4ThreeVector( (*products)[j].px*MeV , (*products)[j].py*MeV , (*products)[j].pz*MeV ) );
if ( dp.mag() == 0 )
{
theSec->SetMomentum( -p*MeV );
}
theResult->AddSecondary( theSec );
}
}
delete products;
theResult->SetStatusChange( stopAndKill );
return theResult;
}
@@ -0,0 +1,44 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4LENDCaptureCrossSection.hh"
G4double G4LENDCaptureCrossSection::getLENDCrossSection( G4GIDI_target* target , G4double ke , G4double temperature )
{
if ( target == NULL ) return 0.0;
// 090407
//return target->getCaptureCrossSection( ke/MeV , temperature )*barn;
//return target->getCaptureCrossSectionAtE( ke/MeV , temperature )*barn;
G4double result = target->getCaptureCrossSectionAtE( ke/MeV , temperature )*barn;
if ( result == 0.0 && ke/eV < 1.0e-4)
{
G4double el = 1.0e-4*eV;
G4double eh = 2.0e-4*eV;
G4double xs_el = target->getCaptureCrossSectionAtE( el/MeV , temperature )*barn;
G4double xs_eh = target->getCaptureCrossSectionAtE( eh/MeV , temperature )*barn;
result = GetUltraLowEnergyExtrapolatedXS( el , eh , xs_el , xs_eh , ke );
}
return result;
}
@@ -0,0 +1,353 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Class Description
// Cross Section for LEND (Low Energy Nuclear Data)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDCrossSection.hh"
#include "G4ElementTable.hh"
#include "G4HadronicException.hh"
//TK110811
G4bool G4LENDCrossSection::IsIsoApplicable( const G4DynamicParticle* dp, G4int /*iZ*/ , G4int /*aA*/ ,
const G4Element* /*element*/ , const G4Material* /*material*/ )
{
G4double eKin = dp->GetKineticEnergy();
if ( dp->GetDefinition() != proj ) return false;
if ( eKin > GetMaxKinEnergy() || eKin < GetMinKinEnergy() ) return false;
return true;
}
G4double G4LENDCrossSection::GetIsoCrossSection( const G4DynamicParticle* dp , G4int iZ , G4int iA ,
const G4Isotope* /*isotope*/ , const G4Element* /*elment*/ , const G4Material* material )
{
G4double xs = 0.0;
G4double ke = dp->GetKineticEnergy();
G4double temp = material->GetTemperature();
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
xs = getLENDCrossSection ( aTarget , ke , temp );
return xs;
}
/*
G4bool G4LENDCrossSection::IsApplicable(const G4DynamicParticle*aP, const G4Element*)
{
G4bool result = true;
G4double eKin = aP->GetKineticEnergy();
if( eKin > GetMaxKinEnergy() || aP->GetDefinition() != proj ) result = false;
return result;
}
*/
G4LENDCrossSection::G4LENDCrossSection( const G4String nam )
:G4VCrossSectionDataSet( nam )
{
default_evaluation = "endl99";
allow_nat = false;
allow_any = false;
SetMinKinEnergy( 0*MeV );
SetMaxKinEnergy( 20*MeV );
lend_manager = G4LENDManager::GetInstance();
}
G4LENDCrossSection::~G4LENDCrossSection()
{
for ( std::map< G4int , G4LENDUsedTarget* >::iterator
it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
{
delete it->second;
}
}
void G4LENDCrossSection::BuildPhysicsTable( const G4ParticleDefinition& )
{
create_used_target_map();
}
void G4LENDCrossSection::DumpPhysicsTable(const G4ParticleDefinition& aP)
{
if ( &aP != proj )
throw G4HadronicException(__FILE__, __LINE__, "Attempt to use LEND data for particles other than neutrons!!!");
G4cout << G4endl;
G4cout << "Dump Cross Sections of " << GetName() << G4endl;
G4cout << "(Pointwise cross-section at 300 Kelvin.)" << G4endl;
G4cout << G4endl;
G4cout << "Target informaiton " << G4endl;
for ( std::map< G4int , G4LENDUsedTarget* >::iterator
it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
{
G4cout
<< "Wanted " << it->second->GetWantedEvaluation()
<< ", Z= " << it->second->GetWantedZ()
<< ", A= " << it->second->GetWantedA()
<< "; Actual " << it->second->GetActualEvaluation()
<< ", Z= " << it->second->GetActualZ()
<< ", A= " << it->second->GetActualA()
<< ", " << it->second->GetTarget()
<< G4endl;
G4int ie = 0;
G4GIDI_target* aTarget = it->second->GetTarget();
G4double aT = 300;
for ( ie = 0 ; ie < 130 ; ie++ )
{
G4double ke = 1.0e-5 * std::pow ( 10.0 , ie/10.0 ) *eV;
if ( ke < 20*MeV )
{
G4cout << " " << GetName() << ", cross section at " << ke/eV << " [eV] = " << getLENDCrossSection ( aTarget , ke , aT )/barn << " [barn] " << G4endl;
}
}
G4cout << G4endl;
}
}
/*
//110810
//G4double G4LENDCrossSection::GetCrossSection(const G4DynamicParticle* aP , const G4Element* anElement , G4double aT)
G4double G4LENDCrossSection::GetCrossSection(const G4DynamicParticle* aP , int iZ , const G4Material* aMat)
{
//110810
G4double aT = aMat->GetTemperature();
G4Element* anElement = lend_manager->GetNistElementBuilder()->FindOrBuildElement( iZ );
G4double ke = aP->GetKineticEnergy();
G4double XS = 0.0;
G4int numberOfIsotope = anElement->GetNumberOfIsotopes();
if ( numberOfIsotope > 0 )
{
// User Defined Abundances
for ( G4int i_iso = 0 ; i_iso < numberOfIsotope ; i_iso++ )
{
G4int iZ = anElement->GetIsotope( i_iso )->GetZ();
G4int iA = anElement->GetIsotope( i_iso )->GetN();
G4double ratio = anElement->GetRelativeAbundanceVector()[i_iso];
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
XS += ratio*getLENDCrossSection ( aTarget , ke , aT );
}
}
else
{
// Natural Abundances
G4NistElementBuilder* nistElementBuild = lend_manager->GetNistElementBuilder();
G4int iZ = int ( anElement->GetZ() );
G4int numberOfNistIso = nistElementBuild->GetNumberOfNistIsotopes( int ( anElement->GetZ() ) );
G4int Nfirst = nistElementBuild->GetNistFirstIsotopeN( iZ );
for ( G4int i = 0 ; i < numberOfNistIso ; i++ )
{
G4int iA = Nfirst + i;
G4double ratio = nistElementBuild->GetIsotopeAbundance( iZ , iA );
if ( ratio > 0.0 )
{
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
XS += ratio*getLENDCrossSection ( aTarget , ke , aT );
//G4cout << ke/eV << " " << iZ << " " << iMass << " " << aTarget << " " << getLENDCrossSection ( aTarget , ke , aT ) << G4endl;
}
}
}
//G4cout << "XS= " << XS << G4endl;
return XS;
}
//110810
//G4double G4LENDCrossSection::GetIsoCrossSection(const G4DynamicParticle* dp, const G4Isotope* isotope, G4double aT )
G4double G4LENDCrossSection::GetIsoCrossSection(const G4DynamicParticle* dp, const G4Isotope* isotope, const G4Material* aMat)
{
//110810
G4double aT = aMat->GetTemperature();
G4double ke = dp->GetKineticEnergy();
G4int iZ = isotope->GetZ();
G4int iA = isotope->GetN();
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
return getLENDCrossSection ( aTarget , ke , aT );
}
//110810
//G4double G4LENDCrossSection::GetZandACrossSection(const G4DynamicParticle* dp, G4int iZ, G4int iA, G4double aT)
G4double G4LENDCrossSection::GetZandACrossSection(const G4DynamicParticle* dp, G4int iZ, G4int iA, const G4Material* aMat)
{
//110810
G4double aT = aMat->GetTemperature();
G4double ke = dp->GetKineticEnergy();
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
return getLENDCrossSection ( aTarget , ke , aT );
}
*/
void G4LENDCrossSection::recreate_used_target_map()
{
for ( std::map< G4int , G4LENDUsedTarget* >::iterator
it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
{
delete it->second;
}
usedTarget_map.clear();
create_used_target_map();
}
void G4LENDCrossSection::create_used_target_map()
{
lend_manager->RequestChangeOfVerboseLevel( verboseLevel );
size_t numberOfElements = G4Element::GetNumberOfElements();
static const G4ElementTable* theElementTable = G4Element::GetElementTable();
for ( size_t i = 0 ; i < numberOfElements ; ++i )
{
const G4Element* anElement = (*theElementTable)[i];
G4int numberOfIsotope = anElement->GetNumberOfIsotopes();
if ( numberOfIsotope > 0 )
{
// User Defined Abundances
for ( G4int i_iso = 0 ; i_iso < numberOfIsotope ; i_iso++ )
{
G4int iZ = anElement->GetIsotope( i_iso )->GetZ();
G4int iA = anElement->GetIsotope( i_iso )->GetN();
//G4LENDUsedTarget* aTarget = new G4LENDUsedTarget ( G4Neutron::Neutron() , default_evaluation , iZ , iA );
G4LENDUsedTarget* aTarget = new G4LENDUsedTarget ( proj , default_evaluation , iZ , iA );
if ( allow_nat == true ) aTarget->AllowNat();
if ( allow_any == true ) aTarget->AllowAny();
usedTarget_map.insert( std::pair< G4int , G4LENDUsedTarget* > ( lend_manager->GetNucleusEncoding( iZ , iA ) , aTarget ) );
}
}
else
{
// Natural Abundances
G4NistElementBuilder* nistElementBuild = lend_manager->GetNistElementBuilder();
G4int iZ = int ( anElement->GetZ() );
//G4cout << nistElementBuild->GetNumberOfNistIsotopes( int ( anElement->GetZ() ) ) << G4endl;
G4int numberOfNistIso = nistElementBuild->GetNumberOfNistIsotopes( int ( anElement->GetZ() ) );
for ( G4int i = 0 ; i < numberOfNistIso ; i++ )
{
//G4cout << nistElementBuild->GetIsotopeAbundance( iZ , nistElementBuild->GetNistFirstIsotopeN( iZ ) + i ) << G4endl;
if ( nistElementBuild->GetIsotopeAbundance( iZ , nistElementBuild->GetNistFirstIsotopeN( iZ ) + i ) > 0 )
{
G4int iMass = nistElementBuild->GetNistFirstIsotopeN( iZ ) + i;
//G4cout << iZ << " " << nistElementBuild->GetNistFirstIsotopeN( iZ ) + i << " " << nistElementBuild->GetIsotopeAbundance ( iZ , iMass ) << G4endl;
G4LENDUsedTarget* aTarget = new G4LENDUsedTarget ( proj , default_evaluation , iZ , iMass );
if ( allow_nat == true ) aTarget->AllowNat();
if ( allow_any == true ) aTarget->AllowAny();
usedTarget_map.insert( std::pair< G4int , G4LENDUsedTarget* > ( lend_manager->GetNucleusEncoding( iZ , iMass ) , aTarget ) );
}
}
}
}
G4cout << "Dump UsedTarget for " << GetName() << G4endl;
G4cout << "Requested Evaluation, Z , A -> Actual Evaluation, Z , A(0=Nat) , Pointer of Target" << G4endl;
for ( std::map< G4int , G4LENDUsedTarget* >::iterator
it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
{
G4cout
<< " " << it->second->GetWantedEvaluation()
<< ", " << it->second->GetWantedZ()
<< ", " << it->second->GetWantedA()
<< " -> " << it->second->GetActualEvaluation()
<< ", " << it->second->GetActualZ()
<< ", " << it->second->GetActualA()
<< ", " << it->second->GetTarget()
<< G4endl;
}
}
// elow ehigh xs_elow xs_ehigh ke (ke < elow)
G4double G4LENDCrossSection::GetUltraLowEnergyExtrapolatedXS( G4double x1, G4double x2, G4double y1, G4double y2 , G4double ke )
{
//XS propotinal to 1/v at low energy -> 1/root(E)
//XS = a * 1/root(E) + b
G4double a = ( y2 - y1 ) / ( 1/std::sqrt(x2) - 1/std::sqrt(x1) );
G4double b = y1 - a * 1/std::sqrt(x1);
G4double result = a * 1/std::sqrt(ke) + b;
return result;
}
@@ -0,0 +1,139 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4LENDElastic.hh"
#include "G4Nucleus.hh"
#include "G4ParticleTable.hh"
G4HadFinalState * G4LENDElastic::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTarg )
{
G4double temp = aTrack.GetMaterial()->GetTemperature();
//G4int iZ = int ( aTarg.GetZ() );
//G4int iA = int ( aTarg.GetN() );
//migrate to integer A and Z (GetN_asInt returns number of neutrons in the nucleus since this)
G4int iZ = aTarg.GetZ_asInt();
G4int iA = aTarg.GetA_asInt();
G4double ke = aTrack.GetKineticEnergy();
//G4HadFinalState* theResult = new G4HadFinalState();
G4HadFinalState* theResult = &theParticleChange;
theResult->Clear();
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
G4double aMu = aTarget->getElasticFinalState( ke*MeV, temp, NULL, NULL );
G4double phi = twopi*G4UniformRand();
G4double theta = std::acos( aMu );
//G4double sinth = std::sin( theta );
G4ReactionProduct theNeutron( const_cast<G4ParticleDefinition *>( aTrack.GetDefinition() ) );
theNeutron.SetMomentum( aTrack.Get4Momentum().vect() );
theNeutron.SetKineticEnergy( ke );
//G4cout << "iZ " << iZ << " iA " << iA << G4endl;
G4ReactionProduct theTarget( G4ParticleTable::GetParticleTable()->FindIon( iZ , iA , 0 , iZ ) );
G4double mass = G4ParticleTable::GetParticleTable()->FindIon( iZ , iA , 0 , iZ )->GetPDGMass();
// add Thermal motion
G4double kT = k_Boltzmann*temp;
G4ThreeVector v ( G4RandGauss::shoot() * std::sqrt( kT*mass )
, G4RandGauss::shoot() * std::sqrt( kT*mass )
, G4RandGauss::shoot() * std::sqrt( kT*mass ) );
theTarget.SetMomentum( v );
G4ThreeVector the3Neutron = theNeutron.GetMomentum();
G4double nEnergy = theNeutron.GetTotalEnergy();
G4ThreeVector the3Target = theTarget.GetMomentum();
G4double tEnergy = theTarget.GetTotalEnergy();
G4ReactionProduct theCMS;
G4double totE = nEnergy+tEnergy;
G4ThreeVector the3CMS = the3Target+the3Neutron;
theCMS.SetMomentum(the3CMS);
G4double cmsMom = std::sqrt(the3CMS*the3CMS);
G4double sqrts = std::sqrt((totE-cmsMom)*(totE+cmsMom));
theCMS.SetMass(sqrts);
theCMS.SetTotalEnergy(totE);
theNeutron.Lorentz(theNeutron, theCMS);
theTarget.Lorentz(theTarget, theCMS);
G4double en = theNeutron.GetTotalMomentum(); // already in CMS.
G4ThreeVector cms3Mom=theNeutron.GetMomentum(); // for neutron direction in CMS
G4double cms_theta=cms3Mom.theta();
G4double cms_phi=cms3Mom.phi();
G4ThreeVector tempVector;
tempVector.setX( std::cos(theta)*std::sin(cms_theta)*std::cos(cms_phi)
+std::sin(theta)*std::cos(phi)*std::cos(cms_theta)*std::cos(cms_phi)
-std::sin(theta)*std::sin(phi)*std::sin(cms_phi) );
tempVector.setY( std::cos(theta)*std::sin(cms_theta)*std::sin(cms_phi)
+std::sin(theta)*std::cos(phi)*std::cos(cms_theta)*std::sin(cms_phi)
+std::sin(theta)*std::sin(phi)*std::cos(cms_phi) );
tempVector.setZ( std::cos(theta)*std::cos(cms_theta)
-std::sin(theta)*std::cos(phi)*std::sin(cms_theta) );
tempVector *= en;
theNeutron.SetMomentum(tempVector);
theTarget.SetMomentum(-tempVector);
G4double tP = theTarget.GetTotalMomentum();
G4double tM = theTarget.GetMass();
theTarget.SetTotalEnergy(std::sqrt((tP+tM)*(tP+tM)-2.*tP*tM));
theNeutron.Lorentz(theNeutron, -1.*theCMS);
//110913 Add Protection for very low energy (1e-6eV) scattering
if ( theNeutron.GetKineticEnergy() <= 0 )
{
theNeutron.SetTotalEnergy ( theNeutron.GetMass() * ( 1 + std::pow( 10 , -15.65 ) ) );
}
theTarget.Lorentz(theTarget, -1.*theCMS);
if ( theTarget.GetKineticEnergy() < 0 )
{
theTarget.SetTotalEnergy ( theTarget.GetMass() * ( 1 + std::pow( 10 , -15.65 ) ) );
}
//110913 END
theTarget.Lorentz(theTarget, -1.*theCMS);
theResult->SetEnergyChange(theNeutron.GetKineticEnergy());
theResult->SetMomentumChange(theNeutron.GetMomentum().unit());
G4DynamicParticle* theRecoil = new G4DynamicParticle;
// theRecoil->SetDefinition( ionTable->GetIon( iZ , iA ) );
theRecoil->SetDefinition( G4ParticleTable::GetParticleTable()->FindIon( iZ, iA , 0, iZ ));
theRecoil->SetMomentum( theTarget.GetMomentum() );
theResult->AddSecondary( theRecoil );
return theResult;
}
@@ -0,0 +1,44 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4LENDElasticCrossSection.hh"
G4double G4LENDElasticCrossSection::getLENDCrossSection( G4GIDI_target* target , G4double ke , G4double temperature )
{
if ( target == NULL ) return 0.0;
// 090407
// return target->getElasticCrossSection( ke/MeV , temperature )*barn;
//return target->getElasticCrossSectionAtE( ke/MeV , temperature )*barn;
G4double result = target->getElasticCrossSectionAtE( ke/MeV , temperature )*barn;
if ( result == 0.0 && ke/eV < 1.0e-4)
{
G4double el = 1.0e-4*eV;
G4double eh = 2.0e-4*eV;
G4double xs_el = target->getElasticCrossSectionAtE( el/MeV , temperature )*barn;
G4double xs_eh = target->getElasticCrossSectionAtE( eh/MeV , temperature )*barn;
result = GetUltraLowEnergyExtrapolatedXS( el , eh , xs_el , xs_eh , ke );
}
return result;
}
@@ -0,0 +1,91 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4LENDFission.hh"
#include "G4Nucleus.hh"
#include "G4ParticleTable.hh"
G4HadFinalState * G4LENDFission::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTarg )
{
G4double temp = aTrack.GetMaterial()->GetTemperature();
//G4int iZ = int ( aTarg.GetZ() );
//G4int iA = int ( aTarg.GetN() );
//migrate to integer A and Z (GetN_asInt returns number of neutrons in the nucleus since this)
G4int iZ = aTarg.GetZ_asInt();
G4int iA = aTarg.GetA_asInt();
G4double ke = aTrack.GetKineticEnergy();
G4HadFinalState* theResult = &theParticleChange;
theResult->Clear();
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
std::vector<G4GIDI_Product>* products = aTarget->getFissionFinalState( ke*MeV, temp, NULL, NULL );
if ( products != NULL )
{
for ( G4int j = 0; j < int( products->size() ); j++ )
{
G4int iZ = (*products)[j].Z;
G4int iA = (*products)[j].A;
//G4cout << "Z = " << (*products)[j].Z
// << ", A = " << (*products)[j].A
// << ", EK = " << (*products)[j].kineticEnergy << " [MeV]"
// << ", px = " << (*products)[j].px
// << ", py = " << (*products)[j].py
// << ", pz = " << (*products)[j].pz
// << G4endl;
G4DynamicParticle* theSec = new G4DynamicParticle;
if ( iZ > 0 )
{
//Ex j?
theSec->SetDefinition( G4ParticleTable::GetParticleTable()->FindIon( iZ, iA , 0, 0 ) );
}
else if ( iA == 1 && iZ == 0 )
{
theSec->SetDefinition( G4Neutron::Neutron() );
}
else
{
theSec->SetDefinition( G4Gamma::Gamma() );
}
theSec->SetMomentum( G4ThreeVector( (*products)[j].px*MeV , (*products)[j].py*MeV , (*products)[j].pz*MeV ) );
//G4cout << theSec->GetDefinition()->GetParticleName() << G4endl;
theResult->AddSecondary( theSec );
}
}
delete products;
theResult->SetStatusChange( stopAndKill );
return theResult;
}
@@ -0,0 +1,45 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4LENDFissionCrossSection.hh"
G4double G4LENDFissionCrossSection::getLENDCrossSection( G4GIDI_target* target , G4double ke , G4double temperature )
{
if ( target == NULL ) return 0.0;
// 090407
// return target->getElasticCrossSection( ke/MeV , temperature )*barn;
//return target->getFissionCrossSectionAtE( ke/MeV , temperature )*barn;
G4double result = target->getFissionCrossSectionAtE( ke/MeV , temperature )*barn;
if ( result == 0.0 && ke/eV < 1.0e-4)
{
G4double el = 1.0e-4*eV;
G4double eh = 2.0e-4*eV;
G4double xs_el = target->getFissionCrossSectionAtE( el/MeV , temperature )*barn;
G4double xs_eh = target->getFissionCrossSectionAtE( eh/MeV , temperature )*barn;
result = GetUltraLowEnergyExtrapolatedXS( el , eh , xs_el , xs_eh , ke );
}
return result;
}
@@ -0,0 +1,116 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4LENDInelastic.hh"
#include "G4Nucleus.hh"
#include "G4ParticleTable.hh"
G4HadFinalState * G4LENDInelastic::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTarg )
{
G4ThreeVector proj_p = aTrack.Get4Momentum().vect();
G4double temp = aTrack.GetMaterial()->GetTemperature();
//G4int iZ = int ( aTarg.GetZ() );
//G4int iA = int ( aTarg.GetN() );
//migrate to integer A and Z (GetN_asInt returns number of neutrons in the nucleus since this)
G4int iZ = aTarg.GetZ_asInt();
G4int iA = aTarg.GetA_asInt();
//G4cout << "target: Z = " << iZ << " N = " << iA << G4endl;
G4double ke = aTrack.GetKineticEnergy();
//G4cout << "projectile: KE = " << ke/MeV << " [MeV]" << G4endl;
G4HadFinalState* theResult = &theParticleChange;
theResult->Clear();
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
std::vector<G4GIDI_Product>* products = aTarget->getOthersFinalState( ke*MeV, temp, NULL, NULL );
if ( products != NULL )
{
G4ThreeVector psum(0);
int totN = 0;
for ( G4int j = 0; j < int( products->size() ); j++ )
{
G4int jZ = (*products)[j].Z;
G4int jA = (*products)[j].A;
//G4cout << "ZA = " << 1000 * (*products)[j].Z + (*products)[j].A << " EK = "
// << (*products)[j].kineticEnergy
// << " px " << (*products)[j].px
// << " py " << (*products)[j].py
// << " pz " << (*products)[j].pz
// << G4endl;
G4DynamicParticle* theSec = new G4DynamicParticle;
if ( jA == 1 && jZ == 1 )
{
theSec->SetDefinition( G4Proton::Proton() );
totN += 1;
}
else if ( jA == 1 && jZ == 0 )
{
theSec->SetDefinition( G4Neutron::Neutron() );
totN += 1;
}
else if ( jZ > 0 )
{
if ( jA != 0 )
{
theSec->SetDefinition( G4ParticleTable::GetParticleTable()->FindIon( jZ , jA , 0 , 0 ) );
totN += jA;
}
else
{
theSec->SetDefinition( G4ParticleTable::GetParticleTable()->FindIon( jZ , iA+1-totN , 0 , 0 ) );
}
}
else
{
theSec->SetDefinition( G4Gamma::Gamma() );
}
G4ThreeVector p( (*products)[j].px*MeV , (*products)[j].py*MeV , (*products)[j].pz*MeV );
psum += p;
if ( p.mag() == 0 ) p = proj_p - psum;
theSec->SetMomentum( p );
theResult->AddSecondary( theSec );
}
}
delete products;
theResult->SetStatusChange( stopAndKill );
return theResult;
}
@@ -0,0 +1,46 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4LENDInelasticCrossSection.hh"
G4double G4LENDInelasticCrossSection::getLENDCrossSection( G4GIDI_target* target , G4double ke , G4double temperature )
{
if ( target == NULL ) return 0.0;
// 090407
// return target->getElasticCrossSection( ke/MeV , temperature )*barn;
//return target->getOthersCrossSectionAtE( ke/MeV , temperature )*barn;
G4double result = target->getOthersCrossSectionAtE( ke/MeV , temperature )*barn;
if ( result == 0.0 && ke/eV < 1.0e-4)
{
G4double el = 1.0e-4*eV;
G4double eh = 2.0e-4*eV;
G4double xs_el = target->getOthersCrossSectionAtE( el/MeV , temperature )*barn;
G4double xs_eh = target->getOthersCrossSectionAtE( eh/MeV , temperature )*barn;
result = GetUltraLowEnergyExtrapolatedXS( el , eh , xs_el , xs_eh , ke );
}
return result;
}
@@ -0,0 +1,284 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Class Description
// Manager of LEND (Low Energy Nuclear Data) target (nucleus)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDManager.hh"
#include "G4HadronicException.hh"
#include "G4Neutron.hh"
G4LENDManager* G4LENDManager::lend_manager = NULL;
G4LENDManager::G4LENDManager()
:verboseLevel( 0 )
{
printBanner();
if(!getenv("G4LENDDATA"))
throw G4HadronicException(__FILE__, __LINE__, " Please setenv G4LENDDATA to point to the LEND files." );
G4String xmcf = getenv("G4LENDDATA");
xmcf = xmcf+"/xmcf.n_1.map";
// for neutron
G4GIDI* axLEND = new G4GIDI( 1 , xmcf );
if ( proj_lend_map.find ( G4Neutron::Neutron() ) == proj_lend_map.end() )
{
proj_lend_map.insert ( std::pair < G4ParticleDefinition* , G4GIDI* > ( G4Neutron::Neutron() , axLEND ) );
}
v_lend_target.clear();
ionTable = new G4IonTable();
nistElementBuilder = new G4NistElementBuilder( 0 );
}
G4LENDManager::~G4LENDManager()
{
// deleting target
for ( std::vector < lend_target >::iterator
it = v_lend_target.begin() ; it != v_lend_target.end() ; it++ )
{
(*it).lend->freeTarget( it->target );
}
// deleting lend
for ( std::map < G4ParticleDefinition* , G4GIDI* >::iterator
it = proj_lend_map.begin() ; it != proj_lend_map.end() ; it++ )
{
delete it->second;
}
delete ionTable;
delete nistElementBuilder;
}
G4GIDI_target* G4LENDManager::GetLENDTarget( G4ParticleDefinition* proj , G4String evaluation , G4int iZ , G4int iA , G4int iM )
{
G4GIDI_target* anLENDTarget = NULL;
G4int iTarg = ionTable->GetNucleusEncoding( iZ , iA );
// G4double E=0.0, G4int J=0);
for ( std::vector < lend_target >::iterator
it = v_lend_target.begin() ; it != v_lend_target.end() ; it++ )
{
// find the target
if ( it->proj == proj && it->target_code == iTarg && it->evaluation == evaluation )
{
return it->target;
}
}
if ( proj_lend_map.find ( proj ) == proj_lend_map.end() )
{
G4cout << proj->GetParticleName() << " is not supported by this LEND." << G4endl;
return anLENDTarget; // return NULL
}
G4GIDI* xlend = proj_lend_map.find ( proj ) -> second;
if ( xlend->isThisDataAvailable( evaluation, iZ, iA , iM ) )
{
if ( verboseLevel > 1 )
G4cout << evaluation << " for " << ionTable->GetIonName( iZ , iA , 0 ) << " is exist in this LEND." << G4endl;
anLENDTarget = xlend->readTarget( evaluation , iZ , iA , iM );
lend_target new_target;
new_target.lend = xlend;
new_target.target = anLENDTarget;
new_target.proj = proj;
new_target.evaluation = evaluation;
new_target.target_code = iTarg;
v_lend_target.push_back( new_target );
// found EXACT
return anLENDTarget;
}
else
{
// NO EXACT DATA (Evaluatino & Z,A,M)
// This is for ground state
if ( verboseLevel > 1 )
G4cout << evaluation << " for " << ionTable->GetIonName( iZ , iA , 0 ) << " is not exist in this LEND." << G4endl;
std::vector< std::string >* available = xlend->getNamesOfAvailableLibraries( iZ, iA , iM );
if ( available->size() > 0 )
{
// EXACT Z,A,M but Evaluation is different
if ( verboseLevel > 1 )
{
G4cout << " However you can use following evaluation(s) for the target. " << G4endl;
std::vector< std::string >::iterator its;
for ( its = available->begin() ; its != available->end() ; its++ )
G4cout << *its << G4endl;
G4cout << G4endl;
}
}
//
// checking natural abundance data for Z
//
else if ( xlend->isThisDataAvailable( evaluation, iZ, 0 , iM ) )
{
// EXACT natural abundance data for the evaluation
if ( verboseLevel > 1 )
G4cout << " However you can use natural abundance data for the target. " << G4endl;
}
else
{
std::vector< std::string >* available_nat = xlend->getNamesOfAvailableLibraries( iZ, 0 , iM );
//
if ( available_nat->size() > 0 )
{
// EXACT natural abundance data for Z but differnet evaluation
if ( verboseLevel > 1 )
{
G4cout << " However you can use following evaluation(s) for natural abundace of the target. " << G4endl;
std::vector< std::string >::iterator its;
for ( its = available_nat->begin() ; its != available_nat->end() ; its++ )
G4cout << *its << G4endl;
G4cout << G4endl;
}
}
}
// return NULL if exact data is not available
return anLENDTarget; // return NULL
}
return anLENDTarget;
}
std::vector< G4String > G4LENDManager::IsLENDTargetAvailable ( G4ParticleDefinition* proj , G4int iZ , G4int iA , G4int iM )
{
std::vector< G4String > answer;
if ( proj_lend_map.find ( proj ) == proj_lend_map.end() )
{
G4cout << proj->GetParticleName() << " is not supported by this LEND." << G4endl;
return answer; // return NULL
}
G4GIDI* xlend = proj_lend_map.find ( proj ) -> second;
std::vector< std::string >* available = xlend->getNamesOfAvailableLibraries( iZ, iA , iM );
if ( available->size() > 0 )
{
std::vector< std::string >::iterator its;
for ( its = available->begin() ; its != available->end() ; its++ )
answer.push_back ( *its );
}
return answer;
}
void G4LENDManager::printBanner()
{
G4cout << " <<BEGIN-copyright>> " << G4endl;
G4cout << " Copyright (c) 2010, Lawrence Livermore National Security, LLC. " << G4endl;
G4cout << " Produced at the Lawrence Livermore National Laboratory " << G4endl;
G4cout << " Written by Bret R. Beck, beck6@llnl.gov. " << G4endl;
G4cout << " CODE-461393 " << G4endl;
G4cout << " All rights reserved. " << G4endl;
G4cout << " " << G4endl;
G4cout << " This file is part of GIDI. For details, see nuclear.llnl.gov. " << G4endl;
G4cout << " Please also read the \"Additional BSD Notice\" at nuclear.llnl.gov. " << G4endl;
G4cout << " " << G4endl;
G4cout << " Redistribution and use in source and binary forms, with or without modification, " << G4endl;
G4cout << " are permitted provided that the following conditions are met: " << G4endl;
G4cout << " " << G4endl;
G4cout << " 1) Redistributions of source code must retain the above copyright notice, " << G4endl;
G4cout << " this list of conditions and the disclaimer below. " << G4endl;
G4cout << " 2) Redistributions in binary form must reproduce the above copyright notice, " << G4endl;
G4cout << " this list of conditions and the disclaimer (as noted below) in the " << G4endl;
G4cout << " documentation and/or other materials provided with the distribution. " << G4endl;
G4cout << " 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be " << G4endl;
G4cout << " used to endorse or promote products derived from this software without " << G4endl;
G4cout << " specific prior written permission. " << G4endl;
G4cout << " " << G4endl;
G4cout << " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY " << G4endl;
G4cout << " EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES " << G4endl;
G4cout << " OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT " << G4endl;
G4cout << " SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR " << G4endl;
G4cout << " CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR " << G4endl;
G4cout << " CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS " << G4endl;
G4cout << " OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED " << G4endl;
G4cout << " AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT " << G4endl;
G4cout << " (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, " << G4endl;
G4cout << " EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. " << G4endl;
G4cout << " <<END-copyright>> " << G4endl;
}
G4bool G4LENDManager::RequestChangeOfVerboseLevel( G4int newValue )
{
G4bool result=false;
if ( newValue >= verboseLevel)
{
verboseLevel = newValue;
result=true;
}
else
{
G4cout << "Since other LEND model or cross section have set the higher verbose level (" << verboseLevel << ") in LENDManager, you cannot change the value now." << G4endl;
}
return result;
}
@@ -0,0 +1,252 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Class Description
// Final state production model for a LEND (Low Energy Nuclear Data)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDModel.hh"
#include "G4NistManager.hh"
G4LENDModel::G4LENDModel( G4String name )
:G4HadronicInteraction( name )
{
SetMinEnergy( 0.*eV );
SetMaxEnergy( 20.*MeV );
default_evaluation = "endl99";
allow_nat = false;
allow_any = false;
lend_manager = G4LENDManager::GetInstance();
}
G4LENDModel::~G4LENDModel()
{
for ( std::map< G4int , G4LENDUsedTarget* >::iterator
it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
{
delete it->second;
}
}
void G4LENDModel::recreate_used_target_map()
{
for ( std::map< G4int , G4LENDUsedTarget* >::iterator
it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
{
delete it->second;
}
usedTarget_map.clear();
create_used_target_map();
}
void G4LENDModel::create_used_target_map()
{
lend_manager->RequestChangeOfVerboseLevel( verboseLevel );
size_t numberOfElements = G4Element::GetNumberOfElements();
static const G4ElementTable* theElementTable = G4Element::GetElementTable();
for ( size_t i = 0 ; i < numberOfElements ; ++i )
{
const G4Element* anElement = (*theElementTable)[i];
G4int numberOfIsotope = anElement->GetNumberOfIsotopes();
if ( numberOfIsotope > 0 )
{
// User Defined Abundances
for ( G4int i_iso = 0 ; i_iso < numberOfIsotope ; i_iso++ )
{
G4int iZ = anElement->GetIsotope( i_iso )->GetZ();
G4int iA = anElement->GetIsotope( i_iso )->GetN();
G4LENDUsedTarget* aTarget = new G4LENDUsedTarget ( proj , default_evaluation , iZ , iA );
if ( allow_nat == true ) aTarget->AllowNat();
if ( allow_any == true ) aTarget->AllowAny();
usedTarget_map.insert( std::pair< G4int , G4LENDUsedTarget* > ( lend_manager->GetNucleusEncoding( iZ , iA ) , aTarget ) );
}
}
else
{
// Natural Abundances
G4NistElementBuilder* nistElementBuild = lend_manager->GetNistElementBuilder();
G4int iZ = int ( anElement->GetZ() );
//G4cout << nistElementBuild->GetNumberOfNistIsotopes( int ( anElement->GetZ() ) ) << G4endl;
G4int numberOfNistIso = nistElementBuild->GetNumberOfNistIsotopes( int ( anElement->GetZ() ) );
for ( G4int i = 0 ; i < numberOfNistIso ; i++ )
{
//G4cout << nistElementBuild->GetIsotopeAbundance( iZ , nistElementBuild->GetNistFirstIsotopeN( iZ ) + i ) << G4endl;
if ( nistElementBuild->GetIsotopeAbundance( iZ , nistElementBuild->GetNistFirstIsotopeN( iZ ) + i ) > 0 )
{
G4int iMass = nistElementBuild->GetNistFirstIsotopeN( iZ ) + i;
//G4cout << iZ << " " << nistElementBuild->GetNistFirstIsotopeN( iZ ) + i << " " << nistElementBuild->GetIsotopeAbundance ( iZ , iMass ) << G4endl;
G4LENDUsedTarget* aTarget = new G4LENDUsedTarget ( proj , default_evaluation , iZ , iMass );
if ( allow_nat == true ) aTarget->AllowNat();
if ( allow_any == true ) aTarget->AllowAny();
usedTarget_map.insert( std::pair< G4int , G4LENDUsedTarget* > ( lend_manager->GetNucleusEncoding( iZ , iMass ) , aTarget ) );
}
}
}
}
G4cout << "Dump UsedTarget for " << GetModelName() << G4endl;
G4cout << "Requested Evaluation, Z , A -> Actual Evaluation, Z , A(0=Nat) , Pointer of Target" << G4endl;
for ( std::map< G4int , G4LENDUsedTarget* >::iterator
it = usedTarget_map.begin() ; it != usedTarget_map.end() ; it ++ )
{
G4cout
<< " " << it->second->GetWantedEvaluation()
<< ", " << it->second->GetWantedZ()
<< ", " << it->second->GetWantedA()
<< " -> " << it->second->GetActualEvaluation()
<< ", " << it->second->GetActualZ()
<< ", " << it->second->GetActualA()
<< ", " << it->second->GetTarget()
<< G4endl;
}
}
#include "G4ParticleTable.hh"
G4HadFinalState * G4LENDModel::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTarg )
{
G4double temp = aTrack.GetMaterial()->GetTemperature();
//G4int iZ = int ( aTarg.GetZ() );
//G4int iA = int ( aTarg.GetN() );
//migrate to integer A and Z (GetN_asInt returns number of neutrons in the nucleus since this)
G4int iZ = aTarg.GetZ_asInt();
G4int iA = aTarg.GetA_asInt();
G4double ke = aTrack.GetKineticEnergy();
G4HadFinalState* theResult = new G4HadFinalState();
G4GIDI_target* aTarget = usedTarget_map.find( lend_manager->GetNucleusEncoding( iZ , iA ) )->second->GetTarget();
G4double aMu = aTarget->getElasticFinalState( ke*MeV, temp, NULL, NULL );
G4double phi = twopi*G4UniformRand();
G4double theta = std::acos( aMu );
//G4double sinth = std::sin( theta );
G4ReactionProduct theNeutron( const_cast<G4ParticleDefinition *>( aTrack.GetDefinition() ) );
theNeutron.SetMomentum( aTrack.Get4Momentum().vect() );
theNeutron.SetKineticEnergy( ke );
G4ReactionProduct theTarget( G4ParticleTable::GetParticleTable()->FindIon( iZ , iA , 0 , iZ ) );
G4double mass = G4ParticleTable::GetParticleTable()->FindIon( iZ , iA , 0 , iZ )->GetPDGMass();
// add Thermal motion
G4double kT = k_Boltzmann*temp;
G4ThreeVector v ( G4RandGauss::shoot() * std::sqrt( kT*mass )
, G4RandGauss::shoot() * std::sqrt( kT*mass )
, G4RandGauss::shoot() * std::sqrt( kT*mass ) );
theTarget.SetMomentum( v );
G4ThreeVector the3Neutron = theNeutron.GetMomentum();
G4double nEnergy = theNeutron.GetTotalEnergy();
G4ThreeVector the3Target = theTarget.GetMomentum();
G4double tEnergy = theTarget.GetTotalEnergy();
G4ReactionProduct theCMS;
G4double totE = nEnergy+tEnergy;
G4ThreeVector the3CMS = the3Target+the3Neutron;
theCMS.SetMomentum(the3CMS);
G4double cmsMom = std::sqrt(the3CMS*the3CMS);
G4double sqrts = std::sqrt((totE-cmsMom)*(totE+cmsMom));
theCMS.SetMass(sqrts);
theCMS.SetTotalEnergy(totE);
theNeutron.Lorentz(theNeutron, theCMS);
theTarget.Lorentz(theTarget, theCMS);
G4double en = theNeutron.GetTotalMomentum(); // already in CMS.
G4ThreeVector cms3Mom=theNeutron.GetMomentum(); // for neutron direction in CMS
G4double cms_theta=cms3Mom.theta();
G4double cms_phi=cms3Mom.phi();
G4ThreeVector tempVector;
tempVector.setX(std::cos(theta)*std::sin(cms_theta)*std::cos(cms_phi)
+std::sin(theta)*std::cos(phi)*std::cos(cms_theta)*std::cos(cms_phi)
-std::sin(theta)*std::sin(phi)*std::sin(cms_phi) );
tempVector.setY(std::cos(theta)*std::sin(cms_theta)*std::sin(cms_phi)
+std::sin(theta)*std::cos(phi)*std::cos(cms_theta)*std::sin(cms_phi)
+std::sin(theta)*std::sin(phi)*std::cos(cms_phi) );
tempVector.setZ(std::cos(theta)*std::cos(cms_theta)
-std::sin(theta)*std::cos(phi)*std::sin(cms_theta) );
tempVector *= en;
theNeutron.SetMomentum(tempVector);
theTarget.SetMomentum(-tempVector);
G4double tP = theTarget.GetTotalMomentum();
G4double tM = theTarget.GetMass();
theTarget.SetTotalEnergy(std::sqrt((tP+tM)*(tP+tM)-2.*tP*tM));
theNeutron.Lorentz(theNeutron, -1.*theCMS);
theTarget.Lorentz(theTarget, -1.*theCMS);
theResult->SetEnergyChange(theNeutron.GetKineticEnergy());
theResult->SetMomentumChange(theNeutron.GetMomentum().unit());
G4DynamicParticle* theRecoil = new G4DynamicParticle;
theRecoil->SetDefinition( G4ParticleTable::GetParticleTable()->FindIon( iZ, iA , 0, iZ ) );
theRecoil->SetMomentum( theTarget.GetMomentum() );
theResult->AddSecondary( theRecoil );
return theResult;
}
@@ -0,0 +1,146 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Class Description
// Container of LEND (Low Energy Nuclear Data) target (nucleus)
// LEND is Geant4 interface for GIDI (General Interaction Data Interface)
// which gives a discription of nuclear and atomic reactions, such as
// Binary collision cross sections
// Particle number multiplicity distributions of reaction products
// Energy and angular distributions of reaction products
// Derived calculational constants
// GIDI is developped at Lawrence Livermore National Laboratory
// Class Description - End
// 071025 First implementation done by T. Koi (SLAC/SCCS)
// 101118 Name modifications for release T. Koi (SLAC/PPA)
#include "G4LENDUsedTarget.hh"
#include "G4LENDManager.hh"
void G4LENDUsedTarget::searchTarget()
{
G4LENDManager* lend_manager = G4LENDManager::GetInstance();
target = NULL;
target = lend_manager->GetLENDTarget( proj , wanted_Evaluation , wanted_Z , wanted_A , wanted_M );
if ( target != NULL )
{
actual_Z = wanted_Z;
actual_A = wanted_A;
actual_M = wanted_M;
actual_Evaluation = wanted_Evaluation;
return;
}
if ( allow_nat == true || allow_anything == true )
{
target = lend_manager->GetLENDTarget( proj , wanted_Evaluation , wanted_Z , 0 , wanted_M );
if ( target != NULL )
{
actual_Z = wanted_Z;
actual_A = 0;
actual_M = wanted_M;
actual_Evaluation = wanted_Evaluation;
return;
}
}
G4int iZ;
G4int iA;
G4int iM;
if ( allow_anything == true )
{
// Loop Z
G4int dZ = 0;
G4int pZ = 1;
while ( dZ < max_Z - min_Z )
{
iZ = wanted_Z + pZ*dZ;
// Loop A
G4int dA = 0;
G4int pA = 1;
while ( dA < max_A - min_A )
{
iA = wanted_A + pA*dA;
// Loop M
G4int pM = 1;
G4int dM = 0;
while ( dM < max_M - min_M )
{
iM = wanted_M + pM*dM;
if ( iZ < min_Z ) iZ = min_Z;
if ( iA < min_A ) iA = 0;
if ( iM < min_M ) iM = min_M;
if ( iZ > max_Z ) iZ = max_Z;
if ( iA > max_A ) iA = max_A;
if ( iM > max_M ) iM = max_M;
//Loop Evaluations choice the first available
if ( lend_manager->IsLENDTargetAvailable( proj , iZ , iA , iM ).size() > 0 )
{
//Choice the first available
actual_Evaluation = lend_manager->IsLENDTargetAvailable( proj , iZ , iA , iM ).front();
actual_Z = iZ;
actual_A = iA;
actual_M = iM;
target = lend_manager->GetLENDTarget( proj , actual_Evaluation , iZ , iA , iM );
return;
}
if ( pM > 0 )
pM = -1;
else
dM++;
}
if ( pA > 0 )
pA = -1;
else
dA++;
}
if ( pZ > 0 )
pZ = -1;
else
dZ++;
}
}
}
@@ -0,0 +1,142 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include "gString.h"
#include <xData.h>
#include <string.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
/*
***************************************************
*/
int gString_initialize( statusMessageReporting *smr, gString *gStr, int size, int increment ) {
if( size > 0 ) {
//if( ( gStr->gStr = xData_malloc2( smr, size + 1, 0, "gStr->gStr" ) ) == NULL ) return( 1 );
if( ( gStr->gStr = (char*) xData_malloc2( smr, size + 1, 0, "gStr->gStr" ) ) == NULL ) return( 1 );
gStr->length = 1;
gStr->gStr[0] = 0; }
else {
size = 0;
gStr->length = 0;
gStr->gStr = NULL;
}
gStr->allocated = size;
//if( increment < gString_minIncrement ) increment = gString_minIncrement;
if( increment < (int) gString_minIncrement ) increment = gString_minIncrement;
gStr->increment = increment;
return( 0 );
}
/*
***************************************************
*/
int gString_release( statusMessageReporting *smr, gString *gStr ) {
if( gStr->gStr != NULL ) free( gStr->gStr );
gString_initialize( smr, gStr, 0, gStr->increment );
return( 0 );
}
/*
***************************************************
*/
//int gString_clear( statusMessageReporting *smr, gString *gStr ) {
int gString_clear( statusMessageReporting *, gString *gStr ) {
if( gStr->gStr != NULL ) {
gStr->length = 1;
gStr->gStr[0] = 0;
}
return( 0 );
}
/*
***************************************************
*/
int gString_addTo( statusMessageReporting *smr, gString *gStr, char const *str ) {
int n, size = strlen( str );
if( gStr->gStr == NULL ) {
if( gString_initialize( smr, gStr, size + 1, gStr->increment ) != 0 ) return( 1 ); }
else if( ( gStr->length + size ) > gStr->allocated ) {
n = gStr->increment;
if( n < size ) n = size;
//if( ( gStr->gStr = xData_realloc2( smr, gStr->gStr, gStr->allocated + n, "gStr->gStr" ) ) == NULL ) return( 1 );
if( ( gStr->gStr = (char*) xData_realloc2( smr, gStr->gStr, gStr->allocated + n, "gStr->gStr" ) ) == NULL ) return( 1 );
gStr->allocated += n;
}
strcpy( &(gStr->gStr[gStr->length - 1]), str );
gStr->length = gStr->length + size;
return( 0 );
}
/*
***************************************************
*/
//char const *gString_string( statusMessageReporting *smr, gString *gStr ) {
char const *gString_string( statusMessageReporting *, gString *gStr ) {
return( gStr->gStr );
}
/*
***************************************************
*/
//int gString_length( statusMessageReporting *smr, gString *gStr ) {
int gString_length( statusMessageReporting *, gString *gStr ) {
return( gStr->length );
}
/*
***************************************************
*/
//int gString_allocated( statusMessageReporting *smr, gString *gStr ) {
int gString_allocated( statusMessageReporting *, gString *gStr ) {
return( gStr->allocated );
}
/*
***************************************************
*/
//int gString_increment( statusMessageReporting *smr, gString *gStr ) {
int gString_increment( statusMessageReporting *, gString *gStr ) {
return( gStr->increment );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,274 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "statusMessageReporting.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static const char smr_mallocFailed[] = "statusMessageReporting could not allocate memory for message";
static int smr_setAllocationFailure( statusMessageReporting *smr, const char *fmt, va_list *args );
static int smr_setMessage( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code,
enum smr_status status, const char *fmt, va_list *args );
static char *smr_getFullMessage2( char const *fmt, ... );
/*
************************************************************
*/
int smr_initialize( statusMessageReporting *smr ) {
smr->status = smr_status_Ok;
smr->packageName[0] = 0;
smr->line= -1;
smr->code = 0;
smr->message = NULL;
return( 0 );
}
/*
************************************************************
*/
int smr_release( statusMessageReporting *smr ) {
if( smr->message != NULL ) {
if( smr->message != smr_mallocFailed ) free( smr->message );
}
return( smr_initialize( smr ) );
}
/*
************************************************************
*/
int smr_setMessageInfo( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, ... ) {
int status;
va_list args;
va_start( args, fmt );
status = smr_setMessage( smr, userInterface, file, line, code, smr_status_Info, fmt, &args );
va_end( args );
return( status );
}
/*
************************************************************
*/
int smr_vsetMessageInfo( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, va_list *args ) {
int status = smr_setMessage( smr, userInterface, file, line, code, smr_status_Info, fmt, args );
return( status );
}
/*
************************************************************
*/
int smr_setMessageError( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, ... ) {
int status;
va_list args;
va_start( args, fmt );
status = smr_setMessage( smr, userInterface, file, line, code, smr_status_Error, fmt, &args );
va_end( args );
return( status );
}
/*
************************************************************
*/
int smr_vsetMessageError( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, va_list *args ) {
int status = smr_setMessage( smr, userInterface, file, line, code, smr_status_Error, fmt, args );
return( status );
}
/*
************************************************************
*/
char *smr_allocateFormatMessage( const char *fmt, ... ) {
char *s;
va_list args;
va_start( args, fmt );
s = smr_vallocateFormatMessage( fmt, &args );
va_end( args );
return( s );
}
/*
************************************************************
*/
char *smr_vallocateFormatMessage( const char *fmt, va_list *args ) {
int n, size = 128;
char *message = NULL;
va_list args_;
while( 1 ) {
if( ( message = (char *) realloc( message, size ) ) == NULL ) return( NULL );
//TK110426
#ifndef WIN32
__va_copy( args_, *args );
#endif
#ifdef WIN32
args_ = *args;
#endif
n = vsnprintf( message, size, fmt, args_ );
va_end( args_ );
if( ( n > -1 ) && ( n < size ) ) break;
if( n > -1 ) { /* glibc 2.1 */
size = n + 3; }
else { /* glibc 2.0 */
size += 128;
}
}
return( message );
}
/*
************************************************************
*/
static int smr_setMessage( statusMessageReporting *smr, void *userInterface, const char *file, int line, int code,
enum smr_status status, const char *fmt, va_list *args ) {
char *userMsg = NULL;
int userSize;
if( smr == NULL ) return( 0 );
smr_release( smr );
smr->status = status;
if( file != NULL ) strncpy( smr->packageName, file, smr_maximumPackageNameSize );
smr->packageName[smr_maximumPackageNameSize-1] = 0;
smr->line= line;
smr->code = code;
if( ( smr->message = smr_vallocateFormatMessage( fmt, args ) ) == NULL ) return( smr_setAllocationFailure( smr, fmt, args ) );
if( userInterface != NULL ) {
if( ( userSize = (*(smr_userInterface *) userInterface)( (void *) userInterface, NULL ) ) > 0 ) {
//if( (smr->message = realloc(smr->message, strlen( smr->message ) + userSize + 2)) == NULL ) return( smr_setAllocationFailure( smr, fmt, args ) );
if( (smr->message = (char*) realloc(smr->message, strlen( smr->message ) + userSize + 2)) == NULL ) return( smr_setAllocationFailure( smr, fmt, args ) );
strcat( smr->message, "\n" );
userSize = (*(smr_userInterface *) userInterface)( (void *) userInterface, &userMsg );
if( userSize < 0 ) return( smr_setAllocationFailure( smr, fmt, args ) );
if( userSize > 0 ) {
strcat( smr->message, userMsg );
free( userMsg );
}
}
}
return( 0 );
}
/*
************************************************************
*/
static int smr_setAllocationFailure( statusMessageReporting *smr, const char *fmt, va_list *args ) {
vfprintf( stderr, fmt, *args ); /* Assume calling routine calls va_end( args ). */
fprintf( stderr, "\nAt line %d of %s\n", smr->line, smr->packageName );
smr->status = smr_status_Fatal;
smr->message = (char *) smr_mallocFailed;
return( 1 );
}
/*
************************************************************
*/
int smr_isOk( statusMessageReporting *smr ) {
if( smr == NULL ) return( 1 );
return( smr->status == smr_status_Ok );
}
/*
************************************************************
*/
int smr_isInfo( statusMessageReporting *smr ) {
if( smr == NULL ) return( 1 );
return( smr->status == smr_status_Info );
}
/*
************************************************************
*/
int smr_isError( statusMessageReporting *smr ) {
if( smr == NULL ) return( 1 );
return( ( smr->status == smr_status_Error ) || ( smr->status == smr_status_Fatal ) );
}
/*
************************************************************
*/
int smr_isFatal( statusMessageReporting *smr ) {
if( smr == NULL ) return( 1 );
return( smr->status == smr_status_Fatal );
}
/*
************************************************************
*/
const char *smr_getMessage( statusMessageReporting *smr ) {
return( smr->message );
}
/*
************************************************************
*/
char *smr_getFullMessage( statusMessageReporting *smr ) {
return( smr_getFullMessage2( "%s\nAt line %d of %s", smr->message, smr->line, smr->packageName ) );
}
/*
************************************************************
*/
static char *smr_getFullMessage2( char const *fmt, ... ) {
va_list args;
char *message;
va_start( args, fmt );
message = smr_vallocateFormatMessage( fmt, &args );
va_end( args );
return( message );
}
/*
************************************************************
*/
void smr_print( statusMessageReporting *smr, FILE *f, int clear ) {
if( smr->message != NULL ) fprintf( f, "%s\nAt line %d of %s\n", smr->message, smr->line, smr->packageName );
if( clear ) smr_release( smr );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,442 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <tpi_IDs.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static tpi_channelID *_tpi_channelID_parse2( statusMessageReporting *smr, char const *str, char const *origStr, int isDecayChannel, char **EOP );
static tpi_spectralID *_tpi_spectralID_parse2( statusMessageReporting *smr, char const *str, char const *origStr, char **EOP );
/*
***************************************************
*/
tpi_channelID *tpi_channelID_allocate( statusMessageReporting *smr ) {
tpi_channelID *channelID;
//if( ( channelID = xData_malloc2( smr, sizeof( tpi_channelID ), 0, "channelID" ) ) == NULL ) return( NULL );
if( ( channelID = (tpi_channelID*) xData_malloc2( smr, sizeof( tpi_channelID ), 0, "channelID" ) ) == NULL ) return( NULL );
tpi_channelID_initialize( smr, channelID );
return( channelID );
}
/*
***************************************************
*/
//int tpi_channelID_initialize( statusMessageReporting *smr, tpi_channelID *channelID ) {
int tpi_channelID_initialize( statusMessageReporting *, tpi_channelID *channelID ) {
memset( channelID, 0, sizeof( tpi_channelID ) );
return( 0 );
}
/*
***************************************************
*/
void *tpi_channelID_free( statusMessageReporting *smr, tpi_channelID *channelID ) {
if( channelID != NULL ) {
tpi_channelID_release( smr, channelID );
xData_free( smr, channelID );
}
return( NULL );
}
/*
***************************************************
*/
int tpi_channelID_release( statusMessageReporting *smr, tpi_channelID *channelID ) {
tpi_spectralID *spectralID, *next;
for( spectralID = channelID->spectralIDs; spectralID != NULL; spectralID = next ) {
next = spectralID->next;
tpi_spectralID_free( smr, spectralID );
}
tpi_channelID_initialize( smr, channelID );
return( 0 );
}
/*
***************************************************
*/
tpi_channelID *tpi_channelID_parse( statusMessageReporting *smr, char const *str, char **EOP ) {
return( _tpi_channelID_parse2( smr, str, str, 0, EOP ) );
}
/*
***************************************************
*/
static tpi_channelID *_tpi_channelID_parse2( statusMessageReporting *smr, char const *str, char const *origStr, int isDecayChannel, char **EOP ) {
tpi_channelID *channelID;
tpi_spectralID *spectralID, *priorSpectral;
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, (char *) str );
if( **EOP == 0 ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Empty channel string to parse for '%s'", origStr );
return( NULL );
}
if( ( channelID = tpi_channelID_allocate( smr ) ) == NULL ) return( NULL );
priorSpectral= (tpi_spectralID *) &(channelID->spectralIDs);
while( 1 ) {
//if( ( spectralID = _tpi_spectralID_parse2( smr, *EOP, origStr, EOP ) ) == NULL ) return( tpi_channelID_free( smr, channelID ) );
if( ( spectralID = _tpi_spectralID_parse2( smr, *EOP, origStr, EOP ) ) == NULL ) return( (tpi_channelID*)tpi_channelID_free( smr, channelID ) );
priorSpectral->next = spectralID;
priorSpectral = spectralID;
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, *EOP );
if( **EOP == 0 ) break;
if( isDecayChannel && ( **EOP == ')' ) ) break;
if( **EOP != '+' ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Missing '+' (or maybe ')') in channelID at '%s' of '%s'", *EOP, origStr );
//return( tpi_channelID_free( smr, channelID ) );
return( (tpi_channelID*)tpi_channelID_free( smr, channelID ) );
}
(*EOP)++;
}
return( channelID );
}
/*
***************************************************
*/
int tpi_channelID_toString( statusMessageReporting *smr, tpi_channelID *channelID, gString *gStr ) {
return( tpi_channelID_toStringSans( smr, channelID, gStr, NULL ) );
}
/*
***************************************************
*/
int tpi_channelID_toStringSanRevision( statusMessageReporting *smr, tpi_channelID *channelID, gString *gStr ) {
//char *sans[] = { "revision", NULL };
char *sans[] = { (char*)"revision", NULL };
return( tpi_channelID_toStringSans( smr, channelID, gStr, sans ) );
}
/*
***************************************************
*/
int tpi_channelID_toStringSans( statusMessageReporting *smr, tpi_channelID *channelID, gString *gStr, char *sans[] ) {
tpi_spectralID *spectralID;
for( spectralID = channelID->spectralIDs; spectralID != NULL; spectralID = spectralID->next ) {
if( ( tpi_spectralID_toStringSans( smr, spectralID, gStr, sans ) ) != 0 ) return( 1 );
if( spectralID->next != NULL ) {
if( ( gString_addTo( smr, gStr, " + " ) ) != 0 ) return( 1 );
}
}
return( 0 );
}
/*
***************************************************
*/
tpi_spectralID *tpi_spectralID_allocate( statusMessageReporting *smr ) {
tpi_spectralID *spectralID;
//if( ( spectralID = xData_malloc2( smr, sizeof( tpi_spectralID ), 1, "spectralID" ) ) == NULL ) return( NULL );
if( ( spectralID = (tpi_spectralID*) xData_malloc2( smr, sizeof( tpi_spectralID ), 1, "spectralID" ) ) == NULL ) return( NULL );
tpi_spectralID_initialize( smr, spectralID );
return( spectralID );
}
/*
***************************************************
*/
//int tpi_spectralID_initialize( statusMessageReporting *smr, tpi_spectralID *spectralID ) {
int tpi_spectralID_initialize( statusMessageReporting *, tpi_spectralID *spectralID ) {
memset( spectralID, 0, sizeof( tpi_spectralID ) );
return( 0 );
}
/*
***************************************************
*/
void *tpi_spectralID_free( statusMessageReporting *smr, tpi_spectralID *spectralID ) {
if( spectralID != NULL ) {
tpi_spectralID_release( smr, spectralID );
xData_free( smr, spectralID );
}
return( NULL );
}
/*
***************************************************
*/
int tpi_spectralID_release( statusMessageReporting *smr, tpi_spectralID *spectralID ) {
tpi_spectralIDQualifier *qualifier, *next;
if( spectralID->name != NULL ) free( spectralID->name );
for( qualifier = spectralID->qualifiers; qualifier != NULL; qualifier = next ) {
next = qualifier->next;
xData_free( smr, qualifier );
}
if( spectralID->decayChannel != NULL ) tpi_channelID_free( smr, spectralID->decayChannel );
tpi_spectralID_initialize( smr, spectralID );
return( 0 );
}
/*
***************************************************
*/
tpi_spectralID *tpi_spectralID_parse( statusMessageReporting *smr, char const *str, char **EOP ) {
return( _tpi_spectralID_parse2( smr, str, str, EOP ) );
}
/*
***************************************************
*/
static tpi_spectralID *_tpi_spectralID_parse2( statusMessageReporting *smr, char const *str, char const *origStr, char **EOP ) {
int breakup = 0, i1, i2, m;
double d;
char const *s, *q;
char *e;
char c, bOrC;
tpi_spectralID *spectralID;
tpi_spectralIDQualifier *qualifier, *priorQualifier = NULL;
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, str );
if( **EOP == 0 ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Empty spectralID string to parse for '%s'", origStr );
return( NULL );
}
if( **EOP == '(' ) { /* Breakup spectralID, like '(Be_8 -> He_4[multipliticy:"2"])' */
breakup = 1;
(*EOP)++;
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, *EOP );
}
if( !isalpha( **EOP ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Invalid spectralID name '%s' in '%s'", *EOP, origStr );
return( NULL );
}
for( s = *EOP, i1 = 0; ( isalnum( **EOP ) ) || ( **EOP == '_' ); (*EOP)++ ) i1++;
if( ( spectralID = tpi_spectralID_allocate( smr ) ) == NULL ) return( NULL );
//if( ( spectralID->name = tpi_misc_allocateAndCopyNCharacters( smr, s, i1 ) ) == NULL ) return( tpi_spectralID_free( smr, spectralID ) );
if( ( spectralID->name = tpi_misc_allocateAndCopyNCharacters( smr, s, i1 ) ) == NULL ) return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, *EOP );
if( **EOP == '[' ) { /* Spectral has qualifiers. */
priorQualifier = (tpi_spectralIDQualifier *) &(spectralID->qualifiers);
bOrC = '[';
while( **EOP == bOrC ) {
bOrC = ',';
(*EOP)++; /* Get qualifier's name. */
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, *EOP );
if( !isalpha( **EOP ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Invalid qualifier name '%s' in '%s'", *EOP, origStr );
//return( tpi_spectralID_free( smr, spectralID ) );
return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
}
for( s = *EOP, i1 = 0; ( isalnum( **EOP ) ) || ( **EOP == '_' ); (*EOP)++ ) i1++;
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, *EOP ); /* Skip qualifier's separator. */
if( **EOP != ':' ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Missing ':' in qualifier defintion at '%s' in '%s'", *EOP, origStr );
//return( tpi_spectralID_free( smr, spectralID ) );
return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
}
(*EOP)++; /* Get qualifier's value. */
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, *EOP );
if( ( **EOP != '"' ) && ( **EOP != '\'' ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Missing start quote in qualifier defintion at '%s' in '%s'", *EOP, origStr );
//return( tpi_spectralID_free( smr, spectralID ) );
return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
}
c = **EOP;
(*EOP)++;
for( q = *EOP, i2 = 0; ( **EOP != c ) && ( **EOP != 0 ); (*EOP)++ ) i2++;
if( **EOP != c ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Missing end quote in qualifier defintion at '%s' in '%s'", *EOP, origStr );
//return( tpi_spectralID_free( smr, spectralID ) );
return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
}
(*EOP)++;
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, *EOP );
//if( ( qualifier = xData_malloc2( smr, sizeof( tpi_spectralIDQualifier ) + i1 + i2 + 2, 1, "qualifier" ) ) == NULL )
if( ( qualifier = (tpi_spectralIDQualifier*) xData_malloc2( smr, sizeof( tpi_spectralIDQualifier ) + i1 + i2 + 2, 1, "qualifier" ) ) == NULL )
//return( tpi_spectralID_free( smr, spectralID ) );
return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
qualifier->next = NULL;
qualifier->name = (char *) &(qualifier[1]);
qualifier->value = &(qualifier->name[i1+1]);
strncpy( qualifier->name, s, i1 );
qualifier->name[i1] = 0;
strncpy( qualifier->value, q, i2 );
qualifier->value[i2] = 0;
if( strcmp( qualifier->name, "revision" ) == 0 ) {
spectralID->revision = qualifier->value; }
else if( strcmp( qualifier->name, "multiplicity" ) == 0 ) {
spectralID->multiplicityStr = qualifier->value; }
else if( strcmp( qualifier->name, "level" ) == 0 ) {
spectralID->levelStr = qualifier->value;
}
priorQualifier->next = qualifier;
priorQualifier = qualifier;
}
if( **EOP != ']' ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Missing ']' for qualifier at '%s' in '%s'", *EOP, origStr );
//return( tpi_spectralID_free( smr, spectralID ) );
return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
}
(*EOP)++;
if( spectralID->multiplicityStr != NULL ) {
m = strtol( spectralID->multiplicityStr, &e, 10 );
if( ( *e == 0 ) && ( e != spectralID->multiplicityStr ) ) spectralID->multiplicity = m;
}
if( spectralID->levelStr != NULL ) {
d = strtod( spectralID->levelStr, &e );
if( ( *e == 0 ) && ( e != spectralID->levelStr ) ) spectralID->level = d;
}
}
if( breakup ) {
*EOP = (char *) tpi_misc_firstNonWhiteSpace( smr, *EOP );
if( ( **EOP != '-' ) || ( (*EOP)[1] != '>' ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Missing '->' for breakup at '%s' in '%s'", *EOP, origStr );
//return( tpi_spectralID_free( smr, spectralID ) );
return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
}
*EOP += 2;
if( (spectralID->decayChannel = _tpi_channelID_parse2( smr, *EOP, origStr, breakup, EOP )) == NULL )
//return( tpi_spectralID_free(smr, spectralID) );
return( (tpi_spectralID*) tpi_spectralID_free(smr, spectralID) );
if( **EOP != ')' ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Missing ')' for breakup at '%s' in '%s'", *EOP, origStr );
//return( tpi_spectralID_free( smr, spectralID ) );
return( (tpi_spectralID*) tpi_spectralID_free( smr, spectralID ) );
}
(*EOP)++;
}
return( spectralID );
}
/*
***************************************************
*/
int tpi_spectralID_toString( statusMessageReporting *smr, tpi_spectralID *spectralID, gString *gStr ) {
return( tpi_spectralID_toStringSans( smr, spectralID, gStr, NULL ) );
}
/*
***************************************************
*/
int tpi_spectralID_toStringSanRevision( statusMessageReporting *smr, tpi_spectralID *spectralID, gString *gStr ) {
//char *sans[] = { "revision", NULL };
char *sans[] = { (char*)"revision", NULL };
return( tpi_spectralID_toStringSans( smr, spectralID, gStr, sans ) );
}
/*
***************************************************
*/
int tpi_spectralID_toStringSans( statusMessageReporting *smr, tpi_spectralID *spectralID, gString *gStr, char *sans[] ) {
tpi_spectralIDQualifier *qualifier;
int i;
char **san, *sSan[] = { NULL };
if( sans == NULL ) sans = sSan;
if( spectralID->decayChannel != NULL ) if( gString_addTo( smr, gStr, "(" ) != 0 ) return( 1 );
if( ( gString_addTo( smr, gStr, spectralID->name ) ) != 0 ) return( 1 );
if( spectralID->qualifiers != NULL ) {
for( qualifier = spectralID->qualifiers, i = 0; qualifier != NULL; qualifier = qualifier->next ) i++;
for( qualifier = spectralID->qualifiers; qualifier != NULL; qualifier = qualifier->next ) {
for( san = (char **) sans; *san != NULL; san++ ) {
if( strcmp( *san, qualifier->name ) == 0 ) {
i--;
break;
}
}
}
if( i > 0 ) {
if( gString_addTo( smr, gStr, "[" ) != 0 ) return( 1 );
for( qualifier = spectralID->qualifiers; qualifier != NULL; qualifier = qualifier->next ) {
for( san = (char **) sans; *san != NULL; san++ ) if( strcmp( *san, qualifier->name ) == 0 ) break;
if( *san != NULL ) continue;
if( gString_addTo( smr, gStr, qualifier->name ) != 0 ) return( 1 );
if( gString_addTo( smr, gStr, ":'" ) != 0 ) return( 1 );
if( gString_addTo( smr, gStr, qualifier->value ) != 0 ) return( 1 );
if( gString_addTo( smr, gStr, "'") != 0 ) return( 1 );
if( i == 1 ) {
if( gString_addTo( smr, gStr, "]" ) != 0 ) return( 1 ); }
else {
if( gString_addTo( smr, gStr, ", " ) != 0 ) return( 1 );
}
i--;
}
}
}
if( spectralID->decayChannel != NULL ) {
if( ( gString_addTo( smr, gStr, " -> " ) ) != 0 ) return( 1 );
if( ( tpi_channelID_toStringSans( smr, spectralID->decayChannel, gStr, sans ) ) != 0 ) return( 1 );
if( ( gString_addTo( smr, gStr, ")" ) ) != 0 ) return( 1 );
}
return( 0 );
}
/*
***************************************************
*/
//char const *tpi_misc_firstNonWhiteSpace( statusMessageReporting *smr, char const *str ) {
char const *tpi_misc_firstNonWhiteSpace( statusMessageReporting *, char const *str ) {
char const *s;
for( s = str; ( *s != 0 ) && isspace( *s ); s++ ) ;
return( s );
}
/*
***************************************************
*/
char *tpi_misc_allocateAndCopyNCharacters( statusMessageReporting *smr, char const *str, int n ) {
char *s;
//if( ( s = xData_malloc2( smr, n + 1, 0, "s" ) ) == NULL ) return( NULL );
if( ( s = (char*) xData_malloc2( smr, n + 1, 0, "s" ) ) == NULL ) return( NULL );
strncpy( s, str, n );
s[n] = 0;
return( s );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,157 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <math.h>
#ifdef WIN32
#include <float.h>
#endif
#include <tpia_target.h>
#include <tpia_misc.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static int _tpia_Legendre_getOrder( statusMessageReporting *smr, xData_element *LegendreOrder, tpia_Legendre *Legendre, tpia_EqualProbableBinSpectra *l );
/*
************************************************************
*/
int tpia_Legendre_initialize( statusMessageReporting *smr, tpia_Legendre *Legendre ) {
memset( Legendre, 0, sizeof( tpia_Legendre ) );
if( tpia_frame_setFromString( smr, "", "", 0, &(Legendre->frame) ) ) return( 1 );
Legendre->binned.numberOfLs = 0;
Legendre->binned.ls = NULL;
return( 0 );
}
/*
************************************************************
*/
int tpia_Legendre_release( statusMessageReporting *smr, tpia_Legendre *Legendre ) {
int i;
for( i = 0; i < Legendre->binned.numberOfLs; i++ ) xData_free( smr, Legendre->binned.ls[i].energies );
//Legendre->binned.ls = xData_free( smr, Legendre->binned.ls );
Legendre->binned.ls = (tpia_EqualProbableBinSpectra*) xData_free( smr, Legendre->binned.ls );
tpia_Legendre_initialize( smr, Legendre );
return( 0 );
}
/*
************************************************************
*/
int tpia_Legendre_getFromElement( statusMessageReporting *smr, xData_element *LegendreElement, tpia_Legendre *Legendre ) {
int i, status = 0;
xData_elementList *list;
xData_addToAccessed( smr, LegendreElement, 1 );
if( ( tpia_frame_setFromElement( smr, LegendreElement, 4, &(Legendre->frame) ) ) != 0 ) return( 1 );
list = xData_getElementsByTagNameAndSort( smr, LegendreElement, "l", NULL, NULL );
if( list->n == 0 ) {
status = 1;
tpia_misc_setMessageError_Element( smr, NULL, LegendreElement, __FILE__, __LINE__, 1, "Legendre element does not contain any l elements" ); }
else {
//if( ( Legendre->binned.ls = xData_malloc2( smr, list->n * sizeof( tpia_EqualProbableBinSpectra ), 1, "ls" ) ) != NULL ) {
if( ( Legendre->binned.ls = (tpia_EqualProbableBinSpectra*) xData_malloc2( smr, list->n * sizeof( tpia_EqualProbableBinSpectra ), 1, "ls" ) ) != NULL ) {
Legendre->binned.numberOfLs = 0;
for( i = 0; i < list->n; i++ ) {
if( ( status = _tpia_Legendre_getOrder( smr, list->items[i].element, Legendre, &(Legendre->binned.ls[i]) ) ) != 0 ) break;
Legendre->binned.numberOfLs++;
}
}
}
xData_freeElementList( smr, list );
return( status );
}
/*
************************************************************
*/
//static int _tpia_Legendre_getOrder( statusMessageReporting *smr, xData_element *LegendreOrder, tpia_Legendre *Legendre, tpia_EqualProbableBinSpectra *l ) {
static int _tpia_Legendre_getOrder( statusMessageReporting *smr, xData_element *LegendreOrder, tpia_Legendre *, tpia_EqualProbableBinSpectra *l ) {
int status = 1;
xData_Int n, nBins, lOrder;
if( xData_convertAttributeTo_xData_Int( smr, LegendreOrder, "value", &lOrder ) != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, LegendreOrder, __FILE__, __LINE__, 1, "missing or invalid nBins attribute for angular bins" ); }
else {
l->iValue = lOrder;
l->dValue = 0.;
if( ( l->energies = tpia_misc_getEqualProbableBin( smr, LegendreOrder, &n, &nBins ) ) != NULL ) {
status = 0;
l->nBins = (int) nBins;
l->numberOfEs = (int) n;
}
}
return( status );
}
/*
************************************************************
*/
int tpia_Legendre_SampleEp( statusMessageReporting *smr, tpia_Legendre *Legendre, int sampleMu, tpia_decaySamplingInfo *decaySamplingInfo ) {
tpia_EqualProbableBinSpectra *binned_l0 = Legendre->binned.ls;
double Ep;
/*
Currently, only l = 0, equal probable binning is supported.
Need to return frame info for Ep, mu, also.
*/
if( Legendre->binned.numberOfLs > 0 ) {
if( sampleMu ) decaySamplingInfo->mu = 2. * tpia_misc_drng( decaySamplingInfo->rng, decaySamplingInfo->rngState ) - 1.;
#ifndef WIN32
if( decaySamplingInfo->mu <= -1 ) decaySamplingInfo->mu = nextafter( -1., 0. );
#endif
#ifdef WIN32
if( decaySamplingInfo->mu <= -1 ) decaySamplingInfo->mu = _nextafter( -1., 0. );
#endif
tpia_misc_sampleEqualProbableBin( smr, decaySamplingInfo, decaySamplingInfo->e_in, binned_l0->nBins, binned_l0, &Ep );
/* ??? Need to check that e_in > E_Threshold */
decaySamplingInfo->Ep = Ep; }
else {
return( 1 );
}
return( 0 );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,109 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include "tpia_target.h"
#include "tpia_misc.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
/*
************************************************************
*/
int tpia_angular_initialize( statusMessageReporting *smr, tpia_angular *angular ) {
memset( angular, 0, sizeof( tpia_angular ) );
if( tpia_frame_setFromString( smr, "", "", 0, &(angular->frame) ) ) return( 1 );
angular->binned.numberOfEs = 0;
angular->binned.energies = NULL;
return( 0 );
}
/*
************************************************************
*/
int tpia_angular_release( statusMessageReporting *smr, tpia_angular *angular ) {
//angular->binned.energies = xData_free( smr, angular->binned.energies );
angular->binned.energies = (tpia_EqualProbableBinSpectrum*) xData_free( smr, angular->binned.energies );
angular->binned.numberOfEs = 0;
return( 0 );
}
/*
************************************************************
*/
int tpia_angular_getFromElement( statusMessageReporting *smr, xData_element *angularElement, tpia_angular *angular ) {
xData_Int n, nBins;
if( ( tpia_frame_setFromElement( smr, angularElement, 3, &(angular->frame) ) ) != 0 ) return( 1 );
if( ( angular->binned.energies = tpia_misc_getEqualProbableBin( smr, angularElement, &n, &nBins ) ) != NULL ) {
angular->binned.iValue = 0;
angular->binned.dValue = 0;
angular->binned.nBins = (int) nBins;
angular->binned.numberOfEs = (int) n;
return( 0 );
}
return( 1 );
}
/*
************************************************************
*/
int tpia_angular_SampleMu( statusMessageReporting *smr, tpia_angular *angular, tpia_decaySamplingInfo *decaySamplingInfo ) {
tpia_EqualProbableBinSpectra *binned = &(angular->binned);
int nBins = binned->nBins, status = 1;
double mu;
/*
Currently, only equal probable binning is supported.
Need to return frame info for mu also.
*/
if( binned->numberOfEs > 0 ) {
tpia_misc_sampleEqualProbableBin( smr, decaySamplingInfo, decaySamplingInfo->e_in, nBins, binned, &mu );
if( mu < -1. ) mu = -1.;
if( mu > 1. ) mu = 1.;
decaySamplingInfo->mu = mu;
status = 0;
}
return( status );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,173 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <math.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
/*
************************************************************
*/
int tpia_angularEnergy_initialize( statusMessageReporting *smr, tpia_angularEnergy *angularEnergy ) {
memset( angularEnergy, 0, sizeof( tpia_angularEnergy ) );
if( tpia_frame_setFromString( smr, "", "", 0, &(angularEnergy->frame) ) ) return( 1 );
angularEnergy->binned.numberOfEs = 0;
angularEnergy->binned.energies = NULL;
return( 0 );
}
/*
************************************************************
*/
int tpia_angularEnergy_release( statusMessageReporting *smr, tpia_angularEnergy *angularEnergy ) {
int i;
for( i = 0; i < angularEnergy->binned.numberOfEs; i++ ) xData_free( smr, angularEnergy->binned.energies[i].energies );
//angularEnergy->binned.energies = xData_free( smr, angularEnergy->binned.energies );
angularEnergy->binned.energies = (tpia_EqualProbableBinSpectra*) xData_free( smr, angularEnergy->binned.energies );
tpia_angularEnergy_initialize( smr, angularEnergy );
return( 0 );
}
/*
************************************************************
*/
int tpia_angularEnergy_getFromElement( statusMessageReporting *smr, xData_element *angularEnergyElement, tpia_angularEnergy *angularEnergy ) {
int i, j, status = 1;
xData_Int nBins, size, n, index;
xData_element *epbElement, *element;
xData_elementList *list;
tpia_EqualProbableBinSpectra *mus;
xData_addToAccessed( smr, angularEnergyElement, 1 );
if( ( tpia_frame_setFromElement( smr, angularEnergyElement, 4, &(angularEnergy->frame) ) ) != 0 ) return( 1 );
//if( ( epbElement = xData_getOneElementByTagName( smr, angularEnergyElement, "equalProbableBins", 0 ) ) == NULL ) return( 1 );
if( ( epbElement = xData_getOneElementByTagName( smr, angularEnergyElement, (char*)"equalProbableBins", 0 ) ) == NULL ) return( 1 );
xData_addToAccessed( smr, epbElement, 1 );
if( xData_convertAttributeTo_xData_Int( smr, epbElement, "nBins", &nBins ) != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, epbElement, __FILE__, __LINE__, 1, "missing or invalid nBins attribute" );
return( 1 );
}
list = xData_getElementsByTagNameAndSort( smr, epbElement, "energy", NULL, NULL );
if( list->n == 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, epbElement, __FILE__, __LINE__, 1, "bins does not contain any energy elements" ); }
else {
size = list->n * sizeof( tpia_EqualProbableBinSpectra );
angularEnergy->binned.nBins = (int) nBins;
//if( ( angularEnergy->binned.energies = xData_malloc2( smr, size, 1, "energies" ) ) != NULL ) {
if( ( angularEnergy->binned.energies = (tpia_EqualProbableBinSpectra*) xData_malloc2( smr, size, 1, "energies" ) ) != NULL ) {
status = 0;
for( i = 0, mus = angularEnergy->binned.energies; i < list->n; i++, mus++ ) {
mus->iValue = 0;
element = list->items[i].element;
if( xData_convertAttributeTo_xData_Int( smr, element, "index", &index ) != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "missing or invalid index attribute" );
status = 1;
break;
}
if( index != i ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "index = %lld is not incremental", index );
status = 1;
break;
}
if( ( j = xData_convertAttributeToDouble( smr, element, "value", &(mus->dValue) ) ) != 0 ) {
if( j == 1 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "element does not have value attribute" ); }
else {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "failed to convert value attribute to double" );
}
status = 1;
break;
}
if( ( mus->energies = tpia_misc_getEqualProbableBins( smr, element, "mu", nBins, &n ) ) == NULL ) {
status = 1;
break; }
else {
mus->numberOfEs = n;
}
angularEnergy->binned.numberOfEs++;
}
}
}
xData_freeElementList( smr, list );
return( status );
}
/*
************************************************************
*/
int tpia_angularEnergy_SampleEp( statusMessageReporting *smr, tpia_angularEnergy *angularEnergy, tpia_decaySamplingInfo *decaySamplingInfo ) {
int iE1, iE2;
tpia_EqualProbableBinSpectra *energies = angularEnergy->binned.energies;
double Ep, Ep1, Ep2, f, e_in = decaySamplingInfo->e_in;
/*
Currently, only equal probable binning is supported.
Need to return frame info for Ep also.
*/
if( !smr_isOk( smr ) ) return( 1 );
if( angularEnergy->binned.numberOfEs == 0 ) return( 1 );
for( iE2 = 0; iE2 < angularEnergy->binned.numberOfEs; iE2++ ) if( energies[iE2].dValue >= e_in ) break;
if( iE2 == 0 ) {
iE1 = iE2; }
else if( iE2 == angularEnergy->binned.numberOfEs ) {
iE1 = iE2 = angularEnergy->binned.numberOfEs - 1; }
else {
iE1 = iE2 - 1;
}
tpia_misc_sampleEqualProbableBin( smr, decaySamplingInfo, decaySamplingInfo->mu, angularEnergy->binned.nBins, &(energies[iE1]), &Ep1 );
if( iE1 == iE2 ) {
Ep = Ep1; }
else {
tpia_misc_sampleEqualProbableBin( smr, decaySamplingInfo, decaySamplingInfo->mu, angularEnergy->binned.nBins, &(energies[iE2]), &Ep2 );
f = ( energies[iE2].dValue - e_in ) / ( energies[iE2].dValue - energies[iE1].dValue );
Ep = f * Ep1 + ( 1 - f ) * Ep2;
}
decaySamplingInfo->Ep = Ep;
return( 0 );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,237 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <math.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static int _tpia_channel_getProductData( statusMessageReporting *smr, xData_element *channelElement, tpia_channel *channel );
/*
************************************************************
*/
tpia_channel *tpia_channel_create( statusMessageReporting *smr ) {
tpia_channel *channel;
//if( ( channel = xData_malloc2( smr, sizeof( tpia_channel ), 0, "channel" ) ) == NULL ) return( NULL );
if( ( channel = (tpia_channel*) xData_malloc2( smr, sizeof( tpia_channel ), 0, "channel" ) ) == NULL ) return( NULL );
if( tpia_channel_initialize( smr, channel ) ) channel = tpia_channel_free( smr, channel );
return( channel );
}
/*
************************************************************
*/
//int tpia_channel_initialize( statusMessageReporting *smr, tpia_channel *channel ) {
int tpia_channel_initialize( statusMessageReporting *, tpia_channel *channel ) {
memset( channel, 0, sizeof( tpia_channel ) );
return( 0 );
}
/*
************************************************************
*/
tpia_channel *tpia_channel_createGetFromElement( statusMessageReporting *smr, tpia_target_heated *target, xData_element *channelElement,
int pointwiseRequired ) {
tpia_channel *channel;
if( ( channel = tpia_channel_create( smr ) ) == NULL ) return( NULL );
if( tpia_channel_getFromElement( smr, target, channelElement, channel, pointwiseRequired ) != 0 ) channel = tpia_channel_free( smr, channel );
return( channel );
}
/*
************************************************************
*/
tpia_channel *tpia_channel_free( statusMessageReporting *smr, tpia_channel *channel ) {
tpia_channel_release( smr, channel );
xData_free( smr, channel );
return( NULL );
}
/*
************************************************************
*/
int tpia_channel_release( statusMessageReporting *smr, tpia_channel *channel ) {
tpia_product *product, *nextProduct;
xData_releaseAttributionList( smr, &(channel->attributes) );
//channel->crossSectionPointwise.data = xData_free( smr, channel->crossSectionPointwise.data );
channel->crossSectionPointwise.data = (double*) xData_free( smr, channel->crossSectionPointwise.data );
//channel->crossSectionGrouped.data = xData_free( smr, channel->crossSectionGrouped.data );
channel->crossSectionGrouped.data = (double*) xData_free( smr, channel->crossSectionGrouped.data );
//channel->availableEnergyGrouped.data = xData_free( smr, channel->availableEnergyGrouped.data );
channel->availableEnergyGrouped.data = (double*) xData_free( smr, channel->availableEnergyGrouped.data );
for( product = channel->decayChannel.products; product != NULL; product = nextProduct ) {
nextProduct = product->next;
tpia_product_free( smr, product );
}
channel->decayChannel.numberOfProducts = 0;
channel->decayChannel.products = NULL;
return( 0 );
}
/*
************************************************************
*/
int tpia_channel_getFromElement( statusMessageReporting *smr, tpia_target_heated *target, xData_element *channelElement, tpia_channel *channel,
int pointwiseRequired ) {
xData_Int ll;
char *p;
xData_element *element, *pElement, *gElement, *eElement;
xData_addToAccessed( smr, channelElement, 1 );
channel->target = target;
xData_copyAttributionList( smr, &(channel->attributes), &(channelElement->attributes) );
channel->outputChannel = tpia_misc_pointerToAttributeIfAllOk2(smr, channelElement, 1, &(channel->attributes), "outputChannel" );
channel->genre = tpia_misc_pointerToAttributeIfAllOk2( smr, channelElement, 1, &(channel->attributes), "genre" );
channel->QString = tpia_misc_pointerToAttributeIfAllOk2( smr, channelElement, 1, &(channel->attributes), "Q" );
channel->fission = tpia_misc_pointerToAttributeIfAllOk2( smr, channelElement, 0, &(channel->attributes), "fission" );
if( smr_isOk( smr ) ) {
ll = 0;
if( xData_convertAttributeTo_xData_Int( smr, channelElement, "ENDL_C", &ll ) >= 0 ) channel->ENDL_C = (int) ll;
}
if( smr_isOk( smr ) ) {
ll = 0;
if( xData_convertAttributeTo_xData_Int( smr, channelElement, "ENDF_MT2", &ll ) >= 0 ) channel->ENDF_MT = (int) ll;
}
if( smr_isOk( smr ) ) {
channel->QIsFloat = 1;
channel->Q = strtod( channel->QString, &p ); /* Q string may be something like "notApplicable". */
if( *p != 0 ) { /* In that case set QIsFloat to false. */
channel->QIsFloat = 0;
channel->Q = 0.;
}
//if( ( element = xData_getOneElementByTagName( smr, channelElement, "crossSection", 1 ) ) != NULL ) {
if( ( element = xData_getOneElementByTagName( smr, channelElement, (char*) "crossSection", 1 ) ) != NULL ) {
if( ( tpia_frame_setFromElement( smr, element, 2, &channel->crossSectionFrame ) ) == 0 ) {
xData_addToAccessed( smr, element, 1 );
//if( ( pElement = xData_getOneElementByTagName( smr, element, "indexed", 1 ) ) != NULL ) {
if( ( pElement = xData_getOneElementByTagName( smr, element, (char*) "indexed", 1 ) ) != NULL ) {
channel->crossSectionPointwise.data = tpia_misc_get2dxindex_y_data( smr, pElement,
&(channel->crossSectionPointwise.start), &(channel->crossSectionPointwise.end), target->energyGrid );
}
if( ( gElement = xData_getOneElementByTagName( smr, element, (char*) "grouped", 1 ) ) != NULL ) {
tpia_misc_get2d_xShared_yHistogram_data_Grouped( smr, gElement, &(channel->crossSectionGrouped) );
}
if( ( channel->crossSectionGrouped.data != NULL ) && ( ( channel->crossSectionPointwise.data != NULL ) || !pointwiseRequired ) ) {
if( target->contents == NULL ) { /* Only supported "crossSection" currently. */
if( !tpia_channel_isProduction( smr, channel ) ) {
//if( ( eElement = xData_getOneElementByTagName( smr, channelElement, "availableEnergy", 1 ) ) != NULL ) {
if( ( eElement = xData_getOneElementByTagName( smr, channelElement, (char*) "availableEnergy", 1 ) ) != NULL ) {
xData_addToAccessed( smr, eElement, 1 );
//if( ( gElement = xData_getOneElementByTagName( smr, eElement, "grouped", 1 ) ) != NULL ) {
if( ( gElement = xData_getOneElementByTagName( smr, eElement, (char*) "grouped", 1 ) ) != NULL ) {
tpia_misc_get2d_xShared_yHistogram_data_Grouped( smr, gElement, &(channel->availableEnergyGrouped) );
}
}
}
}
if( smr_isOk( smr ) ) _tpia_channel_getProductData( smr, channelElement, channel );
}
}
}
}
return( !smr_isOk( smr ) );
}
/*
************************************************************
*/
static int _tpia_channel_getProductData( statusMessageReporting *smr, xData_element *channelElement, tpia_channel *channel ) {
return( tpia_product_getDecayChannelFromElement( smr, channelElement, channel, NULL, &(channel->decayChannel.products) ) );
}
/*
************************************************************
*/
tpia_product *tpia_channel_getFirstProduct( tpia_channel *channel ) {
return( tpia_decayChannel_getFirstProduct( &(channel->decayChannel) ) );
}
/*
************************************************************
*/
//tpia_product *tpia_channel_getProductByIndex( statusMessageReporting *smr, tpia_channel *channel, int index ) {
tpia_product *tpia_channel_getProductByIndex( statusMessageReporting *, tpia_channel *channel, int index ) {
int i = 0;
tpia_product *p;
if( index < 0 ) return( NULL );
for( p = tpia_channel_getFirstProduct( channel ); ( p != NULL ) && ( i < index ); p = tpia_decayChannel_getNextProduct( p ), i++ ) ;
return( p );
}
/*
************************************************************
*/
//int tpia_channel_numberOfProducts( statusMessageReporting *smr, tpia_channel *channel ) {
int tpia_channel_numberOfProducts( statusMessageReporting *, tpia_channel *channel ) {
return( channel->decayChannel.numberOfProducts );
}
/*
************************************************************
*/
//int tpia_channel_isProduction( statusMessageReporting *smr, tpia_channel *channel ) {
int tpia_channel_isProduction( statusMessageReporting *, tpia_channel *channel ) {
return( strcmp( channel->genre, "production" ) == 0 );
}
/*
************************************************************
*/
//double tpia_channel_getCrossSectionAtE( statusMessageReporting *smr, tpia_channel *channel, xData_Int iEg, double e_in,
double tpia_channel_getCrossSectionAtE( statusMessageReporting *smr, tpia_channel *channel, xData_Int , double e_in,
int crossSectionType ) {
double xsec = 0.;
if( crossSectionType == tpia_crossSectionType_grouped ) {
xsec = 0; }
else if( crossSectionType == tpia_crossSectionType_pointwise ) {
xsec = tpia_misc_getPointwiseCrossSectionAtE( smr, &(channel->crossSectionPointwise), channel->target->energyGrid,
tpia_target_heated_getEIndex( channel->target, e_in ), e_in );
}
return( xsec );
}
}
@@ -0,0 +1,141 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#ifdef WIN32
#define _USE_MATH_DEFINES
#endif
#include <cmath>
#include "tpia_target.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
/*
************************************************************
*/
tpia_product *tpia_decayChannel_getFirstProduct( tpia_decayChannel *decayChannel ) {
return( decayChannel->products );
}
/*
************************************************************
*/
tpia_product *tpia_decayChannel_getNextProduct( tpia_product *product ) {
return( product->next );
}
/*
************************************************************
*/
int tpia_decayChannel_sampleProductsAtE( statusMessageReporting *smr, tpia_decayChannel *decayChannel, tpia_decaySamplingInfo *decaySamplingInfo,
int nProductData, tpia_productOutgoingData *productDatas ) {
int i, n = 0, multiplicity, secondTwoBody = 0, labFrame = tpia_referenceFrame_lab;
tpia_product *product, *nextProduct;
double phi, p;
if( nProductData < decayChannel->numberOfProducts ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "nProductData = %d < decayChannel->numberOfProducts = %d", nProductData,
decayChannel->numberOfProducts );
return( -1 );
}
for( i = 0, product = tpia_decayChannel_getFirstProduct( decayChannel ); product != NULL; i++, product = tpia_decayChannel_getNextProduct( product ) ) {
nextProduct = tpia_decayChannel_getNextProduct( product );
if( !secondTwoBody ) {
if( ( multiplicity = product->multiplicity ) == 0 ) multiplicity = tpia_product_sampleMultiplicity( smr, product, decaySamplingInfo->e_in,
tpia_misc_drng( decaySamplingInfo->rng, decaySamplingInfo->rngState ) );
while( multiplicity > 0 ) {
if( n >= nProductData ) break; /* This needs work. */
multiplicity--;
decaySamplingInfo->genre = product->genre;
decaySamplingInfo->productID = product->productID;
decaySamplingInfo->mu = 0;
decaySamplingInfo->Ep = 0;
productDatas[n].genre = product->genre;
productDatas[n].isVelocity = decaySamplingInfo->isVelocity;
tpia_frame_setColumns( smr, &(productDatas[n].frame), 1, &labFrame );
productDatas[n].productID = product->productID;
productDatas[n].decayChannel = &(product->decayChannel);
if( strcmp( product->genre, "twoBody_angular" ) == 0 ) {
secondTwoBody = 1;
productDatas[n+1].productID = nextProduct->productID;
productDatas[n].genre = product->genre;
tpia_angular_SampleMu( smr, &(product->angular), decaySamplingInfo ); /* Need to test for success. */
if( smr_isOk( smr ) ) {
phi = 2. * M_PI * tpia_misc_drng( decaySamplingInfo->rng, decaySamplingInfo->rngState );
productDatas[n].isVelocity = decaySamplingInfo->isVelocity;
productDatas[n].frame = decaySamplingInfo->frame;
tpia_kinetics_2BodyReaction( smr, decayChannel, decaySamplingInfo->e_in, decaySamplingInfo->mu, phi, &(productDatas[n]) );
} }
else if( strcmp( product->genre, "NBody_Legendre" ) == 0 ) {
tpia_Legendre_SampleEp( smr, &(product->Legendre), 1, decaySamplingInfo ); }
else if( strcmp( product->genre, "NBody_angular_energy" ) == 0 ) {
tpia_angular_SampleMu( smr, &(product->angular), decaySamplingInfo ); /* Need to test for success. */
tpia_angularEnergy_SampleEp( smr, &(product->angularEnergy), decaySamplingInfo ); }
else if( strcmp( product->genre, "NBody_uncorrelate_Legendre" ) == 0 ) {
tpia_angular_SampleMu( smr, &(product->angular), decaySamplingInfo ); /* Need to test for success. */
tpia_Legendre_SampleEp( smr, &(product->Legendre), 0, decaySamplingInfo ); }
else if( strcmp( product->genre, "unknown" ) == 0 ) {
}
else {
printf( "Unknown spectral data form product name = %s, genre = %s\n", product->productID->name, product->genre );
}
if( !smr_isOk( smr ) ) return( -1 );
if( secondTwoBody ) {
n++;
productDatas[n].productID = nextProduct->productID;
productDatas[n].genre = nextProduct->genre; }
else {
productDatas[n].kineticEnergy = decaySamplingInfo->Ep;
p = std::sqrt( decaySamplingInfo->Ep * ( decaySamplingInfo->Ep + 2. * product->productID->fullMass_MeV ) );
productDatas[n].pz_vz = p * decaySamplingInfo->mu;
p = std::sqrt( 1. - decaySamplingInfo->mu * decaySamplingInfo->mu ) * p;
phi = 2. * M_PI * tpia_misc_drng( decaySamplingInfo->rng, decaySamplingInfo->rngState );
productDatas[n].px_vx = p * std::sin( phi );
productDatas[n].py_vy = p * std::cos( phi );
}
n++;
}
}
}
return( n );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,177 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <tpia_depot.h>
#if defined __cplusplus
namespace GIDI{
using namespace GIDI;
#endif
/*
************************************************************
*/
tpia_depot *tpia_depot_create( statusMessageReporting *smr, const char *projectileName ) {
tpia_depot *depot;
//if( ( depot = xData_malloc2( smr, sizeof( tpia_depot ), 0, "map" ) ) == NULL ) return( NULL );
if( ( depot = (tpia_depot*) xData_malloc2( smr, sizeof( tpia_depot ), 0, "map" ) ) == NULL ) return( NULL );
if( tpia_depot_initialize( smr, depot, projectileName ) ) depot = tpia_depot_free( depot, 0 );
return( depot );
}
/*
************************************************************
*/
int tpia_depot_initialize( statusMessageReporting *smr, tpia_depot *depot, const char *projectileName ) {
memset( depot, 0, sizeof( tpia_depot ) );
depot->status = 0;
depot->projectileName = NULL;
depot->numberOfTargets = 0;
depot->targets = NULL;
depot->map = NULL;
//if( ( depot->projectileName = xData_malloc2( smr, strlen( projectileName ) + 1, 0, "projectile" ) ) == NULL ) return( 1 );
if( ( depot->projectileName = (char*) xData_malloc2( smr, strlen( projectileName ) + 1, 0, "projectile" ) ) == NULL ) return( 1 );
return( 0 );
}
/*
************************************************************
*/
tpia_depot *tpia_depot_free( tpia_depot *depot, int freeMap ) {
tpia_depot_release( depot, freeMap );
xData_free( NULL, depot );
return( NULL );
}
/*
************************************************************
*/
int tpia_depot_release( tpia_depot *depot, int freeMap ) {
tpia_targetEntry *next, *targetEntry;
if( depot->projectileName != NULL ) xData_free( NULL, depot->projectileName );
for( targetEntry = depot->targets; targetEntry != NULL; targetEntry = next ) {
next = targetEntry->next;
tpia_target_free( NULL, targetEntry->target );
xData_free( NULL, targetEntry );
}
depot->numberOfTargets = 0;
depot->targets = NULL;
//if( freeMap && ( depot->map != NULL ) ) depot->map = tpia_map_free( NULL, depot->map );
if( freeMap && ( depot->map != NULL ) ) depot->map = (tpia_map*) tpia_map_free( NULL, depot->map );
return( depot->status = 0 );
}
/*
************************************************************
*/
//int tpia_depot_setMap( statusMessageReporting *smr, tpia_depot *depot, tpia_map *map ) {
int tpia_depot_setMap( statusMessageReporting *, tpia_depot *depot, tpia_map *map ) {
depot->map = map;
return( 0 );
}
/*
************************************************************
*/
int tpia_depot_setMapFromFilename( statusMessageReporting *smr, tpia_depot *depot, const char *basePath, const char *mapFileName ) {
if( ( depot->map = tpia_map_readFile( smr, basePath, mapFileName ) ) == NULL ) return( 1 );
return( 0 );
}
/*
************************************************************
*/
tpia_map *tpia_depot_releaseMap( tpia_depot *depot ) {
tpia_map *map = depot->map;
depot->map = NULL;
return( map );
}
/*
************************************************************
*/
int tpia_depot_freeMap( tpia_depot *depot ) {
tpia_map *map = tpia_depot_releaseMap( depot );
if( map != NULL ) tpia_map_free( NULL, map );
return( 0 );
}
/*
************************************************************
*/
tpia_targetEntry *tpia_depot_getFirstTargetEntry( tpia_depot *depot ) {
return( depot->targets );
}
/*
************************************************************
*/
tpia_targetEntry *tpia_depot_getNextTargetEntry( tpia_targetEntry *targetEntry ) {
return( targetEntry->next );
}
/*
************************************************************
*/
tpia_target *tpia_depot_addTarget( statusMessageReporting *smr, tpia_depot *depot, const char *evaluation, const char *targetName ) {
return( tpia_depot_addTargetFromMap( smr, depot, depot->map, evaluation, targetName ) );
}
/*
************************************************************
*/
tpia_target *tpia_depot_addTargetFromMap( statusMessageReporting *smr, tpia_depot *depot, tpia_map *map, const char *evaluation, const char *targetName ) {
tpia_targetEntry *targetEntry;
tpia_target *target;
for( targetEntry = tpia_depot_getFirstTargetEntry( depot ); targetEntry != NULL; targetEntry = tpia_depot_getNextTargetEntry( targetEntry ) ) {
if( !strcmp( targetEntry->target->targetID->name, targetName ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "depot already contains target = %s ", targetName );
return( NULL );
}
}
target = tpia_target_createReadFromMap( smr, map, evaluation, depot->projectileName, targetName );
return( target );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,228 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static int nlab_Str = 0, nCOM_Str = 0;
static char lab_Str[] = "lab", COM_Str[] = "centerOfMass";
/*
************************************************************
*/
//int tpia_frame_clear( statusMessageReporting *smr, tpia_data_frame *frame ) {
int tpia_frame_clear( statusMessageReporting *, tpia_data_frame *frame ) {
frame->frames = 0;
return( 0 );
}
/*
************************************************************
*/
int tpia_frame_setFromElement( statusMessageReporting *smr, xData_element *element, int dimension, tpia_data_frame *frame ) {
char const *value = xData_getAttributesValueInElement( element, "frame" );
if( value == NULL ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "element is missing frame attribute" );
return( 1 );
}
return( tpia_frame_setFromString( smr, element->fullName, value, dimension, frame ) );
}
/*
************************************************************
*/
int tpia_frame_setFromString( statusMessageReporting *smr, const char *forItem, const char *value, int dimension, tpia_data_frame *frame ) {
char const *e;
int status = 1, i;
for( i = 0; i < tpia_maxNumberOfFrames; i++ ) tpia_frame_setColumn( smr, frame, i, tpia_referenceFrame_None );
if( dimension > tpia_maxNumberOfFrames ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "dimension argument = %d is greater than tpia_maxNumberOfFrames = %d", dimension,
tpia_maxNumberOfFrames );
return( status );
}
for( i = 0, e = value; ( i < dimension ) && ( *e != 0 ); i++ ) {
if( strstr( e, lab_Str ) == e ) {
tpia_frame_setColumn( smr, frame, i, tpia_referenceFrame_lab );
e += 3; }
else if( strstr( e, COM_Str ) == e ) {
tpia_frame_setColumn( smr, frame, i, tpia_referenceFrame_COM );
e += 12; }
else {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad frame '%s' for %s", value, forItem );
break;
}
if( *e != 0 ) {
if( *e != ',' ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad separater for frame '%s' for %s", value, forItem );
break;
}
e++;
}
}
if( smr_isOk( smr ) ) {
if( i == dimension ) {
if( *e == 0 ) {
status = 0; }
else {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "extra values for frame '%s' for %s", value, forItem );
} }
else {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "missing values for frame '%s' for %s", value, forItem );
}
}
return( status );
}
/*
************************************************************
*/
//int tpia_frame_getDimensions( statusMessageReporting *smr, tpia_data_frame *frame ) {
int tpia_frame_getDimensions( statusMessageReporting *, tpia_data_frame *frame ) {
int i, dimension = 0;
unsigned value = frame->frames;
for( i = 0; i < tpia_maxNumberOfFrames; i++ ) {
if( ( value & 3 ) == 0 ) break;
dimension++;
value = value >> 2;
}
return( dimension );
}
/*
************************************************************
*/
//char *tpia_frame_toString( statusMessageReporting *smr, const char *fromItem, tpia_data_frame *frame ) {
char *tpia_frame_toString( statusMessageReporting *smr, const char *, tpia_data_frame *frame ) {
int i, n = tpia_frame_getDimensions( smr, frame ), value, nStr = 0;
char *str = NULL, *p;
if( nlab_Str == 0 ) {
nlab_Str = strlen( lab_Str );
nCOM_Str = strlen( COM_Str );
}
for( i = 0; i < n; i++ ) {
value = tpia_frame_getColumn( smr, frame, i );
if( value == tpia_referenceFrame_COM ) {
nStr += nCOM_Str + 1; }
else if( value == tpia_referenceFrame_lab ) {
nStr += nlab_Str + 1; }
else {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad frame value = %d for column = %d", value, i );
return( NULL );
}
}
if( nStr == 0 ) nStr = 1;
//if( ( str = xData_malloc2( smr, nStr, 1, "str" ) ) == NULL ) return( NULL );
if( ( str = (char*) xData_malloc2( smr, nStr, 1, "str" ) ) == NULL ) return( NULL );
for( i = 0, p = str - 1; i < n; i++ ) {
p++;
value = tpia_frame_getColumn( smr, frame, i );
if( value == tpia_referenceFrame_COM ) {
strcpy( p, COM_Str );
p += nCOM_Str; }
else {
strcpy( p, lab_Str );
p += nlab_Str;
}
*p = ',';
}
*p = 0;
return( str );
}
/*
************************************************************
*/
int tpia_frame_setColumns( statusMessageReporting *smr, tpia_data_frame *frame, int nColumns, int *values ) {
int i;
tpia_frame_clear( smr, frame );
for( i = 0; i < nColumns; i++ ) if( tpia_frame_setColumn( smr, frame, i, values[i] ) != 0 ) return( 1 );
return( 0 );
}
/*
************************************************************
*/
int tpia_frame_setColumn( statusMessageReporting *smr, tpia_data_frame *frame, int column, int value ) {
int i;
if( ( column < 0 ) || ( column >= tpia_maxNumberOfFrames ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad column = %d value for setting frame (0 <= column < %d)", column, tpia_maxNumberOfFrames );
return( 1 ); }
else {
if( ( value < tpia_referenceFrame_None ) || ( value > tpia_referenceFrame_Max ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad frame value = %d for column = %d", value, column );
return( 1 ); }
else {
i = 3 << ( 2 * column );
frame->frames = frame->frames & (~i);
value = value << ( 2 * column );
frame->frames = frame->frames | value;
}
}
return( 0 );
}
/*
************************************************************
*/
int tpia_frame_getColumn( statusMessageReporting *smr, tpia_data_frame *frame, int column ) {
unsigned int value;
if( ( column < 0 ) || ( column >= tpia_maxNumberOfFrames ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad column = %d value for getting frame (0 <= column < %d)", column, tpia_maxNumberOfFrames );
return( -1 ); }
else {
value = frame->frames >> ( 2 * column );
}
return( (int) ( value & 3 ) );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,145 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <cmath>
#include <tpia_target.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
/*
************************************************************
*/
int tpia_kinetics_2BodyReaction( statusMessageReporting *smr, tpia_decayChannel *decayChannel, double K, double mu, double phi,
tpia_productOutgoingData *outgoingData ) {
tpia_product *pp3 = tpia_decayChannel_getFirstProduct( decayChannel ), *pp4;
double m1 = decayChannel->m1_fullMass_MeV, m2 = decayChannel->m2_fullMass_MeV, m3, m4, mi, mf, Kp, x, beta;
pp4 = tpia_decayChannel_getNextProduct( pp3 );
m3 = pp3->productID->fullMass_MeV;
m4 = pp4->productID->fullMass_MeV;
mi = m1 + m2;
mf = m3 + m4;
beta = std::sqrt( K * ( K + 2. * m1 ) ) / ( K + mi );
x = K * m2 / ( mi * mi );
if( x < 2e-5 ) { /* Kp is the total kinetic energy for m3 and m4 in the COM frame. */
Kp = mi - mf + K * m2 / mi * ( 1 - 0.5 * x * ( 1 - x ) ); }
else {
Kp = std::sqrt( mi * mi + 2 * K * m2 ) - mf;
}
if( Kp < 0 ) Kp = 0.; /* ???? There needs to be a better test here. */
outgoingData[0].decayChannel = &(pp3->decayChannel);
outgoingData[1].genre = outgoingData[0].genre;
outgoingData[1].productID = pp4->productID;
outgoingData[1].decayChannel = &(pp4->decayChannel);
return( tpia_kinetics_COMKineticEnergy2LabEnergyAndMomentum( smr, beta, Kp, mu, phi, m3, m4, outgoingData ) );
}
/*
************************************************************
*/
//int tpia_kinetics_COMKineticEnergy2LabEnergyAndMomentum( statusMessageReporting *smr, double beta, double e_kinetic_com, double mu, double phi,
int tpia_kinetics_COMKineticEnergy2LabEnergyAndMomentum( statusMessageReporting *, double beta, double e_kinetic_com, double mu, double phi,
double m3cc, double m4cc, tpia_productOutgoingData *outgoingData ) {
/*
* beta the velocity/speedOflight of the com frame relative to the lab frame.
* e_kinetic_com Total kinetic energy (K1 + K2) in the COM frame.
* mu cos( theta ) in the COM frame.
*/
double x, v_p, p, pp3, pp4, px3, py3, pz3, pz4, pz, p_perp2, E3, E4, gamma, m3cc2 = m3cc * m3cc, m4cc2 = m4cc * m4cc;
p = std::sqrt( e_kinetic_com * ( e_kinetic_com + 2. * m3cc ) * ( e_kinetic_com + 2. * m4cc ) * ( e_kinetic_com + 2. * ( m3cc + m4cc ) ) ) /
( 2. * ( e_kinetic_com + m3cc + m4cc ) );
py3 = p * std::sqrt( 1 - mu * mu );
px3 = py3 * std::cos( phi );
py3 *= std::sin( phi );
pz = p * mu;
if( tpia_frame_getColumn( NULL, &(outgoingData[0].frame), 0 ) == tpia_referenceFrame_lab ) {
E3 = std::sqrt( p * p + m3cc2 );
E4 = std::sqrt( p * p + m4cc2 );
gamma = std::sqrt( 1. / ( 1. - beta * beta ) );
pz3 = gamma * ( pz + beta * E3 );
pz4 = gamma * ( -pz + beta * E4 ); }
else {
pz3 = pz;
pz4 = -pz;
}
outgoingData[1].isVelocity = outgoingData[0].isVelocity;
outgoingData[1].frame = outgoingData[0].frame;
p_perp2 = px3 * px3 + py3 * py3;
outgoingData[0].px_vx = px3;
outgoingData[0].py_vy = py3;
outgoingData[0].pz_vz = pz3;
pp3 = p_perp2 + pz3 * pz3;
x = pp3 / ( 2 * m3cc2 );
if( x < 1e-5 ) {
outgoingData[0].kineticEnergy = m3cc * x * ( 1 - 0.5 * x * ( 1 - x ) ); }
else {
outgoingData[0].kineticEnergy = std::sqrt( m3cc2 + pp3 ) - m3cc;
}
outgoingData[1].px_vx = -px3;
outgoingData[1].py_vy = -py3;
outgoingData[1].pz_vz = pz4;
pp4 = p_perp2 + pz4 * pz4;
x = pp4 / ( 2 * m4cc2 );
if( x < 1e-5 ) {
outgoingData[1].kineticEnergy = m4cc * x * ( 1 - 0.5 * x * ( 1 - x ) ); }
else {
outgoingData[1].kineticEnergy = std::sqrt( m4cc2 + pp4 ) - m4cc;
}
if( outgoingData[0].isVelocity ) {
v_p = tpia_speedOfLight_cm_sec / std::sqrt( pp3 + m3cc2 );
outgoingData[0].px_vx *= v_p;
outgoingData[0].py_vy *= v_p;
outgoingData[0].pz_vz *= v_p;
v_p = tpia_speedOfLight_cm_sec / std::sqrt( pp4 + m4cc2 );
outgoingData[1].px_vx *= v_p;
outgoingData[1].py_vy *= v_p;
outgoingData[1].pz_vz *= v_p;
}
return( 0 );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,579 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <limits.h>
#ifdef WIN32
#include <Shlwapi.h>
#endif
#include <tpia_map.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static tpia_mapEntry *_tpia_map_addEntry( statusMessageReporting *smr, tpia_map *map, enum tpia_mapEntry_type type, const char *schema, const char *path,
const char *evaluation, const char *projectile, const char *target );
static char *_tpia_map_findTarget2( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectile, const char *target );
static int _tpia_map_findAllOfTarget2( statusMessageReporting *smr, tpia_map *mapAllOfTarget, tpia_map *map, const char *projectile, const char *targetName );
static int _tpia_map_walkTree2( statusMessageReporting *smr, tpia_map *map, int level, int (*handler)( tpia_mapEntry *entry, int level, void *userData),
void *userData );
static void _tpia_map_simpleWrite2( FILE *f, tpia_map *map, int level );
static int _tpia_map_smrUserInterface( void *userData, char **str );
/*
************************************************************
*/
tpia_map *tpia_map_create( statusMessageReporting *smr ) {
tpia_map *map;
//if( ( map = xData_malloc2( smr, sizeof( tpia_map ), 0, "map" ) ) == NULL ) return( NULL );
if( ( map = (tpia_map*) xData_malloc2( smr, sizeof( tpia_map ), 0, "map" ) ) == NULL ) return( NULL );
//if( tpia_map_initialize( smr, map ) ) map = tpia_map_free( NULL, map );
if( tpia_map_initialize( smr, map ) ) map = (tpia_map*) tpia_map_free( NULL, map );
return( map );
}
/*
************************************************************
*/
//int tpia_map_initialize( statusMessageReporting *smr, tpia_map *map ) {
int tpia_map_initialize( statusMessageReporting *, tpia_map *map ) {
memset( map, 0, sizeof( tpia_map ) );
map->status = tpia_map_status_Ok;
map->smrUserInterface.smrUserInterface = _tpia_map_smrUserInterface;
map->smrUserInterface.map = map;
map->path = NULL;
map->mapFileName = NULL;
map->numberOfEntries = 0;
map->mapEntries = NULL;
return( 0 );
}
/*
************************************************************
*/
tpia_map *tpia_map_readFile( statusMessageReporting *smr, const char *basePath, const char *mapFileName ) {
/*
* If an error occurrs, map is freed and NULL is returned.
*/
int n = 0;
xData_document *doc;
xData_element *element;
xData_element *child;
tpia_map *map;
const char *evaluation, *projectile, *targetName, *path, *schema;
#ifndef WIN32
char realPath[2 * ( PATH_MAX + 1 )], *p = &(realPath[PATH_MAX+1]);
#endif
#ifdef WIN32
char realPath[2 * ( _MAX_PATH + 1 )], *p = &(realPath[_MAX_PATH+1]);
#endif
if( ( map = tpia_map_create( smr ) ) == NULL ) return( NULL );
if( ( basePath == NULL ) || ( mapFileName[0] == '/' ) ) {
strcpy( realPath, mapFileName ); }
else {
strcpy( realPath, basePath );
strcat( realPath, "/" );
strcat( realPath, mapFileName );
}
#ifndef WIN32
if( realpath( realPath, p ) == NULL ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, tpia_map_status_mapParsing, "No map file %s\n", mapFileName );
//return( tpia_map_free( NULL, map ) );
return( (tpia_map*) tpia_map_free( NULL, map ) );
}
#endif
n = strlen( p ) + 2;
//if( ( map->path = xData_malloc2( smr, 2 * n, 0, "map->path" ) ) == NULL ) return( tpia_map_free( NULL, map ) );
//if( ( map->path = (char*) xData_malloc2( smr, 2 * n, 0, "map->path" ) ) == NULL ) return( tpia_map_free( NULL, map ) );
if( ( map->path = (char*) xData_malloc2( smr, 2 * n, 0, "map->path" ) ) == NULL ) return( (tpia_map*) tpia_map_free( NULL, map ) );
map->mapFileName = &(map->path[n + 1]);
strcpy( map->mapFileName, p );
strcpy( map->path, p );
if( ( p = strrchr( map->path, '/' ) ) != NULL ) {
*p = 0; }
else {
strcpy( map->path, "." );
}
//if( ( doc = xData_parseReadFile( smr, map->mapFileName, NULL, NULL ) ) == NULL ) return( tpia_map_free( NULL, map ) );
if( ( doc = xData_parseReadFile( smr, map->mapFileName, NULL, NULL ) ) == NULL ) return( (tpia_map*) tpia_map_free( NULL, map ) );
element = xData_getDocumentsElement( doc );
for( child = xData_getFirstElement( element ); child != NULL; child = xData_getNextElement( child ) ) {
if( !strcmp( child->name, "path" ) ) {
if( ( path = xData_getAttributesValueInElement( child , "path" ) ) == NULL ) {
smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "path missing path attribute" );
break;
}
if( ( projectile = xData_getAttributesValueInElement( child , "projectile" ) ) == NULL ) {
smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "path missing projectile attribute" );
break;
}
tpia_map_addPath( smr, map, path, projectile ); }
else if( !strcmp( child->name, "target" ) ) {
if( ( schema = xData_getAttributesValueInElement( child , "schema" ) ) == NULL ) {
smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'schema' attribute" );
break;
}
if( ( path = xData_getAttributesValueInElement( child , "path" ) ) == NULL ) {
smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'path' attribute" );
break;
}
if( ( evaluation = xData_getAttributesValueInElement( child , "evaluation" ) ) == NULL ) {
smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'evaluation' attribute" );
break;
}
if( ( projectile = xData_getAttributesValueInElement( child , "projectile" ) ) == NULL ) {
smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'projectile' attribute" );
break;
}
if( ( targetName = xData_getAttributesValueInElement( child , "target" ) ) == NULL ) {
smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "target missing 'target' attribute" );
break;
}
tpia_map_addTarget( smr, map, schema, path, evaluation, projectile, targetName ); }
else {
smr_setMessageError( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_mapParsing, "invalid element = %s", child->name );
}
if( !smr_isOk( smr ) ) break;
}
xData_parseFree( smr, doc );
//if( !smr_isOk( smr ) ) map = tpia_map_free( NULL, map );
if( !smr_isOk( smr ) ) map = (tpia_map*) tpia_map_free( NULL, map );
return( map );
}
/*
************************************************************
*/
void *tpia_map_free( statusMessageReporting *smr, tpia_map *map ) {
tpia_map_release( smr, map );
xData_free( smr, map );
return( NULL );
}
/*
************************************************************
*/
void tpia_map_release( statusMessageReporting *smr, tpia_map *map ) {
tpia_mapEntry *entry, *next;
if( map->path != NULL ) xData_free( NULL, map->path );
for( entry = map->mapEntries; entry != NULL; entry = next ) {
next = entry->next;
if( entry->schema != NULL ) xData_free( NULL, entry->schema );
if( entry->path != NULL ) xData_free( NULL, entry->path );
if( entry->evaluation != NULL ) xData_free( NULL, entry->evaluation );
if( entry->projectile != NULL ) xData_free( NULL, entry->projectile );
if( entry->targetName != NULL ) xData_free( NULL, entry->targetName );
if( entry->map != NULL ) tpia_map_free( smr, entry->map );
xData_free( NULL, entry );
}
map->numberOfEntries = 0;
map->mapEntries = NULL;
map->status = tpia_map_status_Ok;
}
/*
************************************************************
*/
tpia_mapEntry *tpia_map_getFirstEntry( tpia_map *map ) {
return( map->mapEntries );
}
/*
************************************************************
*/
tpia_mapEntry *tpia_map_getNextEntry( tpia_mapEntry *entry ) {
return( entry->next );
}
/*
************************************************************
*/
int tpia_map_addTarget( statusMessageReporting *smr, tpia_map *map, const char *schema, const char *path, const char *evaluation, const char *projectile, const char *target ) {
return( _tpia_map_addEntry( smr, map, tpia_mapEntry_type_target, schema, path, evaluation, projectile, target ) != NULL );
}
/*
************************************************************
*/
int tpia_map_addPath( statusMessageReporting *smr, tpia_map *map, const char *path, const char *projectile ) {
tpia_mapEntry *entry = _tpia_map_addEntry( smr, map, tpia_mapEntry_type_path, NULL, path, NULL, projectile, NULL );
if( entry != NULL ) {
if( ( entry->map = tpia_map_readFile( smr, map->path, entry->path ) ) == NULL ) entry = NULL;
}
return( entry != NULL );
}
/*
************************************************************
*/
static tpia_mapEntry *_tpia_map_addEntry( statusMessageReporting *smr, tpia_map *map, enum tpia_mapEntry_type type, const char *schema, const char *path,
const char *evaluation, const char *projectile, const char *targetName ) {
tpia_mapEntry *p;
tpia_mapEntry *entry;
//if( ( entry = xData_malloc2( smr, sizeof( tpia_mapEntry ), 1, "entry" ) ) == NULL ) return( NULL );
if( ( entry = (tpia_mapEntry*) xData_malloc2( smr, sizeof( tpia_mapEntry ), 1, "entry" ) ) == NULL ) return( NULL );
entry->next = NULL;
entry->type = type;
entry->path = NULL;
entry->map = NULL;
if( path != NULL ) {
//if( ( entry->path = xData_malloc2( smr, strlen( path ) + 1, 0, "path" ) ) == NULL ) {
if( ( entry->path = (char*) xData_malloc2( smr, strlen( path ) + 1, 0, "path" ) ) == NULL ) {
xData_free( smr, entry );
return( NULL );
}
strcpy( entry->path, path );
}
entry->evaluation = NULL;
if( evaluation != NULL ) {
//if( ( entry->evaluation = xData_malloc2( smr, strlen( evaluation ) + 1, 0, "evaluation" ) ) == NULL ) {
if( ( entry->evaluation = (char*) xData_malloc2( smr, strlen( evaluation ) + 1, 0, "evaluation" ) ) == NULL ) {
xData_free( smr, entry->path );
xData_free( smr, entry );
return( NULL );
}
strcpy( entry->evaluation, evaluation );
}
entry->projectile = NULL;
if( projectile != NULL ) {
//if( ( entry->projectile = xData_malloc2( smr, strlen( projectile ) + 1, 0, "projectile" ) ) == NULL ) {
if( ( entry->projectile = (char*) xData_malloc2( smr, strlen( projectile ) + 1, 0, "projectile" ) ) == NULL ) {
xData_free( smr, entry->evaluation );
xData_free( smr, entry->path );
xData_free( smr, entry );
return( NULL );
}
strcpy( entry->projectile, projectile );
}
entry->targetName = NULL;
if( targetName != NULL ) {
//if( ( entry->targetName = xData_malloc2( smr, strlen( targetName ) + 1, 0, "target" ) ) == NULL ) {
if( ( entry->targetName = (char*) xData_malloc2( smr, strlen( targetName ) + 1, 0, "target" ) ) == NULL ) {
xData_free( smr, entry->path );
xData_free( smr, entry->evaluation );
xData_free( smr, entry->projectile );
xData_free( smr, entry );
return( NULL );
}
strcpy( entry->targetName, targetName );
}
entry->schema = NULL;
if( schema != NULL ) {
//if( ( entry->schema = xData_malloc2( smr, strlen( schema ) + 1, 0, "schema" ) ) == NULL ) {
if( ( entry->schema = (char*) xData_malloc2( smr, strlen( schema ) + 1, 0, "schema" ) ) == NULL ) {
xData_free( smr, entry->path );
xData_free( smr, entry->evaluation );
xData_free( smr, entry->projectile );
xData_free( smr, entry->targetName );
xData_free( smr, entry );
return( NULL );
}
strcpy( entry->schema, schema );
}
if( map->mapEntries == NULL ) {
map->mapEntries = entry; }
else {
for( p = map->mapEntries; p->next != NULL; p = p->next ){;}
p->next = entry;
}
map->numberOfEntries++;
return( entry );
}
/*
************************************************************
*/
char *tpia_map_findTarget( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectile, const char *targetName ) {
/*
* Calling routine must free returned pointer.
*/
char *path;
if( map->status != tpia_map_status_Ok ) return( NULL );
path = _tpia_map_findTarget2( smr, map, evaluation, projectile, targetName );
if( ( path == NULL ) && smr_isOk( smr ) ) {
if( evaluation == NULL ) {
smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, 1, "target %s for projectile %s not found", targetName, projectile ); }
else {
smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, 1, "target %s for projectile %s and evaluation %s not found", targetName, projectile, evaluation );
}
}
return( path );
}
/*
************************************************************
*/
static char *_tpia_map_findTarget2( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectile, const char *targetName ) {
tpia_mapEntry *entry;
char *path = NULL;
int n, status;
for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
switch( entry->type ) {
case tpia_mapEntry_type_target :
if( !strcmp( projectile, entry->projectile ) && ( !strcmp( targetName, entry->targetName ) ) ) {
if( evaluation == NULL ) {
status = 1; }
else {
status = !strcmp( evaluation, entry->evaluation );
}
if( status ) {
n = strlen( map->path ) + 1 + strlen( entry->path ) + 1;
//if( ( path = xData_malloc2( smr, n, 0, "path" ) ) == NULL ) return( NULL );
if( ( path = (char*) xData_malloc2( smr, n, 0, "path" ) ) == NULL ) return( NULL );
strcpy( path, map->path );
strcat( path, "/" );
if( entry->path[0] == '/' ) {
strcpy( path, entry->path ); }
else {
strcat( path, entry->path );
}
return( path );
}
}
break;
case tpia_mapEntry_type_path :
if( !strcmp( projectile, entry->projectile ) ) {
if( ( path = _tpia_map_findTarget2( smr, entry->map, evaluation, projectile, targetName ) ) != NULL ) return( path );
}
break;
default :
smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_UnknownType, "unknown type = %d", entry->type );
return( NULL );
}
}
return( NULL );
}
/*
************************************************************
*/
tpia_map *tpia_map_findAllOfTarget( statusMessageReporting *smr, tpia_map *map, const char *projectile, const char *targetName ) {
/*
* Calling routine must free returned pointer.
*/
int status;
tpia_map *mapAllOfTarget;
if( map->status != tpia_map_status_Ok ) return( NULL );
if( ( mapAllOfTarget = tpia_map_create( smr ) ) == NULL ) return( NULL );
status = _tpia_map_findAllOfTarget2( smr, mapAllOfTarget, map, projectile, targetName );
//if( ( status != 0 ) ) mapAllOfTarget = tpia_map_free( smr, mapAllOfTarget );
if( ( status != 0 ) ) mapAllOfTarget = (tpia_map*) tpia_map_free( smr, mapAllOfTarget );
return( mapAllOfTarget );
}
/*
************************************************************
*/
static int _tpia_map_findAllOfTarget2( statusMessageReporting *smr, tpia_map *mapAllOfTarget, tpia_map *map, const char *projectile, const char *targetName ) {
tpia_mapEntry *entry;
for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
switch( entry->type ) {
case tpia_mapEntry_type_target :
if( !strcmp( projectile, entry->projectile ) && ( !strcmp( targetName, entry->targetName ) ) ) {
if( _tpia_map_addEntry( smr, mapAllOfTarget, entry->type, entry->schema, entry->path, entry->evaluation, entry->projectile,
entry->targetName ) == NULL ) return( 1 );
}
break;
case tpia_mapEntry_type_path :
if( !strcmp( projectile, entry->projectile ) ) {
if( _tpia_map_findAllOfTarget2( smr, mapAllOfTarget, entry->map, projectile, targetName ) != 0 ) return( 1 );
}
break;
default :
smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_UnknownType, "unknown type = %d", entry->type );
return( 1 );
}
}
return( 0 );
}
/*
************************************************************
*/
char *tpia_map_getFullPath( statusMessageReporting *smr, tpia_map *map, const char *endPath ) {
char *path;
if( endPath[0] == '/' ) {
//if( ( path = xData_malloc2( smr, strlen( endPath ) + 1, 0, "path" ) ) == NULL ) return( NULL );
if( ( path = (char*) xData_malloc2( smr, strlen( endPath ) + 1, 0, "path" ) ) == NULL ) return( NULL );
path[0] = 0; }
else {
//if( ( path = xData_malloc2( smr, strlen( map->path ) + strlen( endPath ) + 2, 0, "path" ) ) == NULL ) return( NULL );
if( ( path = (char*) xData_malloc2( smr, strlen( map->path ) + strlen( endPath ) + 2, 0, "path" ) ) == NULL ) return( NULL );
strcpy( path, map->path );
strcat( path, "/" );
}
strcat( path, endPath );
return( path );
}
/*
************************************************************
*/
int tpia_map_walkTree( statusMessageReporting *smr, tpia_map *map, int (*handler)( tpia_mapEntry *entry, int level, void *userData), void *userData ) {
return( _tpia_map_walkTree2( smr, map, 0, handler, userData ) );
}
/*
************************************************************
*/
static int _tpia_map_walkTree2( statusMessageReporting *smr, tpia_map *map, int level, int (*handler)( tpia_mapEntry *entry, int level, void *userData),
void *userData ) {
tpia_mapEntry *entry;
for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
if( handler( entry, level, userData ) != 0 ) return( 1 );
if( entry->type == tpia_mapEntry_type_path ) if( _tpia_map_walkTree2( smr, entry->map, level + 1, handler, userData ) != 0 ) return( 1 );
}
return( 0 );
}
/*
************************************************************
*/
char *tpia_map_toXMLString( statusMessageReporting *smr, tpia_map *map ) {
tpia_mapEntry *entry;
char *s, *p;
char targetFormat[] = "<target schema=\"%s\" evaluation=\"%s\" projectile=\"%s\" target=\"%s\" path=\"%s\"/>\n";
char pathFormat[] = "<path projectile=\"%s\" path=\"%s\"/>\n";
char start[] = "<map>\n";
char end[] = "</map>";
int n = 0, nStart = strlen( start ), nEnd = strlen( end );
int nTarget = strlen( targetFormat ) - 10, nPath = strlen( pathFormat ) - 4;
if( map->status != tpia_map_status_Ok ) return( NULL );
n = nStart + nEnd + 1;
for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
switch( entry->type ) {
case tpia_mapEntry_type_target :
n += strlen( entry->schema ) + strlen( entry->path ) + strlen( entry->evaluation ) + strlen( entry->projectile ) + strlen( entry->targetName ) + nTarget;
break;
case tpia_mapEntry_type_path :
n += strlen( entry->path ) + strlen( entry->projectile ) + nPath;
break;
default :
smr_setMessageInfo( smr, &(map->smrUserInterface), __FILE__, __LINE__, tpia_map_status_UnknownType, "unknown type = %d", entry->type );
return( NULL );
}
}
if( ( s = (char *) xData_malloc2( smr, n, 0, "xml string" ) ) == NULL ) return( NULL );
p = s;
strcpy( p, start );
while( *p ) p++;
for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
switch( entry->type ) {
case tpia_mapEntry_type_target :
sprintf( p, targetFormat, entry->schema, entry->evaluation, entry->projectile, entry->targetName, entry->path );
break;
case tpia_mapEntry_type_path :
sprintf( p, pathFormat, entry->projectile, entry->path );
break;
}
while( *p ) p++;
}
strcpy( p, end );
return( s );
}
/*
************************************************************
*/
void tpia_map_simpleWrite( FILE *f, tpia_map *map ) { _tpia_map_simpleWrite2( f, map, 0 ); }
/*
************************************************************
*/
static void _tpia_map_simpleWrite2( FILE *f, tpia_map *map, int level ) {
tpia_mapEntry *entry;
char sLevel[] = " ";
int n = strlen( sLevel ) / 4;
if( map->status != tpia_map_status_Ok ) {
fprintf( f, "Bad map status = %d\n", map->status );
return;
}
if( level < n ) sLevel[4 * level] = 0;
fprintf( f, "%smap->path = %s\n", sLevel, map->path );
fprintf( f, "%smap->mapFileName = %s\n", sLevel, map->mapFileName );
for( entry = map->mapEntries; entry != NULL; entry = entry->next ) {
switch( entry->type ) {
case tpia_mapEntry_type_target :
fprintf( f, "%sType = target: schema = %s: evaluation = %s: projectile = %s: target = %s: path = %s\n", sLevel, entry->schema,
entry->evaluation, entry->projectile, entry->targetName, entry->path );
break;
case tpia_mapEntry_type_path :
fprintf( f, "%sType = path: projectile = %s: path = %s\n", sLevel, entry->projectile, entry->path );
_tpia_map_simpleWrite2( f, entry->map, level + 1 );
break;
default :
fprintf( f, "%sUnknown type = %d\n", sLevel, entry->type );
}
}
}
/*
************************************************************
*/
static int _tpia_map_smrUserInterface( void *userData, char **str ) {
tpia_map_smr *smrUserInterface = (tpia_map_smr *) userData;
char fnl[] = "map file = ";
int size = strlen( fnl ) + strlen( smrUserInterface->map->mapFileName ) + 1;
if( str != NULL ) {
//if( ( *str = xData_malloc2( NULL, size, 0, "mapFileName" ) ) == NULL ) return( -1 );
if( ( *str = (char*) xData_malloc2( NULL, size, 0, "mapFileName" ) ) == NULL ) return( -1 );
strcpy( *str, fnl );
strcat( *str, smrUserInterface->map->mapFileName );
}
return( size );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,908 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <statusMessageReporting.h>
#include <tpia_mass.h>
#include <string>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
struct ZAMass {
//char *symbol;
std::string symbol;
double mass;
};
static struct ZAMass ZAMasses[] = {
{ "Am_242_m1", 2.420595491590000e+02 + 0.048 },
{ "FissionProductENDL99120", 117.5 },
{ "FissionProductENDL99121", 116.546 },
{ "FissionProductENDL99122", 118.544 },
{ "FissionProductENDL99125", 117.5 },
{ "gamma", 0. },
{ "n_1", 1.008664915740000e+00 }, { "H_natural", 1.007900000000000e+00 }, { "H_1", 1.007825032070000e+00 }, { "H_2", 2.014101777850000e+00 },
{ "H_3", 3.016049277670000e+00 }, { "H_4", 4.027806424000000e+00 }, { "H_5", 5.035311488000000e+00 }, { "H_6", 6.044942594000000e+00 },
{ "H_7", 7.052749000000000e+00 }, { "He_natural", 4.002600000000000e+00 }, { "He_3", 3.016029319140000e+00 }, { "He_4", 4.002603254150000e+00 },
{ "He_5", 5.012223624000000e+00 }, { "He_6", 6.018889124000000e+00 }, { "He_7", 7.028020618000000e+00 }, { "He_8", 8.033921897000001e+00 },
{ "He_9", 9.043950285999999e+00 }, { "He_10", 1.005239883700000e+01 }, { "Li_natural", 6.941000000000000e+00 }, { "Li_3", 3.030775000000000e+00 },
{ "Li_4", 4.027185558000000e+00 }, { "Li_5", 5.012537800000000e+00 }, { "Li_6", 6.015122794000000e+00 }, { "Li_7", 7.016004548000000e+00 },
{ "Li_8", 8.022487362000000e+00 }, { "Li_9", 9.026789505000000e+00 }, { "Li_10", 1.003548125900000e+01 }, { "Li_11", 1.104379771500000e+01 },
{ "Li_12", 1.205378000000000e+01 }, { "Be_natural", 9.012180000000001e+00 }, { "Be_5", 5.040790000000000e+00 }, { "Be_6", 6.019726317000000e+00 },
{ "Be_7", 7.016929828000000e+00 }, { "Be_8", 8.005305103000000e+00 }, { "Be_9", 9.012182201000000e+00 }, { "Be_10", 1.001353381800000e+01 },
{ "Be_11", 1.102165774900000e+01 }, { "Be_12", 1.202692073700000e+01 }, { "Be_13", 1.303569300700000e+01 }, { "Be_14", 1.404289292000000e+01 },
{ "Be_15", 1.505346000000000e+01 }, { "Be_16", 1.606192000000000e+01 }, { "B_natural", 1.081000000000000e+01 }, { "B_6", 6.046810000000000e+00 },
{ "B_7", 7.029917901000000e+00 }, { "B_8", 8.024607232999999e+00 }, { "B_9", 9.013328782000000e+00 }, { "B_10", 1.001293699200000e+01 },
{ "B_11", 1.100930540600000e+01 }, { "B_12", 1.201435210400000e+01 }, { "B_13", 1.301778021700000e+01 }, { "B_14", 1.402540400900000e+01 },
{ "B_15", 1.503110302100000e+01 }, { "B_16", 1.603980882900000e+01 }, { "B_17", 1.704698990600000e+01 }, { "B_18", 1.805617000000000e+01 },
{ "B_19", 1.906373000000000e+01 }, { "C_natural", 1.201100000000000e+01 }, { "C_8", 8.037675025000000e+00 }, { "C_9", 9.031036689000000e+00 },
{ "C_10", 1.001685322800000e+01 }, { "C_11", 1.101143361300000e+01 }, { "C_12", 1.200000000000000e+01 }, { "C_13", 1.300335483778000e+01 },
{ "C_14", 1.400324198870000e+01 }, { "C_15", 1.501059925600000e+01 }, { "C_16", 1.601470125200000e+01 }, { "C_17", 1.702258611600000e+01 },
{ "C_18", 1.802675935400000e+01 }, { "C_19", 1.903480501800000e+01 }, { "C_20", 2.004031975400000e+01 }, { "C_21", 2.104934000000000e+01 },
{ "C_23", 2.205720000000000e+01 }, { "N_natural", 1.400670000000000e+01 }, { "N_10", 1.004165367400000e+01 }, { "N_11", 1.102609095600000e+01 },
{ "N_12", 1.201861319700000e+01 }, { "N_13", 1.300573860900000e+01 }, { "N_14", 1.400307400478000e+01 }, { "N_15", 1.500010889823000e+01 },
{ "N_16", 1.600610165800000e+01 }, { "N_17", 1.700845026100000e+01 }, { "N_18", 1.801407895900000e+01 }, { "N_19", 1.901702869700000e+01 },
{ "N_20", 2.002336580700000e+01 }, { "N_21", 2.102710824000000e+01 }, { "N_22", 2.203439493400000e+01 }, { "N_23", 2.304122000000000e+01 },
{ "N_24", 2.405104000000000e+01 }, { "N_25", 2.506066000000000e+01 }, { "O_natural", 1.599940000000000e+01 }, { "O_12", 1.203440489500000e+01 },
{ "O_13", 1.302481221300000e+01 }, { "O_14", 1.400859625000000e+01 }, { "O_15", 1.500306561700000e+01 }, { "O_16", 1.599491461956000e+01 },
{ "O_17", 1.699913170300000e+01 }, { "O_18", 1.799916100100000e+01 }, { "O_19", 1.900358013000000e+01 }, { "O_20", 2.000407674200000e+01 },
{ "O_21", 2.100865588600000e+01 }, { "O_22", 2.200996694700000e+01 }, { "O_23", 2.301568765900000e+01 }, { "O_24", 2.402047291700000e+01 },
{ "O_25", 2.502946000000000e+01 }, { "O_26", 2.603834000000000e+01 }, { "O_27", 2.704826000000000e+01 }, { "O_28", 2.805781000000000e+01 },
{ "F_natural", 1.899840300000000e+01 }, { "F_14", 1.403506000000000e+01 }, { "F_15", 1.501800910300000e+01 }, { "F_16", 1.601146572400000e+01 },
{ "F_17", 1.700209523700000e+01 }, { "F_18", 1.800093795600000e+01 }, { "F_19", 1.899840322400000e+01 }, { "F_20", 1.999998131500000e+01 },
{ "F_21", 2.099994895100000e+01 }, { "F_22", 2.200299881500000e+01 }, { "F_23", 2.300357463100000e+01 }, { "F_24", 2.400811548500000e+01 },
{ "F_25", 2.501210174700000e+01 }, { "F_26", 2.601961555500000e+01 }, { "F_27", 2.702676008600000e+01 }, { "F_28", 2.803567000000000e+01 },
{ "F_29", 2.904326000000000e+01 }, { "F_30", 3.005250000000000e+01 }, { "F_31", 3.106042900000000e+01 }, { "Ne_natural", 2.017900000000000e+01 },
{ "Ne_16", 1.602576126200000e+01 }, { "Ne_17", 1.701767150400000e+01 }, { "Ne_18", 1.800570821300000e+01 }, { "Ne_19", 1.900188024800000e+01 },
{ "Ne_20", 1.999244017542000e+01 }, { "Ne_21", 2.099384668400000e+01 }, { "Ne_22", 2.199138511300000e+01 }, { "Ne_23", 2.299446690400000e+01 },
{ "Ne_24", 2.399361077900000e+01 }, { "Ne_25", 2.499773688800000e+01 }, { "Ne_26", 2.600046120600000e+01 }, { "Ne_27", 2.700758990300000e+01 },
{ "Ne_28", 2.801207157500000e+01 }, { "Ne_29", 2.901938593300000e+01 }, { "Ne_30", 3.002480104500000e+01 }, { "Ne_31", 3.103311000000000e+01 },
{ "Ne_32", 3.204002000000000e+01 }, { "Ne_33", 3.304938000000000e+01 }, { "Ne_34", 3.405702800000000e+01 }, { "Na_natural", 2.298977000000000e+01 },
{ "Na_18", 1.802596900000000e+01 }, { "Na_19", 1.901387749900000e+01 }, { "Na_20", 2.000735132800000e+01 }, { "Na_21", 2.099765520600000e+01 },
{ "Na_22", 2.199443642500000e+01 }, { "Na_23", 2.298976928087000e+01 }, { "Na_24", 2.399096278200000e+01 }, { "Na_25", 2.498995396800000e+01 },
{ "Na_26", 2.599263300000000e+01 }, { "Na_27", 2.699407678800000e+01 }, { "Na_28", 2.799893800000000e+01 }, { "Na_29", 2.900286100000000e+01 },
{ "Na_30", 3.000897600000000e+01 }, { "Na_31", 3.101358545200000e+01 }, { "Na_32", 3.202046656000000e+01 }, { "Na_33", 3.302671975600000e+01 },
{ "Na_34", 3.403517000000000e+01 }, { "Na_35", 3.504249300000000e+01 }, { "Na_36", 3.605148000000000e+01 }, { "Na_37", 3.705934000000000e+01 },
{ "Mg_natural", 2.430500000000000e+01 }, { "Mg_19", 1.903547000000000e+01 }, { "Mg_20", 2.001886254500000e+01 }, { "Mg_21", 2.101171291000000e+01 },
{ "Mg_22", 2.199957384300000e+01 }, { "Mg_23", 2.299412366900000e+01 }, { "Mg_24", 2.398504169900000e+01 }, { "Mg_25", 2.498583691700000e+01 },
{ "Mg_26", 2.598259292900000e+01 }, { "Mg_27", 2.698434058500000e+01 }, { "Mg_28", 2.798387682500000e+01 }, { "Mg_29", 2.898860000000000e+01 },
{ "Mg_30", 2.999043400000000e+01 }, { "Mg_31", 3.099654600000000e+01 }, { "Mg_32", 3.199897500000000e+01 }, { "Mg_33", 3.300525400000000e+01 },
{ "Mg_34", 3.400945642400000e+01 }, { "Mg_35", 3.501734000000000e+01 }, { "Mg_36", 3.602300000000000e+01 }, { "Mg_37", 3.703140000000000e+01 },
{ "Mg_38", 3.803757000000000e+01 }, { "Mg_39", 3.904677200000000e+01 }, { "Mg_40", 4.005393000000000e+01 }, { "Al_natural", 2.698154000000000e+01 },
{ "Al_21", 2.102804000000000e+01 }, { "Al_22", 2.201952000000000e+01 }, { "Al_23", 2.300726743200000e+01 }, { "Al_24", 2.399993886500000e+01 },
{ "Al_25", 2.499042809500000e+01 }, { "Al_26", 2.598689169200000e+01 }, { "Al_27", 2.698153862700000e+01 }, { "Al_28", 2.798191030600000e+01 },
{ "Al_29", 2.898044504600000e+01 }, { "Al_30", 2.998296025600000e+01 }, { "Al_31", 3.098394661900000e+01 }, { "Al_32", 3.198812448900000e+01 },
{ "Al_33", 3.299084333600000e+01 }, { "Al_34", 3.399685183700000e+01 }, { "Al_35", 3.499986023500000e+01 }, { "Al_36", 3.600620720400000e+01 },
{ "Al_37", 3.701067782000000e+01 }, { "Al_38", 3.801723102100000e+01 }, { "Al_39", 3.902297000000000e+01 }, { "Al_40", 4.003145000000000e+01 },
{ "Al_41", 4.103833000000000e+01 }, { "Al_42", 4.204689000000000e+01 }, { "Si_natural", 2.808550000000000e+01 }, { "Si_22", 2.203453000000000e+01 },
{ "Si_23", 2.302552000000000e+01 }, { "Si_24", 2.401154561600000e+01 }, { "Si_25", 2.500410557400000e+01 }, { "Si_26", 2.599232992100000e+01 },
{ "Si_27", 2.698670490500000e+01 }, { "Si_28", 2.797692653246000e+01 }, { "Si_29", 2.897649470000000e+01 }, { "Si_30", 2.997377017100000e+01 },
{ "Si_31", 3.097536322700000e+01 }, { "Si_32", 3.197414808200000e+01 }, { "Si_33", 3.297800022000000e+01 }, { "Si_34", 3.397857552400000e+01 },
{ "Si_35", 3.498458357500000e+01 }, { "Si_36", 3.598659947700000e+01 }, { "Si_37", 3.699293608000000e+01 }, { "Si_38", 3.799563360100000e+01 },
{ "Si_39", 3.900207001300000e+01 }, { "Si_40", 4.000586912100000e+01 }, { "Si_41", 4.101456000000000e+01 }, { "Si_42", 4.201979000000000e+01 },
{ "Si_43", 4.302866000000000e+01 }, { "Si_44", 4.403526000000000e+01 }, { "P_natural", 3.097376000000000e+01 }, { "P_24", 2.403435000000000e+01 },
{ "P_25", 2.502026000000000e+01 }, { "P_26", 2.601178000000000e+01 }, { "P_27", 2.699923023600000e+01 }, { "P_28", 2.799231476100000e+01 },
{ "P_29", 2.898180060600000e+01 }, { "P_30", 2.997831378900000e+01 }, { "P_31", 3.097376162900000e+01 }, { "P_32", 3.197390727400000e+01 },
{ "P_33", 3.297172554300000e+01 }, { "P_34", 3.397363625700000e+01 }, { "P_35", 3.497331411700000e+01 }, { "P_36", 3.597825968000000e+01 },
{ "P_37", 3.697960894600000e+01 }, { "P_38", 3.798415682700000e+01 }, { "P_39", 3.898617947500000e+01 }, { "P_40", 3.999129695100000e+01 },
{ "P_41", 4.099433543500000e+01 }, { "P_42", 4.200100791300000e+01 }, { "P_43", 4.300619000000000e+01 }, { "P_44", 4.401299000000000e+01 },
{ "P_45", 4.501922000000000e+01 }, { "P_46", 4.602738000000000e+01 }, { "S_natural", 3.206000000000000e+01 }, { "S_26", 2.602788000000000e+01 },
{ "S_27", 2.701883300000000e+01 }, { "S_28", 2.800437276300000e+01 }, { "S_29", 2.899660804900000e+01 }, { "S_30", 2.998490324900000e+01 },
{ "S_31", 3.097955472800000e+01 }, { "S_32", 3.197207099900000e+01 }, { "S_33", 3.297145875900000e+01 }, { "S_34", 3.396786690200000e+01 },
{ "S_35", 3.496903216100000e+01 }, { "S_36", 3.596708076000000e+01 }, { "S_37", 3.697112556700000e+01 }, { "S_38", 3.797116331700000e+01 },
{ "S_39", 3.897513430600000e+01 }, { "S_40", 3.997545172800000e+01 }, { "S_41", 4.097958214900000e+01 }, { "S_42", 4.198102241900000e+01 },
{ "S_43", 4.298715479000000e+01 }, { "S_44", 4.399021339000000e+01 }, { "S_45", 4.499650811200000e+01 }, { "S_46", 4.600075000000000e+01 },
{ "S_47", 4.700859000000000e+01 }, { "S_48", 4.801417000000000e+01 }, { "S_49", 4.902361900000000e+01 }, { "Cl_natural", 3.545300000000000e+01 },
{ "Cl_28", 2.802851000000000e+01 }, { "Cl_29", 2.901411000000000e+01 }, { "Cl_30", 3.000477000000000e+01 }, { "Cl_31", 3.099241308600000e+01 },
{ "Cl_32", 3.198568990100000e+01 }, { "Cl_33", 3.297745188700000e+01 }, { "Cl_34", 3.397376281900000e+01 }, { "Cl_35", 3.496885268200000e+01 },
{ "Cl_36", 3.596830698100000e+01 }, { "Cl_37", 3.696590259100000e+01 }, { "Cl_38", 3.796801042500000e+01 }, { "Cl_39", 3.896800816400000e+01 },
{ "Cl_40", 3.997041547200000e+01 }, { "Cl_41", 4.097068452500000e+01 }, { "Cl_42", 4.197325480400000e+01 }, { "Cl_43", 4.297405440300000e+01 },
{ "Cl_44", 4.397828107100000e+01 }, { "Cl_45", 4.498028688600000e+01 }, { "Cl_46", 4.598421004000000e+01 }, { "Cl_47", 4.698871000000000e+01 },
{ "Cl_48", 4.799495000000000e+01 }, { "Cl_49", 4.900032000000000e+01 }, { "Cl_50", 5.000784000000000e+01 }, { "Cl_51", 5.101449000000000e+01 },
{ "Ar_natural", 3.994800000000000e+01 }, { "Ar_30", 3.002156000000000e+01 }, { "Ar_31", 3.101212300000000e+01 }, { "Ar_32", 3.199763798400000e+01 },
{ "Ar_33", 3.298992570900000e+01 }, { "Ar_34", 3.398027124400000e+01 }, { "Ar_35", 3.497525758500000e+01 }, { "Ar_36", 3.596754510500000e+01 },
{ "Ar_37", 3.696677632000000e+01 }, { "Ar_38", 3.796273239400000e+01 }, { "Ar_39", 3.896431323100000e+01 }, { "Ar_40", 3.996238312251000e+01 },
{ "Ar_41", 4.096450061100000e+01 }, { "Ar_42", 4.196304573600000e+01 }, { "Ar_43", 4.296563605600000e+01 }, { "Ar_44", 4.396492403300000e+01 },
{ "Ar_45", 4.496803995600000e+01 }, { "Ar_46", 4.596809412900000e+01 }, { "Ar_47", 4.697218679200000e+01 }, { "Ar_48", 4.797454000000000e+01 },
{ "Ar_49", 4.898052000000000e+01 }, { "Ar_50", 4.998443000000000e+01 }, { "Ar_51", 5.099163000000000e+01 }, { "Ar_52", 5.199678000000000e+01 },
{ "Ar_53", 5.300494000000000e+01 }, { "K_natural", 3.909830000000000e+01 }, { "K_32", 3.202192000000000e+01 }, { "K_33", 3.300726000000000e+01 },
{ "K_34", 3.399841000000000e+01 }, { "K_35", 3.498800969200000e+01 }, { "K_36", 3.598129223500000e+01 }, { "K_37", 3.697337588900000e+01 },
{ "K_38", 3.796908118400000e+01 }, { "K_39", 3.896370667900000e+01 }, { "K_40", 3.996399847500000e+01 }, { "K_41", 4.096182576200000e+01 },
{ "K_42", 4.196240281000000e+01 }, { "K_43", 4.296071554000000e+01 }, { "K_44", 4.396155680400000e+01 }, { "K_45", 4.496069949300000e+01 },
{ "K_46", 4.596197686400000e+01 }, { "K_47", 4.696167847300000e+01 }, { "K_48", 4.796551353500000e+01 }, { "K_49", 4.896745092800000e+01 },
{ "K_50", 4.997278335500000e+01 }, { "K_51", 5.097638000000000e+01 }, { "K_52", 5.198261000000000e+01 }, { "K_53", 5.298712000000000e+01 },
{ "K_54", 5.399420000000000e+01 }, { "K_55", 5.499971000000000e+01 }, { "Ca_natural", 4.008000000000000e+01 }, { "Ca_34", 3.401412000000000e+01 },
{ "Ca_35", 3.500494000000000e+01 }, { "Ca_36", 3.599308706300000e+01 }, { "Ca_37", 3.698587026900000e+01 }, { "Ca_38", 3.797631845200000e+01 },
{ "Ca_39", 3.897071972500000e+01 }, { "Ca_40", 3.996259098300000e+01 }, { "Ca_41", 4.096227806200000e+01 }, { "Ca_42", 4.195861801400000e+01 },
{ "Ca_43", 4.295876662800000e+01 }, { "Ca_44", 4.395548175400000e+01 }, { "Ca_45", 4.495618656600000e+01 }, { "Ca_46", 4.595369258700000e+01 },
{ "Ca_47", 4.695454600600000e+01 }, { "Ca_48", 4.795253417700000e+01 }, { "Ca_49", 4.895567414800000e+01 }, { "Ca_50", 4.995751896200000e+01 },
{ "Ca_51", 5.096149921400000e+01 }, { "Ca_52", 5.196510000000000e+01 }, { "Ca_53", 5.297005000000000e+01 }, { "Ca_54", 5.397435000000000e+01 },
{ "Ca_55", 5.498055000000000e+01 }, { "Ca_56", 5.598557000000000e+01 }, { "Ca_57", 5.699235600000000e+01 }, { "Sc_natural", 4.495590000000000e+01 },
{ "Sc_36", 3.601492000000000e+01 }, { "Sc_37", 3.700305000000000e+01 }, { "Sc_38", 3.799470000000000e+01 }, { "Sc_39", 3.898479000200000e+01 },
{ "Sc_40", 3.997796740700000e+01 }, { "Sc_41", 4.096925112500000e+01 }, { "Sc_42", 4.196551642900000e+01 }, { "Sc_43", 4.296115065800000e+01 },
{ "Sc_44", 4.395940275200000e+01 }, { "Sc_45", 4.495591190900000e+01 }, { "Sc_46", 4.595517189000000e+01 }, { "Sc_47", 4.695240750800000e+01 },
{ "Sc_48", 4.795223146800000e+01 }, { "Sc_49", 4.895002397500000e+01 }, { "Sc_50", 4.995218768500000e+01 }, { "Sc_51", 5.095360336800000e+01 },
{ "Sc_52", 5.195667546800000e+01 }, { "Sc_53", 5.295961000000000e+01 }, { "Sc_54", 5.396326456100000e+01 }, { "Sc_55", 5.496824394900000e+01 },
{ "Sc_56", 5.597287000000000e+01 }, { "Sc_57", 5.697779000000000e+01 }, { "Sc_58", 5.798371000000000e+01 }, { "Sc_59", 5.898922000000000e+01 },
{ "Sc_60", 5.999571000000000e+01 }, { "Ti_natural", 4.790000000000000e+01 }, { "Ti_38", 3.800977000000000e+01 }, { "Ti_39", 3.900161000000000e+01 },
{ "Ti_40", 3.999049883800000e+01 }, { "Ti_41", 4.098314500000000e+01 }, { "Ti_42", 4.197303090200000e+01 }, { "Ti_43", 4.296852249900000e+01 },
{ "Ti_44", 4.395969006900000e+01 }, { "Ti_45", 4.495812561600000e+01 }, { "Ti_46", 4.595263155500000e+01 }, { "Ti_47", 4.695176308800000e+01 },
{ "Ti_48", 4.794794628100000e+01 }, { "Ti_49", 4.894786998200000e+01 }, { "Ti_50", 4.994479119400000e+01 }, { "Ti_51", 5.094661495500000e+01 },
{ "Ti_52", 5.194689731100000e+01 }, { "Ti_53", 5.294972717100000e+01 }, { "Ti_54", 5.395105240100000e+01 }, { "Ti_55", 5.495526505600000e+01 },
{ "Ti_56", 5.595819963900000e+01 }, { "Ti_57", 5.696398913700000e+01 }, { "Ti_58", 5.796697000000000e+01 }, { "Ti_59", 5.897293000000000e+01 },
{ "Ti_60", 5.997676000000000e+01 }, { "Ti_61", 6.098320000000000e+01 }, { "Ti_62", 6.198749000000000e+01 }, { "Ti_63", 6.299442000000000e+01 },
{ "V_natural", 5.094150000000000e+01 }, { "V_40", 4.001109000000000e+01 }, { "V_41", 4.099978000000000e+01 }, { "V_42", 4.199123000000000e+01 },
{ "V_43", 4.298065000000000e+01 }, { "V_44", 4.397411000000000e+01 }, { "V_45", 4.496577580800000e+01 }, { "V_46", 4.596020048100000e+01 },
{ "V_47", 4.695490894000000e+01 }, { "V_48", 4.795225370700000e+01 }, { "V_49", 4.894851610100000e+01 }, { "V_50", 4.994715848500000e+01 },
{ "V_51", 5.094395950700000e+01 }, { "V_52", 5.194477547900000e+01 }, { "V_53", 5.294433797900000e+01 }, { "V_54", 5.394643985400000e+01 },
{ "V_55", 5.494723370100000e+01 }, { "V_56", 5.595053096600000e+01 }, { "V_57", 5.695256143200000e+01 }, { "V_58", 5.795683413600000e+01 },
{ "V_59", 5.896020740700000e+01 }, { "V_60", 5.996502686200000e+01 }, { "V_61", 6.096848000000000e+01 }, { "V_62", 6.197378000000000e+01 },
{ "V_63", 6.297755000000000e+01 }, { "V_64", 6.398347000000000e+01 }, { "V_65", 6.498792000000000e+01 }, { "Cr_natural", 5.199600000000000e+01 },
{ "Cr_42", 4.200643000000000e+01 }, { "Cr_43", 4.299771000000000e+01 }, { "Cr_44", 4.398554900000000e+01 }, { "Cr_45", 4.497964000000000e+01 },
{ "Cr_46", 4.596835863500000e+01 }, { "Cr_47", 4.696290004600000e+01 }, { "Cr_48", 4.795403171600000e+01 }, { "Cr_49", 4.895133572100000e+01 },
{ "Cr_50", 4.994604420500000e+01 }, { "Cr_51", 5.094476743100000e+01 }, { "Cr_52", 5.194050747200000e+01 }, { "Cr_53", 5.294064938600000e+01 },
{ "Cr_54", 5.393888039500000e+01 }, { "Cr_55", 5.494083967200000e+01 }, { "Cr_56", 5.594065313900000e+01 }, { "Cr_57", 5.694361301300000e+01 },
{ "Cr_58", 5.794435312900000e+01 }, { "Cr_59", 5.894858636700000e+01 }, { "Cr_60", 5.995007603300000e+01 }, { "Cr_61", 6.095471720400000e+01 },
{ "Cr_62", 6.195661319000000e+01 }, { "Cr_63", 6.296186000000000e+01 }, { "Cr_64", 6.396441000000000e+01 }, { "Cr_65", 6.497016000000001e+01 },
{ "Cr_66", 6.597338000000001e+01 }, { "Cr_67", 6.697955000000000e+01 }, { "Mn_natural", 5.493800000000000e+01 }, { "Mn_44", 4.400687000000000e+01 },
{ "Mn_45", 4.499451000000000e+01 }, { "Mn_46", 4.598672000000000e+01 }, { "Mn_47", 4.697610000000000e+01 }, { "Mn_48", 4.796852000000000e+01 },
{ "Mn_49", 4.895961800500000e+01 }, { "Mn_50", 4.995423823000000e+01 }, { "Mn_51", 5.094821078700000e+01 }, { "Mn_52", 5.194556546400000e+01 },
{ "Mn_53", 5.294129011700000e+01 }, { "Mn_54", 5.394035885400000e+01 }, { "Mn_55", 5.493804514100000e+01 }, { "Mn_56", 5.593890491000000e+01 },
{ "Mn_57", 5.693828537800000e+01 }, { "Mn_58", 5.793998154900000e+01 }, { "Mn_59", 5.894044023700000e+01 }, { "Mn_60", 5.994291124600000e+01 },
{ "Mn_61", 6.094465263800000e+01 }, { "Mn_62", 6.194842822000000e+01 }, { "Mn_63", 6.295023999000000e+01 }, { "Mn_64", 6.395424909000000e+01 },
{ "Mn_65", 6.495633606500000e+01 }, { "Mn_66", 6.596108000000000e+01 }, { "Mn_67", 6.696414000000000e+01 }, { "Mn_68", 6.796930000000000e+01 },
{ "Mn_69", 6.897284000000001e+01 }, { "Fe_natural", 5.584700000000000e+01 }, { "Fe_45", 4.501457800000000e+01 }, { "Fe_46", 4.600081000000000e+01 },
{ "Fe_47", 4.699289000000000e+01 }, { "Fe_48", 4.798050400000000e+01 }, { "Fe_49", 4.897361000000000e+01 }, { "Fe_50", 4.996298898200000e+01 },
{ "Fe_51", 5.095681953800000e+01 }, { "Fe_52", 5.194811387500000e+01 }, { "Fe_53", 5.294530794200000e+01 }, { "Fe_54", 5.393961050100000e+01 },
{ "Fe_55", 5.493829335700000e+01 }, { "Fe_56", 5.593493747500000e+01 }, { "Fe_57", 5.693539396900000e+01 }, { "Fe_58", 5.793327555800000e+01 },
{ "Fe_59", 5.893487546400000e+01 }, { "Fe_60", 5.993407168300000e+01 }, { "Fe_61", 6.093674528100000e+01 }, { "Fe_62", 6.193676744200000e+01 },
{ "Fe_63", 6.294036909100000e+01 }, { "Fe_64", 6.394120126500000e+01 }, { "Fe_65", 6.494538027000000e+01 }, { "Fe_66", 6.594678063800001e+01 },
{ "Fe_67", 6.695094724400001e+01 }, { "Fe_68", 6.795370000000000e+01 }, { "Fe_69", 6.895878000000000e+01 }, { "Fe_70", 6.996146000000000e+01 },
{ "Fe_71", 7.096672000000000e+01 }, { "Fe_72", 7.196962000000001e+01 }, { "Co_natural", 5.893320000000000e+01 }, { "Co_47", 4.701149000000000e+01 },
{ "Co_48", 4.800176000000000e+01 }, { "Co_49", 4.898972000000000e+01 }, { "Co_50", 4.998154000000000e+01 }, { "Co_51", 5.097072000000000e+01 },
{ "Co_52", 5.196359000000000e+01 }, { "Co_53", 5.295421889600000e+01 }, { "Co_54", 5.394845963500000e+01 }, { "Co_55", 5.494199902900000e+01 },
{ "Co_56", 5.593983927800000e+01 }, { "Co_57", 5.693629137300000e+01 }, { "Co_58", 5.793575281400000e+01 }, { "Co_59", 5.893319504800000e+01 },
{ "Co_60", 5.993381705900000e+01 }, { "Co_61", 6.093247576300000e+01 }, { "Co_62", 6.193405056300000e+01 }, { "Co_63", 6.293361161100000e+01 },
{ "Co_64", 6.393580990800000e+01 }, { "Co_65", 6.493647846000000e+01 }, { "Co_66", 6.593976200400000e+01 }, { "Co_67", 6.694088952900000e+01 },
{ "Co_68", 6.794487305800000e+01 }, { "Co_69", 6.894632000000000e+01 }, { "Co_70", 6.995099999999999e+01 }, { "Co_71", 7.095290000000000e+01 },
{ "Co_72", 7.195780999999999e+01 }, { "Co_73", 7.296024000000000e+01 }, { "Co_74", 7.396538000000000e+01 }, { "Co_75", 7.496832999999999e+01 },
{ "Ni_natural", 5.870000000000000e+01 }, { "Ni_48", 4.801975000000000e+01 }, { "Ni_49", 4.900966000000000e+01 }, { "Ni_50", 4.999593000000000e+01 },
{ "Ni_51", 5.098772000000000e+01 }, { "Ni_52", 5.197568000000000e+01 }, { "Ni_53", 5.296847000000000e+01 }, { "Ni_54", 5.395790549500000e+01 },
{ "Ni_55", 5.495133025100000e+01 }, { "Ni_56", 5.594213202200000e+01 }, { "Ni_57", 5.693979352600000e+01 }, { "Ni_58", 5.793534290700000e+01 },
{ "Ni_59", 5.893434670500000e+01 }, { "Ni_60", 5.993078637200000e+01 }, { "Ni_61", 6.093105603300000e+01 }, { "Ni_62", 6.192834511500000e+01 },
{ "Ni_63", 6.292966937400000e+01 }, { "Ni_64", 6.392796595900000e+01 }, { "Ni_65", 6.493008430400000e+01 }, { "Ni_66", 6.592913933400000e+01 },
{ "Ni_67", 6.693156941399999e+01 }, { "Ni_68", 6.793186878900001e+01 }, { "Ni_69", 6.893561026899999e+01 }, { "Ni_70", 6.993650000000000e+01 },
{ "Ni_71", 7.094073628300001e+01 }, { "Ni_72", 7.194209268199999e+01 }, { "Ni_73", 7.294647000000001e+01 }, { "Ni_74", 7.394807000000000e+01 },
{ "Ni_75", 7.495287000000000e+01 }, { "Ni_76", 7.595533000000000e+01 }, { "Ni_77", 7.696055000000000e+01 }, { "Ni_78", 7.796317999999999e+01 },
{ "Cu_natural", 6.354600000000000e+01 }, { "Cu_52", 5.199718000000000e+01 }, { "Cu_53", 5.298555000000000e+01 }, { "Cu_54", 5.397671000000000e+01 },
{ "Cu_55", 5.496605000000000e+01 }, { "Cu_56", 5.595856000000000e+01 }, { "Cu_57", 5.694921107800000e+01 }, { "Cu_58", 5.794453849900000e+01 },
{ "Cu_59", 5.893949802800000e+01 }, { "Cu_60", 5.993736503000000e+01 }, { "Cu_61", 6.093345782100000e+01 }, { "Cu_62", 6.193258374500000e+01 },
{ "Cu_63", 6.292959747400000e+01 }, { "Cu_64", 6.392976418300000e+01 }, { "Cu_65", 6.492778948500001e+01 }, { "Cu_66", 6.592886881299999e+01 },
{ "Cu_67", 6.692773031400000e+01 }, { "Cu_68", 6.792961088900000e+01 }, { "Cu_69", 6.892942926900000e+01 }, { "Cu_70", 6.993239234300000e+01 },
{ "Cu_71", 7.093267683300000e+01 }, { "Cu_72", 7.193582030700000e+01 }, { "Cu_73", 7.293667528200000e+01 }, { "Cu_74", 7.393987486200000e+01 },
{ "Cu_75", 7.494190000000000e+01 }, { "Cu_76", 7.594527502600000e+01 }, { "Cu_77", 7.694785000000000e+01 }, { "Cu_78", 7.795196000000000e+01 },
{ "Cu_79", 7.895456000000000e+01 }, { "Cu_80", 7.996087000000000e+01 }, { "Zn_natural", 6.538000000000000e+01 }, { "Zn_54", 5.399295000000000e+01 },
{ "Zn_55", 5.498398000000000e+01 }, { "Zn_56", 5.597238000000000e+01 }, { "Zn_57", 5.696478800000000e+01 }, { "Zn_58", 5.795459155500000e+01 },
{ "Zn_59", 5.894926376400000e+01 }, { "Zn_60", 5.994182703500000e+01 }, { "Zn_61", 6.093951063500000e+01 }, { "Zn_62", 6.193432976400000e+01 },
{ "Zn_63", 6.293321156600000e+01 }, { "Zn_64", 6.392914222200000e+01 }, { "Zn_65", 6.492924098400000e+01 }, { "Zn_66", 6.592603341900001e+01 },
{ "Zn_67", 6.692712734500000e+01 }, { "Zn_68", 6.792484415400000e+01 }, { "Zn_69", 6.892655028100000e+01 }, { "Zn_70", 6.992531927400000e+01 },
{ "Zn_71", 7.092772159899999e+01 }, { "Zn_72", 7.192685795100000e+01 }, { "Zn_73", 7.292977910400000e+01 }, { "Zn_74", 7.392945860899999e+01 },
{ "Zn_75", 7.493293674100001e+01 }, { "Zn_76", 7.593329357000000e+01 }, { "Zn_77", 7.693695896700000e+01 }, { "Zn_78", 7.793844021600000e+01 },
{ "Zn_79", 7.894265200000000e+01 }, { "Zn_80", 7.994434234800001e+01 }, { "Zn_81", 8.095048000000000e+01 }, { "Zn_82", 8.195442000000000e+01 },
{ "Zn_83", 8.296102999999999e+01 }, { "Ga_natural", 6.972000000000000e+01 }, { "Ga_56", 5.599491000000000e+01 }, { "Ga_57", 5.698293000000000e+01 },
{ "Ga_58", 5.797425000000000e+01 }, { "Ga_59", 5.896337000000000e+01 }, { "Ga_60", 5.995706000000000e+01 }, { "Ga_61", 6.094944628700000e+01 },
{ "Ga_62", 6.194417523800000e+01 }, { "Ga_63", 6.293929419600000e+01 }, { "Ga_64", 6.393683874700000e+01 }, { "Ga_65", 6.493273475399999e+01 },
{ "Ga_66", 6.593158901000000e+01 }, { "Ga_67", 6.692820170300000e+01 }, { "Ga_68", 6.792798008400000e+01 }, { "Ga_69", 6.892557358700000e+01 },
{ "Ga_70", 6.992602197200000e+01 }, { "Ga_71", 7.092470134900000e+01 }, { "Ga_72", 7.192636626800000e+01 }, { "Ga_73", 7.292517468200001e+01 },
{ "Ga_74", 7.392694576200000e+01 }, { "Ga_75", 7.492650024600000e+01 }, { "Ga_76", 7.592882762600000e+01 }, { "Ga_77", 7.692915429999999e+01 },
{ "Ga_78", 7.793160818000000e+01 }, { "Ga_79", 7.893289326000000e+01 }, { "Ga_80", 7.993651578100000e+01 }, { "Ga_81", 8.093775235500000e+01 },
{ "Ga_82", 8.194298999999999e+01 }, { "Ga_83", 8.294698000000000e+01 }, { "Ga_84", 8.395265000000001e+01 }, { "Ga_85", 8.495699999999999e+01 },
{ "Ga_86", 8.596312000000000e+01 }, { "Ge_natural", 7.259000000000000e+01 }, { "Ge_58", 5.799101000000000e+01 }, { "Ge_59", 5.898175000000000e+01 },
{ "Ge_60", 5.997019000000000e+01 }, { "Ge_61", 6.096379000000000e+01 }, { "Ge_62", 6.195465000000000e+01 }, { "Ge_63", 6.294964000000000e+01 },
{ "Ge_64", 6.394165300000000e+01 }, { "Ge_65", 6.493943640600000e+01 }, { "Ge_66", 6.593384345299999e+01 }, { "Ge_67", 6.693273407000000e+01 },
{ "Ge_68", 6.792809423999999e+01 }, { "Ge_69", 6.892796453299999e+01 }, { "Ge_70", 6.992424738100000e+01 }, { "Ge_71", 7.092495095400000e+01 },
{ "Ge_72", 7.192207581500000e+01 }, { "Ge_73", 7.292345894499999e+01 }, { "Ge_74", 7.392117776700000e+01 }, { "Ge_75", 7.492285894800000e+01 },
{ "Ge_76", 7.592140255699999e+01 }, { "Ge_77", 7.692354859100000e+01 }, { "Ge_78", 7.792285273900001e+01 }, { "Ge_79", 7.892540099500000e+01 },
{ "Ge_80", 7.992537239200000e+01 }, { "Ge_81", 8.092882046699999e+01 }, { "Ge_82", 8.192954972500000e+01 }, { "Ge_83", 8.293462000000000e+01 },
{ "Ge_84", 8.393747000000000e+01 }, { "Ge_85", 8.494302999999999e+01 }, { "Ge_86", 8.594649000000000e+01 }, { "Ge_87", 8.695251000000000e+01 },
{ "Ge_88", 8.795690999999999e+01 }, { "Ge_89", 8.896383000000000e+01 }, { "As_natural", 7.492160000000000e+01 }, { "As_60", 5.999313000000000e+01 },
{ "As_61", 6.098062000000000e+01 }, { "As_62", 6.197320000000000e+01 }, { "As_63", 6.296369000000000e+01 }, { "As_64", 6.395757200000000e+01 },
{ "As_65", 6.494956400000000e+01 }, { "As_66", 6.594471000000000e+01 }, { "As_67", 6.693918607099999e+01 }, { "As_68", 6.793676906899999e+01 },
{ "As_69", 6.893227367500000e+01 }, { "As_70", 6.993092482599999e+01 }, { "As_71", 7.092711242800000e+01 }, { "As_72", 7.192675228300000e+01 },
{ "As_73", 7.292382484399999e+01 }, { "As_74", 7.392392869200000e+01 }, { "As_75", 7.492159647800000e+01 }, { "As_76", 7.592239402100000e+01 },
{ "As_77", 7.692064728600000e+01 }, { "As_78", 7.792182728100001e+01 }, { "As_79", 7.892094793400000e+01 }, { "As_80", 7.992253381600000e+01 },
{ "As_81", 8.092213228700000e+01 }, { "As_82", 8.192450406700000e+01 }, { "As_83", 8.292498002400001e+01 }, { "As_84", 8.392905800000000e+01 },
{ "As_85", 8.493201999999999e+01 }, { "As_86", 8.593650000000000e+01 }, { "As_87", 8.693989999999999e+01 }, { "As_88", 8.794494000000000e+01 },
{ "As_89", 8.894938999999999e+01 }, { "As_90", 8.995550000000000e+01 }, { "As_91", 9.096043000000000e+01 }, { "As_92", 9.196680000000001e+01 },
{ "Se_natural", 7.895999999999999e+01 }, { "Se_65", 6.496465999999999e+01 }, { "Se_66", 6.595520999999999e+01 }, { "Se_67", 6.695009000000000e+01 },
{ "Se_68", 6.794179800000001e+01 }, { "Se_69", 6.893955781699999e+01 }, { "Se_70", 6.993339064400000e+01 }, { "Se_71", 7.093224182199999e+01 },
{ "Se_72", 7.192711235199999e+01 }, { "Se_73", 7.292676534500001e+01 }, { "Se_74", 7.392247643600000e+01 }, { "Se_75", 7.492252336800000e+01 },
{ "Se_76", 7.591921359700000e+01 }, { "Se_77", 7.691991403800000e+01 }, { "Se_78", 7.791730909000000e+01 }, { "Se_79", 7.891849909800000e+01 },
{ "Se_80", 7.991652127099999e+01 }, { "Se_81", 8.091799247400000e+01 }, { "Se_82", 8.191669940100000e+01 }, { "Se_83", 8.291911847300000e+01 },
{ "Se_84", 8.391846235400000e+01 }, { "Se_85", 8.492224505300000e+01 }, { "Se_86", 8.592427157900001e+01 }, { "Se_87", 8.692852135800000e+01 },
{ "Se_88", 8.793142399800000e+01 }, { "Se_89", 8.893644999999999e+01 }, { "Se_90", 8.993996000000000e+01 }, { "Se_91", 9.094596000000000e+01 },
{ "Se_92", 9.194992000000001e+01 }, { "Se_93", 9.295629000000000e+01 }, { "Se_94", 9.396048999999999e+01 }, { "Br_natural", 7.990400000000000e+01 },
{ "Br_67", 6.696478999999999e+01 }, { "Br_68", 6.795851600000000e+01 }, { "Br_69", 6.895010600000001e+01 }, { "Br_70", 6.994479200000001e+01 },
{ "Br_71", 7.093874000000000e+01 }, { "Br_72", 7.193664457200001e+01 }, { "Br_73", 7.293169152400000e+01 }, { "Br_74", 7.392989103399999e+01 },
{ "Br_75", 7.492577620700000e+01 }, { "Br_76", 7.592454146900000e+01 }, { "Br_77", 7.692137908200000e+01 }, { "Br_78", 7.792114570600000e+01 },
{ "Br_79", 7.891833708700000e+01 }, { "Br_80", 7.991852929600000e+01 }, { "Br_81", 8.091629056300000e+01 }, { "Br_82", 8.191680411900001e+01 },
{ "Br_83", 8.291518042100000e+01 }, { "Br_84", 8.391647897400000e+01 }, { "Br_85", 8.491560840299999e+01 }, { "Br_86", 8.591879757700001e+01 },
{ "Br_87", 8.692071132400000e+01 }, { "Br_88", 8.792406592600000e+01 }, { "Br_89", 8.892638533400000e+01 }, { "Br_90", 8.993062773699999e+01 },
{ "Br_91", 9.093396809500000e+01 }, { "Br_92", 9.193925871400000e+01 }, { "Br_93", 9.294305000000000e+01 }, { "Br_94", 9.394868000000000e+01 },
{ "Br_95", 9.495287000000000e+01 }, { "Br_96", 9.595853000000000e+01 }, { "Br_97", 9.696280000000000e+01 }, { "Kr_natural", 8.380000000000000e+01 },
{ "Kr_69", 6.896518000000000e+01 }, { "Kr_70", 6.995525900000000e+01 }, { "Kr_71", 7.094962573799999e+01 }, { "Kr_72", 7.194209203800000e+01 },
{ "Kr_73", 7.293928919500000e+01 }, { "Kr_74", 7.393308436900000e+01 }, { "Kr_75", 7.493094574600001e+01 }, { "Kr_76", 7.592591007800000e+01 },
{ "Kr_77", 7.692467000000001e+01 }, { "Kr_78", 7.792036478300000e+01 }, { "Kr_79", 7.892008243100000e+01 }, { "Kr_80", 7.991637896500001e+01 },
{ "Kr_81", 8.091659201500001e+01 }, { "Kr_82", 8.191348360000001e+01 }, { "Kr_83", 8.291413609900000e+01 }, { "Kr_84", 8.391150668700000e+01 },
{ "Kr_85", 8.491252733100001e+01 }, { "Kr_86", 8.591061072900000e+01 }, { "Kr_87", 8.691335486200001e+01 }, { "Kr_88", 8.791444696900000e+01 },
{ "Kr_89", 8.891763058100000e+01 }, { "Kr_90", 8.991951655500000e+01 }, { "Kr_91", 9.092344521500000e+01 }, { "Kr_92", 9.192615621000000e+01 },
{ "Kr_93", 9.293127435700001e+01 }, { "Kr_94", 9.393436000000000e+01 }, { "Kr_95", 9.493984000000000e+01 }, { "Kr_96", 9.594307000000001e+01 },
{ "Kr_97", 9.694856000000000e+01 }, { "Kr_98", 9.795191000000000e+01 }, { "Kr_99", 9.895760000000000e+01 }, { "Kr_100", 9.996114000000000e+01 },
{ "Rb_natural", 8.546780000000000e+01 }, { "Rb_71", 7.096532000000001e+01 }, { "Rb_72", 7.195908000000000e+01 }, { "Rb_73", 7.295056099999999e+01 },
{ "Rb_74", 7.394426475100001e+01 }, { "Rb_75", 7.493857000000000e+01 }, { "Rb_76", 7.593507222600000e+01 }, { "Rb_77", 7.693040800000000e+01 },
{ "Rb_78", 7.792814100000000e+01 }, { "Rb_79", 7.892398946000000e+01 }, { "Rb_80", 7.992251924999999e+01 }, { "Rb_81", 8.091899591300000e+01 },
{ "Rb_82", 8.191820859800001e+01 }, { "Rb_83", 8.291510970100001e+01 }, { "Rb_84", 8.391438482100000e+01 }, { "Rb_85", 8.491178973700001e+01 },
{ "Rb_86", 8.591116741899999e+01 }, { "Rb_87", 8.690918052600000e+01 }, { "Rb_88", 8.791131558799999e+01 }, { "Rb_89", 8.891227801600000e+01 },
{ "Rb_90", 8.991480169400000e+01 }, { "Rb_91", 9.091653695799999e+01 }, { "Rb_92", 9.191972890000000e+01 }, { "Rb_93", 9.292204187599999e+01 },
{ "Rb_94", 9.392640494600001e+01 }, { "Rb_95", 9.492930288900000e+01 }, { "Rb_96", 9.593427263700001e+01 }, { "Rb_97", 9.693735191600000e+01 },
{ "Rb_98", 9.794179066800000e+01 }, { "Rb_99", 9.894537928299999e+01 }, { "Rb_100", 9.994987000000000e+01 }, { "Rb_101", 1.009531964450000e+02 },
{ "Rb_102", 1.019588700000000e+02 }, { "Sr_natural", 8.762000000000000e+01 }, { "Sr_73", 7.296597000000000e+01 }, { "Sr_74", 7.395631000000000e+01 },
{ "Sr_75", 7.494994956799999e+01 }, { "Sr_76", 7.594176678200000e+01 }, { "Sr_77", 7.693794478200000e+01 }, { "Sr_78", 7.793218000000000e+01 },
{ "Sr_79", 7.892970800000001e+01 }, { "Sr_80", 7.992452101300000e+01 }, { "Sr_81", 8.092321184600000e+01 }, { "Sr_82", 8.191840163900000e+01 },
{ "Sr_83", 8.291755670100000e+01 }, { "Sr_84", 8.391342527499999e+01 }, { "Sr_85", 8.491293280300000e+01 }, { "Sr_86", 8.590926020400001e+01 },
{ "Sr_87", 8.690887712400000e+01 }, { "Sr_88", 8.790561212400000e+01 }, { "Sr_89", 8.890745067500001e+01 }, { "Sr_90", 8.990773788800000e+01 },
{ "Sr_91", 9.091020309500000e+01 }, { "Sr_92", 9.191103785800000e+01 }, { "Sr_93", 9.291402563400000e+01 }, { "Sr_94", 9.391536131200000e+01 },
{ "Sr_95", 9.491935876600000e+01 }, { "Sr_96", 9.592169680200000e+01 }, { "Sr_97", 9.692615292300000e+01 }, { "Sr_98", 9.792845293400001e+01 },
{ "Sr_99", 9.893324092600000e+01 }, { "Sr_100", 9.993535191100000e+01 }, { "Sr_101", 1.009405178880000e+02 }, { "Sr_102", 1.019430189870000e+02 },
{ "Sr_103", 1.029489500000000e+02 }, { "Sr_104", 1.039523300000000e+02 }, { "Sr_105", 1.049585800000000e+02 }, { "Y_natural", 8.890590000000000e+01 },
{ "Y_76", 7.595845000000000e+01 }, { "Y_77", 7.694964500000000e+01 }, { "Y_78", 7.794361000000001e+01 }, { "Y_79", 7.893735163400000e+01 },
{ "Y_80", 7.993428000000000e+01 }, { "Y_81", 8.092912746800000e+01 }, { "Y_82", 8.192679245100000e+01 }, { "Y_83", 8.292235424300000e+01 },
{ "Y_84", 8.392038826400000e+01 }, { "Y_85", 8.491643303900000e+01 }, { "Y_86", 8.591488557600000e+01 }, { "Y_87", 8.691087573000000e+01 },
{ "Y_88", 8.790950114600000e+01 }, { "Y_89", 8.890584829500000e+01 }, { "Y_90", 8.990715188599999e+01 }, { "Y_91", 9.090730479100000e+01 },
{ "Y_92", 9.190894914300000e+01 }, { "Y_93", 9.290958271300001e+01 }, { "Y_94", 9.391159524500000e+01 }, { "Y_95", 9.491282062099999e+01 },
{ "Y_96", 9.591589134300000e+01 }, { "Y_97", 9.691813399500001e+01 }, { "Y_98", 9.792220302000000e+01 }, { "Y_99", 9.892463620400000e+01 },
{ "Y_100", 9.992775658600000e+01 }, { "Y_101", 1.009303138500000e+02 }, { "Y_102", 1.019335556950000e+02 }, { "Y_103", 1.029367300000000e+02 },
{ "Y_104", 1.039410500000000e+02 }, { "Y_105", 1.049448700000000e+02 }, { "Y_106", 1.059497900000000e+02 }, { "Y_107", 1.069541400000000e+02 },
{ "Y_108", 1.079594800000000e+02 }, { "Zr_natural", 9.122000000000000e+01 }, { "Zr_78", 7.795523000000000e+01 }, { "Zr_79", 7.894916000000001e+01 },
{ "Zr_80", 7.994040000000000e+01 }, { "Zr_81", 8.093721002600000e+01 }, { "Zr_82", 8.193108700000001e+01 }, { "Zr_83", 8.292865380100000e+01 },
{ "Zr_84", 8.392325000000000e+01 }, { "Zr_85", 8.492147118200000e+01 }, { "Zr_86", 8.591647359100000e+01 }, { "Zr_87", 8.691481625199999e+01 },
{ "Zr_88", 8.791022690400000e+01 }, { "Zr_89", 8.890888950000000e+01 }, { "Zr_90", 8.990470441600000e+01 }, { "Zr_91", 9.090564576700000e+01 },
{ "Zr_92", 9.190504084700000e+01 }, { "Zr_93", 9.290647600600001e+01 }, { "Zr_94", 9.390631519199999e+01 }, { "Zr_95", 9.490804260000000e+01 },
{ "Zr_96", 9.590827338600000e+01 }, { "Zr_97", 9.691095310900000e+01 }, { "Zr_98", 9.791273489200000e+01 }, { "Zr_99", 9.891651210600000e+01 },
{ "Zr_100", 9.991776188900000e+01 }, { "Zr_101", 1.009211404150000e+02 }, { "Zr_102", 1.019229812850000e+02 }, { "Zr_103", 1.029265996060000e+02 },
{ "Zr_104", 1.039287800000000e+02 }, { "Zr_105", 1.049330500000000e+02 }, { "Zr_106", 1.059359100000000e+02 }, { "Zr_107", 1.069407500000000e+02 },
{ "Zr_108", 1.079439600000000e+02 }, { "Zr_109", 1.089492400000000e+02 }, { "Zr_110", 1.099528700000000e+02 }, { "Nb_natural", 9.290640000000000e+01 },
{ "Nb_81", 8.094902999999999e+01 }, { "Nb_82", 8.194313000000000e+01 }, { "Nb_83", 8.293670538200000e+01 }, { "Nb_84", 8.393357000000000e+01 },
{ "Nb_85", 8.492791244700000e+01 }, { "Nb_86", 8.592503832600001e+01 }, { "Nb_87", 8.692036110799999e+01 }, { "Nb_88", 8.791833216300000e+01 },
{ "Nb_89", 8.891341824500000e+01 }, { "Nb_90", 8.991126484500001e+01 }, { "Nb_91", 9.090699624299999e+01 }, { "Nb_92", 9.190719388799999e+01 },
{ "Nb_93", 9.290637805800000e+01 }, { "Nb_94", 9.390728388799999e+01 }, { "Nb_95", 9.490683579200000e+01 }, { "Nb_96", 9.590810064700000e+01 },
{ "Nb_97", 9.690809855600000e+01 }, { "Nb_98", 9.791032841200000e+01 }, { "Nb_99", 9.891161837500000e+01 }, { "Nb_100", 9.991418161900000e+01 },
{ "Nb_101", 1.009152520250000e+02 }, { "Nb_102", 1.019180376140000e+02 }, { "Nb_103", 1.029191438420000e+02 }, { "Nb_104", 1.039224647010000e+02 },
{ "Nb_105", 1.049239365450000e+02 }, { "Nb_106", 1.059279700000000e+02 }, { "Nb_107", 1.069303100000000e+02 }, { "Nb_108", 1.079348400000000e+02 },
{ "Nb_109", 1.089376300000000e+02 }, { "Nb_110", 1.099424400000000e+02 }, { "Nb_111", 1.109456500000000e+02 }, { "Nb_112", 1.119508300000000e+02 },
{ "Nb_113", 1.129547000000000e+02 }, { "Mo_natural", 9.594000000000000e+01 }, { "Mo_83", 8.294874000000000e+01 }, { "Mo_84", 8.394009000000000e+01 },
{ "Mo_85", 8.493655000000000e+01 }, { "Mo_86", 8.593069590400000e+01 }, { "Mo_87", 8.692732650200000e+01 }, { "Mo_88", 8.792195324100000e+01 },
{ "Mo_89", 8.891948000900000e+01 }, { "Mo_90", 8.991393689600000e+01 }, { "Mo_91", 9.091175019400001e+01 }, { "Mo_92", 9.190681099100000e+01 },
{ "Mo_93", 9.290681261000000e+01 }, { "Mo_94", 9.390508826900000e+01 }, { "Mo_95", 9.490584212900001e+01 }, { "Mo_96", 9.590467947700000e+01 },
{ "Mo_97", 9.690602146499999e+01 }, { "Mo_98", 9.790540816900000e+01 }, { "Mo_99", 9.890771187000000e+01 }, { "Mo_100", 9.990747733600000e+01 },
{ "Mo_101", 1.009103470010000e+02 }, { "Mo_102", 1.019102973600000e+02 }, { "Mo_103", 1.029132071420000e+02 }, { "Mo_104", 1.039137636250000e+02 },
{ "Mo_105", 1.049169746100000e+02 }, { "Mo_106", 1.059181368020000e+02 }, { "Mo_107", 1.069216926040000e+02 }, { "Mo_108", 1.079234530000000e+02 },
{ "Mo_109", 1.089278100000000e+02 }, { "Mo_110", 1.099297300000000e+02 }, { "Mo_111", 1.109344100000000e+02 }, { "Mo_112", 1.119368400000000e+02 },
{ "Mo_113", 1.129418800000000e+02 }, { "Mo_114", 1.139449200000000e+02 }, { "Mo_115", 1.149502900000000e+02 }, { "Tc_natural", 9.800000000000000e+01 },
{ "Tc_85", 8.494883000000000e+01 }, { "Tc_86", 8.594288000000000e+01 }, { "Tc_87", 8.693653000000000e+01 }, { "Tc_88", 8.793267800000000e+01 },
{ "Tc_89", 8.892716700000000e+01 }, { "Tc_90", 8.992355656399999e+01 }, { "Tc_91", 9.091842763900000e+01 }, { "Tc_92", 9.191526016600000e+01 },
{ "Tc_93", 9.291024898400001e+01 }, { "Tc_94", 9.390965700200000e+01 }, { "Tc_95", 9.490765708399999e+01 }, { "Tc_96", 9.590787138300000e+01 },
{ "Tc_97", 9.690636535800000e+01 }, { "Tc_98", 9.790721596600000e+01 }, { "Tc_99", 9.890625474700001e+01 }, { "Tc_100", 9.990765777999999e+01 },
{ "Tc_101", 1.009073146590000e+02 }, { "Tc_102", 1.019092150190000e+02 }, { "Tc_103", 1.029091813510000e+02 }, { "Tc_104", 1.039114474540000e+02 },
{ "Tc_105", 1.049116605660000e+02 }, { "Tc_106", 1.059143579270000e+02 }, { "Tc_107", 1.069150795720000e+02 }, { "Tc_108", 1.079184612260000e+02 },
{ "Tc_109", 1.089199826650000e+02 }, { "Tc_110", 1.099238204830000e+02 }, { "Tc_111", 1.109256928300000e+02 }, { "Tc_112", 1.119291464930000e+02 },
{ "Tc_113", 1.129315900000000e+02 }, { "Tc_114", 1.139358800000000e+02 }, { "Tc_115", 1.149386900000000e+02 }, { "Tc_116", 1.159433700000000e+02 },
{ "Tc_117", 1.169464800000000e+02 }, { "Tc_118", 1.179514800000000e+02 }, { "Ru_natural", 1.010700000000000e+02 }, { "Ru_87", 8.694918000000000e+01 },
{ "Ru_88", 8.794025999999999e+01 }, { "Ru_89", 8.893611000000000e+01 }, { "Ru_90", 8.992989000000000e+01 }, { "Ru_91", 9.092629200000000e+01 },
{ "Ru_92", 9.192012000000000e+01 }, { "Ru_93", 9.291705203399999e+01 }, { "Ru_94", 9.391135971100000e+01 }, { "Ru_95", 9.491041292900000e+01 },
{ "Ru_96", 9.590759783500000e+01 }, { "Ru_97", 9.690755470000001e+01 }, { "Ru_98", 9.790528713200000e+01 }, { "Ru_99", 9.890593930199999e+01 },
{ "Ru_100", 9.990421947599999e+01 }, { "Ru_101", 1.009055820870000e+02 }, { "Ru_102", 1.019043493120000e+02 }, { "Ru_103", 1.029063238470000e+02 },
{ "Ru_104", 1.039054327010000e+02 }, { "Ru_105", 1.049077528660000e+02 }, { "Ru_106", 1.059073294330000e+02 }, { "Ru_107", 1.069099050890000e+02 },
{ "Ru_108", 1.079101734650000e+02 }, { "Ru_109", 1.089132032330000e+02 }, { "Ru_110", 1.099141360410000e+02 }, { "Ru_111", 1.109176960000000e+02 },
{ "Ru_112", 1.119189650000000e+02 }, { "Ru_113", 1.129224871940000e+02 }, { "Ru_114", 1.139242810000000e+02 }, { "Ru_115", 1.149286861730000e+02 },
{ "Ru_116", 1.159308100000000e+02 }, { "Ru_117", 1.169355800000000e+02 }, { "Ru_118", 1.179378200000000e+02 }, { "Ru_119", 1.189428400000000e+02 },
{ "Ru_120", 1.199453100000000e+02 }, { "Rh_natural", 1.029055000000000e+02 }, { "Rh_89", 8.894883700000000e+01 }, { "Rh_90", 8.994287000000000e+01 },
{ "Rh_91", 9.093655000000000e+01 }, { "Rh_92", 9.193198000000000e+01 }, { "Rh_93", 9.292574000000000e+01 }, { "Rh_94", 9.392169800000001e+01 },
{ "Rh_95", 9.491589874000000e+01 }, { "Rh_96", 9.591446063100000e+01 }, { "Rh_97", 9.691133679700000e+01 }, { "Rh_98", 9.791070815800001e+01 },
{ "Rh_99", 9.890813210400000e+01 }, { "Rh_100", 9.990812155000000e+01 }, { "Rh_101", 1.009061636250000e+02 }, { "Rh_102", 1.019068431960000e+02 },
{ "Rh_103", 1.029055042920000e+02 }, { "Rh_104", 1.039066555180000e+02 }, { "Rh_105", 1.049056938210000e+02 }, { "Rh_106", 1.059072871350000e+02 },
{ "Rh_107", 1.069067484230000e+02 }, { "Rh_108", 1.079087280180000e+02 }, { "Rh_109", 1.089087372890000e+02 }, { "Rh_110", 1.099111364110000e+02 },
{ "Rh_111", 1.109115859130000e+02 }, { "Rh_112", 1.119143941590000e+02 }, { "Rh_113", 1.129155306270000e+02 }, { "Rh_114", 1.139188060000000e+02 },
{ "Rh_115", 1.149203340000000e+02 }, { "Rh_116", 1.159240620000000e+02 }, { "Rh_117", 1.169259800000000e+02 }, { "Rh_118", 1.179300700000000e+02 },
{ "Rh_119", 1.189321100000000e+02 }, { "Rh_120", 1.199364100000000e+02 }, { "Rh_121", 1.209387200000000e+02 }, { "Rh_122", 1.219432100000000e+02 },
{ "Pd_natural", 1.064000000000000e+02 }, { "Pd_91", 9.094911000000000e+01 }, { "Pd_92", 9.194042000000000e+01 }, { "Pd_93", 9.293591000000001e+01 },
{ "Pd_94", 9.392877000000000e+01 }, { "Pd_95", 9.492469000000000e+01 }, { "Pd_96", 9.591816435900000e+01 }, { "Pd_97", 9.691647907300000e+01 },
{ "Pd_98", 9.791272090200000e+01 }, { "Pd_99", 9.891176783300000e+01 }, { "Pd_100", 9.990850588600000e+01 }, { "Pd_101", 1.009082892420000e+02 },
{ "Pd_102", 1.019056085440000e+02 }, { "Pd_103", 1.029060873070000e+02 }, { "Pd_104", 1.039040358340000e+02 }, { "Pd_105", 1.049050849200000e+02 },
{ "Pd_106", 1.059034857150000e+02 }, { "Pd_107", 1.069051334810000e+02 }, { "Pd_108", 1.079038917010000e+02 }, { "Pd_109", 1.089059504510000e+02 },
{ "Pd_110", 1.099051532540000e+02 }, { "Pd_111", 1.109076707340000e+02 }, { "Pd_112", 1.119073140580000e+02 }, { "Pd_113", 1.129101529080000e+02 },
{ "Pd_114", 1.139103626380000e+02 }, { "Pd_115", 1.149136838240000e+02 }, { "Pd_116", 1.159141586620000e+02 }, { "Pd_117", 1.169178413380000e+02 },
{ "Pd_118", 1.179189843000000e+02 }, { "Pd_119", 1.189231100000000e+02 }, { "Pd_120", 1.199246918780000e+02 }, { "Pd_121", 1.209288700000000e+02 },
{ "Pd_122", 1.219305500000000e+02 }, { "Pd_123", 1.229349300000000e+02 }, { "Pd_124", 1.239368800000000e+02 }, { "Ag_natural", 1.078680000000000e+02 },
{ "Ag_93", 9.294978000000000e+01 }, { "Ag_94", 9.394278000000000e+01 }, { "Ag_95", 9.493548000000000e+01 }, { "Ag_96", 9.593068000000000e+01 },
{ "Ag_97", 9.692397241200000e+01 }, { "Ag_98", 9.792156620100000e+01 }, { "Ag_99", 9.891759717799999e+01 }, { "Ag_100", 9.991610425499999e+01 },
{ "Ag_101", 1.009128022330000e+02 }, { "Ag_102", 1.019116850000000e+02 }, { "Ag_103", 1.029089727200000e+02 }, { "Ag_104", 1.039086291570000e+02 },
{ "Ag_105", 1.049065286610000e+02 }, { "Ag_106", 1.059066689210000e+02 }, { "Ag_107", 1.069050968200000e+02 }, { "Ag_108", 1.079059555560000e+02 },
{ "Ag_109", 1.089047522920000e+02 }, { "Ag_110", 1.099061072310000e+02 }, { "Ag_111", 1.109052911570000e+02 }, { "Ag_112", 1.119070048140000e+02 },
{ "Ag_113", 1.129065665790000e+02 }, { "Ag_114", 1.139088037040000e+02 }, { "Ag_115", 1.149087626980000e+02 }, { "Ag_116", 1.159113599330000e+02 },
{ "Ag_117", 1.169116845620000e+02 }, { "Ag_118", 1.179145827680000e+02 }, { "Ag_119", 1.189156650590000e+02 }, { "Ag_120", 1.199187873840000e+02 },
{ "Ag_121", 1.209198480460000e+02 }, { "Ag_122", 1.219235300000000e+02 }, { "Ag_123", 1.229249000000000e+02 }, { "Ag_124", 1.239286400000000e+02 },
{ "Ag_125", 1.249304300000000e+02 }, { "Ag_126", 1.259345000000000e+02 }, { "Ag_127", 1.269367700000000e+02 }, { "Ag_128", 1.279411700000000e+02 },
{ "Ag_129", 1.289436900000000e+02 }, { "Ag_130", 1.299504480000000e+02 }, { "Cd_natural", 1.124100000000000e+02 }, { "Cd_95", 9.494987000000000e+01 },
{ "Cd_96", 9.593977000000000e+01 }, { "Cd_97", 9.693494000000000e+01 }, { "Cd_98", 9.792739554600000e+01 }, { "Cd_99", 9.892501000000000e+01 },
{ "Cd_100", 9.992028952500000e+01 }, { "Cd_101", 1.009186815380000e+02 }, { "Cd_102", 1.019144622580000e+02 }, { "Cd_103", 1.029134192460000e+02 },
{ "Cd_104", 1.039098494750000e+02 }, { "Cd_105", 1.049094679050000e+02 }, { "Cd_106", 1.059064594100000e+02 }, { "Cd_107", 1.069066179280000e+02 },
{ "Cd_108", 1.079041836830000e+02 }, { "Cd_109", 1.089049822930000e+02 }, { "Cd_110", 1.099030020700000e+02 }, { "Cd_111", 1.109041781070000e+02 },
{ "Cd_112", 1.119027578090000e+02 }, { "Cd_113", 1.129044016620000e+02 }, { "Cd_114", 1.139033585400000e+02 }, { "Cd_115", 1.149054309690000e+02 },
{ "Cd_116", 1.159047558090000e+02 }, { "Cd_117", 1.169072186180000e+02 }, { "Cd_118", 1.179069145300000e+02 }, { "Cd_119", 1.189099215970000e+02 },
{ "Cd_120", 1.199098501290000e+02 }, { "Cd_121", 1.209129773630000e+02 }, { "Cd_122", 1.219133324320000e+02 }, { "Cd_123", 1.229170029990000e+02 },
{ "Cd_124", 1.239176476160000e+02 }, { "Cd_125", 1.249212463700000e+02 }, { "Cd_126", 1.259223533210000e+02 }, { "Cd_127", 1.269264438640000e+02 },
{ "Cd_128", 1.279277622850000e+02 }, { "Cd_129", 1.289321500000000e+02 }, { "Cd_130", 1.299339019370000e+02 }, { "Cd_131", 1.309406700000000e+02 },
{ "Cd_132", 1.319455500000000e+02 }, { "In_natural", 1.148200000000000e+02 }, { "In_97", 9.694954000000000e+01 }, { "In_98", 9.794213999999999e+01 },
{ "In_99", 9.893422000000000e+01 }, { "In_100", 9.993111085100000e+01 }, { "In_101", 1.009263400000000e+02 }, { "In_102", 1.019240902380000e+02 },
{ "In_103", 1.029199141880000e+02 }, { "In_104", 1.039182961710000e+02 }, { "In_105", 1.049146735400000e+02 }, { "In_106", 1.059134654110000e+02 },
{ "In_107", 1.069102951000000e+02 }, { "In_108", 1.079096981800000e+02 }, { "In_109", 1.089071505070000e+02 }, { "In_110", 1.099071652740000e+02 },
{ "In_111", 1.109051032780000e+02 }, { "In_112", 1.119055323310000e+02 }, { "In_113", 1.129040577610000e+02 }, { "In_114", 1.139049138760000e+02 },
{ "In_115", 1.149038784840000e+02 }, { "In_116", 1.159052597030000e+02 }, { "In_117", 1.169045135640000e+02 }, { "In_118", 1.179063543670000e+02 },
{ "In_119", 1.189058453500000e+02 }, { "In_120", 1.199079596080000e+02 }, { "In_121", 1.209078458220000e+02 }, { "In_122", 1.219102760100000e+02 },
{ "In_123", 1.229104382760000e+02 }, { "In_124", 1.239131752310000e+02 }, { "In_125", 1.249136005880000e+02 }, { "In_126", 1.259164638570000e+02 },
{ "In_127", 1.269173530910000e+02 }, { "In_128", 1.279201723280000e+02 }, { "In_129", 1.289216969800000e+02 }, { "In_130", 1.299249700490000e+02 },
{ "In_131", 1.309268517670000e+02 }, { "In_132", 1.319329902600000e+02 }, { "In_133", 1.329378100000000e+02 }, { "In_134", 1.339441500000000e+02 },
{ "In_135", 1.349493300000000e+02 }, { "Sn_natural", 1.186900000000000e+02 }, { "Sn_99", 9.894933000000000e+01 }, { "Sn_100", 9.993904434300001e+01 },
{ "Sn_101", 1.009360600000000e+02 }, { "Sn_102", 1.019302953240000e+02 }, { "Sn_103", 1.029281000000000e+02 }, { "Sn_104", 1.039231432230000e+02 },
{ "Sn_105", 1.049213494370000e+02 }, { "Sn_106", 1.059168806200000e+02 }, { "Sn_107", 1.069156443290000e+02 }, { "Sn_108", 1.079119253780000e+02 },
{ "Sn_109", 1.089112832140000e+02 }, { "Sn_110", 1.099078427910000e+02 }, { "Sn_111", 1.109077344600000e+02 }, { "Sn_112", 1.119048182070000e+02 },
{ "Sn_113", 1.129051705770000e+02 }, { "Sn_114", 1.139027788690000e+02 }, { "Sn_115", 1.149033423970000e+02 }, { "Sn_116", 1.159017405300000e+02 },
{ "Sn_117", 1.169029516560000e+02 }, { "Sn_118", 1.179016031670000e+02 }, { "Sn_119", 1.189033076300000e+02 }, { "Sn_120", 1.199021946760000e+02 },
{ "Sn_121", 1.209042354800000e+02 }, { "Sn_122", 1.219034390460000e+02 }, { "Sn_123", 1.229057208380000e+02 }, { "Sn_124", 1.239052739460000e+02 },
{ "Sn_125", 1.249077841250000e+02 }, { "Sn_126", 1.259076532800000e+02 }, { "Sn_127", 1.269103600240000e+02 }, { "Sn_128", 1.279105366240000e+02 },
{ "Sn_129", 1.289134790000000e+02 }, { "Sn_130", 1.299139672950000e+02 }, { "Sn_131", 1.309169997690000e+02 }, { "Sn_132", 1.319178157130000e+02 },
{ "Sn_133", 1.329238292490000e+02 }, { "Sn_134", 1.339282917650000e+02 }, { "Sn_135", 1.349347300000000e+02 }, { "Sn_136", 1.359393400000000e+02 },
{ "Sn_137", 1.369459900000000e+02 }, { "Sb_natural", 1.217500000000000e+02 }, { "Sb_103", 1.029396900000000e+02 }, { "Sb_104", 1.039364720000000e+02 },
{ "Sb_105", 1.049314863480000e+02 }, { "Sb_106", 1.059287910000000e+02 }, { "Sb_107", 1.069241500000000e+02 }, { "Sb_108", 1.079221600000000e+02 },
{ "Sb_109", 1.089181324260000e+02 }, { "Sb_110", 1.099167530000000e+02 }, { "Sb_111", 1.109131630000000e+02 }, { "Sb_112", 1.119123980090000e+02 },
{ "Sb_113", 1.129093716720000e+02 }, { "Sb_114", 1.139092690000000e+02 }, { "Sb_115", 1.149065980000000e+02 }, { "Sb_116", 1.159067936290000e+02 },
{ "Sb_117", 1.169048359410000e+02 }, { "Sb_118", 1.179055287310000e+02 }, { "Sb_119", 1.189039420090000e+02 }, { "Sb_120", 1.199050724270000e+02 },
{ "Sb_121", 1.209038156860000e+02 }, { "Sb_122", 1.219051736510000e+02 }, { "Sb_123", 1.229042139700000e+02 }, { "Sb_124", 1.239059357430000e+02 },
{ "Sb_125", 1.249052538180000e+02 }, { "Sb_126", 1.259072474800000e+02 }, { "Sb_127", 1.269069236090000e+02 }, { "Sb_128", 1.279091690010000e+02 },
{ "Sb_129", 1.289091484420000e+02 }, { "Sb_130", 1.299116563240000e+02 }, { "Sb_131", 1.309119822750000e+02 }, { "Sb_132", 1.319144668960000e+02 },
{ "Sb_133", 1.329152516300000e+02 }, { "Sb_134", 1.339203797440000e+02 }, { "Sb_135", 1.349251657710000e+02 }, { "Sb_136", 1.359303500000000e+02 },
{ "Sb_137", 1.369353100000000e+02 }, { "Sb_138", 1.379407900000000e+02 }, { "Sb_139", 1.389459800000000e+02 }, { "Te_natural", 1.276000000000000e+02 },
{ "Te_105", 1.049436400000000e+02 }, { "Te_106", 1.059375042370000e+02 }, { "Te_107", 1.069350060000000e+02 }, { "Te_108", 1.079294445970000e+02 },
{ "Te_109", 1.089274155150000e+02 }, { "Te_110", 1.099224073160000e+02 }, { "Te_111", 1.109211106920000e+02 }, { "Te_112", 1.119170136720000e+02 },
{ "Te_113", 1.129158910000000e+02 }, { "Te_114", 1.139120890000000e+02 }, { "Te_115", 1.149119020000000e+02 }, { "Te_116", 1.159084600000000e+02 },
{ "Te_117", 1.169086447190000e+02 }, { "Te_118", 1.179058275810000e+02 }, { "Te_119", 1.189064036450000e+02 }, { "Te_120", 1.199040202220000e+02 },
{ "Te_121", 1.209049364240000e+02 }, { "Te_122", 1.219030438980000e+02 }, { "Te_123", 1.229042700290000e+02 }, { "Te_124", 1.239028178960000e+02 },
{ "Te_125", 1.249044307310000e+02 }, { "Te_126", 1.259033116960000e+02 }, { "Te_127", 1.269052263360000e+02 }, { "Te_128", 1.279044630560000e+02 },
{ "Te_129", 1.289065982380000e+02 }, { "Te_130", 1.299062243990000e+02 }, { "Te_131", 1.309085238640000e+02 }, { "Te_132", 1.319085531600000e+02 },
{ "Te_133", 1.329109553060000e+02 }, { "Te_134", 1.339113687370000e+02 }, { "Te_135", 1.349164485920000e+02 }, { "Te_136", 1.359201012460000e+02 },
{ "Te_137", 1.369253229540000e+02 }, { "Te_138", 1.379292200000000e+02 }, { "Te_139", 1.389347300000000e+02 }, { "Te_140", 1.399388500000000e+02 },
{ "Te_141", 1.409446500000000e+02 }, { "Te_142", 1.419490800000000e+02 }, { "I_natural", 1.269045000000000e+02 }, { "I_108", 1.079434750000000e+02 },
{ "I_109", 1.089381494170000e+02 }, { "I_110", 1.099352420000000e+02 }, { "I_111", 1.109302760000000e+02 }, { "I_112", 1.119279700000000e+02 },
{ "I_113", 1.129236405830000e+02 }, { "I_114", 1.139218500000000e+02 }, { "I_115", 1.149180480000000e+02 }, { "I_116", 1.159168086330000e+02 },
{ "I_117", 1.169136500000000e+02 }, { "I_118", 1.179130740000000e+02 }, { "I_119", 1.189100740000000e+02 }, { "I_120", 1.199100481730000e+02 },
{ "I_121", 1.209073668110000e+02 }, { "I_122", 1.219075892840000e+02 }, { "I_123", 1.229055889650000e+02 }, { "I_124", 1.239062098520000e+02 },
{ "I_125", 1.249046301640000e+02 }, { "I_126", 1.259056241530000e+02 }, { "I_127", 1.269044726810000e+02 }, { "I_128", 1.279058094430000e+02 },
{ "I_129", 1.289049877220000e+02 }, { "I_130", 1.299066742470000e+02 }, { "I_131", 1.309061246090000e+02 }, { "I_132", 1.319079973810000e+02 },
{ "I_133", 1.329077969390000e+02 }, { "I_134", 1.339097444650000e+02 }, { "I_135", 1.349100481210000e+02 }, { "I_136", 1.359146539930000e+02 },
{ "I_137", 1.369178708400000e+02 }, { "I_138", 1.379223495910000e+02 }, { "I_139", 1.389260994780000e+02 }, { "I_140", 1.399310000000000e+02 },
{ "I_141", 1.409350300000000e+02 }, { "I_142", 1.419401800000000e+02 }, { "I_143", 1.429445600000000e+02 }, { "I_144", 1.439499900000000e+02 },
{ "Xe_natural", 1.313000000000000e+02 }, { "Xe_110", 1.099442780680000e+02 }, { "Xe_111", 1.109416020000000e+02 }, { "Xe_112", 1.119356231120000e+02 },
{ "Xe_113", 1.129333411740000e+02 }, { "Xe_114", 1.139279803060000e+02 }, { "Xe_115", 1.149262939200000e+02 }, { "Xe_116", 1.159215810870000e+02 },
{ "Xe_117", 1.169203587350000e+02 }, { "Xe_118", 1.179161786550000e+02 }, { "Xe_119", 1.189154106880000e+02 }, { "Xe_120", 1.199117842440000e+02 },
{ "Xe_121", 1.209114618290000e+02 }, { "Xe_122", 1.219083676320000e+02 }, { "Xe_123", 1.229084819100000e+02 }, { "Xe_124", 1.239058930030000e+02 },
{ "Xe_125", 1.249063954640000e+02 }, { "Xe_126", 1.259042736340000e+02 }, { "Xe_127", 1.269051837230000e+02 }, { "Xe_128", 1.279035312750000e+02 },
{ "Xe_129", 1.289047794350000e+02 }, { "Xe_130", 1.299035080070000e+02 }, { "Xe_131", 1.309050823620000e+02 }, { "Xe_132", 1.319041534570000e+02 },
{ "Xe_133", 1.329059107220000e+02 }, { "Xe_134", 1.339053944640000e+02 }, { "Xe_135", 1.349072274950000e+02 }, { "Xe_136", 1.359072187940000e+02 },
{ "Xe_137", 1.369115621250000e+02 }, { "Xe_138", 1.379139544750000e+02 }, { "Xe_139", 1.389187929360000e+02 }, { "Xe_140", 1.399216409430000e+02 },
{ "Xe_141", 1.409266480490000e+02 }, { "Xe_142", 1.419297095900000e+02 }, { "Xe_143", 1.429351100000000e+02 }, { "Xe_144", 1.439385100000000e+02 },
{ "Xe_145", 1.449440700000000e+02 }, { "Xe_146", 1.459477500000000e+02 }, { "Xe_147", 1.469535600000000e+02 }, { "Cs_natural", 1.329054000000000e+02 },
{ "Cs_112", 1.119503010000000e+02 }, { "Cs_113", 1.129444932740000e+02 }, { "Cs_114", 1.139414500000000e+02 }, { "Cs_115", 1.149359100000000e+02 },
{ "Cs_116", 1.159333670000000e+02 }, { "Cs_117", 1.169286707010000e+02 }, { "Cs_118", 1.179265594940000e+02 }, { "Cs_119", 1.189223773040000e+02 },
{ "Cs_120", 1.199206772530000e+02 }, { "Cs_121", 1.209172292090000e+02 }, { "Cs_122", 1.219161134340000e+02 }, { "Cs_123", 1.229129960360000e+02 },
{ "Cs_124", 1.239122577980000e+02 }, { "Cs_125", 1.249097282700000e+02 }, { "Cs_126", 1.259094519770000e+02 }, { "Cs_127", 1.269074175250000e+02 },
{ "Cs_128", 1.279077488660000e+02 }, { "Cs_129", 1.289060644260000e+02 }, { "Cs_130", 1.299067085520000e+02 }, { "Cs_131", 1.309054639260000e+02 },
{ "Cs_132", 1.319064342600000e+02 }, { "Cs_133", 1.329054519320000e+02 }, { "Cs_134", 1.339067184750000e+02 }, { "Cs_135", 1.349059770080000e+02 },
{ "Cs_136", 1.359073115760000e+02 }, { "Cs_137", 1.369070894730000e+02 }, { "Cs_138", 1.379110167040000e+02 }, { "Cs_139", 1.389133639990000e+02 },
{ "Cs_140", 1.399172823540000e+02 }, { "Cs_141", 1.409200457520000e+02 }, { "Cs_142", 1.419242989270000e+02 }, { "Cs_143", 1.429273517500000e+02 },
{ "Cs_144", 1.439320769140000e+02 }, { "Cs_145", 1.449355261700000e+02 }, { "Cs_146", 1.459402894230000e+02 }, { "Cs_147", 1.469441550080000e+02 },
{ "Cs_148", 1.479492181530000e+02 }, { "Cs_149", 1.489529300000000e+02 }, { "Cs_150", 1.499581700000000e+02 }, { "Cs_151", 1.509621900000000e+02 },
{ "Ba_natural", 1.373300000000000e+02 }, { "Ba_114", 1.139506754050000e+02 }, { "Ba_115", 1.149473700000000e+02 }, { "Ba_116", 1.159413800000000e+02 },
{ "Ba_117", 1.169384990000000e+02 }, { "Ba_118", 1.179330400000000e+02 }, { "Ba_119", 1.189306596610000e+02 }, { "Ba_120", 1.199260449740000e+02 },
{ "Ba_121", 1.209240544990000e+02 }, { "Ba_122", 1.219199040000000e+02 }, { "Ba_123", 1.229187810360000e+02 }, { "Ba_124", 1.239150936030000e+02 },
{ "Ba_125", 1.249144729120000e+02 }, { "Ba_126", 1.259112501770000e+02 }, { "Ba_127", 1.269110937970000e+02 }, { "Ba_128", 1.279083176980000e+02 },
{ "Ba_129", 1.289086794390000e+02 }, { "Ba_130", 1.299063208110000e+02 }, { "Ba_131", 1.309069411180000e+02 }, { "Ba_132", 1.319050612880000e+02 },
{ "Ba_133", 1.329060074900000e+02 }, { "Ba_134", 1.339045083830000e+02 }, { "Ba_135", 1.349056885910000e+02 }, { "Ba_136", 1.359045759450000e+02 },
{ "Ba_137", 1.369058273840000e+02 }, { "Ba_138", 1.379052472370000e+02 }, { "Ba_139", 1.389088413410000e+02 }, { "Ba_140", 1.399106045050000e+02 },
{ "Ba_141", 1.409144110090000e+02 }, { "Ba_142", 1.419164534100000e+02 }, { "Ba_143", 1.429206267190000e+02 }, { "Ba_144", 1.439229528530000e+02 },
{ "Ba_145", 1.449276270320000e+02 }, { "Ba_146", 1.459302195720000e+02 }, { "Ba_147", 1.469349450000000e+02 }, { "Ba_148", 1.479377200470000e+02 },
{ "Ba_149", 1.489425800000000e+02 }, { "Ba_150", 1.499456800000000e+02 }, { "Ba_151", 1.509508100000000e+02 }, { "Ba_152", 1.519542700000000e+02 },
{ "Ba_153", 1.529596100000000e+02 }, { "La_natural", 1.389055000000000e+02 }, { "La_117", 1.169500680000000e+02 }, { "La_118", 1.179467300000000e+02 },
{ "La_119", 1.189409900000000e+02 }, { "La_120", 1.199380700000000e+02 }, { "La_121", 1.209330100000000e+02 }, { "La_122", 1.219307100000000e+02 },
{ "La_123", 1.229262400000000e+02 }, { "La_124", 1.239245742750000e+02 }, { "La_125", 1.249208160340000e+02 }, { "La_126", 1.259195126670000e+02 },
{ "La_127", 1.269163754480000e+02 }, { "La_128", 1.279155851770000e+02 }, { "La_129", 1.289126928150000e+02 }, { "La_130", 1.299123687240000e+02 },
{ "La_131", 1.309100700000000e+02 }, { "La_132", 1.319101011450000e+02 }, { "La_133", 1.329082180000000e+02 }, { "La_134", 1.339085140110000e+02 },
{ "La_135", 1.349069768440000e+02 }, { "La_136", 1.359076355360000e+02 }, { "La_137", 1.369064935980000e+02 }, { "La_138", 1.379071119300000e+02 },
{ "La_139", 1.389063532670000e+02 }, { "La_140", 1.399094776450000e+02 }, { "La_141", 1.409109621520000e+02 }, { "La_142", 1.419140791300000e+02 },
{ "La_143", 1.429160627200000e+02 }, { "La_144", 1.439195996470000e+02 }, { "La_145", 1.449216454010000e+02 }, { "La_146", 1.459257934600000e+02 },
{ "La_147", 1.469282352840000e+02 }, { "La_148", 1.479322288680000e+02 }, { "La_149", 1.489347340000000e+02 }, { "La_150", 1.499387700000000e+02 },
{ "La_151", 1.509417200000000e+02 }, { "La_152", 1.519462500000000e+02 }, { "La_153", 1.529496200000000e+02 }, { "La_154", 1.539545000000000e+02 },
{ "La_155", 1.549583500000000e+02 }, { "Ce_natural", 1.401200000000000e+02 }, { "Ce_119", 1.189527600000000e+02 }, { "Ce_120", 1.199466400000000e+02 },
{ "Ce_121", 1.209434200000000e+02 }, { "Ce_122", 1.219379100000000e+02 }, { "Ce_123", 1.229354000000000e+02 }, { "Ce_124", 1.239304100000000e+02 },
{ "Ce_125", 1.249284400000000e+02 }, { "Ce_126", 1.259239710000000e+02 }, { "Ce_127", 1.269227310000000e+02 }, { "Ce_128", 1.279189110000000e+02 },
{ "Ce_129", 1.289181020000000e+02 }, { "Ce_130", 1.299147360000000e+02 }, { "Ce_131", 1.309144220000000e+02 }, { "Ce_132", 1.319114604870000e+02 },
{ "Ce_133", 1.329115150200000e+02 }, { "Ce_134", 1.339089248210000e+02 }, { "Ce_135", 1.349091513960000e+02 }, { "Ce_136", 1.359071724220000e+02 },
{ "Ce_137", 1.369078055770000e+02 }, { "Ce_138", 1.379059913210000e+02 }, { "Ce_139", 1.389066526510000e+02 }, { "Ce_140", 1.399054387060000e+02 },
{ "Ce_141", 1.409082762700000e+02 }, { "Ce_142", 1.419092442050000e+02 }, { "Ce_143", 1.429123859100000e+02 }, { "Ce_144", 1.439136473360000e+02 },
{ "Ce_145", 1.449172331350000e+02 }, { "Ce_146", 1.459187590090000e+02 }, { "Ce_147", 1.469226739540000e+02 }, { "Ce_148", 1.479244324100000e+02 },
{ "Ce_149", 1.489283998830000e+02 }, { "Ce_150", 1.499304089310000e+02 }, { "Ce_151", 1.509339761960000e+02 }, { "Ce_152", 1.519365400000000e+02 },
{ "Ce_153", 1.529405800000000e+02 }, { "Ce_154", 1.539434200000000e+02 }, { "Ce_155", 1.549480400000000e+02 }, { "Ce_156", 1.559512600000000e+02 },
{ "Ce_157", 1.569563400000000e+02 }, { "Pr_natural", 1.409077000000000e+02 }, { "Pr_121", 1.209553640000000e+02 }, { "Pr_122", 1.219518100000000e+02 },
{ "Pr_123", 1.229459600000000e+02 }, { "Pr_124", 1.239429600000000e+02 }, { "Pr_125", 1.249378300000000e+02 }, { "Pr_126", 1.259353100000000e+02 },
{ "Pr_127", 1.269308300000000e+02 }, { "Pr_128", 1.279287910000000e+02 }, { "Pr_129", 1.289250950000000e+02 }, { "Pr_130", 1.299235900000000e+02 },
{ "Pr_131", 1.309202590000000e+02 }, { "Pr_132", 1.319192550000000e+02 }, { "Pr_133", 1.329163305320000e+02 }, { "Pr_134", 1.339157117370000e+02 },
{ "Pr_135", 1.349131117450000e+02 }, { "Pr_136", 1.359126916110000e+02 }, { "Pr_137", 1.369107054550000e+02 }, { "Pr_138", 1.379107546360000e+02 },
{ "Pr_139", 1.389089383990000e+02 }, { "Pr_140", 1.399090758740000e+02 }, { "Pr_141", 1.409076527690000e+02 }, { "Pr_142", 1.419100448060000e+02 },
{ "Pr_143", 1.429108169260000e+02 }, { "Pr_144", 1.439133052450000e+02 }, { "Pr_145", 1.449145117000000e+02 }, { "Pr_146", 1.459176443360000e+02 },
{ "Pr_147", 1.469189959920000e+02 }, { "Pr_148", 1.479221350260000e+02 }, { "Pr_149", 1.489237176510000e+02 }, { "Pr_150", 1.499266729970000e+02 },
{ "Pr_151", 1.509283186180000e+02 }, { "Pr_152", 1.519314992250000e+02 }, { "Pr_153", 1.529338389050000e+02 }, { "Pr_154", 1.539375181530000e+02 },
{ "Pr_155", 1.549401200000000e+02 }, { "Pr_156", 1.559442700000000e+02 }, { "Pr_157", 1.569474300000000e+02 }, { "Pr_158", 1.579519800000000e+02 },
{ "Pr_159", 1.589555000000000e+02 }, { "Nd_natural", 1.442400000000000e+02 }, { "Nd_124", 1.239522300000000e+02 }, { "Nd_125", 1.249488800000000e+02 },
{ "Nd_126", 1.259432200000000e+02 }, { "Nd_127", 1.269405000000000e+02 }, { "Nd_128", 1.279353900000000e+02 }, { "Nd_129", 1.289331880000000e+02 },
{ "Nd_130", 1.299285060000000e+02 }, { "Nd_131", 1.309272470000000e+02 }, { "Nd_132", 1.319233212370000e+02 }, { "Nd_133", 1.329223480000000e+02 },
{ "Nd_134", 1.339187901810000e+02 }, { "Nd_135", 1.349181811600000e+02 }, { "Nd_136", 1.359149760350000e+02 }, { "Nd_137", 1.369145671370000e+02 },
{ "Nd_138", 1.379119499610000e+02 }, { "Nd_139", 1.389119782880000e+02 }, { "Nd_140", 1.399095520000000e+02 }, { "Nd_141", 1.409096098540000e+02 },
{ "Nd_142", 1.419077232970000e+02 }, { "Nd_143", 1.429098142900000e+02 }, { "Nd_144", 1.439100872740000e+02 }, { "Nd_145", 1.449125736360000e+02 },
{ "Nd_146", 1.459131169390000e+02 }, { "Nd_147", 1.469161004410000e+02 }, { "Nd_148", 1.479168932880000e+02 }, { "Nd_149", 1.489201488420000e+02 },
{ "Nd_150", 1.499208908880000e+02 }, { "Nd_151", 1.509238289290000e+02 }, { "Nd_152", 1.519246822190000e+02 }, { "Nd_153", 1.529276982320000e+02 },
{ "Nd_154", 1.539294773070000e+02 }, { "Nd_155", 1.549329320000000e+02 }, { "Nd_156", 1.559350181140000e+02 }, { "Nd_157", 1.569390300000000e+02 },
{ "Nd_158", 1.579416000000000e+02 }, { "Nd_159", 1.589460900000000e+02 }, { "Nd_160", 1.599490900000000e+02 }, { "Nd_161", 1.609538800000000e+02 },
{ "Pm_natural", 1.450000000000000e+02 }, { "Pm_126", 1.259575200000000e+02 }, { "Pm_127", 1.269516300000000e+02 }, { "Pm_128", 1.279484200000000e+02 },
{ "Pm_129", 1.289431600000000e+02 }, { "Pm_130", 1.299404500000000e+02 }, { "Pm_131", 1.309358700000000e+02 }, { "Pm_132", 1.319337500000000e+02 },
{ "Pm_133", 1.329297820000000e+02 }, { "Pm_134", 1.339283530000000e+02 }, { "Pm_135", 1.349248760000000e+02 }, { "Pm_136", 1.359235658290000e+02 },
{ "Pm_137", 1.369204794930000e+02 }, { "Pm_138", 1.379195482810000e+02 }, { "Pm_139", 1.389168040820000e+02 }, { "Pm_140", 1.399160417890000e+02 },
{ "Pm_141", 1.409135550540000e+02 }, { "Pm_142", 1.419128744710000e+02 }, { "Pm_143", 1.429109326160000e+02 }, { "Pm_144", 1.439125908430000e+02 },
{ "Pm_145", 1.449127490230000e+02 }, { "Pm_146", 1.459146963050000e+02 }, { "Pm_147", 1.469151385450000e+02 }, { "Pm_148", 1.479174746180000e+02 },
{ "Pm_149", 1.489183341550000e+02 }, { "Pm_150", 1.499209835610000e+02 }, { "Pm_151", 1.509212069730000e+02 }, { "Pm_152", 1.519234967950000e+02 },
{ "Pm_153", 1.529241168890000e+02 }, { "Pm_154", 1.539264639430000e+02 }, { "Pm_155", 1.549281012670000e+02 }, { "Pm_156", 1.559310567360000e+02 },
{ "Pm_157", 1.569330393690000e+02 }, { "Pm_158", 1.579365614070000e+02 }, { "Pm_159", 1.589389700000000e+02 }, { "Pm_160", 1.599429900000000e+02 },
{ "Pm_161", 1.609458600000000e+02 }, { "Pm_162", 1.619502900000000e+02 }, { "Pm_163", 1.629536800000000e+02 }, { "Sm_natural", 1.504000000000000e+02 },
{ "Sm_128", 1.279580800000000e+02 }, { "Sm_129", 1.289546400000000e+02 }, { "Sm_130", 1.299489200000000e+02 }, { "Sm_131", 1.309461100000000e+02 },
{ "Sm_132", 1.319406900000000e+02 }, { "Sm_133", 1.329386700000000e+02 }, { "Sm_134", 1.339339700000000e+02 }, { "Sm_135", 1.349325200000000e+02 },
{ "Sm_136", 1.359282755270000e+02 }, { "Sm_137", 1.369269717460000e+02 }, { "Sm_138", 1.379232439610000e+02 }, { "Sm_139", 1.389222966050000e+02 },
{ "Sm_140", 1.399189946870000e+02 }, { "Sm_141", 1.409184764880000e+02 }, { "Sm_142", 1.419151976410000e+02 }, { "Sm_143", 1.429146283380000e+02 },
{ "Sm_144", 1.439119994780000e+02 }, { "Sm_145", 1.449134103530000e+02 }, { "Sm_146", 1.459130409000000e+02 }, { "Sm_147", 1.469148979230000e+02 },
{ "Sm_148", 1.479148226740000e+02 }, { "Sm_149", 1.489171847350000e+02 }, { "Sm_150", 1.499172755390000e+02 }, { "Sm_151", 1.509199324090000e+02 },
{ "Sm_152", 1.519197324250000e+02 }, { "Sm_153", 1.529220973560000e+02 }, { "Sm_154", 1.539222092730000e+02 }, { "Sm_155", 1.549246401610000e+02 },
{ "Sm_156", 1.559255278870000e+02 }, { "Sm_157", 1.569283587170000e+02 }, { "Sm_158", 1.579299913170000e+02 }, { "Sm_159", 1.589332112710000e+02 },
{ "Sm_160", 1.599351400000000e+02 }, { "Sm_161", 1.609388300000000e+02 }, { "Sm_162", 1.619412200000000e+02 }, { "Sm_163", 1.629453600000000e+02 },
{ "Sm_164", 1.639482800000000e+02 }, { "Sm_165", 1.649529800000000e+02 }, { "Eu_natural", 1.519600000000000e+02 }, { "Eu_130", 1.299635690000000e+02 },
{ "Eu_131", 1.309577530000000e+02 }, { "Eu_132", 1.319543700000000e+02 }, { "Eu_133", 1.329492400000000e+02 }, { "Eu_134", 1.339465100000000e+02 },
{ "Eu_135", 1.349418200000000e+02 }, { "Eu_136", 1.359396000000000e+02 }, { "Eu_137", 1.369355700000000e+02 }, { "Eu_138", 1.379337090000000e+02 },
{ "Eu_139", 1.389297922800000e+02 }, { "Eu_140", 1.399280876070000e+02 }, { "Eu_141", 1.409249307200000e+02 }, { "Eu_142", 1.419234349450000e+02 },
{ "Eu_143", 1.429202975090000e+02 }, { "Eu_144", 1.439188168230000e+02 }, { "Eu_145", 1.449162652370000e+02 }, { "Eu_146", 1.459172058170000e+02 },
{ "Eu_147", 1.469167461110000e+02 }, { "Eu_148", 1.479180858950000e+02 }, { "Eu_149", 1.489179312380000e+02 }, { "Eu_150", 1.499197018190000e+02 },
{ "Eu_151", 1.509198501610000e+02 }, { "Eu_152", 1.519217445340000e+02 }, { "Eu_153", 1.529212303390000e+02 }, { "Eu_154", 1.539229792370000e+02 },
{ "Eu_155", 1.549228932600000e+02 }, { "Eu_156", 1.559247522490000e+02 }, { "Eu_157", 1.569254236470000e+02 }, { "Eu_158", 1.579278453020000e+02 },
{ "Eu_159", 1.589290888610000e+02 }, { "Eu_160", 1.599319710000000e+02 }, { "Eu_161", 1.609336800000000e+02 }, { "Eu_162", 1.619370400000000e+02 },
{ "Eu_163", 1.629392100000000e+02 }, { "Eu_164", 1.639429900000000e+02 }, { "Eu_165", 1.649457200000000e+02 }, { "Eu_166", 1.659499700000000e+02 },
{ "Eu_167", 1.669532100000000e+02 }, { "Gd_natural", 1.572500000000000e+02 }, { "Gd_134", 1.339553700000000e+02 }, { "Gd_135", 1.349525700000000e+02 },
{ "Gd_136", 1.359473400000000e+02 }, { "Gd_137", 1.369450200000000e+02 }, { "Gd_138", 1.379401200000000e+02 }, { "Gd_139", 1.389382400000000e+02 },
{ "Gd_140", 1.399336740000000e+02 }, { "Gd_141", 1.409321260000000e+02 }, { "Gd_142", 1.419281160000000e+02 }, { "Gd_143", 1.429267495100000e+02 },
{ "Gd_144", 1.439229630000000e+02 }, { "Gd_145", 1.449217092520000e+02 }, { "Gd_146", 1.459183106080000e+02 }, { "Gd_147", 1.469190944200000e+02 },
{ "Gd_148", 1.479181145240000e+02 }, { "Gd_149", 1.489193409150000e+02 }, { "Gd_150", 1.499186588760000e+02 }, { "Gd_151", 1.509203484820000e+02 },
{ "Gd_152", 1.519197909960000e+02 }, { "Gd_153", 1.529217495430000e+02 }, { "Gd_154", 1.539208655980000e+02 }, { "Gd_155", 1.549226220220000e+02 },
{ "Gd_156", 1.559221227430000e+02 }, { "Gd_157", 1.569239601350000e+02 }, { "Gd_158", 1.579241039120000e+02 }, { "Gd_159", 1.589263886580000e+02 },
{ "Gd_160", 1.599270541460000e+02 }, { "Gd_161", 1.609296692110000e+02 }, { "Gd_162", 1.619309847510000e+02 }, { "Gd_163", 1.629339900000000e+02 },
{ "Gd_164", 1.639358600000000e+02 }, { "Gd_165", 1.649393800000000e+02 }, { "Gd_166", 1.659416000000000e+02 }, { "Gd_167", 1.669455700000000e+02 },
{ "Gd_168", 1.679483600000000e+02 }, { "Gd_169", 1.689528700000000e+02 }, { "Tb_natural", 1.589254000000000e+02 }, { "Tb_136", 1.359613800000000e+02 },
{ "Tb_137", 1.369559800000000e+02 }, { "Tb_138", 1.379531600000000e+02 }, { "Tb_139", 1.389482900000000e+02 }, { "Tb_140", 1.399458050490000e+02 },
{ "Tb_141", 1.409414480000000e+02 }, { "Tb_142", 1.419387440000000e+02 }, { "Tb_143", 1.429351210000000e+02 }, { "Tb_144", 1.439330450000000e+02 },
{ "Tb_145", 1.449292740000000e+02 }, { "Tb_146", 1.459272465840000e+02 }, { "Tb_147", 1.469240445850000e+02 }, { "Tb_148", 1.479242717010000e+02 },
{ "Tb_149", 1.489232459090000e+02 }, { "Tb_150", 1.499236596860000e+02 }, { "Tb_151", 1.509231025430000e+02 }, { "Tb_152", 1.519240744380000e+02 },
{ "Tb_153", 1.529234345880000e+02 }, { "Tb_154", 1.539246780190000e+02 }, { "Tb_155", 1.549235052360000e+02 }, { "Tb_156", 1.559247472130000e+02 },
{ "Tb_157", 1.569240246040000e+02 }, { "Tb_158", 1.579254131370000e+02 }, { "Tb_159", 1.589253467570000e+02 }, { "Tb_160", 1.599271676060000e+02 },
{ "Tb_161", 1.609275699190000e+02 }, { "Tb_162", 1.619294882340000e+02 }, { "Tb_163", 1.629306475360000e+02 }, { "Tb_164", 1.639333508380000e+02 },
{ "Tb_165", 1.649348800000000e+02 }, { "Tb_166", 1.659379919590000e+02 }, { "Tb_167", 1.669400500000000e+02 }, { "Tb_168", 1.679436400000000e+02 },
{ "Tb_169", 1.689462200000000e+02 }, { "Tb_170", 1.699502500000000e+02 }, { "Tb_171", 1.709533000000000e+02 }, { "Dy_natural", 1.625000000000000e+02 },
{ "Dy_138", 1.379624900000000e+02 }, { "Dy_139", 1.389595400000000e+02 }, { "Dy_140", 1.399540100000000e+02 }, { "Dy_141", 1.409513500000000e+02 },
{ "Dy_142", 1.419463660000000e+02 }, { "Dy_143", 1.429438300000000e+02 }, { "Dy_144", 1.439392540000000e+02 }, { "Dy_145", 1.449374250000000e+02 },
{ "Dy_146", 1.459328453690000e+02 }, { "Dy_147", 1.469310915000000e+02 }, { "Dy_148", 1.479271498310000e+02 }, { "Dy_149", 1.489273047870000e+02 },
{ "Dy_150", 1.499255851840000e+02 }, { "Dy_151", 1.509261846010000e+02 }, { "Dy_152", 1.519247183000000e+02 }, { "Dy_153", 1.529257646700000e+02 },
{ "Dy_154", 1.539244244570000e+02 }, { "Dy_155", 1.549257537750000e+02 }, { "Dy_156", 1.559242831100000e+02 }, { "Dy_157", 1.569254660950000e+02 },
{ "Dy_158", 1.579244094870000e+02 }, { "Dy_159", 1.589257392140000e+02 }, { "Dy_160", 1.599251975170000e+02 }, { "Dy_161", 1.609269333640000e+02 },
{ "Dy_162", 1.619267984470000e+02 }, { "Dy_163", 1.629287311590000e+02 }, { "Dy_164", 1.639291747510000e+02 }, { "Dy_165", 1.649317033330000e+02 },
{ "Dy_166", 1.659328067410000e+02 }, { "Dy_167", 1.669356554620000e+02 }, { "Dy_168", 1.679371287690000e+02 }, { "Dy_169", 1.689403076140000e+02 },
{ "Dy_170", 1.699423900000000e+02 }, { "Dy_171", 1.709462000000000e+02 }, { "Dy_172", 1.719487600000000e+02 }, { "Dy_173", 1.729530000000000e+02 },
{ "Ho_natural", 1.649304000000000e+02 }, { "Ho_140", 1.399685390000000e+02 }, { "Ho_141", 1.409630980000000e+02 }, { "Ho_142", 1.419597700000000e+02 },
{ "Ho_143", 1.429546100000000e+02 }, { "Ho_144", 1.439514800000000e+02 }, { "Ho_145", 1.449472000000000e+02 }, { "Ho_146", 1.459446400000000e+02 },
{ "Ho_147", 1.469400560000000e+02 }, { "Ho_148", 1.479377180000000e+02 }, { "Ho_149", 1.489337747710000e+02 }, { "Ho_150", 1.499334961820000e+02 },
{ "Ho_151", 1.509316881420000e+02 }, { "Ho_152", 1.519317137140000e+02 }, { "Ho_153", 1.529301987890000e+02 }, { "Ho_154", 1.539306015790000e+02 },
{ "Ho_155", 1.549291034910000e+02 }, { "Ho_156", 1.559298390000000e+02 }, { "Ho_157", 1.569282561880000e+02 }, { "Ho_158", 1.579289410070000e+02 },
{ "Ho_159", 1.589277119590000e+02 }, { "Ho_160", 1.599287294780000e+02 }, { "Ho_161", 1.609278547760000e+02 }, { "Ho_162", 1.619290955040000e+02 },
{ "Ho_163", 1.629287339030000e+02 }, { "Ho_164", 1.639302335070000e+02 }, { "Ho_165", 1.649303220700000e+02 }, { "Ho_166", 1.659322841620000e+02 },
{ "Ho_167", 1.669331326330000e+02 }, { "Ho_168", 1.679355157080000e+02 }, { "Ho_169", 1.689368722730000e+02 }, { "Ho_170", 1.699396189290000e+02 },
{ "Ho_171", 1.709414651500000e+02 }, { "Ho_172", 1.719448200000000e+02 }, { "Ho_173", 1.729472900000000e+02 }, { "Ho_174", 1.739511500000000e+02 },
{ "Ho_175", 1.749540500000000e+02 }, { "Er_natural", 1.672600000000000e+02 }, { "Er_143", 1.429663400000000e+02 }, { "Er_144", 1.439603800000000e+02 },
{ "Er_145", 1.449573900000000e+02 }, { "Er_146", 1.459520000000000e+02 }, { "Er_147", 1.469494900000000e+02 }, { "Er_148", 1.479445500000000e+02 },
{ "Er_149", 1.489423060000000e+02 }, { "Er_150", 1.499379138390000e+02 }, { "Er_151", 1.509374489030000e+02 }, { "Er_152", 1.519350503890000e+02 },
{ "Er_153", 1.529350634920000e+02 }, { "Er_154", 1.539327830810000e+02 }, { "Er_155", 1.549332089490000e+02 }, { "Er_156", 1.559310646980000e+02 },
{ "Er_157", 1.569319160000000e+02 }, { "Er_158", 1.579298934740000e+02 }, { "Er_159", 1.589306840660000e+02 }, { "Er_160", 1.599290832920000e+02 },
{ "Er_161", 1.609299953090000e+02 }, { "Er_162", 1.619287782640000e+02 }, { "Er_163", 1.629300327490000e+02 }, { "Er_164", 1.639292002290000e+02 },
{ "Er_165", 1.649307260030000e+02 }, { "Er_166", 1.659302930610000e+02 }, { "Er_167", 1.669320481590000e+02 }, { "Er_168", 1.679323702240000e+02 },
{ "Er_169", 1.689345903640000e+02 }, { "Er_170", 1.699354643120000e+02 }, { "Er_171", 1.709380298080000e+02 }, { "Er_172", 1.719393561130000e+02 },
{ "Er_173", 1.729424000000000e+02 }, { "Er_174", 1.739442300000000e+02 }, { "Er_175", 1.749477700000000e+02 }, { "Er_176", 1.759500800000000e+02 },
{ "Er_177", 1.769540500000000e+02 }, { "Tm_natural", 1.689342000000000e+02 }, { "Tm_145", 1.449700730000000e+02 }, { "Tm_146", 1.459664250000000e+02 },
{ "Tm_147", 1.469609610000000e+02 }, { "Tm_148", 1.479578400000000e+02 }, { "Tm_149", 1.489527200000000e+02 }, { "Tm_150", 1.499499600000000e+02 },
{ "Tm_151", 1.509454834900000e+02 }, { "Tm_152", 1.519444220000000e+02 }, { "Tm_153", 1.529420121120000e+02 }, { "Tm_154", 1.539415678080000e+02 },
{ "Tm_155", 1.549391994590000e+02 }, { "Tm_156", 1.559389799330000e+02 }, { "Tm_157", 1.569369730000000e+02 }, { "Tm_158", 1.579369795250000e+02 },
{ "Tm_159", 1.589349750000000e+02 }, { "Tm_160", 1.599352628010000e+02 }, { "Tm_161", 1.609335490000000e+02 }, { "Tm_162", 1.619339946820000e+02 },
{ "Tm_163", 1.629326511240000e+02 }, { "Tm_164", 1.639335600000000e+02 }, { "Tm_165", 1.649324354920000e+02 }, { "Tm_166", 1.659335541310000e+02 },
{ "Tm_167", 1.669328516220000e+02 }, { "Tm_168", 1.679341727760000e+02 }, { "Tm_169", 1.689342132500000e+02 }, { "Tm_170", 1.699358013970000e+02 },
{ "Tm_171", 1.709364294400000e+02 }, { "Tm_172", 1.719384000440000e+02 }, { "Tm_173", 1.729396036070000e+02 }, { "Tm_174", 1.739421686050000e+02 },
{ "Tm_175", 1.749438368530000e+02 }, { "Tm_176", 1.759469946850000e+02 }, { "Tm_177", 1.769490400000000e+02 }, { "Tm_178", 1.779526400000000e+02 },
{ "Tm_179", 1.789553400000000e+02 }, { "Yb_natural", 1.730400000000000e+02 }, { "Yb_148", 1.479674200000000e+02 }, { "Yb_149", 1.489640400000000e+02 },
{ "Yb_150", 1.499584200000000e+02 }, { "Yb_151", 1.509554007690000e+02 }, { "Yb_152", 1.519502889190000e+02 }, { "Yb_153", 1.529494800000000e+02 },
{ "Yb_154", 1.539463939280000e+02 }, { "Yb_155", 1.549457823320000e+02 }, { "Yb_156", 1.559428182150000e+02 }, { "Yb_157", 1.569426278480000e+02 },
{ "Yb_158", 1.579398656170000e+02 }, { "Yb_159", 1.589400500990000e+02 }, { "Yb_160", 1.599375523440000e+02 }, { "Yb_161", 1.609379016780000e+02 },
{ "Yb_162", 1.619357682100000e+02 }, { "Yb_163", 1.629363343050000e+02 }, { "Yb_164", 1.639344894160000e+02 }, { "Yb_165", 1.649352790000000e+02 },
{ "Yb_166", 1.659338820420000e+02 }, { "Yb_167", 1.669349496050000e+02 }, { "Yb_168", 1.679338968950000e+02 }, { "Yb_169", 1.689351898020000e+02 },
{ "Yb_170", 1.699347618370000e+02 }, { "Yb_171", 1.709363257990000e+02 }, { "Yb_172", 1.719363814690000e+02 }, { "Yb_173", 1.729382107870000e+02 },
{ "Yb_174", 1.739388620890000e+02 }, { "Yb_175", 1.749412764500000e+02 }, { "Yb_176", 1.759425716830000e+02 }, { "Yb_177", 1.769452608220000e+02 },
{ "Yb_178", 1.779466466800000e+02 }, { "Yb_179", 1.789501700000000e+02 }, { "Yb_180", 1.799523300000000e+02 }, { "Yb_181", 1.809561500000000e+02 },
{ "Lu_natural", 1.749670000000000e+02 }, { "Lu_150", 1.499732280000000e+02 }, { "Lu_151", 1.509675770000000e+02 }, { "Lu_152", 1.519641200000000e+02 },
{ "Lu_153", 1.529587673310000e+02 }, { "Lu_154", 1.539575220000000e+02 }, { "Lu_155", 1.549543162160000e+02 }, { "Lu_156", 1.559530325230000e+02 },
{ "Lu_157", 1.569500983000000e+02 }, { "Lu_158", 1.579493132830000e+02 }, { "Lu_159", 1.589466287760000e+02 }, { "Lu_160", 1.599460330000000e+02 },
{ "Lu_161", 1.609435720000000e+02 }, { "Lu_162", 1.619432772880000e+02 }, { "Lu_163", 1.629411790000000e+02 }, { "Lu_164", 1.639413390000000e+02 },
{ "Lu_165", 1.649394067240000e+02 }, { "Lu_166", 1.659398590000000e+02 }, { "Lu_167", 1.669382700000000e+02 }, { "Lu_168", 1.679387391110000e+02 },
{ "Lu_169", 1.689376514390000e+02 }, { "Lu_170", 1.699384749680000e+02 }, { "Lu_171", 1.709379131360000e+02 }, { "Lu_172", 1.719390856690000e+02 },
{ "Lu_173", 1.729389306020000e+02 }, { "Lu_174", 1.739403374800000e+02 }, { "Lu_175", 1.749407718190000e+02 }, { "Lu_176", 1.759426863100000e+02 },
{ "Lu_177", 1.769437580550000e+02 }, { "Lu_178", 1.779459545590000e+02 }, { "Lu_179", 1.789473274430000e+02 }, { "Lu_180", 1.799498811600000e+02 },
{ "Lu_181", 1.809519700000000e+02 }, { "Lu_182", 1.819550400000000e+02 }, { "Lu_183", 1.829575700000000e+02 }, { "Lu_184", 1.839609100000000e+02 },
{ "Hf_natural", 1.784900000000000e+02 }, { "Hf_153", 1.529706900000000e+02 }, { "Hf_154", 1.539648600000000e+02 }, { "Hf_155", 1.549633900000000e+02 },
{ "Hf_156", 1.559593640250000e+02 }, { "Hf_157", 1.569583960000000e+02 }, { "Hf_158", 1.579547993660000e+02 }, { "Hf_159", 1.589539948700000e+02 },
{ "Hf_160", 1.599506843790000e+02 }, { "Hf_161", 1.609502748440000e+02 }, { "Hf_162", 1.619472104980000e+02 }, { "Hf_163", 1.629470890000000e+02 },
{ "Hf_164", 1.639443672840000e+02 }, { "Hf_165", 1.649445670000000e+02 }, { "Hf_166", 1.659421800000000e+02 }, { "Hf_167", 1.669426000000000e+02 },
{ "Hf_168", 1.679405680000000e+02 }, { "Hf_169", 1.689412590000000e+02 }, { "Hf_170", 1.699396090000000e+02 }, { "Hf_171", 1.709404920000000e+02 },
{ "Hf_172", 1.719394483010000e+02 }, { "Hf_173", 1.729405130000000e+02 }, { "Hf_174", 1.739400461780000e+02 }, { "Hf_175", 1.749415091810000e+02 },
{ "Hf_176", 1.759414086310000e+02 }, { "Hf_177", 1.769432206510000e+02 }, { "Hf_178", 1.779436987660000e+02 }, { "Hf_179", 1.789458161450000e+02 },
{ "Hf_180", 1.799465499530000e+02 }, { "Hf_181", 1.809491012460000e+02 }, { "Hf_182", 1.819505540960000e+02 }, { "Hf_183", 1.829535304390000e+02 },
{ "Hf_184", 1.839554465150000e+02 }, { "Hf_185", 1.849588200000000e+02 }, { "Hf_186", 1.859608900000000e+02 }, { "Hf_187", 1.869645900000000e+02 },
{ "Hf_188", 1.879668500000000e+02 }, { "Ta_natural", 1.809479000000000e+02 }, { "Ta_155", 1.549745920000000e+02 }, { "Ta_156", 1.559723030000000e+02 },
{ "Ta_157", 1.569681924450000e+02 }, { "Ta_158", 1.579666990000000e+02 }, { "Ta_159", 1.589630181730000e+02 }, { "Ta_160", 1.599614860560000e+02 },
{ "Ta_161", 1.609584170000000e+02 }, { "Ta_162", 1.619572918590000e+02 }, { "Ta_163", 1.629543302710000e+02 }, { "Ta_164", 1.639535340000000e+02 },
{ "Ta_165", 1.649507725140000e+02 }, { "Ta_166", 1.659505120000000e+02 }, { "Ta_167", 1.669480930000000e+02 }, { "Ta_168", 1.679480470000000e+02 },
{ "Ta_169", 1.689460110000000e+02 }, { "Ta_170", 1.699461750000000e+02 }, { "Ta_171", 1.709444760000000e+02 }, { "Ta_172", 1.719448950000000e+02 },
{ "Ta_173", 1.729437500000000e+02 }, { "Ta_174", 1.739444540000000e+02 }, { "Ta_175", 1.749437370000000e+02 }, { "Ta_176", 1.759448570000000e+02 },
{ "Ta_177", 1.769444724030000e+02 }, { "Ta_178", 1.779457782210000e+02 }, { "Ta_179", 1.789459295350000e+02 }, { "Ta_180", 1.799474648310000e+02 },
{ "Ta_181", 1.809479957630000e+02 }, { "Ta_182", 1.819501518490000e+02 }, { "Ta_183", 1.829513726160000e+02 }, { "Ta_184", 1.839540079660000e+02 },
{ "Ta_185", 1.849555593750000e+02 }, { "Ta_186", 1.859585520230000e+02 }, { "Ta_187", 1.869605300000000e+02 }, { "Ta_188", 1.879637000000000e+02 },
{ "Ta_189", 1.889658300000000e+02 }, { "Ta_190", 1.899692300000000e+02 }, { "W_natural", 1.838500000000000e+02 }, { "W_158", 1.579745620000000e+02 },
{ "W_159", 1.589729180000000e+02 }, { "W_160", 1.599684788050000e+02 }, { "W_161", 1.609673570000000e+02 }, { "W_162", 1.619634974170000e+02 },
{ "W_163", 1.629625235420000e+02 }, { "W_164", 1.639589543820000e+02 }, { "W_165", 1.649582799490000e+02 }, { "W_166", 1.659550272530000e+02 },
{ "W_167", 1.669548160140000e+02 }, { "W_168", 1.679518083940000e+02 }, { "W_169", 1.689517787900000e+02 }, { "W_170", 1.699492284820000e+02 },
{ "W_171", 1.709494510000000e+02 }, { "W_172", 1.719472920000000e+02 }, { "W_173", 1.729476890000000e+02 }, { "W_174", 1.739460790000000e+02 },
{ "W_175", 1.749467170000000e+02 }, { "W_176", 1.759456340000000e+02 }, { "W_177", 1.769466430000000e+02 }, { "W_178", 1.779458762360000e+02 },
{ "W_179", 1.789470704470000e+02 }, { "W_180", 1.799467044590000e+02 }, { "W_181", 1.809481972480000e+02 }, { "W_182", 1.819482041560000e+02 },
{ "W_183", 1.829502229510000e+02 }, { "W_184", 1.839509311880000e+02 }, { "W_185", 1.849534192640000e+02 }, { "W_186", 1.859543641270000e+02 },
{ "W_187", 1.869571604660000e+02 }, { "W_188", 1.879584891050000e+02 }, { "W_189", 1.889619128680000e+02 }, { "W_190", 1.899631813780000e+02 },
{ "W_191", 1.909666000000000e+02 }, { "W_192", 1.919681700000000e+02 }, { "Re_natural", 1.862070000000000e+02 }, { "Re_160", 1.599821150000000e+02 },
{ "Re_161", 1.609775891190000e+02 }, { "Re_162", 1.619760020000000e+02 }, { "Re_163", 1.629720805350000e+02 }, { "Re_164", 1.639703230000000e+02 },
{ "Re_165", 1.649670885570000e+02 }, { "Re_166", 1.659658080000000e+02 }, { "Re_167", 1.669626010000000e+02 }, { "Re_168", 1.679615726080000e+02 },
{ "Re_169", 1.689587910960000e+02 }, { "Re_170", 1.699582200710000e+02 }, { "Re_171", 1.709557160000000e+02 }, { "Re_172", 1.719554229610000e+02 },
{ "Re_173", 1.729532430000000e+02 }, { "Re_174", 1.739531150000000e+02 }, { "Re_175", 1.749513810000000e+02 }, { "Re_176", 1.759516230000000e+02 },
{ "Re_177", 1.769503280000000e+02 }, { "Re_178", 1.779509890000000e+02 }, { "Re_179", 1.789499876410000e+02 }, { "Re_180", 1.799507890840000e+02 },
{ "Re_181", 1.809500679160000e+02 }, { "Re_182", 1.819512100800000e+02 }, { "Re_183", 1.829508198410000e+02 }, { "Re_184", 1.839525207560000e+02 },
{ "Re_185", 1.849529549820000e+02 }, { "Re_186", 1.859549860840000e+02 }, { "Re_187", 1.869557531090000e+02 }, { "Re_188", 1.879581144380000e+02 },
{ "Re_189", 1.889592290070000e+02 }, { "Re_190", 1.899618179770000e+02 }, { "Re_191", 1.909631252420000e+02 }, { "Re_192", 1.919659600000000e+02 },
{ "Re_193", 1.929674700000000e+02 }, { "Re_194", 1.939704200000000e+02 }, { "Os_natural", 1.902000000000000e+02 }, { "Os_162", 1.619844310000000e+02 },
{ "Os_163", 1.629826900000000e+02 }, { "Os_164", 1.639780356490000e+02 }, { "Os_165", 1.649767620000000e+02 }, { "Os_166", 1.659726907530000e+02 },
{ "Os_167", 1.669715479690000e+02 }, { "Os_168", 1.679678036780000e+02 }, { "Os_169", 1.689670192700000e+02 }, { "Os_170", 1.699635770280000e+02 },
{ "Os_171", 1.709631848190000e+02 }, { "Os_172", 1.719600233030000e+02 }, { "Os_173", 1.729598084090000e+02 }, { "Os_174", 1.739570622020000e+02 },
{ "Os_175", 1.749569458350000e+02 }, { "Os_176", 1.759548060000000e+02 }, { "Os_177", 1.769549653240000e+02 }, { "Os_178", 1.779532512410000e+02 },
{ "Os_179", 1.789538160170000e+02 }, { "Os_180", 1.799523788030000e+02 }, { "Os_181", 1.809532440000000e+02 }, { "Os_182", 1.819521101860000e+02 },
{ "Os_183", 1.829531261020000e+02 }, { "Os_184", 1.839524890710000e+02 }, { "Os_185", 1.849540422650000e+02 }, { "Os_186", 1.859538381580000e+02 },
{ "Os_187", 1.869557504580000e+02 }, { "Os_188", 1.879558382280000e+02 }, { "Os_189", 1.889581474700000e+02 }, { "Os_190", 1.899584470480000e+02 },
{ "Os_191", 1.909609297180000e+02 }, { "Os_192", 1.919614806900000e+02 }, { "Os_193", 1.929641515630000e+02 }, { "Os_194", 1.939651820830000e+02 },
{ "Os_195", 1.949681266610000e+02 }, { "Os_196", 1.959696393330000e+02 }, { "Ir_natural", 1.922200000000000e+02 }, { "Ir_164", 1.639922010000000e+02 },
{ "Ir_165", 1.649875200000000e+02 }, { "Ir_166", 1.659858240000000e+02 }, { "Ir_167", 1.669816651560000e+02 }, { "Ir_168", 1.679798810000000e+02 },
{ "Ir_169", 1.689762949420000e+02 }, { "Ir_170", 1.699749650000000e+02 }, { "Ir_171", 1.709716260420000e+02 }, { "Ir_172", 1.719704560000000e+02 },
{ "Ir_173", 1.729675017390000e+02 }, { "Ir_174", 1.739668610450000e+02 }, { "Ir_175", 1.749641128950000e+02 }, { "Ir_176", 1.759636486880000e+02 },
{ "Ir_177", 1.769613015000000e+02 }, { "Ir_178", 1.779610820000000e+02 }, { "Ir_179", 1.789591222660000e+02 }, { "Ir_180", 1.799592294460000e+02 },
{ "Ir_181", 1.809576252970000e+02 }, { "Ir_182", 1.819580762960000e+02 }, { "Ir_183", 1.829568464580000e+02 }, { "Ir_184", 1.839574760000000e+02 },
{ "Ir_185", 1.849566980000000e+02 }, { "Ir_186", 1.859579461040000e+02 }, { "Ir_187", 1.869573633610000e+02 }, { "Ir_188", 1.879588531210000e+02 },
{ "Ir_189", 1.889587189350000e+02 }, { "Ir_190", 1.899605459680000e+02 }, { "Ir_191", 1.909605940460000e+02 }, { "Ir_192", 1.919626050120000e+02 },
{ "Ir_193", 1.929629264300000e+02 }, { "Ir_194", 1.939650783780000e+02 }, { "Ir_195", 1.949659795730000e+02 }, { "Ir_196", 1.959683965420000e+02 },
{ "Ir_197", 1.969696532850000e+02 }, { "Ir_198", 1.979722800000000e+02 }, { "Ir_199", 1.989738045830000e+02 }, { "Pt_natural", 1.950900000000000e+02 },
{ "Pt_166", 1.659948550000000e+02 }, { "Pt_167", 1.669929790000000e+02 }, { "Pt_168", 1.679881507420000e+02 }, { "Pt_169", 1.689867150000000e+02 },
{ "Pt_170", 1.699824952890000e+02 }, { "Pt_171", 1.709812445420000e+02 }, { "Pt_172", 1.719773471280000e+02 }, { "Pt_173", 1.729764447540000e+02 },
{ "Pt_174", 1.739728187670000e+02 }, { "Pt_175", 1.749724205520000e+02 }, { "Pt_176", 1.759689446220000e+02 }, { "Pt_177", 1.769684694810000e+02 },
{ "Pt_178", 1.779656487240000e+02 }, { "Pt_179", 1.789653634040000e+02 }, { "Pt_180", 1.799630314770000e+02 }, { "Pt_181", 1.809630972850000e+02 },
{ "Pt_182", 1.819611706560000e+02 }, { "Pt_183", 1.829615967030000e+02 }, { "Pt_184", 1.839599222510000e+02 }, { "Pt_185", 1.849606190000000e+02 },
{ "Pt_186", 1.859593508130000e+02 }, { "Pt_187", 1.869605870000000e+02 }, { "Pt_188", 1.879593953910000e+02 }, { "Pt_189", 1.889608336860000e+02 },
{ "Pt_190", 1.899599316550000e+02 }, { "Pt_191", 1.909616766610000e+02 }, { "Pt_192", 1.919610380050000e+02 }, { "Pt_193", 1.929629874010000e+02 },
{ "Pt_194", 1.939626802530000e+02 }, { "Pt_195", 1.949647911340000e+02 }, { "Pt_196", 1.959649515210000e+02 }, { "Pt_197", 1.969673401820000e+02 },
{ "Pt_198", 1.979678927900000e+02 }, { "Pt_199", 1.989705930940000e+02 }, { "Pt_200", 1.999714406770000e+02 }, { "Pt_201", 2.009745128680000e+02 },
{ "Pt_202", 2.019757400000000e+02 }, { "Au_natural", 1.969665000000000e+02 }, { "Au_169", 1.689980800000000e+02 }, { "Au_170", 1.699961220000000e+02 },
{ "Au_171", 1.709918788810000e+02 }, { "Au_172", 1.719900350000000e+02 }, { "Au_173", 1.729862373800000e+02 }, { "Au_174", 1.739847610000000e+02 },
{ "Au_175", 1.749812741070000e+02 }, { "Au_176", 1.759800990000000e+02 }, { "Au_177", 1.769768649080000e+02 }, { "Au_178", 1.779760319200000e+02 },
{ "Au_179", 1.789732128120000e+02 }, { "Au_180", 1.799725211240000e+02 }, { "Au_181", 1.809700790480000e+02 }, { "Au_182", 1.819696178740000e+02 },
{ "Au_183", 1.829675930340000e+02 }, { "Au_184", 1.839674515240000e+02 }, { "Au_185", 1.849657894110000e+02 }, { "Au_186", 1.859659527030000e+02 },
{ "Au_187", 1.869645675410000e+02 }, { "Au_188", 1.879653236610000e+02 }, { "Au_189", 1.889639482860000e+02 }, { "Au_190", 1.899647003390000e+02 },
{ "Au_191", 1.909637042250000e+02 }, { "Au_192", 1.919648129530000e+02 }, { "Au_193", 1.929641497150000e+02 }, { "Au_194", 1.939653652500000e+02 },
{ "Au_195", 1.949650346400000e+02 }, { "Au_196", 1.959665698130000e+02 }, { "Au_197", 1.969665686620000e+02 }, { "Au_198", 1.979682423030000e+02 },
{ "Au_199", 1.989687651930000e+02 }, { "Au_200", 1.999707256470000e+02 }, { "Au_201", 2.009716572400000e+02 }, { "Au_202", 2.019738058380000e+02 },
{ "Au_203", 2.029751545420000e+02 }, { "Au_204", 2.039777240000000e+02 }, { "Au_205", 2.049798700000000e+02 }, { "Hg_natural", 2.005900000000000e+02 },
{ "Hg_171", 1.710037600000000e+02 }, { "Hg_172", 1.719988326860000e+02 }, { "Hg_173", 1.729972420000000e+02 }, { "Hg_174", 1.739928636950000e+02 },
{ "Hg_175", 1.749914232700000e+02 }, { "Hg_176", 1.759873545800000e+02 }, { "Hg_177", 1.769862791580000e+02 }, { "Hg_178", 1.779824831430000e+02 },
{ "Hg_179", 1.789818338610000e+02 }, { "Hg_180", 1.799782663940000e+02 }, { "Hg_181", 1.809778193110000e+02 }, { "Hg_182", 1.819746899640000e+02 },
{ "Hg_183", 1.829744498410000e+02 }, { "Hg_184", 1.839717130510000e+02 }, { "Hg_185", 1.849718990860000e+02 }, { "Hg_186", 1.859693617900000e+02 },
{ "Hg_187", 1.869698142360000e+02 }, { "Hg_188", 1.879675770490000e+02 }, { "Hg_189", 1.889681900340000e+02 }, { "Hg_190", 1.899663224490000e+02 },
{ "Hg_191", 1.909671571050000e+02 }, { "Hg_192", 1.919656343270000e+02 }, { "Hg_193", 1.929666654210000e+02 }, { "Hg_194", 1.939654394090000e+02 },
{ "Hg_195", 1.949667201130000e+02 }, { "Hg_196", 1.959658326490000e+02 }, { "Hg_197", 1.969672129080000e+02 }, { "Hg_198", 1.979667690320000e+02 },
{ "Hg_199", 1.989682799320000e+02 }, { "Hg_200", 1.999683260040000e+02 }, { "Hg_201", 2.009703022680000e+02 }, { "Hg_202", 2.019706430110000e+02 },
{ "Hg_203", 2.029728724840000e+02 }, { "Hg_204", 2.039734939330000e+02 }, { "Hg_205", 2.049760733860000e+02 }, { "Hg_206", 2.059775140660000e+02 },
{ "Hg_207", 2.069825885450000e+02 }, { "Hg_208", 2.079859400000000e+02 }, { "Hg_209", 2.089910400000000e+02 }, { "Hg_210", 2.099945100000000e+02 },
{ "Tl_natural", 2.043700000000000e+02 }, { "Tl_176", 1.760005900000000e+02 }, { "Tl_177", 1.769964272860000e+02 }, { "Tl_178", 1.779948970000000e+02 },
{ "Tl_179", 1.789910890820000e+02 }, { "Tl_180", 1.799899060000000e+02 }, { "Tl_181", 1.809862574470000e+02 }, { "Tl_182", 1.819856671040000e+02 },
{ "Tl_183", 1.829821928020000e+02 }, { "Tl_184", 1.839818731220000e+02 }, { "Tl_185", 1.849787913050000e+02 }, { "Tl_186", 1.859783250000000e+02 },
{ "Tl_187", 1.869759058970000e+02 }, { "Tl_188", 1.879760097820000e+02 }, { "Tl_189", 1.889735884280000e+02 }, { "Tl_190", 1.899738771490000e+02 },
{ "Tl_191", 1.909717861540000e+02 }, { "Tl_192", 1.919722250000000e+02 }, { "Tl_193", 1.929706720000000e+02 }, { "Tl_194", 1.939712000000000e+02 },
{ "Tl_195", 1.949697743350000e+02 }, { "Tl_196", 1.959704811510000e+02 }, { "Tl_197", 1.969695745110000e+02 }, { "Tl_198", 1.979704834950000e+02 },
{ "Tl_199", 1.989698770000000e+02 }, { "Tl_200", 1.999709626720000e+02 }, { "Tl_201", 2.009708188910000e+02 }, { "Tl_202", 2.019721058080000e+02 },
{ "Tl_203", 2.029723442200000e+02 }, { "Tl_204", 2.039738635220000e+02 }, { "Tl_205", 2.049744275410000e+02 }, { "Tl_206", 2.059761103200000e+02 },
{ "Tl_207", 2.069774194290000e+02 }, { "Tl_208", 2.079820187000000e+02 }, { "Tl_209", 2.089853589520000e+02 }, { "Tl_210", 2.099900736890000e+02 },
{ "Tl_211", 2.109934770000000e+02 }, { "Tl_212", 2.119982280000000e+02 }, { "Pb_natural", 2.072000000000000e+02 }, { "Pb_178", 1.780038301910000e+02 },
{ "Pb_179", 1.790021500000000e+02 }, { "Pb_180", 1.799979181730000e+02 }, { "Pb_181", 1.809966239580000e+02 }, { "Pb_182", 1.819926718420000e+02 },
{ "Pb_183", 1.829918746290000e+02 }, { "Pb_184", 1.839881423390000e+02 }, { "Pb_185", 1.849876099440000e+02 }, { "Pb_186", 1.859842389450000e+02 },
{ "Pb_187", 1.869839183700000e+02 }, { "Pb_188", 1.879808743380000e+02 }, { "Pb_189", 1.889808070000000e+02 }, { "Pb_190", 1.899780815170000e+02 },
{ "Pb_191", 1.909782650000000e+02 }, { "Pb_192", 1.919757851710000e+02 }, { "Pb_193", 1.929761732340000e+02 }, { "Pb_194", 1.939740120700000e+02 },
{ "Pb_195", 1.949745420500000e+02 }, { "Pb_196", 1.959727741090000e+02 }, { "Pb_197", 1.969734311240000e+02 }, { "Pb_198", 1.979720339590000e+02 },
{ "Pb_199", 1.989729166500000e+02 }, { "Pb_200", 1.999718266750000e+02 }, { "Pb_201", 2.009728845110000e+02 }, { "Pb_202", 2.019721591330000e+02 },
{ "Pb_203", 2.029733905210000e+02 }, { "Pb_204", 2.039730435890000e+02 }, { "Pb_205", 2.049744817550000e+02 }, { "Pb_206", 2.059744652780000e+02 },
{ "Pb_207", 2.069758968870000e+02 }, { "Pb_208", 2.079766520710000e+02 }, { "Pb_209", 2.089810901200000e+02 }, { "Pb_210", 2.099841885270000e+02 },
{ "Pb_211", 2.109887369640000e+02 }, { "Pb_212", 2.119918975430000e+02 }, { "Pb_213", 2.129965814990000e+02 }, { "Pb_214", 2.139998054080000e+02 },
{ "Pb_215", 2.150048070000000e+02 }, { "Bi_natural", 2.089804000000000e+02 }, { "Bi_184", 1.840011240000000e+02 }, { "Bi_185", 1.849976250000000e+02 },
{ "Bi_186", 1.859965976250000e+02 }, { "Bi_187", 1.869931578350000e+02 }, { "Bi_188", 1.879922651540000e+02 }, { "Bi_189", 1.889891990120000e+02 },
{ "Bi_190", 1.899882951290000e+02 }, { "Bi_191", 1.909857861190000e+02 }, { "Bi_192", 1.919854579540000e+02 }, { "Bi_193", 1.929829597710000e+02 },
{ "Bi_194", 1.939828339600000e+02 }, { "Bi_195", 1.949806507370000e+02 }, { "Bi_196", 1.959806665090000e+02 }, { "Bi_197", 1.969788644540000e+02 },
{ "Bi_198", 1.979792060000000e+02 }, { "Bi_199", 1.989776719610000e+02 }, { "Bi_200", 1.999781318290000e+02 }, { "Bi_201", 2.009770090360000e+02 },
{ "Bi_202", 2.019777423240000e+02 }, { "Bi_203", 2.029768760010000e+02 }, { "Bi_204", 2.039778127360000e+02 }, { "Bi_205", 2.049773893660000e+02 },
{ "Bi_206", 2.059784991300000e+02 }, { "Bi_207", 2.069784706790000e+02 }, { "Bi_208", 2.079797421960000e+02 }, { "Bi_209", 2.089803987340000e+02 },
{ "Bi_210", 2.099841203710000e+02 }, { "Bi_211", 2.109872694600000e+02 }, { "Bi_212", 2.119912857240000e+02 }, { "Bi_213", 2.129943846660000e+02 },
{ "Bi_214", 2.139987115390000e+02 }, { "Bi_215", 2.150017697760000e+02 }, { "Bi_216", 2.160063059430000e+02 }, { "Bi_217", 2.170094700000000e+02 },
{ "Bi_218", 2.180143160000000e+02 }, { "Po_natural", 2.090000000000000e+02 }, { "Po_188", 1.879994220480000e+02 }, { "Po_189", 1.889984805620000e+02 },
{ "Po_190", 1.899951011850000e+02 }, { "Po_191", 1.909945744850000e+02 }, { "Po_192", 1.919913351490000e+02 }, { "Po_193", 1.929910252750000e+02 },
{ "Po_194", 1.939881856060000e+02 }, { "Po_195", 1.949881107280000e+02 }, { "Po_196", 1.959855345800000e+02 }, { "Po_197", 1.969856596300000e+02 },
{ "Po_198", 1.979833886160000e+02 }, { "Po_199", 1.989836660630000e+02 }, { "Po_200", 1.999817986040000e+02 }, { "Po_201", 2.009822597640000e+02 },
{ "Po_202", 2.019807575410000e+02 }, { "Po_203", 2.029814201030000e+02 }, { "Po_204", 2.039803181210000e+02 }, { "Po_205", 2.049812033220000e+02 },
{ "Po_206", 2.059804810990000e+02 }, { "Po_207", 2.069815931730000e+02 }, { "Po_208", 2.079812457020000e+02 }, { "Po_209", 2.089824304350000e+02 },
{ "Po_210", 2.099828736730000e+02 }, { "Po_211", 2.109866531540000e+02 }, { "Po_212", 2.119888679690000e+02 }, { "Po_213", 2.129928572800000e+02 },
{ "Po_214", 2.139952013500000e+02 }, { "Po_215", 2.149994199880000e+02 }, { "Po_216", 2.160019150350000e+02 }, { "Po_217", 2.170063347960000e+02 },
{ "Po_218", 2.180089730370000e+02 }, { "Po_219", 2.190137440000000e+02 }, { "Po_220", 2.200166020000000e+02 }, { "At_natural", 2.100000000000000e+02 },
{ "At_193", 1.929998431120000e+02 }, { "At_194", 1.939987250850000e+02 }, { "At_195", 1.949962680980000e+02 }, { "At_196", 1.959957880770000e+02 },
{ "At_197", 1.969931892150000e+02 }, { "At_198", 1.979928372020000e+02 }, { "At_199", 1.989905322540000e+02 }, { "At_200", 1.999903512640000e+02 },
{ "At_201", 2.009884169990000e+02 }, { "At_202", 2.019886302360000e+02 }, { "At_203", 2.029869419840000e+02 }, { "At_204", 2.039872513260000e+02 },
{ "At_205", 2.049860744830000e+02 }, { "At_206", 2.059866670360000e+02 }, { "At_207", 2.069857835020000e+02 }, { "At_208", 2.079865899770000e+02 },
{ "At_209", 2.089861731430000e+02 }, { "At_210", 2.099871477100000e+02 }, { "At_211", 2.109874962710000e+02 }, { "At_212", 2.119907447710000e+02 },
{ "At_213", 2.129929366460000e+02 }, { "At_214", 2.139963717330000e+02 }, { "At_215", 2.149986525700000e+02 }, { "At_216", 2.160024232570000e+02 },
{ "At_217", 2.170047188220000e+02 }, { "At_218", 2.180086943360000e+02 }, { "At_219", 2.190111616910000e+02 }, { "At_220", 2.200154076820000e+02 },
{ "At_221", 2.210180500000000e+02 }, { "At_222", 2.220223300000000e+02 }, { "At_223", 2.230251900000000e+02 }, { "Rn_natural", 2.220000000000000e+02 },
{ "Rn_195", 1.950054376960000e+02 }, { "Rn_196", 1.960021152230000e+02 }, { "Rn_197", 1.970015843510000e+02 }, { "Rn_198", 1.979986786630000e+02 },
{ "Rn_199", 1.989983702970000e+02 }, { "Rn_200", 1.999956993000000e+02 }, { "Rn_201", 2.009956283350000e+02 }, { "Rn_202", 2.019932634920000e+02 },
{ "Rn_203", 2.029933866870000e+02 }, { "Rn_204", 2.039914287400000e+02 }, { "Rn_205", 2.049917187990000e+02 }, { "Rn_206", 2.059902141040000e+02 },
{ "Rn_207", 2.069907342250000e+02 }, { "Rn_208", 2.079896424700000e+02 }, { "Rn_209", 2.089904147420000e+02 }, { "Rn_210", 2.099896962160000e+02 },
{ "Rn_211", 2.109906005230000e+02 }, { "Rn_212", 2.119907035290000e+02 }, { "Rn_213", 2.129938826680000e+02 }, { "Rn_214", 2.139953625540000e+02 },
{ "Rn_215", 2.149987454830000e+02 }, { "Rn_216", 2.160002743700000e+02 }, { "Rn_217", 2.170039276750000e+02 }, { "Rn_218", 2.180056012560000e+02 },
{ "Rn_219", 2.190094802040000e+02 }, { "Rn_220", 2.200113939810000e+02 }, { "Rn_221", 2.210155367820000e+02 }, { "Rn_222", 2.220175777380000e+02 },
{ "Rn_223", 2.230217900000000e+02 }, { "Rn_224", 2.240240900000000e+02 }, { "Rn_225", 2.250284400000000e+02 }, { "Rn_226", 2.260308900000000e+02 },
{ "Rn_227", 2.270354070000000e+02 }, { "Rn_228", 2.280379860000000e+02 }, { "Fr_natural", 2.230000000000000e+02 }, { "Fr_199", 1.990072581470000e+02 },
{ "Fr_200", 2.000065724900000e+02 }, { "Fr_201", 2.010038608670000e+02 }, { "Fr_202", 2.020033728470000e+02 }, { "Fr_203", 2.030009246470000e+02 },
{ "Fr_204", 2.040006532040000e+02 }, { "Fr_205", 2.049985939600000e+02 }, { "Fr_206", 2.059986660660000e+02 }, { "Fr_207", 2.069969494140000e+02 },
{ "Fr_208", 2.079971387830000e+02 }, { "Fr_209", 2.089959535550000e+02 }, { "Fr_210", 2.099964077380000e+02 }, { "Fr_211", 2.109955365440000e+02 },
{ "Fr_212", 2.119962022440000e+02 }, { "Fr_213", 2.129961890810000e+02 }, { "Fr_214", 2.139989711450000e+02 }, { "Fr_215", 2.150003414970000e+02 },
{ "Fr_216", 2.160031979900000e+02 }, { "Fr_217", 2.170046319510000e+02 }, { "Fr_218", 2.180075783220000e+02 }, { "Fr_219", 2.190092521490000e+02 },
{ "Fr_220", 2.200123274050000e+02 }, { "Fr_221", 2.210142547620000e+02 }, { "Fr_222", 2.220175517300000e+02 }, { "Fr_223", 2.230197358570000e+02 },
{ "Fr_224", 2.240232499510000e+02 }, { "Fr_225", 2.250255654140000e+02 }, { "Fr_226", 2.260293862310000e+02 }, { "Fr_227", 2.270318359380000e+02 },
{ "Fr_228", 2.280357290000000e+02 }, { "Fr_229", 2.290384502280000e+02 }, { "Fr_230", 2.300425100000000e+02 }, { "Fr_231", 2.310454400000000e+02 },
{ "Fr_232", 2.320497720000000e+02 }, { "Ra_natural", 2.260000000000000e+02 }, { "Ra_202", 2.020098906860000e+02 }, { "Ra_203", 2.030092716190000e+02 },
{ "Ra_204", 2.040064996680000e+02 }, { "Ra_205", 2.050062685700000e+02 }, { "Ra_206", 2.060038272700000e+02 }, { "Ra_207", 2.070037981050000e+02 },
{ "Ra_208", 2.080018399400000e+02 }, { "Ra_209", 2.090019913730000e+02 }, { "Ra_210", 2.100004949780000e+02 }, { "Ra_211", 2.110008979870000e+02 },
{ "Ra_212", 2.119997944990000e+02 }, { "Ra_213", 2.130003839590000e+02 }, { "Ra_214", 2.140001078940000e+02 }, { "Ra_215", 2.150027198340000e+02 },
{ "Ra_216", 2.160035330350000e+02 }, { "Ra_217", 2.170063203270000e+02 }, { "Ra_218", 2.180071402300000e+02 }, { "Ra_219", 2.190100850780000e+02 },
{ "Ra_220", 2.200110283840000e+02 }, { "Ra_221", 2.210139173380000e+02 }, { "Ra_222", 2.220153745300000e+02 }, { "Ra_223", 2.230185021710000e+02 },
{ "Ra_224", 2.240202118210000e+02 }, { "Ra_225", 2.250236115640000e+02 }, { "Ra_226", 2.260254098230000e+02 }, { "Ra_227", 2.270291778420000e+02 },
{ "Ra_228", 2.280310702920000e+02 }, { "Ra_229", 2.290349575770000e+02 }, { "Ra_230", 2.300370563940000e+02 }, { "Ra_231", 2.310412200000000e+02 },
{ "Ra_232", 2.320436380000000e+02 }, { "Ra_233", 2.330480600000000e+02 }, { "Ra_234", 2.340507040000000e+02 }, { "Ac_natural", 2.270000000000000e+02 },
{ "Ac_206", 2.060145049800000e+02 }, { "Ac_207", 2.070119497480000e+02 }, { "Ac_208", 2.080115515510000e+02 }, { "Ac_209", 2.090094948630000e+02 },
{ "Ac_210", 2.100094359860000e+02 }, { "Ac_211", 2.110077348350000e+02 }, { "Ac_212", 2.120078138220000e+02 }, { "Ac_213", 2.130066076430000e+02 },
{ "Ac_214", 2.140069017980000e+02 }, { "Ac_215", 2.150064536250000e+02 }, { "Ac_216", 2.160087200750000e+02 }, { "Ac_217", 2.170093469140000e+02 },
{ "Ac_218", 2.180116414530000e+02 }, { "Ac_219", 2.190124203890000e+02 }, { "Ac_220", 2.200147629790000e+02 }, { "Ac_221", 2.210155912480000e+02 },
{ "Ac_222", 2.220178438510000e+02 }, { "Ac_223", 2.230191374680000e+02 }, { "Ac_224", 2.240217228660000e+02 }, { "Ac_225", 2.250232295850000e+02 },
{ "Ac_226", 2.260260980890000e+02 }, { "Ac_227", 2.270277521270000e+02 }, { "Ac_228", 2.280310211120000e+02 }, { "Ac_229", 2.290330152430000e+02 },
{ "Ac_230", 2.300362941780000e+02 }, { "Ac_231", 2.310385587860000e+02 }, { "Ac_232", 2.320420274380000e+02 }, { "Ac_233", 2.330445500000000e+02 },
{ "Ac_234", 2.340484200000000e+02 }, { "Ac_235", 2.350512320000000e+02 }, { "Ac_236", 2.360552960000000e+02 }, { "Th_natural", 2.320381000000000e+02 },
{ "Th_209", 2.090177156820000e+02 }, { "Th_210", 2.100150753420000e+02 }, { "Th_211", 2.110149284130000e+02 }, { "Th_212", 2.120129802880000e+02 },
{ "Th_213", 2.130130101400000e+02 }, { "Th_214", 2.140114997700000e+02 }, { "Th_215", 2.150117303300000e+02 }, { "Th_216", 2.160110621150000e+02 },
{ "Th_217", 2.170131143280000e+02 }, { "Th_218", 2.180132844990000e+02 }, { "Th_219", 2.190155368950000e+02 }, { "Th_220", 2.200157477620000e+02 },
{ "Th_221", 2.210181836740000e+02 }, { "Th_222", 2.220184681210000e+02 }, { "Th_223", 2.230208114480000e+02 }, { "Th_224", 2.240214668950000e+02 },
{ "Th_225", 2.250239510210000e+02 }, { "Th_226", 2.260249030690000e+02 }, { "Th_227", 2.270277040700000e+02 }, { "Th_228", 2.280287411270000e+02 },
{ "Th_229", 2.290317624300000e+02 }, { "Th_230", 2.300331338430000e+02 }, { "Th_231", 2.310363043430000e+02 }, { "Th_232", 2.320380553250000e+02 },
{ "Th_233", 2.330415818430000e+02 }, { "Th_234", 2.340436012300000e+02 }, { "Th_235", 2.350475100740000e+02 }, { "Th_236", 2.360498700000000e+02 },
{ "Th_237", 2.370538940000000e+02 }, { "Th_238", 2.380564960000000e+02 }, { "Pa_natural", 2.310000000000000e+02 }, { "Pa_212", 2.120232041380000e+02 },
{ "Pa_213", 2.130211093400000e+02 }, { "Pa_214", 2.140209184170000e+02 }, { "Pa_215", 2.150191858650000e+02 }, { "Pa_216", 2.160191095640000e+02 },
{ "Pa_217", 2.170183239860000e+02 }, { "Pa_218", 2.180200418890000e+02 }, { "Pa_219", 2.190198831430000e+02 }, { "Pa_220", 2.200218753030000e+02 },
{ "Pa_221", 2.210218779830000e+02 }, { "Pa_222", 2.220237420000000e+02 }, { "Pa_223", 2.230239622730000e+02 }, { "Pa_224", 2.240256257380000e+02 },
{ "Pa_225", 2.250261306780000e+02 }, { "Pa_226", 2.260279477530000e+02 }, { "Pa_227", 2.270288050720000e+02 }, { "Pa_228", 2.280310513760000e+02 },
{ "Pa_229", 2.290320967930000e+02 }, { "Pa_230", 2.300345407540000e+02 }, { "Pa_231", 2.310358839900000e+02 }, { "Pa_232", 2.320385915920000e+02 },
{ "Pa_233", 2.330402472770000e+02 }, { "Pa_234", 2.340433080580000e+02 }, { "Pa_235", 2.350454436150000e+02 }, { "Pa_236", 2.360486812840000e+02 },
{ "Pa_237", 2.370511456590000e+02 }, { "Pa_238", 2.380545027100000e+02 }, { "Pa_239", 2.390572600000000e+02 }, { "Pa_240", 2.400609800000000e+02 },
{ "U_natural", 2.380290000000000e+02 }, { "U_217", 2.170243687910000e+02 }, { "U_218", 2.180235356710000e+02 }, { "U_219", 2.190249191600000e+02 },
{ "U_220", 2.200247230000000e+02 }, { "U_221", 2.210263990000000e+02 }, { "U_222", 2.220260860000000e+02 }, { "U_223", 2.230277386000000e+02 },
{ "U_224", 2.240276047780000e+02 }, { "U_225", 2.250293907170000e+02 }, { "U_226", 2.260293387020000e+02 }, { "U_227", 2.270311563670000e+02 },
{ "U_228", 2.280313740060000e+02 }, { "U_229", 2.290335059390000e+02 }, { "U_230", 2.300339397840000e+02 }, { "U_231", 2.310362937040000e+02 },
{ "U_232", 2.320371561520000e+02 }, { "U_233", 2.330396352070000e+02 }, { "U_234", 2.340409520880000e+02 }, { "U_235", 2.350439299180000e+02 },
{ "U_236", 2.360455680060000e+02 }, { "U_237", 2.370487301840000e+02 }, { "U_238", 2.380507882470000e+02 }, { "U_239", 2.390542932990000e+02 },
{ "U_240", 2.400565919880000e+02 }, { "U_241", 2.410603300000000e+02 }, { "U_242", 2.420629310000000e+02 }, { "Np_natural", 2.370000000000000e+02 },
{ "Np_225", 2.250339139330000e+02 }, { "Np_226", 2.260351450000000e+02 }, { "Np_227", 2.270349567890000e+02 }, { "Np_228", 2.280361800000000e+02 },
{ "Np_229", 2.290362638080000e+02 }, { "Np_230", 2.300378275970000e+02 }, { "Np_231", 2.310382450850000e+02 }, { "Np_232", 2.320401080000000e+02 },
{ "Np_233", 2.330407405460000e+02 }, { "Np_234", 2.340428950380000e+02 }, { "Np_235", 2.350440632670000e+02 }, { "Np_236", 2.360465696000000e+02 },
{ "Np_237", 2.370481734440000e+02 }, { "Np_238", 2.380509464050000e+02 }, { "Np_239", 2.390529390250000e+02 }, { "Np_240", 2.400561621820000e+02 },
{ "Np_241", 2.410582524310000e+02 }, { "Np_242", 2.420616411800000e+02 }, { "Np_243", 2.430642790000000e+02 }, { "Np_244", 2.440678500000000e+02 },
{ "Pu_natural", 2.440000000000000e+02 }, { "Pu_228", 2.280387423280000e+02 }, { "Pu_229", 2.290401502120000e+02 }, { "Pu_230", 2.300396498860000e+02 },
{ "Pu_231", 2.310411011070000e+02 }, { "Pu_232", 2.320411870970000e+02 }, { "Pu_233", 2.330429973750000e+02 }, { "Pu_234", 2.340433170760000e+02 },
{ "Pu_235", 2.350452860500000e+02 }, { "Pu_236", 2.360460579640000e+02 }, { "Pu_237", 2.370484096580000e+02 }, { "Pu_238", 2.380495598940000e+02 },
{ "Pu_239", 2.390521633810000e+02 }, { "Pu_240", 2.400538135450000e+02 }, { "Pu_241", 2.410568514560000e+02 }, { "Pu_242", 2.420587426110000e+02 },
{ "Pu_243", 2.430620030920000e+02 }, { "Pu_244", 2.440642039070000e+02 }, { "Pu_245", 2.450677471540000e+02 }, { "Pu_246", 2.460702046270000e+02 },
{ "Pu_247", 2.470740700000000e+02 }, { "Am_natural", 2.430000000000000e+02 }, { "Am_231", 2.310455600000000e+02 }, { "Am_232", 2.320465900000000e+02 },
{ "Am_233", 2.330463480000000e+02 }, { "Am_234", 2.340478090000000e+02 }, { "Am_235", 2.350479460000000e+02 }, { "Am_236", 2.360495790000000e+02 },
{ "Am_237", 2.370499960000000e+02 }, { "Am_238", 2.380519843240000e+02 }, { "Am_239", 2.390530244790000e+02 }, { "Am_240", 2.400553001790000e+02 },
{ "Am_241", 2.410568291440000e+02 }, { "Am_242", 2.420595491590000e+02 }, { "Am_243", 2.430613810800000e+02 }, { "Am_244", 2.440642848470000e+02 },
{ "Am_245", 2.450664521140000e+02 }, { "Am_246", 2.460697746190000e+02 }, { "Am_247", 2.470720930000000e+02 }, { "Am_248", 2.480757520000000e+02 },
{ "Am_249", 2.490784800000000e+02 }, { "Cm_natural", 2.470000000000000e+02 }, { "Cm_233", 2.330507712320000e+02 }, { "Cm_234", 2.340501598410000e+02 },
{ "Cm_235", 2.350514340000000e+02 }, { "Cm_236", 2.360514130000000e+02 }, { "Cm_237", 2.370529010000000e+02 }, { "Cm_238", 2.380530286970000e+02 },
{ "Cm_239", 2.390549570000000e+02 }, { "Cm_240", 2.400555295390000e+02 }, { "Cm_241", 2.410576530010000e+02 }, { "Cm_242", 2.420588358240000e+02 },
{ "Cm_243", 2.430613891140000e+02 }, { "Cm_244", 2.440627525780000e+02 }, { "Cm_245", 2.450654912490000e+02 }, { "Cm_246", 2.460672236620000e+02 },
{ "Cm_247", 2.470703535400000e+02 }, { "Cm_248", 2.480723485080000e+02 }, { "Cm_249", 2.490759534130000e+02 }, { "Cm_250", 2.500783569590000e+02 },
{ "Cm_251", 2.510822846050000e+02 }, { "Cm_252", 2.520848700000000e+02 }, { "Bk_natural", 2.470000000000000e+02 }, { "Bk_235", 2.350565800000000e+02 },
{ "Bk_236", 2.360573300000000e+02 }, { "Bk_237", 2.370570030000000e+02 }, { "Bk_238", 2.380582810000000e+02 }, { "Bk_239", 2.390582790000000e+02 },
{ "Bk_240", 2.400597590000000e+02 }, { "Bk_241", 2.410602300000000e+02 }, { "Bk_242", 2.420619810000000e+02 }, { "Bk_243", 2.430630075720000e+02 },
{ "Bk_244", 2.440651807740000e+02 }, { "Bk_245", 2.450663616160000e+02 }, { "Bk_246", 2.460686729470000e+02 }, { "Bk_247", 2.470703070800000e+02 },
{ "Bk_248", 2.480730860000000e+02 }, { "Bk_249", 2.490749866570000e+02 }, { "Bk_250", 2.500783165200000e+02 }, { "Bk_251", 2.510807601720000e+02 },
{ "Bk_252", 2.520843100000000e+02 }, { "Bk_253", 2.530868800000000e+02 }, { "Bk_254", 2.540906000000000e+02 }, { "Cf_natural", 2.510000000000000e+02 },
{ "Cf_237", 2.370620700000000e+02 }, { "Cf_238", 2.380614100000000e+02 }, { "Cf_239", 2.390624220000000e+02 }, { "Cf_240", 2.400623020000000e+02 },
{ "Cf_241", 2.410637260000000e+02 }, { "Cf_242", 2.420637015520000e+02 }, { "Cf_243", 2.430654270000000e+02 }, { "Cf_244", 2.440660006890000e+02 },
{ "Cf_245", 2.450680486120000e+02 }, { "Cf_246", 2.460688053090000e+02 }, { "Cf_247", 2.470710005890000e+02 }, { "Cf_248", 2.480721848610000e+02 },
{ "Cf_249", 2.490748535370000e+02 }, { "Cf_250", 2.500764060660000e+02 }, { "Cf_251", 2.510795867880000e+02 }, { "Cf_252", 2.520816258460000e+02 },
{ "Cf_253", 2.530851331450000e+02 }, { "Cf_254", 2.540873229090000e+02 }, { "Cf_255", 2.550910460000000e+02 }, { "Cf_256", 2.560934400000000e+02 },
{ "Es_natural", 2.520000000000000e+02 }, { "Es_120", 1.175000000000000e+02 }, { "Es_121", 1.165460000000000e+02 }, { "Es_122", 1.185440000000000e+02 },
{ "Es_125", 1.175000000000000e+02 }, { "Es_240", 2.400689200000000e+02 }, { "Es_241", 2.410685380000000e+02 }, { "Es_242", 2.420697450000000e+02 },
{ "Es_243", 2.430695480000000e+02 }, { "Es_244", 2.440708830000000e+02 }, { "Es_245", 2.450713240000000e+02 }, { "Es_246", 2.460728960000000e+02 },
{ "Es_247", 2.470736560000000e+02 }, { "Es_248", 2.480754710000000e+02 }, { "Es_249", 2.490764110000000e+02 }, { "Es_250", 2.500786120000000e+02 },
{ "Es_251", 2.510799921420000e+02 }, { "Es_252", 2.520829785120000e+02 }, { "Es_253", 2.530848246970000e+02 }, { "Es_254", 2.540880220210000e+02 },
{ "Es_255", 2.550902731220000e+02 }, { "Es_256", 2.560935980000000e+02 }, { "Es_257", 2.570959790000000e+02 }, { "Es_258", 2.580995200000000e+02 },
{ "Fm_natural", 2.570000000000000e+02 }, { "Fm_242", 2.420734300000000e+02 }, { "Fm_243", 2.430743530000000e+02 }, { "Fm_244", 2.440740840000000e+02 },
{ "Fm_245", 2.450753850000000e+02 }, { "Fm_246", 2.460752990230000e+02 }, { "Fm_247", 2.470768470000000e+02 }, { "Fm_248", 2.480771947140000e+02 },
{ "Fm_249", 2.490790340000000e+02 }, { "Fm_250", 2.500795212640000e+02 }, { "Fm_251", 2.510815750170000e+02 }, { "Fm_252", 2.520824668550000e+02 },
{ "Fm_253", 2.530851852360000e+02 }, { "Fm_254", 2.540868542200000e+02 }, { "Fm_255", 2.550899622020000e+02 }, { "Fm_256", 2.560917731170000e+02 },
{ "Fm_257", 2.570951047240000e+02 }, { "Fm_258", 2.580970760000000e+02 }, { "Fm_259", 2.591005950000000e+02 }, { "Fm_260", 2.601026780000000e+02 },
{ "Md_natural", 2.580000000000000e+02 }, { "Md_245", 2.450808290000000e+02 }, { "Md_246", 2.460818860000000e+02 }, { "Md_247", 2.470816350000000e+02 },
{ "Md_248", 2.480828230000000e+02 }, { "Md_249", 2.490830130000000e+02 }, { "Md_250", 2.500844200000000e+02 }, { "Md_251", 2.510848390000000e+02 },
{ "Md_252", 2.520865600000000e+02 }, { "Md_253", 2.530872800000000e+02 }, { "Md_254", 2.540896560000000e+02 }, { "Md_255", 2.550910827050000e+02 },
{ "Md_256", 2.560940590250000e+02 }, { "Md_257", 2.570955413680000e+02 }, { "Md_258", 2.580984313190000e+02 }, { "Md_259", 2.591005090000000e+02 },
{ "Md_260", 2.601036520000000e+02 }, { "Md_261", 2.611057210000000e+02 }, { "Md_262", 2.621088650000000e+02 }, { "No_natural", 2.590000000000000e+02 },
{ "No_248", 2.480865960000000e+02 }, { "No_249", 2.490878330000000e+02 }, { "No_250", 2.500875100000000e+02 }, { "No_251", 2.510890120000000e+02 },
{ "No_252", 2.520889765210000e+02 }, { "No_253", 2.530906780000000e+02 }, { "No_254", 2.540909552530000e+02 }, { "No_255", 2.550932411310000e+02 },
{ "No_256", 2.560942826660000e+02 }, { "No_257", 2.570968771900000e+02 }, { "No_258", 2.580982070000000e+02 }, { "No_259", 2.591010310000000e+02 },
{ "No_260", 2.601026430000000e+02 }, { "No_261", 2.611057490000000e+02 }, { "No_262", 2.621073010000000e+02 }, { "No_263", 2.631105520000000e+02 },
{ "No_264", 2.641123450000000e+02 }, { "Lr_natural", 2.600000000000000e+02 }, { "Lr_251", 2.510943600000000e+02 }, { "Lr_252", 2.520953710000000e+02 },
{ "Lr_253", 2.530952100000000e+02 }, { "Lr_254", 2.540964540000000e+02 }, { "Lr_255", 2.550966810000000e+02 }, { "Lr_256", 2.560986290000000e+02 },
{ "Lr_257", 2.570995550000000e+02 }, { "Lr_258", 2.581018140000000e+02 }, { "Lr_259", 2.591029010000000e+02 }, { "Lr_260", 2.601055040000000e+02 },
{ "Lr_261", 2.611068830000000e+02 }, { "Lr_262", 2.621096340000000e+02 }, { "Lr_263", 2.631112930000000e+02 }, { "Lr_264", 2.641140380000000e+02 },
{ "Lr_265", 2.651158390000000e+02 }, { "Lr_266", 2.661193050000000e+02 }, { "Rf_natural", 2.610000000000000e+02 }, { "Rf_253", 2.531006890000000e+02 },
{ "Rf_254", 2.541001840000000e+02 }, { "Rf_255", 2.551013400000000e+02 }, { "Rf_256", 2.561011661940000e+02 }, { "Rf_257", 2.571029900000000e+02 },
{ "Rf_258", 2.581034890000000e+02 }, { "Rf_259", 2.591056370000000e+02 }, { "Rf_260", 2.601064400000000e+02 }, { "Rf_261", 2.611087665560000e+02 },
{ "Rf_262", 2.621099250000000e+02 }, { "Rf_263", 2.631125470000000e+02 }, { "Rf_264", 2.641139850000000e+02 }, { "Rf_265", 2.651167040000000e+02 },
{ "Rf_266", 2.661179560000000e+02 }, { "Rf_267", 2.671215290000000e+02 }, { "Rf_268", 2.681236440000000e+02 }, { "Db_natural", 2.620000000000000e+02 },
{ "Db_255", 2.551073980000000e+02 }, { "Db_256", 2.561081270000000e+02 }, { "Db_257", 2.571077220000000e+02 }, { "Db_258", 2.581092310000000e+02 },
{ "Db_259", 2.591096100000000e+02 }, { "Db_260", 2.601113000000000e+02 }, { "Db_261", 2.611120560000000e+02 }, { "Db_262", 2.621140840000000e+02 },
{ "Db_263", 2.631149880000000e+02 }, { "Db_264", 2.641174040000000e+02 }, { "Db_265", 2.651186010000000e+02 }, { "Db_266", 2.661210290000000e+02 },
{ "Db_267", 2.671223770000000e+02 }, { "Db_268", 2.681254450000000e+02 }, { "Db_269", 2.691274600000000e+02 }, { "Db_270", 2.701307120000000e+02 },
{ "Sg_natural", 2.630000000000000e+02 }, { "Sg_258", 2.581131680000000e+02 }, { "Sg_259", 2.591145000000000e+02 }, { "Sg_260", 2.601144220710000e+02 },
{ "Sg_261", 2.611161170000000e+02 }, { "Sg_262", 2.621163980000000e+02 }, { "Sg_263", 2.631183220000000e+02 }, { "Sg_264", 2.641189310000000e+02 },
{ "Sg_265", 2.651211146930000e+02 }, { "Sg_266", 2.661220650000000e+02 }, { "Sg_267", 2.671244250000000e+02 }, { "Sg_268", 2.681256060000000e+02 },
{ "Sg_269", 2.691287550000000e+02 }, { "Sg_270", 2.701303290000000e+02 }, { "Sg_271", 2.711334720000000e+02 }, { "Sg_272", 2.721351580000000e+02 },
{ "Sg_273", 2.731382200000000e+02 }, { "Bh_260", 2.601219700000000e+02 }, { "Bh_261", 2.611216640000000e+02 }, { "Bh_262", 2.621228920000000e+02 },
{ "Bh_263", 2.631230350000000e+02 }, { "Bh_264", 2.641246040000000e+02 }, { "Bh_265", 2.651251470000000e+02 }, { "Bh_266", 2.661269420000000e+02 },
{ "Bh_267", 2.671276500000000e+02 }, { "Bh_268", 2.681297550000000e+02 }, { "Bh_269", 2.691306940000000e+02 }, { "Bh_270", 2.701336160000000e+02 },
{ "Bh_271", 2.711351790000000e+02 }, { "Bh_272", 2.721380320000000e+02 }, { "Bh_273", 2.731396180000000e+02 }, { "Bh_274", 2.741424400000000e+02 },
{ "Bh_275", 2.751442500000000e+02 }, { "Hs_263", 2.631285580000000e+02 }, { "Hs_264", 2.641283948850000e+02 }, { "Hs_265", 2.651300850000000e+02 },
{ "Hs_266", 2.661300970000000e+02 }, { "Hs_267", 2.671317890000000e+02 }, { "Hs_268", 2.681321620000000e+02 }, { "Hs_269", 2.691340560000000e+02 },
{ "Hs_270", 2.701346500000000e+02 }, { "Hs_271", 2.711376570000000e+02 }, { "Hs_272", 2.721390520000000e+02 }, { "Hs_273", 2.731419860000000e+02 },
{ "Hs_274", 2.741431310000000e+02 }, { "Hs_275", 2.751459520000000e+02 }, { "Hs_276", 2.761472080000000e+02 }, { "Hs_277", 2.771498410000000e+02 },
{ "Mt_265", 2.651361510000000e+02 }, { "Mt_266", 2.661372990000000e+02 }, { "Mt_267", 2.671373070000000e+02 }, { "Mt_268", 2.681387280000000e+02 },
{ "Mt_269", 2.691390550000000e+02 }, { "Mt_270", 2.701406570000000e+02 }, { "Mt_271", 2.711411390000000e+02 }, { "Mt_272", 2.721437380000000e+02 },
{ "Mt_273", 2.731449130000000e+02 }, { "Mt_274", 2.741474920000000e+02 }, { "Mt_275", 2.751486470000000e+02 }, { "Mt_276", 2.761511560000000e+02 },
{ "Mt_277", 2.771524200000000e+02 }, { "Mt_278", 2.781548120000000e+02 }, { "Mt_279", 2.791561930000000e+02 }, { "Uun_267", 2.671443410000000e+02 },
{ "Uun_268", 2.681437950000000e+02 }, { "Uun_269", 2.691451240000000e+02 }, { "Uun_270", 2.701447200000000e+02 }, { "Uun_271", 2.711460620000000e+02 },
{ "Uun_272", 2.721463170000000e+02 }, { "Uun_273", 2.731488630000000e+02 }, { "Uun_274", 2.741494920000000e+02 }, { "Uun_275", 2.751521760000000e+02 },
{ "Uun_276", 2.761530340000000e+02 }, { "Uun_277", 2.771556470000000e+02 }, { "Uun_278", 2.781564690000000e+02 }, { "Uun_279", 2.791588610000000e+02 },
{ "Uun_280", 2.801597950000000e+02 }, { "Uun_281", 2.811620610000000e+02 }, { "Uuu_272", 2.721536150000000e+02 }, { "Uuu_273", 2.731536820000000e+02 },
{ "Uuu_274", 2.741557130000000e+02 }, { "Uuu_275", 2.751561420000000e+02 }, { "Uuu_276", 2.761584930000000e+02 }, { "Uuu_277", 2.771595190000000e+02 },
{ "Uuu_278", 2.781616040000000e+02 }, { "Uuu_279", 2.791624680000000e+02 }, { "Uuu_280", 2.801644730000000e+02 }, { "Uuu_281", 2.811653720000000e+02 },
{ "Uuu_282", 2.821674860000000e+02 }, { "Uuu_283", 2.831684150000000e+02 }, { "Uub_277", 2.771639430000000e+02 }, { "Uub_278", 2.781643120000000e+02 },
{ "Uub_279", 2.791665460000000e+02 }, { "Uub_280", 2.801670390000000e+02 }, { "Uub_281", 2.811692860000000e+02 }, { "Uub_282", 2.821697650000000e+02 },
{ "Uub_283", 2.831717920000000e+02 }, { "Uub_284", 2.841723840000000e+02 }, { "Uub_285", 2.851741050000000e+02 }, { "_283", 2.831764510000000e+02 },
{ "_284", 2.841780800000000e+02 }, { "_285", 2.851787320000000e+02 }, { "_286", 2.861804810000000e+02 }, { "_287", 2.871810450000000e+02 },
{ "Uuq_285", 2.851836980000000e+02 }, { "Uuq_286", 2.861838550000000e+02 }, { "Uuq_287", 2.871855990000000e+02 }, { "Uuq_288", 2.881856890000000e+02 },
{ "Uuq_289", 2.891872790000000e+02 }, { "_287", 2.871911860000000e+02 }, { "_288", 2.881924920000000e+02 }, { "_289", 2.891927150000000e+02 },
{ "_290", 2.901941410000000e+02 }, { "_291", 2.911943840000000e+02 }, { "Uuh_289", 2.891988620000000e+02 }, { "Uuh_290", 2.901985900000000e+02 },
{ "Uuh_291", 2.912000110000000e+02 }, { "Uuh_292", 2.921997860000000e+02 }, { "_291", 2.912065640000000e+02 }, { "_292", 2.922075490000000e+02 },
{ "Uuo_293", 2.932146700000000e+02 } };
/*
***************************************************************
*/
double tpia_particleMass_AMU( statusMessageReporting *smr, const char *name ) {
int i, n = sizeof( ZAMasses ) / sizeof( ZAMasses[0] );
double mass = -1.;
//TK modified
std::string target(name);
for( i = 0; i < n; i++ ) {
//TK modified
//if( !strcmp( ZAMasses[i].symbol, name ) ) {
if( ZAMasses[i].symbol == target ) {
mass = ZAMasses[i].mass;
break;
}
}
if( mass == -1. ) smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "particle %s not in mass table", name );
return( mass );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,482 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include "Randomize.hh"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#include <string>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
struct ZSymbol {
int Z;
//char *symbol;
std::string symbol;
};
static struct ZSymbol ZSymbols[] = { { 0, "n" }, { 1, "H" }, { 2, "He" }, { 3, "Li" }, { 4, "Be" }, { 5, "B" }, { 6, "C" },
{ 7, "N" }, { 8, "O" }, { 9, "F" }, { 10, "Ne" }, { 11, "Na" }, { 12, "Mg" }, { 13, "Al" }, { 14, "Si" }, { 15, "P" },
{ 16, "S" }, { 17, "Cl" }, { 18, "Ar" }, { 19, "K" }, { 20, "Ca" }, { 21, "Sc" }, { 22, "Ti" }, { 23, "V" }, { 24, "Cr" },
{ 25, "Mn" }, { 26, "Fe" }, { 27, "Co" }, { 28, "Ni" }, { 29, "Cu" }, { 30, "Zn" }, { 31, "Ga" }, { 32, "Ge" }, { 33, "As" },
{ 34, "Se" }, { 35, "Br" }, { 36, "Kr" }, { 37, "Rb" }, { 38, "Sr" }, { 39, "Y" }, { 40, "Zr" }, { 41, "Nb" }, { 42, "Mo" },
{ 43, "Tc" }, { 44, "Ru" }, { 45, "Rh" }, { 46, "Pd" }, { 47, "Ag" }, { 48, "Cd" }, { 49, "In" }, { 50, "Sn" }, { 51, "Sb" },
{ 52, "Te" }, { 53, "I" }, { 54, "Xe" }, { 55, "Cs" }, { 56, "Ba" }, { 57, "La" }, { 58, "Ce" }, { 59, "Pr" }, { 60, "Nd" },
{ 61, "Pm" }, { 62, "Sm" }, { 63, "Eu" }, { 64, "Gd" }, { 65, "Tb" }, { 66, "Dy" }, { 67, "Ho" }, { 68, "Er" }, { 69, "Tm" },
{ 70, "Yb" }, { 71, "Lu" }, { 72, "Hf" }, { 73, "Ta" }, { 74, "W" }, { 75, "Re" }, { 76, "Os" }, { 77, "Ir" }, { 78, "Pt" },
{ 79, "Au" }, { 80, "Hg" }, { 81, "Tl" }, { 82, "Pb" }, { 83, "Bi" }, { 84, "Po" }, { 85, "At" }, { 86, "Rn" }, { 87, "Fr" },
{ 88, "Ra" }, { 89, "Ac" }, { 90, "Th" }, { 91, "Pa" }, { 92, "U" }, { 93, "Np" }, { 94, "Pu" }, { 95, "Am" }, { 96, "Cm" },
{ 97, "Bk" }, { 98, "Cf" }, { 99, "Es" }, { 100, "Fm" }, { 101, "Md" }, { 102, "No" }, { 103, "Lr" }, { 104, "Rf" }, { 105, "Db" },
{ 106, "Sg" }, { 107, "Bh" }, { 108, "Hs" }, { 109, "Mt" } };
/*
************************************************************
*/
int tpia_misc_NumberOfZSymbols( void ) {
return( sizeof( ZSymbols ) / sizeof( struct ZSymbol ) );
}
/*
************************************************************
*/
const char *tpia_misc_ZToSymbol( int iZ ) {
if( ( iZ < 0 ) || ( iZ >= tpia_misc_NumberOfZSymbols( ) ) ) return( NULL );
//return( ZSymbols[iZ].symbol );
return( ZSymbols[iZ].symbol.c_str() );
}
/*
************************************************************
*/
int tpia_misc_symbolToZ( const char *Z ) {
int i, n = tpia_misc_NumberOfZSymbols( );
for( i = 0; i < n; i++ ) {
//if( !strcmp( Z, ZSymbols[i].symbol ) ) return( ZSymbols[i].Z );
if( !strcmp( Z, ZSymbols[i].symbol.c_str() ) ) return( ZSymbols[i].Z );
}
return( -1 );
}
/*
************************************************************
*/
int tpia_miscNameToZAm( statusMessageReporting *smr, const char *name, int *Z, int *A, int *m ) {
int i, n;
const char *p;
char s[1024] = "", *q, *e; /* Note 1) routine will fail when parts of a particle name can be longer than 1024. */
n = sizeof( s ) - 1;
*Z = *A = *m = 0;
if( !strncmp( "FissionProduct", name, 14 ) ) {
*Z = 99;
*A = 120;
return( 0 );
}
if( !strcmp( "gamma", name ) ) return( 0 );
for( p = name, q = s, i = 0; ( *p != '_' ) && ( i != n ); p++, q++, i++ ) *q = *p;
if( i == n ) { /* See note 1 above. */
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Failed to find first '_' in particle name %s", name ); }
else {
*q = 0;
if( ( *Z = tpia_misc_symbolToZ( s ) ) < 0 ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Particle %s's symbol = '%s' not found", name, s ); }
else { /* Getting here implies that *p == '_'. */
for( p++, q = s; ( *p != '_' ) && ( *p != 0 ) && ( i != n ); p++, q++, i++ ) *q = *p;
if( i == n ) { /* See note 1 above. */
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Failed to find second '_' in particle name %s", name ); }
else {
*q = 0;
if( strcmp( s, "natural" ) == 0 ) {
e = s;
while( *e ) e++; }
else {
*A = (int) strtol( s, &e, 10 );
}
if( *e != 0 ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Failed to convert A to integer in particle name %s", name ); }
else { /* Getting here implies that *p == '_' or 0. */
*m = 0;
if( *p == '_' ) {
p++;
if( *p != 'm' ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Particle name %s missing meta-stable label 'm'", name ); }
else {
p++;
*m = (int) strtol( p, &e, 10 );
if( *e != 0 ) smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Failed to convert m to integer in particle name %s", name );
}
}
}
}
}
}
return( !smr_isOk( smr ) );
}
/*
************************************************************
*/
char *tpia_misc_pointerToAttributeIfAllOk( statusMessageReporting *smr, xData_element *element, const char *path, int required,
xData_attributionList *attributes, const char *name, const char *file, int line ) {
char *value;
if( !smr_isOk( smr ) ) return( NULL );
if( ( value = xData_getAttributesValue( attributes, name ) ) == NULL ) {
if( required ) {
if( element != NULL ) {
tpia_misc_setMessageError_Element( smr, NULL, element, file, line, 1, "element does not have attribute named %s", name ); }
else {
smr_setMessageError( smr, NULL, file, line, 1, "element does not have attribute named %s for file = %d", name, path );
}
}
}
return( value );
}
/*
************************************************************
*/
int tpia_misc_setMessageError_Element( statusMessageReporting *smr, void *userInterface, xData_element *element, const char *file, int line, int code,
const char *fmt, ... ) {
int status = 0;
va_list args;
char *msg;
va_start( args, fmt );
msg = smr_vallocateFormatMessage( fmt, &args );
va_end( args );
if( msg == NULL ) {
status = 1;
va_start( args, fmt );
smr_vsetMessageError( smr, userInterface, file, line, code, fmt, &args );
va_end( args ); }
else {
status = smr_setMessageError( smr, userInterface, file, line, code, "%s for element %s at line %d column %d", msg, element->fullName,
(int) element->docInfo.line, (int) element->docInfo.column );
free( msg );
}
return( status );
}
/*
************************************************************
*/
xData_Int tpia_misc_binarySearch( xData_Int n, double *ds, double d ) {
xData_Int imin = 0, imid, imax = n - 1;
if( d < ds[0] ) return( -2 );
if( d > ds[n-1] ) return( -1 );
while( 1 ) {
imid = ( imin + imax ) >> 1;
if( imid == imin ) break;
if( d < ds[imid] ) {
imax = imid; }
else {
imin = imid;
}
}
return( imin );
}
/*
************************************************************
*/
double *tpia_misc_get2dx_y_data( statusMessageReporting *smr, xData_element *element, xData_Int *length ) {
xData_element *xDataElement;
double *d = NULL;
xData_Int length_;
xData_addToAccessed( smr, element, 1 );
//if( ( xDataElement = xData_getOneElementByTagName( smr, element, "xData", 1 ) ) != NULL ) {
if( ( xDataElement = xData_getOneElementByTagName( smr, element, (char*)"xData", 1 ) ) != NULL ) {
xData_addToAccessed( smr, xDataElement, 1 );
if( xData_is_2d_xy( smr, &(xDataElement->xDataTypeInfo), 1 ) ) {
d = xData_2d_xy_allocateCopyData( smr, xDataElement, &length_ );
*length = (xData_Int) length_;
}
}
return( d );
}
/*
************************************************************
*/
double *tpia_misc_get2dxindex_y_data( statusMessageReporting *smr, xData_element *element, xData_Int *start, xData_Int *end, double *xValues ) {
xData_element *xDataElement;
double *d = NULL;
xData_addToAccessed( smr, element, 1 );
//if( ( xDataElement = xData_getOneElementByTagName( smr, element, "xData", 1 ) ) != NULL ) {
if( ( xDataElement = xData_getOneElementByTagName( smr, element, (char*) "xData", 1 ) ) != NULL ) {
xData_addToAccessed( smr, xDataElement, 1 );
if( xData_is_2d_xindex_y( smr, &(xDataElement->xDataTypeInfo), 1 ) ) {
if( start != NULL ) *start = xDataElement->xDataTypeInfo.start;
if( end != NULL ) *end = xDataElement->xDataTypeInfo.end;
d = xData_2d_xindex_y_toFilledYs( smr, xDataElement, xValues );
}
}
return( d );
}
/*
************************************************************
*/
double *tpia_misc_get2d_xShared_yHistogram_data( statusMessageReporting *smr, xData_element *element, xData_Int *start, xData_Int *end, xData_Int *length ) {
xData_Int i;
xData_element *xDataElement;
double *d = NULL;
xData_addToAccessed( smr, element, 1 );
//if( ( xDataElement = xData_getOneElementByTagName( smr, element, "xData", 1 ) ) != NULL ) {
if( ( xDataElement = xData_getOneElementByTagName( smr, element, (char*) "xData", 1 ) ) != NULL ) {
xData_addToAccessed( smr, xDataElement, 1 );
if( ( d = xData_2d_xShared_yHistogram_copyData( smr, xDataElement, &i ) ) != NULL ) {
if( start != NULL ) *start = xDataElement->xDataTypeInfo.start;
if( end != NULL ) *end = xDataElement->xDataTypeInfo.end;
if( length != NULL ) *length = xDataElement->xDataTypeInfo.length;
}
}
return( d );
}
/*
************************************************************
*/
int tpia_misc_get2d_xShared_yHistogram_data_Grouped( statusMessageReporting *smr, xData_element *element, tpia_1dData *group ) {
if( ( group->data = tpia_misc_get2d_xShared_yHistogram_data( smr, element, &(group->start), &(group->end), &(group->length) ) ) == NULL ) return( 1 );
return( 0 );
}
/*
************************************************************
*/
//double tpia_misc_getPointwiseCrossSectionAtE( statusMessageReporting *smr, tpia_1dData *crossSection, double *energyGrid, xData_Int index, double e_in ) {
double tpia_misc_getPointwiseCrossSectionAtE( statusMessageReporting *, tpia_1dData *crossSection, double *energyGrid, xData_Int index, double e_in ) {
double xsec = 0.0, e1, e2;
if( ( index >= crossSection->start ) && ( index < crossSection->end ) ) {
e1 = energyGrid[index];
e2 = energyGrid[index + 1];
index -= crossSection->start;
if( e1 == e2 ) { /* Allow for future where step function may be allowed. */
xsec = 0.5 * ( crossSection->data[index] + crossSection->data[index + 1] ); }
else {
xsec = ( crossSection->data[index] * ( e2 - e_in ) + crossSection->data[index + 1] * ( e_in - e1 ) ) / ( e2 - e1 );
}
}
return( xsec );
}
/*
************************************************************
*/
tpia_EqualProbableBinSpectrum *tpia_misc_getEqualProbableBin( statusMessageReporting *smr, xData_element *parent, xData_Int *n, xData_Int *nBins ) {
xData_element *element;
xData_addToAccessed( smr, parent, 1 );
//if( ( element = xData_getOneElementByTagName( smr, parent, "equalProbableBins", 0 ) ) == NULL ) return( NULL );
if( ( element = xData_getOneElementByTagName( smr, parent, (char*) "equalProbableBins", 0 ) ) == NULL ) return( NULL );
if( xData_convertAttributeTo_xData_Int( smr, element, "nBins", nBins ) != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "missing or invalid nBins attribute" );
return( NULL );
}
return( tpia_misc_getEqualProbableBins( smr, element, "energy", *nBins, n ) );
}
/*
************************************************************
*/
tpia_EqualProbableBinSpectrum *tpia_misc_getEqualProbableBins( statusMessageReporting *smr, xData_element *parent, const char *name, xData_Int nBins,
xData_Int *n ) {
int i, j;
xData_Int index, size;
xData_elementList *list;
xData_element *element, *xData;
double *d;
tpia_EqualProbableBinSpectrum *epbs = NULL, *epb;
xData_addToAccessed( smr, parent, 1 );
list = xData_getElementsByTagNameAndSort( smr, parent, name, NULL, NULL );
if( list->n == 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, parent, __FILE__, __LINE__, 1, "bins does not contain any %s elements", name ); }
else {
*n = list->n;
size = list->n * ( sizeof( tpia_EqualProbableBinSpectrum ) + ( nBins + 1 ) * sizeof( double ) );
//if( ( epbs = xData_malloc2( smr, size, 0, "energies" ) ) != NULL ) {
if( ( epbs = (tpia_EqualProbableBinSpectrum*) xData_malloc2( smr, size, 0, "energies" ) ) != NULL ) {
d = (double *) &(epbs[list->n]);
for( i = 0, epb = epbs; i < list->n; i++, epb++ ) { /* Loop to test nBins and index are proper. */
element = list->items[i].element;
xData_addToAccessed( smr, element, 1 );
if( xData_convertAttributeTo_xData_Int( smr, element, "index", &index ) != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "missing or invalid index attribute" );
//epbs = xData_free( smr, epbs );
epbs = (tpia_EqualProbableBinSpectrum*) xData_free( smr, epbs );
break;
}
if( index != i ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "index = %lld is not incremental", index );
//epbs = xData_free( smr, epbs );
epbs = (tpia_EqualProbableBinSpectrum*) xData_free( smr, epbs );
break;
}
if( ( j = xData_convertAttributeToDouble( smr, element, "value", &(epb->value) ) ) != 0 ) {
if( j == 1 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "element does not have value attribute" ); }
else {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "failed to convert value attribute to double" );
}
//epbs = xData_free( smr, epbs );
epbs = (tpia_EqualProbableBinSpectrum*) xData_free( smr, epbs );
break;
}
if( ( xData = xData_getElements_xDataElement( smr, element ) ) == NULL ) {
//epbs = xData_free( smr, epbs );
epbs = (tpia_EqualProbableBinSpectrum*) xData_free( smr, epbs );
break;
}
xData_addToAccessed( smr, xData, 1 );
epb->index = index;
epb->nBins = nBins;
epb->bins = d;
if( xData_1d_x_copyData( smr, xData, ( nBins + 1 ) * sizeof( double ), d ) != 0 ) {
//epbs = xData_free( smr, epbs );
epbs = (tpia_EqualProbableBinSpectrum*) xData_free( smr, epbs );
break;
}
d += nBins + 1;
}
}
}
xData_freeElementList( smr, list );
return( epbs );
}
/*
************************************************************
*/
double tpia_misc_drng( double (*rng)( void * ), void *rngState ) {
double r;
if( rng != NULL ) {
r = rng( rngState ); }
else {
//r = drand48( );
r = CLHEP::HepRandom::getTheEngine()->flat();
}
return( r );
}
/*
************************************************************
*/
//int tpia_misc_sampleEqualProbableBin( statusMessageReporting *smr, tpia_decaySamplingInfo *decaySamplingInfo, double e_in, int nBins,
int tpia_misc_sampleEqualProbableBin( statusMessageReporting *, tpia_decaySamplingInfo *decaySamplingInfo, double e_in, int nBins,
tpia_EqualProbableBinSpectra *binned, double *value_ ) {
int i, j, index1, index2, method = 0;
double fE = 1., r, value1, value2, value3, P12, P23, value = -2.;
if( e_in <= binned->energies[0].value ) {
index1 = 0;
index2 = 0; }
else if( e_in >= binned->energies[binned->numberOfEs-1].value ) {
index1 = binned->numberOfEs - 1;
index2 = binned->numberOfEs - 1; }
else {
for( i = 0; i < binned->numberOfEs - 1; i++ ) {
if( e_in <= binned->energies[i].value ) break;
}
i--;
index1 = i;
index2 = i;
if( e_in != binned->energies[i].value ) {
index2++;
fE = ( e_in - binned->energies[i].value ) / ( binned->energies[i+1].value - binned->energies[i].value );
}
}
r = tpia_misc_drng( decaySamplingInfo->rng, decaySamplingInfo->rngState );
j = (int) (r * nBins);
if( j >= nBins ) j = nBins - 1;
if( j < 0 ) j = 0;
r = tpia_misc_drng( decaySamplingInfo->rng, decaySamplingInfo->rngState ); // Do not change r until after Point1 below.
if( tpia_samplingMethods_isLinear( decaySamplingInfo->samplingMethods->angular_equalProbableBinMethod ) ) {
method = 1;
if( ( ( j == 0 ) && ( r <= 0.5 ) ) || ( j == ( nBins - 1 ) && r > 0.5 ) ) method = 0;
}
if( method == 0 ) { /* Constant interpolaton. */
value1 = ( 1. - fE ) * binned->energies[index1].bins[j] + fE * binned->energies[index2].bins[j];
value2 = ( 1. - fE ) * binned->energies[index1].bins[j+1] + fE * binned->energies[index2].bins[j+1];
value = ( 1. - r ) * value1 + r * value2; }
else { /* Linear interpolation. */
if( r <= 0.5 ) j--; /* Point1: Above test insures that j is not 0 (nBins-1) if r <= 0.5 (> 0.5); */
value1 = ( 1. - fE ) * binned->energies[index1].bins[j] + fE * binned->energies[index2].bins[j];
value2 = ( 1. - fE ) * binned->energies[index1].bins[j+1] + fE * binned->energies[index2].bins[j+1];
value3 = ( 1. - fE ) * binned->energies[index1].bins[j+2] + fE * binned->energies[index2].bins[j+2];
P12 = 1. / ( value2 - value1 );
P23 = 1. / ( value3 - value2 );
r = tpia_misc_drng( decaySamplingInfo->rng, decaySamplingInfo->rngState );
if( 0.25 * ( 1.0 + 2.0 * ( value2 - value1 ) / ( value3 - value1 ) ) > r ) {
P23 = 2. / ( value3 - value1 );
value3 = value2; }
else {
P12 = 2. / ( value3 - value1 );
value1 = value2;
}
r = tpia_misc_drng( decaySamplingInfo->rng, decaySamplingInfo->rngState );
if( P23 != P12 ) r = ( -P12 + std::sqrt( P12 * P12 * ( 1. - r ) + r * P23 * P23 ) ) / ( P23 - P12 );
value = 0.5 * ( value1 + value2 + r * ( value3 - value1 ) );
}
*value_ = value;
return( 0 );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,164 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <ctype.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
/*
************************************************************
*/
tpia_multiplicity *tpia_multiplicity_create( statusMessageReporting *smr ) {
tpia_multiplicity *multiplicity;
//if( ( multiplicity = xData_malloc2( smr, sizeof( tpia_multiplicity ), 0, "multiplicity" ) ) == NULL ) return( NULL );
if( ( multiplicity = (tpia_multiplicity*) xData_malloc2( smr, sizeof( tpia_multiplicity ), 0, "multiplicity" ) ) == NULL ) return( NULL );
if( tpia_multiplicity_initialize( smr, multiplicity ) ) multiplicity = tpia_multiplicity_free( smr, multiplicity );
return( multiplicity );
}
/*
************************************************************
*/
int tpia_multiplicity_initialize( statusMessageReporting *smr, tpia_multiplicity *multiplicity ) {
memset( multiplicity, 0, sizeof( tpia_multiplicity ) );
if( tpia_frame_setFromString( smr, "", "", 0, &(multiplicity->frame) ) ) return( 1 );
return( 0 );
}
/*
************************************************************
*/
tpia_multiplicity *tpia_multiplicity_free( statusMessageReporting *smr, tpia_multiplicity *multiplicity ) {
tpia_multiplicity_release( smr, multiplicity );
xData_free( smr, multiplicity );
return( NULL );
}
/*
************************************************************
*/
int tpia_multiplicity_release( statusMessageReporting *smr, tpia_multiplicity *multiplicity ) {
//multiplicity->grouped.data = xData_free( smr, multiplicity->grouped.data );
multiplicity->grouped.data = (double*) xData_free( smr, multiplicity->grouped.data );
//multiplicity->pointwise = xData_free( smr, multiplicity->pointwise );
multiplicity->pointwise = (double*) xData_free( smr, multiplicity->pointwise );
tpia_multiplicity_initialize( smr, multiplicity );
return( 0 );
}
/*
************************************************************
*/
tpia_multiplicity *tpia_multiplicity_createGetFromElement( statusMessageReporting *smr, xData_element *multiplicityElement, int nGroups ) {
tpia_multiplicity *multiplicity;
if( ( multiplicity = tpia_multiplicity_create( smr ) ) == NULL ) return( NULL );
if( tpia_multiplicity_getFromElement( smr, multiplicityElement, multiplicity, nGroups ) != 0 ) multiplicity = tpia_multiplicity_free( smr, multiplicity );
return( multiplicity );
}
/*
************************************************************
*/
//int tpia_multiplicity_getFromElement( statusMessageReporting *smr, xData_element *multiplicityElement, tpia_multiplicity *multiplicity, int nGroups ) {
int tpia_multiplicity_getFromElement( statusMessageReporting *smr, xData_element *multiplicityElement, tpia_multiplicity *multiplicity, int ) {
const char *timeScale;
int isDelayedNeutrons;
xData_element *data;
xData_addToAccessed( smr, multiplicityElement, 1 );
if( ( tpia_frame_setFromElement( smr, multiplicityElement, 2, &(multiplicity->frame) ) ) != 0 ) return( 1 );
if( tpia_multiplicity_getTimeScaleFromElement( smr, multiplicityElement, &timeScale, &isDelayedNeutrons, &(multiplicity->timeScale) ) ) return( 1 );
for( data = xData_getFirstElement( multiplicityElement ); data != NULL; data = xData_getNextElement( data ) ) {
if( strcmp( data->name, "grouped" ) == 0 ) {
if( tpia_misc_get2d_xShared_yHistogram_data_Grouped( smr, data, &(multiplicity->grouped) ) ) return( 1 ); }
else if( strcmp( data->name, "pointwise" ) == 0 ) {
if( ( multiplicity->pointwise = tpia_misc_get2dx_y_data( smr, data, &multiplicity->numberOfPointwise ) ) == NULL ) return( 1 ); }
else {
tpia_misc_setMessageError_Element( smr, NULL, multiplicityElement, __FILE__, __LINE__, 1, "unsupported multiplicity type = %s", data->name );
return( 1 );
}
}
return( 0 );
}
/*
************************************************************
*/
int tpia_multiplicity_getTimeScaleFromElement( statusMessageReporting *smr, xData_element *element, const char **timeScale, int *isDelayedNeutrons,
double *dTimeScale ) {
const char *p;
char *e;
*isDelayedNeutrons = 0;
*dTimeScale = 0.;
*timeScale = xData_getAttributesValue( &(element->attributes), "timeScale" );
if( *timeScale != NULL ) {
if( strcmp( *timeScale, "prompt" ) ) {
if( strncmp( *timeScale, "delayed", 7 ) ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "invalid timeScale attribute = %s", *timeScale );
return( 1 ); }
else {
for( p = &((*timeScale)[7]); *p; p++ ) if( !isspace( *p ) ) break;
if( *p != '=' ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "timeScale attribute '%s' missing '='", *timeScale );
return( 1 );
}
p++;
*dTimeScale = strtod( p, &e );
if( *e != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "could not convert timeScale attribute '%s' to double",
*timeScale );
return( 1 );
}
*isDelayedNeutrons = 1;
}
}
}
return( 0 );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,199 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <tpia_target.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static int initialSizeOfList = 100, incrementalSizeOfList = 100;
static int numberOfParticles = 0, sizeOfParticleSortedList = 0;
static tpia_particle **particleSortedList = NULL;
static tpia_particle *particleList = NULL, *particleListEnd = NULL;
/*
************************************************************
*/
tpia_particle *tpia_particle_create( statusMessageReporting *smr ) {
//tpia_particle *particle = xData_malloc2( smr, sizeof( tpia_particle ), 0, "particle" );
tpia_particle *particle = (tpia_particle*) xData_malloc2( smr, sizeof( tpia_particle ), 0, "particle" );
if( particle == NULL ) return( NULL );
tpia_particle_initialize( smr, particle );
return( particle );
}
/*
************************************************************
*/
//int tpia_particle_initialize( statusMessageReporting *smr, tpia_particle *particle ) {
int tpia_particle_initialize( statusMessageReporting *, tpia_particle *particle ) {
memset( particle, 0, sizeof( tpia_particle ) );
return( 0 );
}
/*
************************************************************
*/
tpia_particle *tpia_particle_free( statusMessageReporting *smr, tpia_particle *particle ) {
int i, j;
tpia_particle **p;
for( i = 0, p = particleSortedList; i < numberOfParticles; i++, p++ ) {
if( *p == particle ) {
numberOfParticles--;
for( j = i; j < numberOfParticles; j++, p++ ) *p = p[1];
break;
}
}
if( particle == particleListEnd ) particleListEnd = particle->prior;
if( particle == particleList ) particleList = particle->next;
if( particle->prior != NULL ) particle->prior->next = particle->next;
if( particle->next != NULL ) particle->next->prior = particle->prior;
tpia_particle_release( smr, particle );
xData_free( smr, particle );
return( NULL );
}
/*
************************************************************
*/
int tpia_particle_release( statusMessageReporting *smr, tpia_particle *particle ) {
if( particle->spectralID != NULL ) tpi_spectralID_free( smr, particle->spectralID );
return( 0 );
}
/*
************************************************************
*/
int tpia_particle_freeInternalList( statusMessageReporting *smr ) {
while( particleList != NULL ) tpia_particle_free( smr, particleList );
//particleSortedList = xData_free( smr, particleSortedList );
particleSortedList = (tpia_particle**) xData_free( smr, particleSortedList );
return( 0 );
}
/*
************************************************************
*/
tpia_particle *tpia_particle_getInternalID( statusMessageReporting *smr, const char * const name ) {
int i, iCmp, min, mid, max, Z, A, m;
tpia_particle *particle;
char *EOP;
iCmp = 0;
min = mid = 0;
max = numberOfParticles;
while( min != max ) {
mid = ( min + max ) / 2;
iCmp = strcmp( name, particleSortedList[mid]->name );
if( iCmp == 0 ) return( particleSortedList[mid] );
if( iCmp < 0 ) {
max = mid - 1;
if( mid == 0 ) max = 0; }
else {
min = mid + 1;
if( min > max ) min = max;
}
}
mid = min;
if( numberOfParticles > 0 ) {
iCmp = strcmp( name, particleSortedList[mid]->name );
if( iCmp == 0 ) return( particleSortedList[mid] );
if( ( iCmp < 0 ) && ( mid != 0 ) ) {
mid--;
iCmp = strcmp( name, particleSortedList[mid]->name );
}
}
if( ( particle = tpia_particle_create( smr ) ) == NULL ) return( NULL );
if( ( particle->spectralID = tpi_spectralID_parse( smr, name, &(EOP) ) ) == NULL ) return( tpia_particle_free( smr, particle ) );
particle->name = particle->spectralID->name;
if( tpia_miscNameToZAm( smr, particle->name, &Z, &A, &m ) != 0 ) return( tpia_particle_free( smr, particle ) );
particle->prior = NULL;
particle->next = NULL;
particle->Z = Z;
particle->A = A;
particle->m = m;
particle->mass = tpia_particleMass_AMU( smr, particle->name );
if( !smr_isOk( smr ) ) return( tpia_particle_free( smr, particle ) );
particle->fullMass_MeV = tpia_AMU2MeV * particle->mass + particle->spectralID->level;
if( sizeOfParticleSortedList < ( numberOfParticles + 1 ) ) {
if( sizeOfParticleSortedList == 0 ) {
sizeOfParticleSortedList = initialSizeOfList; }
else {
sizeOfParticleSortedList += incrementalSizeOfList;
}
//if( ( particleSortedList = xData_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( tpia_particle * ),
if( ( particleSortedList = (tpia_particle** ) xData_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( tpia_particle * ),
"particleSortedList" ) ) == NULL ) return( tpia_particle_free( smr, particle ) );
}
if( particleList == NULL ) {
particle->ordinal = 0;
particleListEnd = particleList = particle; }
else {
particle->ordinal = particleListEnd->ordinal + 1;
particle->prior = particleListEnd;
particleListEnd->next = particle;
particleListEnd = particle;
}
if( ( mid != 0 ) || ( iCmp > 0 ) ) mid++;
for( i = numberOfParticles; i > mid; i-- ) particleSortedList[i] = particleSortedList[i-1];
particleSortedList[mid] = particle;
numberOfParticles++;
return( particle );
}
/*
************************************************************
*/
//int tpia_particle_printInternalSortedList( statusMessageReporting *smr ) {
int tpia_particle_printInternalSortedList( statusMessageReporting * ) {
int i;
for( i = 0; i < numberOfParticles; i++ ) printf( "%s\n", particleSortedList[i]->name );
return( 0 );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,434 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <ctype.h>
#include <gString.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static const int tpia_b_unknown = 0,
tpia_b_twoBody_angular = tpia_m_angular,
tpia_b_twoBody_formFactor = 0, /* ??? */
tpia_b_NBody_Legendre = tpia_m_Legendre,
tpia_b_NBody_angular_energy = tpia_m_angular | tpia_m_angular_energy,
tpia_b_NBody_uncorrelate_Legendre = tpia_m_angular | tpia_m_Legendre,
tpia_b_NBody_pairProduction = 0; /* ??? */
const char *tpia_productGenre_unknown = "unknown",
*tpia_productGenre_twoBody_angular = "twoBody_angular",
*tpia_productGenre_twoBody_formFactor = "twoBody_formFactor",
*tpia_productGenre_NBody_Legendre = "NBody_Legendre",
*tpia_productGenre_NBody_angular_energy = "NBody_angular_energy",
*tpia_productGenre_NBody_uncorrelate_Legendre = "NBody_uncorrelate_Legendre",
*tpia_productGenre_NBody_pairProduction = "NBody_pairProduction";
static int _tpia_product_getProductOutgoingData( statusMessageReporting *smr, xData_element *productElement, tpia_product *product );
static int _tpia_product_checkRequiredData( statusMessageReporting *smr, int allowMany, int m, xData_element *productElement, tpia_product *product, char *str );
static int _tpia_product_getDepositionEnergy( statusMessageReporting *smr, xData_element *depositionEnergy, tpia_product *product );
static int _tpia_product_getMultiplicityFromElement( statusMessageReporting *smr, xData_element *data, tpia_product *product );
/*
************************************************************
*/
tpia_product *tpia_product_create( statusMessageReporting *smr ) {
tpia_product *product;
//if( ( product = xData_malloc2( smr, sizeof( tpia_product ), 0, "product" ) ) == NULL ) return( NULL );
if( ( product = (tpia_product*) xData_malloc2( smr, sizeof( tpia_product ), 0, "product" ) ) == NULL ) return( NULL );
if( tpia_product_initialize( smr, product ) ) product = tpia_product_free( smr, product );
return( product );
}
/*
************************************************************
*/
int tpia_product_initialize( statusMessageReporting *smr, tpia_product *product ) {
memset( product, 0, sizeof( tpia_product ) );
if( tpia_angular_initialize( smr, &(product->angular) ) ) return( 1 );
if( tpia_Legendre_initialize( smr, &(product->Legendre) ) ) return( 1 );
return( 0 );
}
/*
************************************************************
*/
tpia_product *tpia_product_createGetFromElement( statusMessageReporting *smr, tpia_channel *channel, tpia_product *parentProduct,
xData_element *productElement ) {
tpia_product *product;
if( ( product = tpia_product_create( smr ) ) == NULL ) return( NULL );
if( tpia_product_getFromElement( smr, channel, parentProduct, productElement, product ) != 0 ) product = tpia_product_free( smr, product );
return( product );
}
/*
************************************************************
*/
tpia_product *tpia_product_free( statusMessageReporting *smr, tpia_product *product ) {
tpia_product_release( smr, product );
xData_free( smr, product );
return( NULL );
}
/*
************************************************************
*/
int tpia_product_release( statusMessageReporting *smr, tpia_product *product) {
tpia_multiplicity *multiplicity, *multiplicity_next;
tpia_product *decayProduct, *nextProduct;
xData_releaseAttributionList( smr, &(product->attributes) );
//product->depositionEnergyGrouped.data = xData_free( smr, product->depositionEnergyGrouped.data );
product->depositionEnergyGrouped.data = (double*) xData_free( smr, product->depositionEnergyGrouped.data );
if( product->multiplicityVsEnergy != NULL ) tpia_multiplicity_free( smr, product->multiplicityVsEnergy );
for( multiplicity = product->delayedNeutronMultiplicityVsEnergy; multiplicity != NULL; multiplicity = multiplicity_next ) {
multiplicity_next = multiplicity->next;
tpia_multiplicity_free( smr, multiplicity );
}
tpia_angular_release( smr, &(product->angular) );
tpia_Legendre_release( smr, &(product->Legendre ) );
tpia_angularEnergy_release( smr, &(product->angularEnergy) );
for( decayProduct = product->decayChannel.products; decayProduct != NULL; decayProduct = nextProduct ) {
nextProduct = decayProduct->next;
tpia_product_free( smr, decayProduct );
}
product->decayChannel.numberOfProducts = 0;
product->decayChannel.products = NULL;
return( 0 );
}
/*
************************************************************
*/
int tpia_product_getFromElement( statusMessageReporting *smr, tpia_channel *channel, tpia_product *parentProduct, xData_element *productElement,
tpia_product *product ) {
char const *productGenre;
char *name, *multiplicity, *e;
xData_addToAccessed( smr, productElement, 1 );
product->channel = channel;
product->parentProduct = parentProduct;
if( xData_copyAttributionList( smr, &(product->attributes), &(productElement->attributes) ) != 0 ) return( 0 );
name = tpia_misc_pointerToAttributeIfAllOk2( smr, productElement, 1, &(product->attributes), "particle" );
if( name != NULL ) {
product->productID = tpia_particle_getInternalID( smr, name );
multiplicity = tpia_misc_pointerToAttributeIfAllOk2( smr, productElement, 1, &(product->attributes), "multiplicity" );
if( multiplicity != NULL ) {
if( strcmp( multiplicity, "energyDependent" ) && strcmp( multiplicity, "partialProduction" ) ) { /* Must be an integer. */
product->multiplicity = strtol( multiplicity, &e, 10 );
while( isspace( *e ) ) e++;
if( *e != 0 ) tpia_misc_setMessageError_Element( smr, NULL, productElement, __FILE__, __LINE__, 1, "bad multiplicity = %s", multiplicity );
}
}
}
if( ( productGenre = tpia_misc_pointerToAttributeIfAllOk2( smr, productElement, 1, &(product->attributes), "genre" ) ) != NULL ) {
if( strcmp( productGenre, tpia_productGenre_unknown ) == 0 ) {
product->b_dataRequired = 0;
product->genre = tpia_productGenre_unknown; }
else if( strcmp( productGenre, tpia_productGenre_twoBody_angular ) == 0 ) {
product->b_dataRequired = tpia_b_twoBody_angular;
product->genre = tpia_productGenre_twoBody_angular; }
else if( strcmp( productGenre, tpia_productGenre_twoBody_formFactor ) == 0 ) {
product->b_dataRequired = tpia_b_twoBody_formFactor;
product->genre = tpia_productGenre_twoBody_formFactor; }
else if( strcmp( productGenre, tpia_productGenre_NBody_Legendre ) == 0 ) {
product->b_dataRequired = tpia_b_NBody_Legendre;
product->genre = tpia_productGenre_NBody_Legendre; }
else if( strcmp( productGenre, tpia_productGenre_NBody_angular_energy ) == 0 ) {
product->b_dataRequired = tpia_b_NBody_angular_energy;
product->genre = tpia_productGenre_NBody_angular_energy; }
else if( strcmp( productGenre, tpia_productGenre_NBody_uncorrelate_Legendre ) == 0 ) {
product->b_dataRequired = tpia_b_NBody_uncorrelate_Legendre;
product->genre = tpia_productGenre_NBody_uncorrelate_Legendre; }
else if( strcmp( productGenre, tpia_productGenre_NBody_pairProduction ) == 0 ) {
product->b_dataRequired = tpia_b_NBody_pairProduction;
product->genre = tpia_productGenre_NBody_pairProduction; }
else {
tpia_misc_setMessageError_Element( smr, NULL, productElement, __FILE__, __LINE__, 1, "unsupported product genre = %s", productGenre );
}
if( smr_isOk( smr ) ) _tpia_product_getProductOutgoingData( smr, productElement, product );
}
return( !smr_isOk( smr ) );
}
/*
************************************************************
*/
static int _tpia_product_getProductOutgoingData( statusMessageReporting *smr, xData_element *productElement, tpia_product *product ) {
xData_element *data;
int allowMany = 0;
for( data = xData_getFirstElement( productElement ); data != NULL; data = xData_getNextElement( data ) ) {
if( strcmp( data->name, "depositionEnergy" ) == 0 ) {
//if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_depositionEnergy, productElement, product, "deposition energy" ) ) return( 1 );
if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_depositionEnergy, productElement, product, (char*)"deposition energy" ) ) return( 1 );
if( _tpia_product_getDepositionEnergy( smr, data, product ) != 0 ) return( 1 ); }
else if( strcmp( data->name, "multiplicity" ) == 0 ) {
allowMany = ( product->channel->fission != NULL ) && ( strcmp( product->productID->name, "n_1" ) == 0 );
//if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_multiplicity, productElement, product, "multiplicity" ) ) return( 1 );
if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_multiplicity, productElement, product, (char*) "multiplicity" ) ) return( 1 );
if( _tpia_product_getMultiplicityFromElement( smr, data, product ) != 0 ) return( 1 ); }
else if( strcmp( data->name, "angular" ) == 0 ) {
//if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_angular, productElement, product, "angular" ) ) return( 1 );
if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_angular, productElement, product, (char*) "angular" ) ) return( 1 );
if( tpia_angular_getFromElement( smr, data, &(product->angular) ) != 0 ) return( 1 ); }
else if( strcmp( data->name, "Legendre" ) == 0 ) {
//if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_Legendre, productElement, product, "Legendre" ) ) return( 1 );
if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_Legendre, productElement, product, (char*) "Legendre" ) ) return( 1 );
if( tpia_Legendre_getFromElement( smr, data, &(product->Legendre) ) != 0 ) return( 1 ); }
else if( strcmp( data->name, "angularEnergy" ) == 0 ) {
if( _tpia_product_checkRequiredData( smr, allowMany, tpia_m_angular_energy, productElement, product, (char*) "angularEnergy" ) ) return( 1 );
if( tpia_angularEnergy_getFromElement( smr, data, &(product->angularEnergy) ) != 0 ) return( 1 ); }
else if( strcmp( data->name, "decayChannel" ) == 0 ) {
xData_addToAccessed( smr, data, 1 );
if( tpia_product_getDecayChannelFromElement( smr, data, product->channel, product, &(product->decayChannel.products) ) ) return( 1 ); }
else {
printf( " %s\n", data->name );
}
}
if( ( product->b_dataPresent >> tpia_m_commonShift ) != ( product->b_dataRequired >> tpia_m_commonShift ) ) {
gString gStr;
int missing = ~product->b_dataPresent & product->b_dataRequired;
char const *str = "";
if( gString_initialize( NULL, &gStr, 100, 100 ) == 0 ) {
if( missing & tpia_m_angular ) gString_addTo( NULL, &gStr, "angular " );
if( missing & tpia_m_formFactor ) gString_addTo( NULL, &gStr, "formFactor " );
if( missing & tpia_m_Legendre ) gString_addTo( NULL, &gStr, "Legendre " );
if( missing & tpia_m_angular_energy ) gString_addTo( NULL, &gStr, "angular_energy " );
str = gString_string( NULL, &gStr );
}
tpia_misc_setMessageError_Element( smr, NULL, productElement, __FILE__, __LINE__, 1, "missing data %s for product %s", str,
product->productID->name );
gString_release( NULL, &gStr );
return( 1 );
}
return( 0 );
}
/*
************************************************************
*/
static int _tpia_product_checkRequiredData(statusMessageReporting *smr, int allowMany, int m, xData_element *productElement, tpia_product *product, char *str) {
if( !allowMany && ( product->b_dataPresent & m ) ) {
tpia_misc_setMessageError_Element( smr, NULL, productElement, __FILE__, __LINE__, 1, "multiple %s", str );
return( 1 );
}
if( ( m & ( tpia_m_depositionEnergy | tpia_m_multiplicity | tpia_m_decayChannel ) ) == 0 ) {
if( ( product->b_dataRequired & m ) == 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, productElement, __FILE__, __LINE__, 1, "extra product data %s", str );
return( 1 );
}
}
product->b_dataPresent += m;
return( 0 );
}
/*
************************************************************
*/
int tpia_product_getDecayChannelFromElement( statusMessageReporting *smr, xData_element *parentElement, tpia_channel *channel, tpia_product *parentProduct,
tpia_product **priorProductNext ) {
xData_elementList *list;
tpia_product *product;
int i, status = 0;
list = xData_getElementsByTagName( smr, parentElement, "product" );
for( i = 0; i < list->n; i++ ) {
if( ( product = tpia_product_createGetFromElement( smr, channel, parentProduct, list->items[i].element ) ) == NULL ) {
status = 1;
break;
}
if( parentProduct == NULL ) {
channel->decayChannel.m1_fullMass_MeV = channel->target->projectileID->fullMass_MeV;
channel->decayChannel.m2_fullMass_MeV = channel->target->targetID->fullMass_MeV;
channel->decayChannel.numberOfProducts++; }
else {
channel->decayChannel.m1_fullMass_MeV = parentProduct->productID->fullMass_MeV;
channel->decayChannel.m2_fullMass_MeV = 0.;
parentProduct->decayChannel.numberOfProducts++;
}
*priorProductNext = product;
priorProductNext = &(product->next);
}
xData_freeElementList( smr, list );
return( status );
}
/*
************************************************************
*/
static int _tpia_product_getDepositionEnergy( statusMessageReporting *smr, xData_element *depositionEnergy, tpia_product *product ) {
xData_element *data;
xData_addToAccessed( smr, depositionEnergy, 1 );
for( data = xData_getFirstElement( depositionEnergy ); data != NULL; data = xData_getNextElement( data ) ) {
if( strcmp( data->name, "grouped" ) == 0 ) {
if( tpia_misc_get2d_xShared_yHistogram_data_Grouped( smr, data, &(product->depositionEnergyGrouped) ) ) return( 1 ); }
else {
tpia_misc_setMessageError_Element( smr, NULL, depositionEnergy, __FILE__, __LINE__, 1, "unsupported deposition energy type = %s", data->name );
return( 1 );
}
}
return( 0 );
}
/*
************************************************************
*/
static int _tpia_product_getMultiplicityFromElement( statusMessageReporting *smr, xData_element *data, tpia_product *product ) {
tpia_multiplicity *multiplicity, *prior, *current;
const char *timeScale;
int isDelayedNeutrons;
double dTimeScale;
if( tpia_multiplicity_getTimeScaleFromElement( smr, data, &timeScale, &isDelayedNeutrons, &dTimeScale ) ) return( 1 );
if( ( isDelayedNeutrons == 0 ) && ( product->multiplicityVsEnergy != NULL ) ) {
tpia_misc_setMessageError_Element( smr, NULL, data, __FILE__, __LINE__, 1, "extra product multiplicity data" );
return( 1 );
}
if( ( multiplicity = tpia_multiplicity_createGetFromElement( smr, data, product->channel->target->nGroups ) ) == NULL ) return( 1 );
if( isDelayedNeutrons == 0 ) {
product->multiplicityVsEnergy = multiplicity; }
else {
if( product->delayedNeutronMultiplicityVsEnergy == NULL ) {
product->delayedNeutronMultiplicityVsEnergy = multiplicity; }
else {
if( product->delayedNeutronMultiplicityVsEnergy->timeScale > multiplicity->timeScale ) {
multiplicity->next = product->delayedNeutronMultiplicityVsEnergy;
product->delayedNeutronMultiplicityVsEnergy = multiplicity; }
else {
for( current = product->delayedNeutronMultiplicityVsEnergy->next, prior = product->delayedNeutronMultiplicityVsEnergy; current != NULL;
current = current->next ) {
if( current->timeScale > multiplicity->timeScale ) {
multiplicity->next = current;
prior->next = multiplicity;
break;
}
prior = current;
}
if( current == NULL ) prior->next = multiplicity;
}
}
}
return( 0 );
}
/*
************************************************************
*/
//long tpia_product_dataRequired( statusMessageReporting *smr, tpia_product *product ) {
long tpia_product_dataRequired( statusMessageReporting *, tpia_product *product ) {
return( product->b_dataRequired );
}
/*
************************************************************
*/
tpia_product *tpia_product_getFirstProduct( tpia_product *product ) {
return( tpia_decayChannel_getFirstProduct( &(product->decayChannel) ) );
}
/*
************************************************************
*/
//tpia_product *tpia_product_getProductByIndex( statusMessageReporting *smr, tpia_product *product, int index ) {
tpia_product *tpia_product_getProductByIndex( statusMessageReporting *, tpia_product *product, int index ) {
int i = 0;
tpia_product *p;
if( index < 0 ) return( NULL );
for( p = tpia_product_getFirstProduct( product ); ( p != NULL ) && ( i < index ); p = tpia_decayChannel_getNextProduct( p ), i++ ) ;
return( p );
}
/*
************************************************************
*/
//int tpia_product_doesDecay( statusMessageReporting *smr, tpia_product *product ) {
int tpia_product_doesDecay( statusMessageReporting *, tpia_product *product ) {
return( product->decayChannel.products != NULL );
}
/*
************************************************************
*/
//int tpia_product_numberOfProducts( statusMessageReporting *smr, tpia_product *product ) {
int tpia_product_numberOfProducts( statusMessageReporting *, tpia_product *product ) {
return( product->decayChannel.numberOfProducts );
}
/*
************************************************************
*/
//int tpia_product_isDataPresent( statusMessageReporting *smr, tpia_product *product, int b_data ) {
int tpia_product_isDataPresent( statusMessageReporting *, tpia_product *product, int b_data ) {
return( product->b_dataPresent && b_data );
}
/*
************************************************************
*/
//int tpia_product_sampleMultiplicity( statusMessageReporting *smr, tpia_product *product, double e_in, double r ) {
int tpia_product_sampleMultiplicity( statusMessageReporting *, tpia_product *product, double e_in, double r ) {
int i, multiplicity;
tpia_multiplicity *multiplicityVsEnergy = product->multiplicityVsEnergy;
double *p = multiplicityVsEnergy->pointwise, dMult;
if( e_in <= p[0] ) {
dMult = p[1]; }
else if( e_in >= p[2 * ( multiplicityVsEnergy->numberOfPointwise - 1 )] ) {
dMult = p[2 * multiplicityVsEnergy->numberOfPointwise - 1]; }
else {
for( i = 0; i < multiplicityVsEnergy->numberOfPointwise - 1; i++, p += 2 ) if( e_in < p[2] ) break;
dMult = ( e_in - p[0] ) / ( p[2] - p[0] );
dMult = dMult * p[3] + ( 1. - dMult ) * p[1];
}
multiplicity = (int) dMult;
if( r < ( dMult - multiplicity ) ) multiplicity++;
return( multiplicity );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,61 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include "string.h"
#include "tpia_target.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
//Need to here beacaus these values used in MACRO //this comment is out of date
const char * tpia_samplingMethods_constant = "constant";
const char * tpia_samplingMethods_linear = "linear";
//110527 TK edited the macro (include/tpia_target.hh) see the file.
/*
************************************************************
*/
//int tpia_samplingMethods_initialize( statusMessageReporting *smr, tpia_samplingMethods *samplingMethods ) {
int tpia_samplingMethods_initialize( statusMessageReporting *, tpia_samplingMethods *samplingMethods ) {
memset( samplingMethods, 0, sizeof( tpia_samplingMethods ) );
samplingMethods->angular_equalProbableBinMethod = tpia_samplingMethods_linear;
return( 0 );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,421 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static int _tpia_target_releaseAndReturnOne( statusMessageReporting *smr, tpia_target *target );
/*
************************************************************
*/
tpia_target *tpia_target_create( statusMessageReporting *smr ) {
tpia_target *target;
//if( ( target = xData_malloc2( smr, sizeof( tpia_target ), 0, "target" ) ) == NULL ) return( NULL );
if( ( target = (tpia_target*) xData_malloc2( smr, sizeof( tpia_target ), 0, "target" ) ) == NULL ) return( NULL );
if( tpia_target_initialize( smr, target ) ) target = tpia_target_free( smr, target );
return( target );
}
/*
************************************************************
*/
int tpia_target_initialize( statusMessageReporting *smr, tpia_target *target ) {
memset( target, 0, sizeof( tpia_target ) );
tpia_samplingMethods_initialize( smr, &(target->samplingMethods) );
return( 0 );
}
/*
************************************************************
*/
tpia_target *tpia_target_createRead( statusMessageReporting *smr, const char *fileName ) {
tpia_target *target;
if( ( target = tpia_target_create( smr ) ) == NULL ) return( NULL );
//if( tpia_target_read( smr, target, fileName ) != 0 ) target = xData_free( smr, target );
if( tpia_target_read( smr, target, fileName ) != 0 ) target = (tpia_target*) xData_free( smr, target );
return( target );
}
/*
************************************************************
*/
int tpia_target_readFromMap( statusMessageReporting *smr, tpia_target *target, tpia_map *map, const char *evaluation, const char *projectileName,
const char *targetName ) {
char *targetPath;
if( ( targetPath = tpia_map_findTarget( smr, map, evaluation, projectileName, targetName ) ) == NULL ) return( 1 );
return( tpia_target_read( smr, target, targetPath ) );
}
/*
************************************************************
*/
tpia_target *tpia_target_createReadFromMap( statusMessageReporting *smr, tpia_map *map, const char *evaluation, const char *projectileName,
const char *targetName ) {
char *targetPath;
tpia_target *target;
targetPath = tpia_map_findTarget( smr, map, evaluation, projectileName, targetName );
if( targetPath == NULL ) return( NULL );
target = tpia_target_createRead( smr, targetPath );
xData_free( smr, targetPath );
return( target );
}
/*
************************************************************
*/
tpia_target *tpia_target_free( statusMessageReporting *smr, tpia_target *target ) {
tpia_target_release( smr, target );
xData_free( smr, target );
return( NULL );
}
/*
************************************************************
*/
int tpia_target_release( statusMessageReporting *smr, tpia_target *target ) {
int i;
//target->path = xData_free( smr, target->path );
target->path = (char*) xData_free( smr, target->path );
//target->absPath = xData_free( smr, target->absPath );
target->absPath = (char*) xData_free( smr, target->absPath );
xData_releaseAttributionList( smr, &(target->attributes) );
for( i = 0; i < target->nHeatedTargets; i++ ) {
//target->heatedTargets[i].path = xData_free( smr, target->heatedTargets[i].path );
target->heatedTargets[i].path = (char*) xData_free( smr, target->heatedTargets[i].path );
//target->heatedTargets[i].contents = xData_free( smr, target->heatedTargets[i].contents );
target->heatedTargets[i].contents = (char*) xData_free( smr, target->heatedTargets[i].contents );
if( target->heatedTargets[i].heatedTarget != NULL ) tpia_target_heated_free( smr, target->heatedTargets[i].heatedTarget );
}
//target->heatedTargets = xData_free( smr, target->heatedTargets );
target->heatedTargets = (tpia_target_heated_info*) xData_free( smr, target->heatedTargets );
//target->readHeatedTargets = xData_free( smr, target->readHeatedTargets );
target->readHeatedTargets = (tpia_target_heated_info**) xData_free( smr, target->readHeatedTargets );
tpia_target_initialize( smr, target );
return( 0 );
}
/*
************************************************************
*/
int tpia_target_read( statusMessageReporting *smr, tpia_target *target, const char *fileName ) {
/*
* If a target has already been read into this target, user must have called tpia_target_release before calling this routine.
* Otherwise, there will be memory leaks.
*/
xData_document *doc;
xData_element *element, *child;
int i, iHeated, nHeated = 0, status = 1;
double temperature;
//fix for gcc4.6 warings 110602
//char *pReturnValue, *name;
char *name;
char const *contents;
tpia_target_initialize( smr, target );
if( ( target->path = xDataMisc_allocateCopyString2( smr, fileName, "path" ) ) == NULL ) return( status );
if( ( target->absPath = xDataMisc_getAbsPath( smr, fileName ) ) == NULL ) return( _tpia_target_releaseAndReturnOne( smr, target ) );
if( ( doc = xData_parseReadFile( smr, fileName, NULL, NULL ) ) == NULL ) return( _tpia_target_releaseAndReturnOne( smr, target ) );
element = xData_getDocumentsElement( doc );
if( strcmp( element->name, "xTarget" ) != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "input file's top element must be xTarget and not %s", element->name ); }
else {
//pReturnValue = ( xData_copyAttributionList( smr, &(target->attributes), &(element->attributes) ) ) ? NULL : target->path;
//fix for gcc4.6 warings 110602
xData_copyAttributionList( smr, &(target->attributes),&(element->attributes) );
name = tpia_misc_pointerToAttributeIfAllOk2( smr, element, 1, &(target->attributes), "projectile" );
if( smr_isOk( smr ) ) target->projectileID = tpia_particle_getInternalID( smr, name );
if( smr_isOk( smr ) && ( name = tpia_misc_pointerToAttributeIfAllOk2( smr, element, 1, &(target->attributes), "target" ) ) != NULL ) {
if( smr_isOk( smr ) && ( target->targetID = tpia_particle_getInternalID( smr, name ) ) != NULL ) {
status = 0;
for( nHeated = 0, child = xData_getFirstElement( element ); child != NULL; nHeated++, child = xData_getNextElement( child ) ) {
if( strcmp( child->name, "target" ) != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "element can only have target sub-elements%s",
element->name );
status = 1;
break;
}
}
if( status == 0 ) {
//if( ( target->heatedTargets = xData_malloc2( smr, nHeated * sizeof( tpia_target_heated_info ), 1, "heatedTargets" ) ) == NULL ) {
if( ( target->heatedTargets = (tpia_target_heated_info*) xData_malloc2( smr, nHeated * sizeof( tpia_target_heated_info ), 1, "heatedTargets" ) ) == NULL ) {
status = 1; }
else {
//if( ( target->readHeatedTargets = xData_malloc2( smr, nHeated * sizeof( tpia_target_heated_info * ), 1, "heatedTargets" ) ) == NULL )
if( ( target->readHeatedTargets = (tpia_target_heated_info**) xData_malloc2( smr, nHeated * sizeof( tpia_target_heated_info * ), 1, "heatedTargets" ) ) == NULL )
status = 1;
}
for( nHeated = 0, child = xData_getFirstElement( element ); ( status == 0 ) && ( child != NULL );
nHeated++, child = xData_getNextElement( child ) ) {
if( ( i = xData_convertAttributeToDouble( smr, child, "temperature", &temperature ) ) != 0 ) {
if( i > 0 ) smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "target does not have a temperature attribute" );
status = 1;
break;
}
for( iHeated = 0; iHeated < nHeated; iHeated++ ) if( target->heatedTargets[iHeated].temperature > temperature ) break;
if( iHeated < nHeated ) for( i = nHeated; i >= iHeated; i-- ) target->heatedTargets[i+1] = target->heatedTargets[i];
target->heatedTargets[iHeated].temperature = temperature;
target->heatedTargets[iHeated].path = NULL;
target->heatedTargets[iHeated].contents = NULL;
target->heatedTargets[iHeated].heatedTarget = NULL;
if( ( contents = xData_getAttributesValueInElement( child, "contents" ) ) != NULL ) {
if( ( target->heatedTargets[iHeated].contents = xDataMisc_allocateCopyString2( smr, contents, "contents" ) ) == NULL ) {
status = 1;
break;
}
}
if( ( contents = xData_getAttributesValueInElement( child, "file" ) ) == NULL ) {
status = 1;
break;
}
//if((target->heatedTargets[iHeated].path = xData_malloc2(smr, strlen( target->absPath ) + strlen( contents ) + 2, 0, "path")) == NULL) {
if((target->heatedTargets[iHeated].path = (char*) xData_malloc2(smr, strlen( target->absPath ) + strlen( contents ) + 2, 0, "path")) == NULL) {
status = 1;
break;
}
strcpy( target->heatedTargets[iHeated].path, target->absPath );
*strrchr( target->heatedTargets[iHeated].path, '/' ) = 0;
strcat( target->heatedTargets[iHeated].path, "/" );
strcat( target->heatedTargets[iHeated].path, contents );
target->nHeatedTargets++;
}
}
}
}
}
xData_parseFree( smr, doc );
if( status == 0 ) {
for( i = 0; i < nHeated; i++ ) target->heatedTargets[i].ordinal = i;
for( i = 0; i < nHeated; i++ ) if( target->heatedTargets[i].contents == NULL ) break;
if( i == nHeated ) i = 0; /* All heated targets are crossSection only. */
if( tpia_target_readHeatedTarget( smr, target, i, 0 ) == 0 ) {
target->baseHeatedTarget = target->heatedTargets[i].heatedTarget; }
else {
tpia_target_release( NULL, target );
status = 1;
} }
else {
tpia_target_release( smr, target );
}
return( status );
}
/*
************************************************************
*/
//char *tpia_target_getAttributesValue( statusMessageReporting *smr, tpia_target *target, char const *name ) {
char *tpia_target_getAttributesValue( statusMessageReporting *, tpia_target *target, char const *name ) {
return( xData_getAttributesValue( &(target->attributes), name ) );
}
/*
************************************************************
*/
//int tpia_target_getTemperatures( statusMessageReporting *smr, tpia_target *target, double *temperatures ) {
int tpia_target_getTemperatures( statusMessageReporting *, tpia_target *target, double *temperatures ) {
int i;
if( temperatures != NULL ) for( i = 0; i < target->nHeatedTargets; i++ ) temperatures[i] = target->heatedTargets[i].temperature;
return( target->nHeatedTargets );
}
/*
************************************************************
*/
int tpia_target_readHeatedTarget( statusMessageReporting *smr, tpia_target *target, int index, int checkElememtsForAccess ) {
int i;
if( ( index < 0 ) || ( index >= target->nHeatedTargets ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "temperature index = %d out of range (0 <= index < %d", index, target->nHeatedTargets );
return( -1 );
}
if( target->heatedTargets[index].heatedTarget != NULL ) return( 1 );
target->heatedTargets[index].heatedTarget = tpia_target_heated_createRead( smr, target->heatedTargets[index].path, checkElememtsForAccess );
if( target->heatedTargets[index].heatedTarget != NULL ) {
target->heatedTargets[index].heatedTarget->ordinal = target->heatedTargets[index].ordinal;
for( i = target->nReadHeatedTargets; i > 0; i-- ) {
if( target->readHeatedTargets[i-1]->temperature < target->heatedTargets[index].temperature ) break;
target->readHeatedTargets[i] = target->readHeatedTargets[i-1];
}
target->readHeatedTargets[i] = &(target->heatedTargets[i]);
target->nReadHeatedTargets++;
}
return( ( target->heatedTargets[index].heatedTarget == NULL ? -1 : 0 ) );
}
/*
************************************************************
*/
tpia_target_heated *tpia_target_getHeatedTargetAtIndex_ReadIfNeeded( statusMessageReporting *smr, tpia_target *target, int index ) {
if( ( index < 0 ) || ( index >= target->nHeatedTargets ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "temperature index = %d out of range (0 <= index < %d", index, target->nHeatedTargets );
return( NULL );
}
if( target->heatedTargets[index].heatedTarget == NULL ) tpia_target_readHeatedTarget( smr, target, index, 0 );
return( target->heatedTargets[index].heatedTarget );
}
/*
************************************************************
*/
tpia_target_heated *tpia_target_getHeatedTargetAtTIndex( statusMessageReporting *smr, tpia_target *target, int index ) {
if( ( index < 0 ) || ( index >= target->nHeatedTargets ) ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "temperature index = %d out of range (0 <= index < %d", index, target->nHeatedTargets );
return( NULL );
}
if( target->heatedTargets[index].heatedTarget == NULL ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "temperature index = %d not read in", index );
return( NULL );
}
return( target->heatedTargets[index].heatedTarget );
}
/*
************************************************************
*/
int tpia_target_numberOfChannels( statusMessageReporting *smr, tpia_target *target ) {
return( tpia_target_heated_numberOfChannels( smr, target->baseHeatedTarget ) );
}
/*
************************************************************
*/
int tpia_target_numberOfProductionChannels( statusMessageReporting *smr, tpia_target *target ) {
return( tpia_target_heated_numberOfProductionChannels( smr, target->baseHeatedTarget ) );
}
/*
************************************************************
*/
xData_Int tpia_target_getEnergyGridAtTIndex( statusMessageReporting *smr, tpia_target *target, int index, double **energyGrid ) {
tpia_target_heated *heated = tpia_target_getHeatedTargetAtTIndex( smr, target, index );
if( !smr_isOk( smr ) ) return( -1 );
return( tpia_target_heated_getEnergyGrid( smr, heated, energyGrid ) );
}
/*
************************************************************
*/
tpia_1dData *tpia_target_getTotalCrossSectionAtTIndex( statusMessageReporting *smr, tpia_target *target, int index, int crossSectionType ) {
tpia_target_heated *heated = tpia_target_getHeatedTargetAtTIndex( smr, target, index );
if( !smr_isOk( smr ) ) return( NULL );
if( crossSectionType == tpia_crossSectionType_grouped ) {
return( &(heated->totalCrossSectionGrouped) ); }
else if( crossSectionType == tpia_crossSectionType_pointwise ) {
return( &(heated->totalCrossSectionPointwise) );
}
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "Invalue crossSectionType = %d", crossSectionType );
return( NULL );
}
/*
************************************************************
*/
double tpia_target_getTotalCrossSectionAtTAndE( statusMessageReporting *smr, tpia_target *target, double T, xData_Int iEg, double e_in,
int crossSectionType ) {
int i;
double xsec = 0., xsec1, xsec2;
for( i = 0; i < target->nReadHeatedTargets; i++ ) if( target->readHeatedTargets[i]->temperature > T ) break;
if( i == 0 ) {
xsec = tpia_target_heated_getTotalCrossSectionAtE( smr, target->readHeatedTargets[0]->heatedTarget, iEg, e_in, crossSectionType ); }
else if( i == target->nReadHeatedTargets ) {
xsec = tpia_target_heated_getTotalCrossSectionAtE( smr, target->readHeatedTargets[i-1]->heatedTarget, iEg, e_in, crossSectionType ); }
else {
xsec1 = tpia_target_heated_getTotalCrossSectionAtE( smr, target->readHeatedTargets[i-1]->heatedTarget, iEg, e_in, crossSectionType );
xsec2 = tpia_target_heated_getTotalCrossSectionAtE( smr, target->readHeatedTargets[i ]->heatedTarget, iEg, e_in, crossSectionType );
xsec = ( ( target->readHeatedTargets[i]->temperature - T ) * xsec1 + ( T - target->readHeatedTargets[i-1]->temperature ) * xsec2 ) /
( target->readHeatedTargets[i]->temperature - target->readHeatedTargets[i-1]->temperature );
}
return( xsec );
}
/*
************************************************************
*/
double tpia_target_getIndexChannelCrossSectionAtE( statusMessageReporting *smr, tpia_target *target, int index, double T, xData_Int iEg, double e_in,
int crossSectionType ) {
int i;
double xsec = 0., xsec1, xsec2;
for( i = 0; i < target->nReadHeatedTargets; i++ ) if( target->readHeatedTargets[i]->temperature > T ) break;
if( i == 0 ) {
xsec = tpia_target_heated_getIndexChannelCrossSectionAtE( smr, target->readHeatedTargets[0]->heatedTarget, index, iEg, e_in, crossSectionType ); }
else if( i == target->nReadHeatedTargets ) {
xsec = tpia_target_heated_getIndexChannelCrossSectionAtE( smr, target->readHeatedTargets[i-1]->heatedTarget, index, iEg, e_in, crossSectionType ); }
else {
xsec1 = tpia_target_heated_getIndexChannelCrossSectionAtE(smr, target->readHeatedTargets[i-1]->heatedTarget, index, iEg, e_in, crossSectionType);
xsec2 = tpia_target_heated_getIndexChannelCrossSectionAtE(smr, target->readHeatedTargets[i ]->heatedTarget, index, iEg, e_in, crossSectionType);
xsec = ( ( target->readHeatedTargets[i]->temperature - T ) * xsec1 + ( T - target->readHeatedTargets[i-1]->temperature ) * xsec2 ) /
( target->readHeatedTargets[i]->temperature - target->readHeatedTargets[i-1]->temperature );
}
return( xsec );
}
/*
************************************************************
*/
//int tpia_target_sampleIndexChannelProductsAtE( statusMessageReporting *smr, tpia_target *target, int index, double T,
int tpia_target_sampleIndexChannelProductsAtE( statusMessageReporting *smr, tpia_target *target, int index, double ,
tpia_decaySamplingInfo *decaySamplingInfo, int nProductData, tpia_productOutgoingData *productData ) {
return( tpia_target_heated_sampleIndexChannelProductsAtE( smr, target->baseHeatedTarget, index, decaySamplingInfo,
nProductData, productData ) );
}
/*
************************************************************
*/
static int _tpia_target_releaseAndReturnOne( statusMessageReporting *smr, tpia_target *target ) {
tpia_target_release( smr, target );
return( 1 );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,383 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <string.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
static void _tpia_target_heated_getEnergyGridAndAllocateTotalCrossSections( statusMessageReporting *smr, tpia_target_heated *target, xData_element *element );
static int _tpia_target_heated_releaseAndReturnOne( statusMessageReporting *smr, xData_document *doc, tpia_target_heated *target );
static int _tpia_target_heated_checkElememtsForAccess( statusMessageReporting *smr, xData_document *doc );
static int _tpia_target_heated_checkElememtsForAccess2( statusMessageReporting *smr, xData_element *element );
/*
************************************************************
*/
tpia_target_heated *tpia_target_heated_create( statusMessageReporting *smr ) {
tpia_target_heated *target;
//if( ( target = xData_malloc2( smr, sizeof( tpia_target_heated ), 0, "target" ) ) == NULL ) return( NULL );
if( ( target = (tpia_target_heated*) xData_malloc2( smr, sizeof( tpia_target_heated ), 0, "target" ) ) == NULL ) return( NULL );
//if( tpia_target_heated_initialize( smr, target ) ) target = xData_free( smr, target );
if( tpia_target_heated_initialize( smr, target ) ) target = (tpia_target_heated*) xData_free( smr, target );
return( target );
}
/*
************************************************************
*/
//int tpia_target_heated_initialize( statusMessageReporting *smr, tpia_target_heated *target ) {
int tpia_target_heated_initialize( statusMessageReporting *, tpia_target_heated *target ) {
memset( target, 0, sizeof( tpia_target_heated ) );
return( 0 );
}
/*
************************************************************
*/
tpia_target_heated *tpia_target_heated_createRead( statusMessageReporting *smr, const char *fileName, int checkElememtsForAccess ) {
tpia_target_heated *target;
if( ( target = tpia_target_heated_create( smr ) ) == NULL ) return( NULL );
//if( tpia_target_heated_read( smr, target, fileName, checkElememtsForAccess ) != 0 ) target = xData_free( smr, target );
if( tpia_target_heated_read( smr, target, fileName, checkElememtsForAccess ) != 0 ) target = (tpia_target_heated*) xData_free( smr, target );
return( target );
}
/*
************************************************************
*/
tpia_target_heated *tpia_target_heated_free( statusMessageReporting *smr, tpia_target_heated *target ) {
tpia_target_heated_release( smr, target );
xData_free( smr, target );
return( NULL );
}
/*
************************************************************
*/
int tpia_target_heated_release( statusMessageReporting *smr, tpia_target_heated *target ) {
int i;
//target->path = xData_free( smr, target->path );
target->path = (char*) xData_free( smr, target->path );
//target->absPath = xData_free( smr, target->absPath );
target->absPath = (char*) xData_free( smr, target->absPath );
target->energyGridLength = 0;
//target->energyGrid = xData_free( smr, target->energyGrid );
target->energyGrid = (double*) xData_free( smr, target->energyGrid );
//target->kerma = xData_free( smr, target->kerma );
target->kerma = (double*) xData_free( smr, target->kerma );
//target->totalCrossSectionPointwise.data = xData_free( smr, target->totalCrossSectionPointwise.data );
target->totalCrossSectionPointwise.data = (double*) xData_free( smr, target->totalCrossSectionPointwise.data );
//target->totalCrossSectionGrouped.data = xData_free( smr, target->totalCrossSectionGrouped.data );
target->totalCrossSectionGrouped.data = (double*) xData_free( smr, target->totalCrossSectionGrouped.data );
xData_releaseAttributionList( smr, &(target->attributes) );
for( i = 0; i < target->nChannels; i++ ) tpia_channel_free( smr, target->channels[i] );
target->nChannels = 0;
//target->channels = xData_free( smr, target->channels );
target->channels = (tpia_channel**) xData_free( smr, target->channels );
for( i = 0; i < target->nProductionChannels; i++ ) tpia_channel_free( smr, target->productionChannels[i] );
target->nProductionChannels = 0;
//target->productionChannels = xData_free( smr, target->productionChannels );
target->productionChannels = (tpia_channel**) xData_free( smr, target->productionChannels );
return( 0 );
}
/*
************************************************************
*/
int tpia_target_heated_read( statusMessageReporting *smr, tpia_target_heated *target, const char *fileName, int checkElememtsForAccess ) {
/*
* If a target has already been read into this target, user must have called tpia_target_heated_release before calling this routine.
* Otherwise, there will be memory leaks.
*/
xData_document *doc = NULL;
xData_element *element, *channelElement, *channels;
int nChannels;
tpia_channel *channel;
char *name;
xData_Int i, j;
tpia_target_heated_initialize( smr, target );
if( ( target->path = xDataMisc_allocateCopyString2( smr, fileName, "path" ) ) == NULL ) return( 1 );
if( ( target->absPath = xDataMisc_getAbsPath( smr, fileName ) ) == NULL ) return( _tpia_target_heated_releaseAndReturnOne( smr, doc, target ) );
if( ( doc = xData_parseReadFile( smr, fileName, NULL, NULL ) ) == NULL ) return( _tpia_target_heated_releaseAndReturnOne( smr, doc, target ) );
element = xData_getDocumentsElement( doc );
xData_addToAccessed( smr, element, 1 );
if( xData_convertAttributeTo_xData_Int( smr, element, "nGroups", &i ) != 0 ) return( _tpia_target_heated_releaseAndReturnOne( smr, doc, target ) );
target->nGroups = (int) i;
if( strcmp( element->name, "xTargetHeated" ) != 0 ) {
tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "input file's top element must be xTargetHeated and not %s",
element->name ); }
else {
xData_copyAttributionList( smr, &(target->attributes), &(element->attributes) );
if( smr_isOk( smr ) ) target->contents = xData_getAttributesValue( &(target->attributes), "contents" );
if( ( name = tpia_misc_pointerToAttributeIfAllOk3( smr, target->absPath, 1, &(target->attributes), "projectile" ) ) != NULL )
target->projectileID = tpia_particle_getInternalID( smr, name );
if( ( name = tpia_misc_pointerToAttributeIfAllOk3( smr, target->absPath, 1, &(target->attributes), "target" ) ) != NULL )
target->targetID = tpia_particle_getInternalID( smr, name );
if( smr_isOk( smr ) ) _tpia_target_heated_getEnergyGridAndAllocateTotalCrossSections( smr, target, element );
if( smr_isOk( smr ) ) { /* Get channels. */
//if( ( channels = xData_getOneElementByTagName( smr, element, "channels", 1 ) ) == NULL )
if( ( channels = xData_getOneElementByTagName( smr, element, (char*)"channels", 1 ) ) == NULL )
return( _tpia_target_heated_releaseAndReturnOne( smr, doc, target ) );
xData_addToAccessed( smr, channels, 1 );
if( ( nChannels = xData_numberOfElementsByTagName( smr, channels, "channel" ) ) > 0 ) {
//if( ( target->channels = xData_malloc2( smr, nChannels * sizeof( tpia_channel * ), 1, "channels" ) ) == NULL )
if( ( target->channels = (tpia_channel**) xData_malloc2( smr, nChannels * sizeof( tpia_channel * ), 1, "channels" ) ) == NULL )
return( _tpia_target_heated_releaseAndReturnOne( smr, doc, target ) );
for( channelElement = xData_getFirstElement( channels ); channelElement != NULL; channelElement = xData_getNextElement( channelElement ) ) {
if( !strcmp( channelElement->name, "channel" ) ) {
if( ( channel = tpia_channel_createGetFromElement( smr, target, channelElement, 1 ) ) == NULL ) break;
target->channels[target->nChannels] = channel;
target->nChannels++;
for( i = channel->crossSectionPointwise.start, j = 0; i < channel->crossSectionPointwise.end; i++, j++ )
target->totalCrossSectionPointwise.data[i] += channel->crossSectionPointwise.data[j];
for( i = channel->crossSectionGrouped.start, j = 0; i < channel->crossSectionGrouped.end; i++, j++ )
target->totalCrossSectionGrouped.data[i] += channel->crossSectionGrouped.data[j];
}
}
}
}
if( smr_isOk( smr ) ) { /* Get production channels. */
//if( ( channels = xData_getOneElementByTagName( smr, element, "productionChannels", 0 ) ) == NULL ) {
if( ( channels = xData_getOneElementByTagName( smr, element, (char*) "productionChannels", 0 ) ) == NULL ) {
if( !smr_isOk( smr ) ) return( _tpia_target_heated_releaseAndReturnOne( smr, doc, target ) ); }
else {
xData_addToAccessed( smr, channels, 1 );
if( ( nChannels = xData_numberOfElementsByTagName( smr, channels, "channel" ) ) > 0 ) {
//if( ( target->productionChannels = xData_malloc2( smr, nChannels * sizeof( tpia_channel * ), 1, "channels" ) ) != NULL ) {
if( ( target->productionChannels = (tpia_channel**) xData_malloc2( smr, nChannels * sizeof( tpia_channel * ), 1, "channels" ) ) != NULL ) {
for( channelElement = xData_getFirstElement(channels); channelElement != NULL; channelElement = xData_getNextElement(channelElement) ) {
if( !strcmp( channelElement->name, "channel" ) ) {
channel = tpia_channel_createGetFromElement( smr, target, channelElement, 1 );
if( channel == NULL ) break;
target->productionChannels[target->nProductionChannels] = channel;
target->nProductionChannels++;
}
}
}
}
}
}
}
if( smr_isOk( smr ) && checkElememtsForAccess ) _tpia_target_heated_checkElememtsForAccess( smr, doc );
xData_parseFree( smr, doc );
if( !smr_isOk( smr ) ) tpia_target_heated_release( smr, target );
return( !smr_isOk( smr ) );
}
/*
************************************************************
*/
static void _tpia_target_heated_getEnergyGridAndAllocateTotalCrossSections( statusMessageReporting *smr, tpia_target_heated *target, xData_element *element ) {
xData_Int i, energyGridIndex, energyGridStart, energyGridEnd, energyGridLength;
xData_element *energyGrid, *kerma;
if( !smr_isOk( smr ) ) return;
//if( ( energyGrid = xData_getOneElementByTagName( smr, element, "energyGrid", 1 ) ) == NULL ) return;
if( ( energyGrid = xData_getOneElementByTagName( smr, element, (char*) "energyGrid", 1 ) ) == NULL ) return;
xData_addToAccessed( smr, energyGrid, 1 );
if( ( energyGrid = xData_getElements_xDataElement( smr, energyGrid ) ) == NULL ) return;
xData_addToAccessed( smr, energyGrid, 1 );
xData_getCommonData( smr, energyGrid, &energyGridIndex, &energyGridStart, &energyGridEnd, &energyGridLength );
if( ( target->energyGrid = xData_1d_x_allocateCopyData( smr, energyGrid ) ) == NULL ) return;
target->energyGridLength = energyGridLength;
target->totalCrossSectionPointwise.start = 0;
target->totalCrossSectionPointwise.end = energyGridLength;
target->totalCrossSectionPointwise.length = energyGridLength;
//if( ( target->totalCrossSectionPointwise.data = xData_malloc2( smr, energyGridLength * sizeof( double ), 0, "totalCrossSectionPointwise" ) ) == NULL )
if( ( target->totalCrossSectionPointwise.data = (double*) xData_malloc2( smr, energyGridLength * sizeof( double ), 0, "totalCrossSectionPointwise" ) ) == NULL )
return;
for( i = 0; i < energyGridLength; i++ ) target->totalCrossSectionPointwise.data[i] = 0.;
target->totalCrossSectionGrouped.start = 0;
target->totalCrossSectionGrouped.end = energyGridLength;
target->totalCrossSectionGrouped.length = energyGridLength;
//if( ( target->totalCrossSectionGrouped.data = xData_malloc2( smr, target->nGroups * sizeof( double ), 0, "totalCrossSectionGrouped" ) ) == NULL ) return;
if( ( target->totalCrossSectionGrouped.data = (double*) xData_malloc2( smr, target->nGroups * sizeof( double ), 0, "totalCrossSectionGrouped" ) ) == NULL ) return;
for( i = 0; i < target->nGroups; i++ ) target->totalCrossSectionGrouped.data[i] = 0.;
//if( ( kerma = xData_getOneElementByTagName( smr, element, "kerma", 1 ) ) != NULL ) {
if( ( kerma = xData_getOneElementByTagName( smr, element, (char*) "kerma", 1 ) ) != NULL ) {
xData_addToAccessed( smr, kerma, 1 );
if( ( kerma = xData_getElements_xDataElement( smr, kerma ) ) == NULL ) return;
xData_addToAccessed( smr, kerma, 1 );
if( ( target->kerma = xData_1d_x_allocateCopyData( smr, kerma ) ) == NULL ) return;
}
}
/*
************************************************************
*/
//int tpia_target_heated_numberOfChannels( statusMessageReporting *smr, tpia_target_heated *target ) {
int tpia_target_heated_numberOfChannels( statusMessageReporting *, tpia_target_heated *target ) {
return( target->nChannels );
}
/*
************************************************************
*/
//int tpia_target_heated_numberOfProductionChannels( statusMessageReporting *smr, tpia_target_heated *target ) {
int tpia_target_heated_numberOfProductionChannels( statusMessageReporting *, tpia_target_heated *target ) {
return( target->nProductionChannels );
}
/*
************************************************************
*/
tpia_channel *tpia_target_heated_getChannelAtIndex( tpia_target_heated *target, int index ) {
tpia_channel *channel = NULL;
if( ( index >= 0 ) && ( index < target->nChannels ) ) channel = target->channels[index];
return( channel );
}
/*
************************************************************
*/
tpia_channel *tpia_target_heated_getChannelAtIndex_smr( statusMessageReporting *smr, tpia_target_heated *target, int index ) {
tpia_channel *channel = tpia_target_heated_getChannelAtIndex( target, index );
if( channel == NULL ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad channel index = %d for %s + %s", index,
target->projectileID->name, target->targetID->name );
}
return( channel );
}
/*
************************************************************
*/
tpia_channel *tpia_target_heated_getProductionChannelAtIndex( tpia_target_heated *target, int index ) {
tpia_channel *channel = NULL;
if( ( index >= 0 ) && ( index < target->nProductionChannels ) ) channel = target->productionChannels[index];
return( channel );
}
/*
************************************************************
*/
//xData_Int tpia_target_heated_getEnergyGrid( statusMessageReporting *smr, tpia_target_heated *target, double **energyGrid ) {
xData_Int tpia_target_heated_getEnergyGrid( statusMessageReporting *, tpia_target_heated *target, double **energyGrid ) {
if( energyGrid != NULL ) *energyGrid = target->energyGrid;
return( target->energyGridLength );
}
/*
************************************************************
*/
xData_Int tpia_target_heated_getEIndex( tpia_target_heated *target, double e_in ) {
return( tpia_misc_binarySearch( target->energyGridLength, target->energyGrid, e_in ) );
}
/*
************************************************************
*/
//double tpia_target_heated_getTotalCrossSectionAtE( statusMessageReporting *smr, tpia_target_heated *target, xData_Int iEg, double e_in,
double tpia_target_heated_getTotalCrossSectionAtE( statusMessageReporting *smr, tpia_target_heated *target, xData_Int , double e_in,
int crossSectionType ) {
double xsec = 0.;
if( crossSectionType == tpia_crossSectionType_grouped ) {
xsec = 0; }
else if( crossSectionType == tpia_crossSectionType_pointwise ) {
xsec = tpia_misc_getPointwiseCrossSectionAtE( smr, &(target->totalCrossSectionPointwise), target->energyGrid,
tpia_target_heated_getEIndex( target, e_in ), e_in );
}
return( xsec );
}
/*
************************************************************
*/
double tpia_target_heated_getIndexChannelCrossSectionAtE( statusMessageReporting *smr, tpia_target_heated *target, int index, xData_Int iEg, double e_in,
int crossSectionType ) {
double xsec = 0.;
tpia_channel *channel = tpia_target_heated_getChannelAtIndex_smr( smr, target, index );
if( channel != NULL ) xsec = tpia_channel_getCrossSectionAtE( smr, channel, iEg, e_in, crossSectionType );
return( xsec );
}
/*
************************************************************
*/
int tpia_target_heated_sampleIndexChannelProductsAtE( statusMessageReporting *smr, tpia_target_heated *target, int index,
tpia_decaySamplingInfo *decaySamplingInfo, int nProductData, tpia_productOutgoingData *productDatas ) {
tpia_channel *channel = tpia_target_heated_getChannelAtIndex_smr( smr, target, index );
if( channel == NULL ) return( -1 );
return( tpia_decayChannel_sampleProductsAtE( smr, &(channel->decayChannel), decaySamplingInfo, nProductData, productDatas ) );
}
/*
************************************************************
*/
static int _tpia_target_heated_releaseAndReturnOne( statusMessageReporting *smr, xData_document *doc, tpia_target_heated *target ) {
tpia_target_heated_release( smr, target );
if( doc != NULL ) xData_parseFree( smr, doc );
return( 1 );
}
/*
************************************************************
*/
static int _tpia_target_heated_checkElememtsForAccess( statusMessageReporting *smr, xData_document *doc ) {
xData_element *element = xData_getDocumentsElement( doc );
_tpia_target_heated_checkElememtsForAccess2( smr, element );
return( 0 );
}
/*
************************************************************
*/
static int _tpia_target_heated_checkElememtsForAccess2( statusMessageReporting *smr, xData_element *element ) {
xData_element *child;
if( xData_getAccessed( smr, element ) != 1 ) printf( "%3d %s\n", xData_getAccessed( smr, element ), element->fullName );
for( child = xData_getFirstElement( element ); child != NULL; child = xData_getNextElement( child ) )
_tpia_target_heated_checkElememtsForAccess2( smr, child );
return( 0 );
}
#if defined __cplusplus
}
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,171 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "xData.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
typedef struct xmlTextStruct_s {
long allocated;
long length;
char *text;
} xmlTextStruct;
static int xData_parseReconstructXML2( xData_rootElement *root, xmlTextStruct *XML, char *text, long textLength );
static int addStringToXML( xmlTextStruct *XML, char *s, long len );
static void xData_parseOutlinePrintRoot( FILE *f, xData_rootElement *root, int outputText );
/*
************************************************************
*/
char *xData_parseReconstructXML( xData_document *xData_doc ) {
int err;
xmlTextStruct XML = { 0, 0, NULL };
err = xData_parseReconstructXML2( &(xData_doc->root), &XML, NULL, 0 );
//if( err == 0 ) addStringToXML( &XML, "\n", -1 );
if( err == 0 ) addStringToXML( &XML, (char*) "\n", -1 );
return( XML.text );
}
/*
************************************************************
*/
static int xData_parseReconstructXML2( xData_rootElement *root, xmlTextStruct *XML, char *text, long textLength ) {
long i, textOffset = 0;
xData_element *child;
for( child = root->children; child != NULL; child = child->next ) {
//if( textOffset < child->textOffset ) {
if( textOffset < (int) child->textOffset ) {
if( addStringToXML( XML, &(text[textOffset]), child->textOffset - textOffset ) ) return( 1 );
textOffset = child->textOffset;
}
//if( addStringToXML( XML, "<", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, (char*) "<", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, child->name, -1 ) != 0 ) return( 1 );
for( i = 0; i < child->attributes.number; i++ ) {
//if( addStringToXML( XML, " ", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, (char*) " ", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, child->attributes.attributes[i].name, -1 ) != 0 ) return( 1 );
//if( addStringToXML( XML, "=\"", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, (char*) "=\"", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, child->attributes.attributes[i].value, -1 ) != 0 ) return( 1 );
//if( addStringToXML( XML, "\"", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, (char*) "\"", -1 ) != 0 ) return( 1 );
}
//if( addStringToXML( XML, ">", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, (char*) ">", -1 ) != 0 ) return( 1 );
if( xData_parseReconstructXML2( &(child->childrenRoot), XML, child->text.text, child->text.length ) != 0 ) return( 1 );
//if( addStringToXML( XML, "</", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, (char*) "</", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, child->name, -1 ) != 0 ) return( 1 );
//if( addStringToXML( XML, ">", -1 ) != 0 ) return( 1 );
if( addStringToXML( XML, (char*) ">", -1 ) != 0 ) return( 1 );
}
if( textOffset < textLength ) if( addStringToXML( XML, &(text[textOffset]), textLength - textOffset ) ) return( 1 );
return( 0 );
}
/*
************************************************************
*/
static int addStringToXML( xmlTextStruct *XML, char *s, long len ) {
long lenS, length, inc;
char *p;
if( len >= 0 ) {
lenS = len; }
else {
lenS = strlen( s );
}
length = XML->length + lenS + 1;
if( XML->allocated < length ) {
inc = ( 140 * XML->allocated ) / 100;
if( inc < 10000 ) inc = 10000;
if( length < inc ) length = inc;
XML->text = (char *) realloc( XML->text, length );
XML->allocated = length;
if( XML->text == NULL ) return( 1 );
}
p = &(XML->text[XML->length]);
if( len >= 0 ) {
strncpy( p, s, len ); }
else {
strcpy( p, s );
}
XML->length += lenS;
return( 0 );
}
/*
************************************************************
*/
int xData_parseOutline( FILE *f, xData_document *xData_doc, int outputText ) {
xData_parseOutlinePrintRoot( f, &(xData_doc->root), outputText );
return( 0 );
}
/*
************************************************************
*/
static void xData_parseOutlinePrintRoot( FILE *f, xData_rootElement *root, int outputText ) {
int i, depth = root->depth;
xData_element *child;
for( child = root->children; child != NULL; child = child->next ) {
for( i = 0; i < depth; i++ ) fprintf( f, " " );
fprintf( f, "name = %s at line = %ld column = %ld textOffset = %ld; attris:",
//child->name, child->docInfo.line, child->docInfo.column, child->textOffset );
child->name, (long int)child->docInfo.line, (long int)child->docInfo.column, (long int)child->textOffset );
for( i = 0; i < child->attributes.number; i++ ) {
fprintf( f, " %s = \"%s\"", child->attributes.attributes[i].name, child->attributes.attributes[i].value );
}
if( outputText && child->text.text != NULL ) fprintf( f, "; text: %s", child->text.text );
fprintf( f, "\n" );
xData_parseOutlinePrintRoot( f, &(child->childrenRoot), outputText );
}
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,171 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#if !defined(WIN32) || defined(__GNUC__)
#include <unistd.h>
#else
#include <direct.h>
#define getcwd _getcwd
#endif
#include "xData.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
/*
************************************************************
*/
void *xData_malloc( statusMessageReporting *smr, size_t size, int zero, const char *forItem, const char *file, int line ) {
void *p = xData_realloc( smr, NULL, size, forItem, file, line );
int i;
char *c;
long long *l;
if( ( p != NULL ) && zero ) {
//for( i = 0, l = (long long *) p; i < size / sizeof( long long ); i++, l++ ) *l = 0;
for( i = 0, l = (long long *) p; i < (int)( size / sizeof( long long ) ); i++, l++ ) *l = 0;
//for( i = sizeof( long long ) * i, c = (char *) l; i < size; i++, c++ ) *c = 0;
for( i = sizeof( long long ) * i, c = (char *) l; i < (int) size; i++, c++ ) *c = 0;
}
return( p );
}
/*
************************************************************
*/
void *xData_realloc( statusMessageReporting *smr, void *pOld, size_t size, const char *forItem, const char *file, int line ) {
void *p = realloc( pOld, size );
if( ( p == NULL ) && ( smr != NULL ) ) {
smr_setMessageError( smr, NULL, file, line, -1, " xData_realloc: failed to realloc size = %llu for variable %s\n",
(unsigned long long) size, forItem );
}
return( p );
}
/*
************************************************************
*/
//void *xData_free( statusMessageReporting *smr, void *p ) {
void *xData_free( statusMessageReporting *, void *p ) {
if( p != NULL ) free( p );
return( NULL );
}
/*
************************************************************
*/
char *xDataMisc_allocateCopyString( statusMessageReporting *smr, const char *s, const char *forItem, const char *file, int line ) {
/*
* User must free returned string.
*/
char *c;
//if( ( c = xData_malloc( smr, strlen( s ) + 1, 0, forItem, file, line ) ) != NULL ) {
if( ( c = (char*) xData_malloc( smr, strlen( s ) + 1, 0, forItem, file, line ) ) != NULL ) {
strcpy( c, s );
}
return( c );
}
/*
************************************************************
*/
char *xDataMisc_getAbsPath( statusMessageReporting *smr, const char *fileName ) {
/*
* User must free returned string.
*/
int n = strlen( fileName ) + 1, nCwd = 0;
char *absPath, cwd[4 * 1024] = "", *p, *needle;
if( fileName[0] != '/' ) {
if( getcwd( cwd, sizeof( cwd ) + 1 ) == NULL ) {
smr_setMessageError( smr, NULL, __FILE__, __LINE__, -1, "hardwired cwd too small" );
return( NULL );
}
nCwd = strlen( cwd );
n += nCwd + 1; /* cwd + '/'. */
}
//if( ( absPath = xData_malloc2( smr, n, 0, "absPath" ) ) == NULL ) return( NULL );
if( ( absPath = (char*) xData_malloc2( smr, n, 0, "absPath" ) ) == NULL ) return( NULL );
if( fileName[0] != '/' ) {
strcpy( absPath, cwd );
strcat( absPath, "/" );
strcat( absPath, fileName ); }
else {
strcpy( absPath, fileName );
}
while( 1 ) { /* Remove all ./ from path. */
if( ( needle = strstr( absPath, "/./" ) ) == NULL ) break;
p = needle;
for( needle += 2; *needle; p++, needle++ ) *p = *needle;
*p = 0;
}
while( 1 ) { /* Remove all ../ from path. */
if( ( needle = strstr( absPath, "/../" ) ) == NULL ) break;
p = needle - 1;
while( ( p > absPath ) && ( *p != '/' ) ) p--;
if( *p != '/' ) break; /* This should not happen if path is legit, I think, and I do not know what to do so will leave it. */
if( p == absPath ) break; /* Ditto. */
for( needle += 3; *needle; p++, needle++ ) *p = *needle;
*p = 0;
}
return( absPath );
}
/*
************************************************************
*/
int xData_setMessageError_ReturnInt( int value, statusMessageReporting *smr, void *userInterface, const char *packageName, int lineNumber, int code,
const char *fmt, ... ) {
va_list args;
va_start( args, fmt );
smr_setMessageError( smr, userInterface, packageName, lineNumber, code, fmt, args );
va_end( args );
return( value );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,187 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
#include "xData.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
//char const * const xData_oned_x_ID = "1d.x";
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text );
static char *toString( statusMessageReporting *smr, xDataType *xDT );
static int release( statusMessageReporting *smr, xDataType *xDT );
/*
************************************************************
*/
int xData_init_1d_x( statusMessageReporting *smr, xData_element *element ) {
xDataType *xDT = &(element->xDataTypeInfo);
xDT->status = xData_xDataType_Ok;
xDT->typeString = xData_oned_x_ID;
xDT->element = element;
xDT->toData = toData;
xDT->toString = toString;
xDT->release = release;
xDT->data = NULL;
return( xData_xDataTypeConvertAttributes( smr, element ) );
}
/*
************************************************************
*/
int xData_is_1d_x( statusMessageReporting *smr, xDataType *xDT, int setMsg ) {
return( xData_is_xDataType( smr, xDT, xData_oned_x_ID, setMsg ) );
}
/*
************************************************************
*/
int xData_isElement_1d_x( statusMessageReporting *smr, xData_element *element, int setMsg ) {
return( xData_is_1d_x( smr, &(element->xDataTypeInfo), setMsg ) );
}
/*
************************************************************
*/
int xData_1d_x_copyData( statusMessageReporting *smr, xData_element *element, xData_Int nAllocatedBytes, double *d ) {
xData_Int i, n;
xDataType *xDT = &(element->xDataTypeInfo);
double *p;
if( !xData_isElement_1d_x( smr, element, 1 ) ) return( 1 );
n = xDT->end - xDT->start;
//if( n * sizeof( double ) > nAllocatedBytes ) {
if( n * sizeof( double ) > (size_t) nAllocatedBytes ) {
void *smrUser = xData_get_smrUserInterfaceFromElement( element );
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "allocated memory = %lld to small, need %lld", nAllocatedBytes, n );
return( 1 );
}
p = (double *) xDT->data;
for( i = 0; i < n; i++, d++, p++ ) *d = *p;
return( 0 );
}
/*
************************************************************
*/
double *xData_1d_x_allocateCopyData( statusMessageReporting *smr, xData_element *element ) {
xData_Int i, n;
xDataType *xDT = &(element->xDataTypeInfo);
double *p, *data;
if( !xData_isElement_1d_x( smr, element, 1 ) ) return( NULL );
n = xDT->end - xDT->start;
p = (double *) xDT->data;
//if( ( data = xData_malloc2( smr, n * sizeof( double ), 0, "data" ) ) == NULL ) return( NULL );
if( ( data = (double*) xData_malloc2( smr, n * sizeof( double ), 0, "data" ) ) == NULL ) return( NULL );
for( i = 0; i < n; i++, p++ ) data[i] = *p;
return( data );
}
/*
************************************************************
*/
int xData_1d_x_free_copyData( statusMessageReporting *smr, void *data ) {
xData_free( smr, data );
return( 0 );
}
/*
************************************************************
*/
//static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text ) {
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *, const char *text ) {
xData_Int i, n, status = 0;
char *e;
const char *s;
double *p;
void *smrUser = xData_get_smrUserInterfaceFromElement( xDT->element );
if( xDT->status != xData_xDataType_Ok ) return( xData_setMessageError_ReturnInt( 1, smr, smrUser, __FILE__, __LINE__, 1, "bad xDataType instance" ) );
release( smr, xDT );
n = xDT->end - xDT->start;
if( ( xDT->data = xData_malloc2( smr, n * sizeof( double ), 0, "1d.x-toData" ) ) == NULL ) return( 1 );
for( i = 0, s = text, p = (double *) xDT->data; i < n; i++, p++, s = e ) {
if( xData_stringTo_double( smr, smrUser, s, p, " \n", &e ) ) { status = 1; break; }
}
if( status == 0 ) {
while( isspace( *e ) ) e++;
if( *e != 0 ) {
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "xData.1d.x contains extra data = %s", e );
status = 1;
}
}
if( status != 0 ) release( smr, xDT );
return( status );
}
/*
************************************************************
*/
//static char *toString( statusMessageReporting *smr, xDataType *xDT ) {
static char *toString( statusMessageReporting *, xDataType *xDT ) {
xData_Int i, n;
char *str, *p;
double *data = (double *) xDT->data;
n = xDT->end - xDT->start;
if( n < 0 ) n = 0;
if( ( str = (char *) malloc( ( n + 1 ) * 17 ) ) == NULL ) return( NULL );
for( i = 0, p = str; i < n; i++, p += 17, data++ ) {
sprintf( p, " %15.7e\n", *data );
}
*p = 0;
return( str );
}
/*
************************************************************
*/
static int release( statusMessageReporting *smr, xDataType *xDT ) {
if( xDT->data != NULL ) xDT->data = xData_free( smr, xDT->data );
return( xDT->status = xData_xDataType_Ok );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,261 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
#include "xData.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
//char const * const xData_twod_xindex_y_ID = "2d.xindex_y";
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text );
static char *toString( statusMessageReporting *smr, xDataType *xDT );
static int release( statusMessageReporting *smr, xDataType *xDT );
static double *xData_2d_xindex_y_toFilled( statusMessageReporting *smr, xData_element *element, double *Xs, int size );
/*
************************************************************
*/
int xData_init_2d_xindex_y( statusMessageReporting *smr, xData_element *element ) {
xDataType *xDT = &(element->xDataTypeInfo);
xDT->status = xData_xDataType_Ok;
xDT->typeString = xData_twod_xindex_y_ID;
xDT->element = element;
xDT->toData = toData;
xDT->toString = toString;
xDT->release = release;
xDT->data = NULL;
return( xData_xDataTypeConvertAttributes( smr, element ) );
}
/*
************************************************************
*/
int xData_is_2d_xindex_y( statusMessageReporting *smr, xDataType *xDT, int setMsg ) {
return( xData_is_xDataType( smr, xDT, xData_twod_xindex_y_ID, setMsg ) );
}
/*
************************************************************
*/
int xData_isElement_2d_xindex_y( statusMessageReporting *smr, xData_element *element, int setMsg ) {
return( xData_is_2d_xindex_y( smr, &(element->xDataTypeInfo), setMsg ) );
}
/*
************************************************************
*/
//static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text ) {
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *, const char *text ) {
xData_Int i, status = 0;
char *e;
const char *s;
xData_2d_xindex_y *p;
void *smrUser = xData_get_smrUserInterfaceFromElement( xDT->element );
if( xDT->status != xData_xDataType_Ok ) return( xData_setMessageError_ReturnInt( 1, smr, smrUser, __FILE__, __LINE__, 1, "bad xDataType instance" ) );
release( smr, xDT );
if( ( xDT->data = xData_malloc2( smr, 2 * xDT->length * sizeof( xData_2d_xindex_y ), 0, "data" ) ) == NULL ) return( 1 );
for( i = 0, s = text, p = (xData_2d_xindex_y *) xDT->data; i < xDT->length; i++, p++, s = e ) {
if( xData_stringTo_xData_Int( smr, smrUser, s, &(p->index), " \n", &e ) ) { status = 1; break; }
s = e;
if( xData_stringTo_double( smr, smrUser, s, &(p->value), " \n", &e ) ) { status = 1; break; }
}
if( status == 0 ) {
while( isspace( *e ) ) e++;
if( *e != 0 ) {
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "2d_xindex_y contains extra data = %s", e );
status = 1;
}
}
if( status != 0 ) release( smr, xDT );
return( status );
}
/*
************************************************************
*/
//static char *toString( statusMessageReporting *smr, xDataType *xDT ) {
static char *toString( statusMessageReporting *, xDataType *xDT ) {
xData_Int i, n = xDT->length, recordSize = 5 + 16 + 1, indexMax = 9;
int iFmt = 4;
char *str, *p, fmt[32] = " %99d %15.7e\n";
xData_2d_xindex_y *data = (xData_2d_xindex_y *) xDT->data;
if( n < 0 ) n = 0;
for( i = 0; i < n; i++, data++ ) {
while( ( data->index > indexMax ) && ( indexMax > 0 ) ) {
indexMax = 10 * indexMax + 9;
recordSize++;
iFmt++;
}
}
sprintf( fmt, " %%%dld %%15.7e\n", iFmt );
if( ( str = (char *) malloc( recordSize * ( n + 1 ) ) ) == NULL ) return( NULL );
for( i = 0, p = str, data = (xData_2d_xindex_y *) xDT->data; i < n; i++, p += recordSize, data++ ) {
sprintf( p, fmt, data->index, data->value );
}
*p = 0;
return( str );
}
/*
************************************************************
*/
static int release( statusMessageReporting *smr, xDataType *xDT ) {
if( xDT->data != NULL ) xDT->data = xData_free( smr, xDT->data );
return( xDT->status = xData_xDataType_Ok );
}
/*
************************************************************
*/
xData_Int *xData_2d_xindex_y_rawIndices( statusMessageReporting *smr, xData_element *element ) {
/*
* Returns NULL if length is 0 or memory could not be allocated.
*/
xDataType *xDT = &(element->xDataTypeInfo);
xData_Int i, index = xDT->start, *values;
xData_2d_xindex_y *data = (xData_2d_xindex_y *) xDT->data;
if( xDT->length == 0 ) return( NULL );
//if( ( values = xData_malloc2( smr, xDT->length * sizeof( xData_Int ), 0, "values" ) ) == NULL ) return( NULL );
if( ( values = (xData_Int*) xData_malloc2( smr, xDT->length * sizeof( xData_Int ), 0, "values" ) ) == NULL ) return( NULL );
for( i = 0; i < xDT->length; i++ ) {
values[i] = index;
index += data[i].index;
}
return( values );
}
/*
************************************************************
*/
int xData_2d_xindex_y_free_rawIndices( statusMessageReporting *smr, void *data ) {
xData_free( smr, data );
return( 0 );
}
/*
************************************************************
*/
double *xData_2d_xindex_y_toXYs( statusMessageReporting *smr, xData_element *element, double *Xs ) {
/*
* Returns NULL if length is 0 or memory could not be allocated.
*/
xDataType *xDT = &(element->xDataTypeInfo);
xData_Int i, index = xDT->start;
double *values = NULL, *p;
xData_2d_xindex_y *data = (xData_2d_xindex_y *) xDT->data;
if( xDT->length == 0 ) return( NULL );
//if( ( values = xData_malloc2( smr, 2 * xDT->length * sizeof( double ), 0, "values" ) ) == NULL ) return( NULL );
if( ( values = (double*) xData_malloc2( smr, 2 * xDT->length * sizeof( double ), 0, "values" ) ) == NULL ) return( NULL );
p = values;
for( i = 0; i < xDT->length; i++, p++ ) {
index += data[i].index;
*p = Xs[index];
p++;
*p = data[i].value;
}
return( values );
}
/*
************************************************************
*/
double *xData_2d_xindex_y_toFilledYs( statusMessageReporting *smr, xData_element *element, double *Xs ) {
return( xData_2d_xindex_y_toFilled( smr, element, Xs, 1 ) );
}
/*
************************************************************
*/
int xData_2d_xindex_y_free_toFilledYs( statusMessageReporting *smr, void *data ) {
xData_free( smr, data );
return( 0 );
}
/*
************************************************************
*/
double *xData_2d_xindex_y_toFilledXYs( statusMessageReporting *smr, xData_element *element, double *Xs ) {
return( xData_2d_xindex_y_toFilled( smr, element, Xs, 2 ) );
}
/*
************************************************************
*/
static double *xData_2d_xindex_y_toFilled( statusMessageReporting *smr, xData_element *element, double *Xs, int size ) {
/*
* Returns NULL if length is 0 or memory could not be allocated.
*/
xDataType *xDT = &(element->xDataTypeInfo);
xData_Int i, j, index = xDT->start, length = xDT->end - xDT->start;
double x1, x2, *x, y1, y2, *values = NULL, *p;
xData_2d_xindex_y *data = (xData_2d_xindex_y *) xDT->data;
if( xDT->length == 0 ) return( NULL );
//if( ( values = xData_malloc2( smr, size * length * sizeof( double ), 0, "values" ) ) == NULL ) return( NULL );
if( ( values = (double*) xData_malloc2( smr, size * length * sizeof( double ), 0, "values" ) ) == NULL ) return( NULL );
p = values;
x = &(Xs[xDT->start]);
x2 = 0.; /* Dummy initializations, as x1 and y1 (set by x2 and y2) are not used first time thru loop. */
y2 = 0.;
for( i = 0; i < xDT->length; i++, x++, p++ ) {
index += data[i].index; /* Note, data[0].index is 0; otherwise, following logic would not work. */
x1 = x2;
x2 = Xs[index];
y1 = y2;
y2 = data[i].value;
for( j = data[i].index; j > 1; j--, x++, p++ ) {
if( size == 2 ) {
*p = *x;
p++;
}
*p = ( y1 * ( x2 - *x ) + y2 * ( *x - x1 ) ) / ( x2 - x1 );
}
if( size == 2 ) *(p++) = *x;
*p = y2;
}
return( values );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,194 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
#include "xData.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
//char const * const xData_twod_xShared_yHistogram_ID = "2d_xShared_yHistogram";
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text );
static char *toString( statusMessageReporting *smr, xDataType *xDT );
static int release( statusMessageReporting *smr, xDataType *xDT );
/*
************************************************************
*/
int xData_init_2d_xShared_yHistogram( statusMessageReporting *smr, xData_element *element ) {
xDataType *xDT = &(element->xDataTypeInfo);
xDT->status = xData_xDataType_Ok;
xDT->typeString = xData_twod_xShared_yHistogram_ID;
xDT->element = element;
xDT->toData = toData;
xDT->toString = toString;
xDT->release = release;
xDT->data = NULL;
return( xData_xDataTypeConvertAttributes( smr, element ) );
}
/*
************************************************************
*/
int xData_is_2d_xShared_yHistogram( statusMessageReporting *smr, xDataType *xDT, int setMsg ) {
return( xData_is_xDataType( smr, xDT, xData_twod_xShared_yHistogram_ID, setMsg ) );
}
/*
************************************************************
*/
int xData_isElement_2d_xShared_yHistogram( statusMessageReporting *smr, xData_element *element, int setMsg ) {
return( xData_is_2d_xShared_yHistogram( smr, &(element->xDataTypeInfo), setMsg ) );
}
/*
************************************************************
*/
//double *xData_2d_xShared_yHistogram_copyData( statusMessageReporting *smr, xData_element *element, xData_Int *n ) {
double *xData_2d_xShared_yHistogram_copyData( statusMessageReporting *, xData_element *element, xData_Int *n ) {
xDataType *xDT = &(element->xDataTypeInfo);
xData_Int i;
double *p, *values, *d = (double *) xDT->data;
*n = xDT->end - xDT->start;
if( xDT->length == 0 ) return( NULL );
if( *n == 0 ) return( NULL );
//if(( values = xData_malloc2( NULL, *n * sizeof( double ), 0, "values" ) )) {
if(( values = (double*) xData_malloc2( NULL, *n * sizeof( double ), 0, "values" ) )) {
p = values;
for( i = 0; i < *n; i++, p++, d++ ) *p = *d;
}
return( values );
}
/*
************************************************************
*/
int xData_2d_xShared_yHistogram_free_copyData( statusMessageReporting *smr, void *data ) {
xData_free( smr, data );
return( 0 );
}
/*
************************************************************
*/
//static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text ) {
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *, const char *text ) {
xData_Int i, n = xDT->end - xDT->start, status = 0;
char *e;
const char *s;
double *p;
void *smrUser = xData_get_smrUserInterfaceFromElement( xDT->element );
if( xDT->status != xData_xDataType_Ok ) return( xData_setMessageError_ReturnInt( 1, smr, smrUser, __FILE__, __LINE__, 1, "bad xDataType instance" ) );
release( smr, xDT );
if( ( xDT->data = xData_malloc2( smr, n * sizeof( double ), 0, "data" ) ) == NULL ) return( 1 );
for( i = 0, s = text, p = (double *) xDT->data; i < n; i++, p++, s = e ) {
if( xData_stringTo_double( smr, smrUser, s, p, " \n", &e ) ) { status = 1; break; }
}
if( status == 0 ) {
while( isspace( *e ) ) e++;
if( *e != 0 ) {
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "text contains extra data = %s", e );
status = 1;
}
}
if( status != 0 ) release( smr, xDT );
return( status );
}
/*
************************************************************
*/
//static char *toString( statusMessageReporting *smr, xDataType *xDT ) {
static char *toString( statusMessageReporting *, xDataType *xDT ) {
xData_Int i, n = xDT->length, recordSize = 16 + 1;
char *str, *p, fmt[32] = " %15.7e\n";
//double *d = xDT->data;
double *d = (double*) xDT->data;
if( n < 0 ) n = 0;
if( ( str = (char *) malloc( recordSize * ( n + 1 ) ) ) == NULL ) return( NULL );
for( i = 0, p = str; i < n; i++, p += recordSize, d++ ) sprintf( p, fmt, d ); *p = 0;
return( str );
}
/*
************************************************************
*/
static int release( statusMessageReporting *smr, xDataType *xDT ) {
if( xDT->data != NULL ) xDT->data = xData_free( smr, xDT->data );
return( xDT->status = xData_xDataType_Ok );
}
/*
************************************************************
*/
double *xData_2d_xShared_yHistogram_toFilledXYs( xDataType *xDT, xData_Int nXs, double *Xs ) {
/*
* Returns NULL if length is 0, memory could not be allocated, or nXs != xDT->length + 1.
*/
xData_Int i;
//double *p, *values, *d = xDT->data;
double *p, *values, *d = (double*) xDT->data;
if( xDT->length == 0 ) return( NULL );
if( ( xDT->length + 1 ) != nXs ) return( NULL );
//if( ( values = xData_malloc2( NULL, 4 * xDT->length * sizeof( double ), 0, "values" ) ) == NULL ) return( NULL );
if( ( values = (double*) xData_malloc2( NULL, 4 * xDT->length * sizeof( double ), 0, "values" ) ) == NULL ) return( NULL );
p = values;
for( i = 0; i < xDT->length; i++ ) {
*(p++) = Xs[i];
*(p++) = 0.;
*(p++) = Xs[i+1];
*(p++) = 0.;
}
p = &(values[4 * xDT->start + 1]);
for( i = xDT->start; i < xDT->end; i++, d++, p += 2 ) {
*p = *d;
p += 2;
*p = *d;
}
return( values );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,164 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
#include "xData.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
//char const * const xData_twod_xy_ID = "2d.xy";
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text );
static char *toString( statusMessageReporting *smr, xDataType *xDT );
static int release( statusMessageReporting *smr, xDataType *xDT );
/*
************************************************************
*/
int xData_init_2d_xy( statusMessageReporting *smr, xData_element *element ) {
xDataType *xDT = &(element->xDataTypeInfo);
xDT->status = xData_xDataType_Ok;
xDT->typeString = xData_twod_xy_ID;
xDT->element = element;
xDT->toData = toData;
xDT->toString = toString;
xDT->release = release;
xDT->data = NULL;
return( xData_xDataTypeConvertAttributes( smr, element ) );
}
/*
************************************************************
*/
int xData_is_2d_xy( statusMessageReporting *smr, xDataType *xDT, int setMsg ) {
return( xData_is_xDataType( smr, xDT, xData_twod_xy_ID, setMsg ) );
}
/*
************************************************************
*/
int xData_isElement_2d_xy( statusMessageReporting *smr, xData_element *element, int setMsg ) {
return( xData_is_2d_xy( smr, &(element->xDataTypeInfo), setMsg ) );
}
/*
************************************************************
*/
double *xData_2d_xy_allocateCopyData( statusMessageReporting *smr, xData_element *element, xData_Int *length ) {
xData_Int i;
xDataType *xDT = &(element->xDataTypeInfo);
double *data;
if( !xData_isElement_2d_xy( smr, element, 1 ) ) return( NULL );
*length = xDT->length;
//if( ( data = xData_malloc2( smr, 2 * xDT->length * sizeof( double ), 0, "data" ) ) ) {
if( ( data = (double*)xData_malloc2( smr, 2 * xDT->length * sizeof( double ), 0, "data" ) ) ) {
for( i = 0; i < 2 * xDT->length; i++ ) data[i] = ((double *) xDT->data)[i];
}
return( data );
}
/*
************************************************************
*/
int xData_2d_xy_free_copyData( statusMessageReporting *smr, void *data ) {
xData_free( smr, data );
return( 0 );
}
/*
************************************************************
*/
//static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text ) {
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *, const char *text ) {
xData_Int i, status = 0;
char *e;
const char *s;
double *p;
void *smrUser = xData_get_smrUserInterfaceFromElement( xDT->element );
if( xDT->status != xData_xDataType_Ok ) return( xData_setMessageError_ReturnInt( 1, smr, smrUser, __FILE__, __LINE__,
1, "bad xDataType instance" ) );
release( smr, xDT );
if( ( xDT->data = xData_malloc2( smr, 2 * xDT->length * sizeof( double ), 0, "data" ) ) == NULL ) return( 1 );
for( i = 0, s = text, p = (double *) xDT->data; i < 2 * xDT->length; i++, p++, s = e ) {
if( xData_stringTo_double( smr, smrUser, s, p, " \n", &e ) ) { status = 1; break; }
}
if( status == 0 ) {
while( isspace( *e ) ) e++;
if( *e != 0 ) {
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "text contains extra data = %s", e );
status = 1;
}
}
if( status != 0 ) release( smr, xDT );
return( status );
}
/*
************************************************************
*/
//static char *toString( statusMessageReporting *smr, xDataType *xDT ) {
static char *toString( statusMessageReporting *, xDataType *xDT ) {
xData_Int i, n = xDT->length;
char *str, *p;
double *data = (double *) xDT->data;
if( n < 0 ) n = 0;
if( ( str = (char *) malloc( 2 * ( n + 1 ) * 17 ) ) == NULL ) return( NULL );
for( i = 0, p = str; i < n; i++, p += 2 * 16 + 1, data += 2 ) {
sprintf( p, " %15.7e %15.7e\n", *data, data[1] );
}
*p = 0;
return( str );
}
/*
************************************************************
*/
static int release( statusMessageReporting *smr, xDataType *xDT ) {
if( xDT->data != NULL ) xDT->data = xData_free( smr, xDT->data );
return( xDT->status = xData_xDataType_Ok );
}
#if defined __cplusplus
}
#endif
@@ -0,0 +1,251 @@
/*
# <<BEGIN-copyright>>
# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory
# Written by Bret R. Beck, beck6@llnl.gov.
# CODE-461393
# All rights reserved.
#
# This file is part of GIDI. For details, see nuclear.llnl.gov.
# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the disclaimer (as noted below) in the
# documentation and/or other materials provided with the distribution.
# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# <<END-copyright>>
*/
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <ctype.h>
#include "xData.h"
#if defined __cplusplus
namespace GIDI {
using namespace GIDI;
#endif
//char const * const xData_matrix_ID = "matrix";
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text );
static char *toString( statusMessageReporting *smr, xDataType *xDT );
static int release( statusMessageReporting *smr, xDataType *xDT );
/*
************************************************************
*/
int xData_init_matrix( statusMessageReporting *smr, xData_element *element ) {
xDataType *xDT = &(element->xDataTypeInfo);
xDT->status = xData_xDataType_Ok;
xDT->typeString = xData_matrix_ID;
xDT->element = element;
xDT->toData = toData;
xDT->toString = toString;
xDT->release = release;
xDT->data = NULL;
return( xData_xDataTypeConvertAttributes( smr, element ) );
}
/*
************************************************************
*/
int xData_is_matrix( statusMessageReporting *smr, xDataType *xDT, int setMsg ) {
return( xData_is_xDataType( smr, xDT, xData_matrix_ID, setMsg ) );
}
/*
************************************************************
*/
int xData_isElement_matrix( statusMessageReporting *smr, xData_element *element, int setMsg ) {
return( xData_is_matrix( smr, &(element->xDataTypeInfo), setMsg ) );
}
/*
************************************************************
*/
xData_matrix *xData_matrix_copyData( statusMessageReporting *smr, xData_element *element ) {
xData_Int i, n;
xDataType *xDT = &(element->xDataTypeInfo);
xData_matrix *oldMatrix = (xData_matrix *) xDT->data, *newMatrix;
double *oldP, *newP;
if( !xData_isElement_matrix( smr, element, 1 ) ) return( NULL );
n = oldMatrix->rows * oldMatrix->columns;
if( ( newMatrix = (xData_matrix *) xData_malloc2( smr, sizeof( xData_matrix ) + xDT->length * sizeof( xData_matrix_rowStartEnd ) +
n * sizeof( double ), 0, "data" ) ) == NULL ) return( NULL );
newMatrix->rows = oldMatrix->rows;
newMatrix->columns = oldMatrix->columns;
newMatrix->rowStartEnds = (xData_matrix_rowStartEnd *) &(newMatrix[1]);
newMatrix->values = (double *) &(newMatrix->rowStartEnds[xDT->length]);
for( i = 0; i < xDT->length; i++ ) newMatrix->rowStartEnds[i] = oldMatrix->rowStartEnds[i];
for( i = 0, oldP = oldMatrix->values, newP = newMatrix->values; i < n; i++, oldP++, newP++ ) *newP = *oldP;
return( newMatrix );
}
/*
************************************************************
*/
int xData_matrix_free_copyData( statusMessageReporting *smr, void *data ) {
xData_free( smr, data );
return( 0 );
}
/*
************************************************************
*/
static int toData( statusMessageReporting *smr, xDataType *xDT, xData_attributionList *attributes, const char *text ) {
xData_Int i, j, row, start, end, rows, columns, status = 0;
char *e;
const char *s, *size;
double *p;
xData_matrix *matrix;
void *smrUser = xData_get_smrUserInterfaceFromElement( xDT->element );
if( xDT->status != xData_xDataType_Ok ) return( xData_setMessageError_ReturnInt( 1, smr, smrUser, __FILE__, __LINE__, 1, "bad xDataType instance" ) );
release( smr, xDT );
if( ( size = xData_getAttributesValue( attributes, "size" ) ) == NULL ) return( xData_setMessageError_ReturnInt( 1, smr,
smrUser, __FILE__, __LINE__, 1, "xData missing \"size\" attribute" ) );
if( xData_stringTo_xData_Int( smr, smrUser, size, &rows, " ,", &e ) ) return( 1 );
while( isspace( *e ) ) e++;
if( *e != ',' ) {
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "matrix size attribute missing \",\" separator" );
return( 1 );
}
s = (const char *) ++e;
if( xData_stringTo_xData_Int( smr, smrUser, s, &columns, "", &e ) ) return( 1 );
if( ( xDT->data = (xData_matrix *) xData_malloc2( NULL, sizeof( xData_matrix ) + xDT->length * sizeof( xData_matrix_rowStartEnd ) +
rows * columns * sizeof( double ), 0, "xDT->data" ) ) == NULL ) return( 1 );
matrix = (xData_matrix *) xDT->data;
matrix->rows = rows;
matrix->columns = columns;
matrix->rowStartEnds = (xData_matrix_rowStartEnd *) &(matrix[1]);
matrix->values = (double *) &(matrix->rowStartEnds[xDT->length]);
for( i = 0, s = text; i < xDT->length; i++ ) {
if( xData_stringTo_xData_Int( smr, smrUser, s, &row, " \n", &e ) ) { status = 1; break; }
if( ( row < 0 ) || ( row >= rows ) ) {
status = 1;
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "row = %lld out-of-range (valid range is 0 <= row <= %lld)", row, rows );
break;
}
if( xData_stringTo_xData_Int( smr, smrUser, e, &start, " \n", &e ) ) { status = 1; break; }
if( ( start < 0 ) || ( start > columns ) ) {
status = 1;
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "start = %lld out-of-range (valid range is 0 <= start <= %lld)", start, columns );
break;
}
if( xData_stringTo_xData_Int( smr, smrUser, e, &end, " \n", &e ) ) { status = 1; break; }
if( ( end < start ) || ( end > columns ) ) {
status = 1;
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "end = %lld out-of-range (valid range is %lld <= end <= %lld)", end, start, columns );
break;
}
matrix->rowStartEnds[i].row = row;
matrix->rowStartEnds[i].start = start;
matrix->rowStartEnds[i].end = end;
p = &(matrix->values[row * columns]);
for( j = 0; j < start; j++ ) *(p++) = 0.;
for( s = e; j < end; j++, p++, s = e ) {
if( xData_stringTo_double( smr, smrUser, s, p, " \n", &e ) ) { status = 1; break; }
}
if( status != 0 ) break;
for( ; j < columns; j++ ) *(p++) = 0.;
}
if( status == 0 ) {
while( isspace( *e ) ) e++;
if( *e != 0 ) {
smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "matrix contains extra data = %s", e );
status = 1;
}
}
if( status != 0 ) release( smr, xDT );
return( status );
}
/*
************************************************************
*/
//static char *toString( statusMessageReporting *smr, xDataType *xDT ) {
static char *toString( statusMessageReporting *, xDataType *xDT ) {
xData_Int i, n = 1, start, end, iRow, iColumn;
char *str, *p;
xData_matrix *matrix = (xData_matrix *) xDT->data;
double *row;
for( iRow = 0; iRow < matrix->rows; iRow++ ) {
row = &(matrix->values[iRow * matrix->columns]);
for( iColumn = 0; iColumn < matrix->columns; iColumn++ ) if( row[iColumn] != 0. ) break;
start = iColumn;
for( end = iColumn; iColumn < matrix->columns; iColumn++ ) if( row[iColumn] != 0. ) end = iColumn + 1;
if( start < end ) n += 10 * 3 + 17 * ( end - start + 1 );
}
if( ( str = (char *) xData_malloc2( NULL, n, 0, "str" ) ) == NULL ) return( NULL );
for( iRow = 0, p = str; iRow < matrix->rows; iRow++ ) {
row = &(matrix->values[iRow * matrix->columns]);
for( iColumn = 0; iColumn < matrix->columns; iColumn++ ) if( row[iColumn] != 0. ) break;
start = iColumn;
for( end = iColumn; iColumn < matrix->columns; iColumn++ ) if( row[iColumn] != 0. ) end = iColumn + 1;
if( start < end ) {
sprintf( p, "%3d %3d %3d", iRow, start, end );
p += strlen( p );
for( i = start; i < end; i++, p += 17 ) sprintf( p, " %16.9e", row[i] );
sprintf( p, "\n" );
p++;
}
*p = 0;
}
return( str );
}
/*
************************************************************
*/
static int release( statusMessageReporting *smr, xDataType *xDT ) {
if( xDT->data != NULL ) xDT->data = xData_free( smr, xDT->data );
return( xDT->status = xData_xDataType_Ok );
}
/*
************************************************************
*/
int getRowStartEndAtIndex( statusMessageReporting *smr, xDataType *xDT, xData_Int index, xData_Int *row, xData_Int *start, xData_Int *end ) {
int status = 0;
xData_matrix *matrix = (xData_matrix *) xDT->data;
if( !xData_is_matrix( smr, xDT, 1 ) ) return( 1 );
if( ( index < 0 ) || ( index >= xDT->length ) ) {
smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( xDT->element ), __FILE__, __LINE__, 1,
"index = %lld out of range (valid range 0 <= index < %lld)", index, xDT->length );
status = 1; }
else {
*row = matrix->rowStartEnds[index].row;
*start = matrix->rowStartEnds[index].start;
*end = matrix->rowStartEnds[index].end;
}
return( status );
}
#if defined __cplusplus
}
#endif