14#define PoPI_decayModesChars "decayModes"
15#define PoPI_decayModeChars "decayMode"
16#define PoPI_decayPathChars "decayPath"
17#define PoPI_decayChars "decay"
18#define PoPI_productsChars "products"
19#define PoPI_photonEmissionProbabilitiesChars "photonEmissionProbabilities"
21#define PoPI_typeChars "type"
22#define PoPI_modeChars "mode"
23#define PoPI_completeChars "complete"
24#define PoPI_probabilityChars "probability"
47 for( std::size_t i1 = 0; i1 < m_decayModes.size( ); ++i1 ) {
48 DecayMode const &decayMode = m_decayModes[i1];
63 std::string::size_type size = m_decayModes.size( );
65 if( size == 0 )
return;
68 a_XMLList.push_back( std::move( header ) );
71 std::string indent2 = a_indent1 +
" ";
72 m_decayModes.toXMLList( a_XMLList, indent2 );
108 std::string residualState(
"" );
109 Decay const &decay = m_decayPath[0];
111 for( std::size_t i1 = 0; i1 < products.
size( ); ++i1 ) {
112 Product const &product = products[i1];
114 if( product.pid( ) !=
IDs::photon ) residualState = product.pid( );
121 NuclideGammaBranchInfo nuclideGammaBranchInfo( _probability, _photonEmissionProbabilities, gammaEnergy, residualState );
122 a_nuclideGammaBranchStateInfo.
add( nuclideGammaBranchInfo );
135 std::string header = a_indent1 +
"<decayMode label=\"" + m_label +
"\" mode=\"" + m_mode +
"\">";
136 a_XMLList.push_back( std::move( header ) );
138 std::string indent2 = a_indent1 +
" ";
139 m_probability.toXMLList( a_XMLList, indent2 );
140 m_decayPath.toXMLList( a_XMLList, indent2 );
176void Decay::toXMLList( std::vector<std::string> &a_XMLList, std::string
const &a_indent1 )
const {
180 std::string header = a_indent1 +
"<decay index=\"" + indexString +
"\"";
181 if( m_mode !=
"" ) header +=
" mode=\"" + m_mode +
"\"";
182 if( m_complete ) header +=
" mode=\"true\"";
184 a_XMLList.push_back( std::move( header ) );
186 std::string indent2 = a_indent1 +
" ";
187 m_products.toXMLList( a_XMLList, indent2 );
220 std::string header = a_indent1 +
"<product label=\"" + m_label +
"\" pid=\"" + m_pid +
"\"/>";
221 a_XMLList.push_back( std::move( header ) );
233 m_kind( a_node.attribute_as_string(
"kind" ) ),
239 if( !a_node.
empty( ) ) {
240 HAPI::Node table = a_node.child(
"table" );
241 m_rows = table.attribute_as_int(
"rows" );
242 m_columns = table.attribute_as_int(
"columns" );
244 HAPI::Node data = table.child(
"data" );
246 std::string text = LUPI::Misc::stripString( data.text( ).get( ) );
247 auto cells = LUPI::Misc::splitString( text,
' ', true );
249 m_ids.reserve( static_cast<std::size_t>( m_rows ) );
250 m_probabilities.reserve( static_cast<std::size_t>( m_rows ) );
251 m_photonEmissionProbabilities.reserve( static_cast<std::size_t>( m_rows ) );
252 for( std::size_t cellIndex = 0; cellIndex < cells.size( ); cellIndex += 3 ) {
253 m_ids.push_back( cells[cellIndex] );
254 m_probabilities.push_back( std::stod( cells[cellIndex+1] ) );
255 m_photonEmissionProbabilities.push_back( std::stod( cells[cellIndex+2] ) );
273 double initialStateMass = initialState.
massValue(
"amu" );
275 for( std::size_t index = 0; index < static_cast<std::size_t>( m_rows ); ++index ) {
276 std::string residualState( m_ids[index] );
277 double _probability = m_probabilities[index];
278 double _photonEmissionProbabilities = m_photonEmissionProbabilities[index];
283 NuclideGammaBranchInfo nuclideGammaBranchInfo( _probability, _photonEmissionProbabilities, gammaEnergy, residualState );
284 a_nuclideGammaBranchStateInfo.
add( nuclideGammaBranchInfo );
#define PoPI_discreteChars
#define PoPI_decayModeElectroMagnetic
#define PoPI_decayDataChars
#define PoPI_completeChars
#define PoPI_probabilityChars
#define PoPI_decayModesChars
#define PoPI_decayModeChars
#define PoPI_productsChars
#define PoPI_photonEmissionProbabilitiesChars
#define PoPI_decayPathChars
std::string const value() const
Node child(const char *name) const
Attribute attribute(const char *a_name) const
T const & get(std::string const &a_id) const
DecayData(HAPI::Node const &a_node)
void calculateNuclideGammaBranchStateInfo(PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &a_nuclideGammaBranchStateInfo) const
void toXMLList(std::vector< std::string > &a_XMLList, std::string const &a_indent1) const
void calculateNuclideGammaBranchStateInfo(PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &a_nuclideGammaBranchStateInfo) const
DecayMode(HAPI::Node const &a_node, DecayData const *a_decayData)
void toXMLList(std::vector< std::string > &a_XMLList, std::string const &a_indent1) const
PQ_suite const & photonEmissionProbabilities() const
PQ_suite const & probability() const
void toXMLList(std::vector< std::string > &a_XMLList, std::string const &a_indent1) const
Decay(HAPI::Node const &a_node, DecayMode const *a_decayMode)
void calculateNuclideGammaBranchStateInfo(PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &nuclideGammaBranchStateInfo) const
GammaDecayData(HAPI::Node const &a_node)
std::string const & state() const
void add(NuclideGammaBranchInfo const &a_nuclideGammaBranchInfo)
virtual double massValue(char const *a_unit) const
void toXMLList(std::vector< std::string > &a_XMLList, std::string const &a_indent1) const
Product(HAPI::Node const &a_node, Decay *a_DB)
std::string::size_type size(void) const
double getPhysicalQuantityOfSuiteAsDouble(PQ_suite const &a_suite, bool a_allowEmpty=false, double a_emptyValue=0.0)
void appendXMLEnd(std::vector< std::string > &a_XMLList, std::string const &a_label)
std::string to_string(G4FermiAtomicMass mass)
static std::string const photon