<trclass="memdesc:"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Represents the canonical (X, Y, Z) composition of stellar material. <ahref="structfourdst_1_1composition_1_1_canonical_composition.html#details">More...</a><br/></td></tr>
<trclass="memdesc:"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Manages a collection of chemical species and their abundances. <ahref="classfourdst_1_1composition_1_1_composition.html#details">More...</a><br/></td></tr>
<trclass="memdesc:"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Abstract base class for chemical composition representations. <ahref="classfourdst_1_1composition_1_1_composition_abstract.html#details">More...</a><br/></td></tr>
<trclass="memdesc:a708d71303db2fa22c8871f3bfc3d11d4"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Constructs a stellar <code><aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a></code> from a named solar metal-fraction scheme and isotopic-percentage table, scaled to the supplied bulk hydrogen and helium mass fractions. <br/></td></tr>
<trclass="memdesc:aad96edce7a144f1d73e62f622f3063de"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Enum-based overload of <code><aclass="el"href="#a708d71303db2fa22c8871f3bfc3d11d4"title="Constructs a stellar Composition from a named solar metal-fraction scheme and isotopic-percentage tab...">get_composition_record()</a></code>. <br/></td></tr>
<trclass="memdesc:aa90b1ef07d607c0c829bedccf381cf54"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from symbols and their corresponding mass fractions. <br/></td></tr>
<trclass="memdesc:a39d4f84dfa85ddda3b9feb5dda1afc1e"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from species and their corresponding mass fractions. <br/></td></tr>
<trclass="memdesc:a2cb98194b465f646973ceba38d0e7d95"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from species in a set and their corresponding mass fractions. <br/></td></tr>
<trclass="memdesc:ada2fea5f3ac5cff3ecd67541a0a094fc"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from a map of species to mass fractions. <br/></td></tr>
<trclass="memdesc:abf844ad6e10524bf99fc3bf6c9d68465"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from a map of species to mass fractions. <br/></td></tr>
<trclass="memdesc:a8163289e584a05b4075c775279761e55"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from a map of species to mass fractions. <br/></td></tr>
<trclass="memdesc:abd0e185f7fd52130f36414faf2dc07d7"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from a map of species to mass fractions. <br/></td></tr>
<p>The composition module provides a small, but expressive, API for constructing and querying material compositions used throughout the 4D-STAR codebase. A <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> represents a collection of atomic species together with their molar abundances. From these molar abundances the module can compute derived quantities such as mass fractions, number fractions, canonical (X, Y, Z) composition, mean particle mass, and the electron abundance (Y_e).</p>
<li>Species and Symbols: Atomic isotopes are represented by the strongly-typed <aclass="el"href="structfourdst_1_1atomic_1_1_species.html"title="Represents an atomic species (isotope) with its fundamental physical properties.">fourdst::atomic::Species</a> values (see <code><aclass="el"href="species_8h.html">fourdst/atomic/species.h</a></code>). Each species also has a human-readable string symbol (e.g. "H-1", "He-4") used by some constructors and convenience overloads.</li>
<li>Molar abundances: The <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> API accepts and stores molar abundances (absolute mole counts). Many derived quantities (mass fraction, number fraction, mean particle mass) are computed from these molar abundances.</li>
<li>Canonical composition: A <aclass="el"href="structfourdst_1_1composition_1_1_canonical_composition.html"title="Represents the canonical (X, Y, Z) composition of stellar material.">CanonicalComposition</a> (X, Y, Z) is provided which groups mass fractions into hydrogen (X), helium (Y), and metals (Z). A lightweight struct <code><aclass="el"href="structfourdst_1_1composition_1_1_canonical_composition.html"title="Represents the canonical (X, Y, Z) composition of stellar material.">CanonicalComposition</a></code> holds these values and provides an ostream operator for easy logging and testing.</li>
<li>Caching: The concrete <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> implementation caches computed vectors and scalars to avoid repeated work. The cache is invalidated automatically when molar abundances or registered species are changed.</li>
<li><pclass="startli"><aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a>: The primary concrete class for building and interrogating compositions. It implements the <aclass="el"href="classfourdst_1_1composition_1_1_composition_abstract.html"title="Abstract base class for chemical composition representations.">CompositionAbstract</a> interface and exposes methods to register symbols/species, set molar abundances, and query all commonly-needed derived quantities. Multiple constructors are provided for convenience (from vectors/sets of symbols or species, with optional molar-abundance initialization).</p>
<li><aclass="el"href="classfourdst_1_1composition_1_1_composition_abstract.html"title="Abstract base class for chemical composition representations.">CompositionAbstract</a>: A compact abstract interface implemented by <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> which guarantees the presence of all getter/query methods. This allows other components to accept composition-like objects without depending on the concrete implementation.</li>
<li>Utilities (<aclass="el"href="#aa90b1ef07d607c0c829bedccf381cf54"title="Build a Composition object from symbols and their corresponding mass fractions.">fourdst::composition::buildCompositionFromMassFractions</a>): Convenience helpers exist to construct a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> from mass fractions (instead of molar abundances). Those helpers validate that the provided mass fractions sum to unity within a tight tolerance and convert them into the corresponding molar abundances before returning a populated <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a>.</li>
<li>Exceptions (namespace <aclass="el"href="namespacefourdst_1_1composition_1_1exceptions.html">fourdst::composition::exceptions</a>): The module defines a small hierarchy of exceptions for error handling:<ul>
<li>CompositionError: Base class for composition-related errors.</li>
<li>InvalidCompositionError: Thrown when the composition is inconsistent or when mass fractions fail validation.</li>
<li>UnregisteredSymbolError: Thrown when an operation requires a symbol that hasn't been registered on the <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object.</li>
<li>UnknownSymbolError: Thrown when a provided string symbol does not map to any known atomic species in the atomic species database.</li>
</ul>
</li>
</ul>
<h2><aclass="anchor"id="autotoc_md7"></a>
Usage examples</h2>
<p>Example 1 – basic construction and queries: </p><divclass="fragment"><divclass="line"><spanclass="preprocessor">#include "<aclass="code"href="composition_8h.html">fourdst/composition/composition.h</a>"</span></div>
<divclass="ttc"id="aclassfourdst_1_1composition_1_1_composition_html"><divclass="ttname"><ahref="classfourdst_1_1composition_1_1_composition.html">fourdst::composition::Composition</a></div><divclass="ttdoc">Manages a collection of chemical species and their abundances.</div><divclass="ttdef"><b>Definition</b><ahref="composition_8h_source.html#l00099">composition.h:99</a></div></div>
<divclass="ttc"id="aclassfourdst_1_1composition_1_1_composition_html_a262d7133035d4e6f45daa81827abf5e7"><divclass="ttname"><ahref="classfourdst_1_1composition_1_1_composition.html#a262d7133035d4e6f45daa81827abf5e7">fourdst::composition::Composition::setMolarAbundance</a></div><divclass="ttdeci">void setMolarAbundance(const std::string &symbol, const double &molar_abundance)</div><divclass="ttdoc">Sets the molar abundance for a given symbol.</div><divclass="ttdef"><b>Definition</b><ahref="composition_8cpp_source.html#l00321">composition.cpp:321</a></div></div>
<divclass="ttc"id="aclassfourdst_1_1composition_1_1_composition_html_a3ab4dcda0bfd1a35b169bcc57fe66725"><divclass="ttname"><ahref="classfourdst_1_1composition_1_1_composition.html#a3ab4dcda0bfd1a35b169bcc57fe66725">fourdst::composition::Composition::registerSymbol</a></div><divclass="ttdeci">void registerSymbol(const std::string &symbol)</div><divclass="ttdoc">Registers a new symbol for inclusion in the composition.</div><divclass="ttdef"><b>Definition</b><ahref="composition_8cpp_source.html#l00234">composition.cpp:234</a></div></div>
<divclass="ttc"id="aclassfourdst_1_1composition_1_1_composition_html_a9ea2b673341fdc67afeb0f0517a54c8c"><divclass="ttname"><ahref="classfourdst_1_1composition_1_1_composition.html#a9ea2b673341fdc67afeb0f0517a54c8c">fourdst::composition::Composition::getMassFraction</a></div><divclass="ttdeci">std::unordered_map< atomic::Species, double > getMassFraction() const noexcept override</div><divclass="ttdoc">Gets the mass fractions of all species in the composition.</div><divclass="ttdef"><b>Definition</b><ahref="composition_8cpp_source.html#l00460">composition.cpp:460</a></div></div>
<divclass="ttc"id="aclassfourdst_1_1composition_1_1_composition_html_aac5b214a3d1278e127422224cb9cee50"><divclass="ttname"><ahref="classfourdst_1_1composition_1_1_composition.html#aac5b214a3d1278e127422224cb9cee50">fourdst::composition::Composition::getCanonicalComposition</a></div><divclass="ttdeci">CanonicalComposition getCanonicalComposition() const</div><divclass="ttdoc">Compute the canonical composition (X, Y, Z) of the composition.</div><divclass="ttdef"><b>Definition</b><ahref="composition_8cpp_source.html#l00552">composition.cpp:552</a></div></div>
<divclass="ttc"id="aclassfourdst_1_1composition_1_1_composition_html_afbbb5e51ad5ae5c0fa6bc0094195aecd"><divclass="ttname"><ahref="classfourdst_1_1composition_1_1_composition.html#afbbb5e51ad5ae5c0fa6bc0094195aecd">fourdst::composition::Composition::getMeanParticleMass</a></div><divclass="ttdeci">double getMeanParticleMass() const noexcept override</div><divclass="ttdoc">Compute the mean particle mass of the composition.</div><divclass="ttdef"><b>Definition</b><ahref="composition_8cpp_source.html#l00530">composition.cpp:530</a></div></div>
<divclass="ttc"id="anamespacefourdst_1_1composition_html"><divclass="ttname"><ahref="namespacefourdst_1_1composition.html">fourdst::composition</a></div><divclass="ttdoc">Utilities and types for representing and manipulating chemical compositions.</div></div>
<divclass="ttc"id="astructfourdst_1_1composition_1_1_canonical_composition_html"><divclass="ttname"><ahref="structfourdst_1_1composition_1_1_canonical_composition.html">fourdst::composition::CanonicalComposition</a></div><divclass="ttdoc">Represents the canonical (X, Y, Z) composition of stellar material.</div><divclass="ttdef"><b>Definition</b><ahref="composition_8h_source.html#l00046">composition.h:46</a></div></div>
</div><!-- fragment --><p>Example 2 – constructing from mass fractions: </p><divclass="fragment"><divclass="line"><spanclass="preprocessor">#include "fourdst/composition/utils.h"</span></div>
<divclass="ttc"id="anamespacefourdst_1_1composition_html_aa90b1ef07d607c0c829bedccf381cf54"><divclass="ttname"><ahref="#aa90b1ef07d607c0c829bedccf381cf54">fourdst::composition::buildCompositionFromMassFractions</a></div><divclass="ttdeci">Composition buildCompositionFromMassFractions(const std::vector< std::string >&symbols, const std::vector< double >&massFractions)</div><divclass="ttdoc">Build a Composition object from symbols and their corresponding mass fractions.</div><divclass="ttdef"><b>Definition</b><ahref="utils_8cpp_source.html#l00077">utils.cpp:77</a></div></div>
<li>Molar abundances are the canonical input for the <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> class. When passing mass fractions, use the <code>buildCompositionFromMassFractions</code> helper which performs the safe conversion and validation.</li>
<li>Many methods throw exceptions from the <code><aclass="el"href="namespacefourdst_1_1composition_1_1exceptions.html">fourdst::composition::exceptions</a></code> namespace on invalid usage (unknown symbols, unregistered species, or invalid abundance values). Callers should catch and handle these where appropriate.</li>
<li>Floating point results (mass/number fractions, mean particle mass, Y_e) are computed as doubles and may have small numerical round-off. Callers comparing values in tests should use an appropriate tolerance.</li>
</ul>
<h2><aclass="anchor"id="autotoc_md9"></a>
See also</h2>
<ul>
<li><aclass="el"href="species_8h.html">fourdst/atomic/species.h</a> — canonical atomic species definitions and symbols.</li>
<li><aclass="el"href="composition_8h.html">fourdst/composition/composition.h</a> — concrete <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> implementation.</li>
<p>Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from species in a set and their corresponding mass fractions. </p>
<dlclass="section return"><dt>Returns</dt><dd>A <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object constructed from the provided species and mass fractions. </dd></dl>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the provided mass fractions do not sum to within one part in 10^10 of 1.0. </td></tr>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the number of species does not match the number of mass fractions.</td></tr>
<pclass="definition">Definition at line <aclass="el"href="utils_8cpp_source.html#l00029">29</a> of file <aclass="el"href="utils_8cpp_source.html">utils.cpp</a>.</p>
<p>Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from a map of species to mass fractions. </p>
<dlclass="section return"><dt>Returns</dt><dd>A <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object constructed from the provided species and mass fractions. </dd></dl>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the provided mass fractions do not sum to within one part in 10^10 of 1.0. </td></tr>
<pclass="definition">Definition at line <aclass="el"href="utils_8cpp_source.html#l00100">100</a> of file <aclass="el"href="utils_8cpp_source.html">utils.cpp</a>.</p>
<p>Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from a map of species to mass fractions. </p>
<dlclass="section return"><dt>Returns</dt><dd>A <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object constructed from the provided species and mass fractions. </dd></dl>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the provided mass fractions do not sum to within one part in 10^10 of 1.0. </td></tr>
<pclass="definition">Definition at line <aclass="el"href="utils_8cpp_source.html#l00163">163</a> of file <aclass="el"href="utils_8cpp_source.html">utils.cpp</a>.</p>
<p>Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from species and their corresponding mass fractions. </p>
<dlclass="section return"><dt>Returns</dt><dd>A <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object constructed from the provided species and mass fractions. </dd></dl>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the provided mass fractions do not sum to within one part in 10^10 of 1.0. </td></tr>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the number of species does not match the number of mass fractions. </td></tr>
<pclass="definition">Definition at line <aclass="el"href="utils_8cpp_source.html#l00063">63</a> of file <aclass="el"href="utils_8cpp_source.html">utils.cpp</a>.</p>
<p>Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from symbols and their corresponding mass fractions. </p>
<dlclass="section return"><dt>Returns</dt><dd>A <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object constructed from the provided symbols and mass fractions. </dd></dl>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_unknown_symbol_error.html"title="Exception thrown when an unknown symbol is encountered.">exceptions::UnknownSymbolError</a></td><td>if any symbol is invalid. Symbols are invalid if they are not registered at compile time in the atomic species database (<code><aclass="el"href="species_8h.html">fourdst/atomic/species.h</a></code>). </td></tr>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the provided mass fractions do not sum to within one part in 10^10 of 1.0. </td></tr>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the number of symbols does not match the number of mass fractions. </td></tr>
<pclass="definition">Definition at line <aclass="el"href="utils_8cpp_source.html#l00077">77</a> of file <aclass="el"href="utils_8cpp_source.html">utils.cpp</a>.</p>
<p>Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from a map of species to mass fractions. </p>
<dlclass="section return"><dt>Returns</dt><dd>A <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object constructed from the provided species and mass fractions. </dd></dl>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the provided mass fractions do not sum to within one part in 10^10 of 1.0. </td></tr>
<pclass="definition">Definition at line <aclass="el"href="utils_8cpp_source.html#l00120">120</a> of file <aclass="el"href="utils_8cpp_source.html">utils.cpp</a>.</p>
<p>Build a <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object from a map of species to mass fractions. </p>
<dlclass="section return"><dt>Returns</dt><dd>A <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> object constructed from the provided species and mass fractions. </dd></dl>
<tr><tdclass="paramname"><aclass="el"href="classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html"title="Exception thrown when a composition is in an invalid or inconsistent state.">exceptions::InvalidCompositionError</a></td><td>if the provided mass fractions do not sum to within one part in 10^10 of 1.0. </td></tr>
<pclass="definition">Definition at line <aclass="el"href="utils_8cpp_source.html#l00134">134</a> of file <aclass="el"href="utils_8cpp_source.html">utils.cpp</a>.</p>
<p>Constructs a stellar <code><aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a></code> from a named solar metal-fraction scheme and isotopic-percentage table, scaled to the supplied bulk hydrogen and helium mass fractions. </p>
<p>Available metal fraction schemes (extracted from MESA <code>chem_def.f90</code>):</p><ul>
<li><code>AG89</code> (Anders & Grevesse 1989)</li>
<li><code>GN93</code> (Grevesse & Noels 1993)</li>
<li><code>GS98</code> (Grevesse & Sauval 1998)</li>
<li><code>L03</code> (Lodders 2003)</li>
<li><code>AGS05</code> (Asplund, Grevesse & Sauval 2005)</li>
<li><code>AGSS09</code> (Asplund et al. 2009)</li>
<li><code>A09_Przybilla</code></li>
<li><code>MB22_photospheric</code></li>
<li><code>AAG21_photospheric</code></li>
<li><code>L09</code> (Lodders 2009)</li>
</ul>
<p>Available isotopic percentage schemes:</p><ul>
<li><code>L03_data</code> (Lodders 2003)</li>
<li><code>L09_data</code> (Lodders 2009)</li>
</ul>
<p><b>Algorithm:</b></p><oltype="1">
<li><b>Data loading</b> — The embedded binary <code>StandardMetalFractions</code> is copied into a <code>std::vector<char></code> and parsed twice: once for <code>metal_fraction_scheme</code> and once for <code>isotopic_percentage_scheme</code>.</li>
<li><b>Species list</b> — The isotope table is iterated; any isotope whose element appears in the metals list or is <code>"H"</code> / <code>"He"</code> is looked up in the global <code><aclass="el"href="namespacefourdst_1_1atomic.html#a3f619cc8f8b2cd718a4082c6adb0de90"title="Map of species names to their corresponding Species objects.">atomic::species</a></code> registry by <code>"<Element>-<A>"</code> and added to the list.</li>
<li><b>H and He mass fractions</b> — Four entries are prepended (H-1, H-2, He-3, He-4) using Anders & Grevesse (1989) solar He3/He4 ratio:<ul>
<li>X(H-1) = clamp(1 - Z - Y, 0, 1)</li>
<li>X(H-2) = 0</li>
<li>X(He-3) = Y * xsol_He3 / (xsol_He3 + xsol_He4)</li>
<li>X(He-4) = Y * xsol_He4 / (xsol_He3 + xsol_He4) where xsol_He3 = 2.9291e-5 and xsol_He4 = 2.7521e-1.</li>
</ul>
</li>
<li><b>Atomic-weight weighting</b> — When <code>CompositionData::requires_atomic_weight</code> is <code>true</code>, each metal's number-fraction abundance is multiplied by the atomic mass of its most-abundant isotope (determined from the isotopic table).</li>
<li><b>Normalisation</b> — Metal fractions are summed and normalised to unity.</li>
<li><b>Isotope distribution</b> — Per-isotope mass fractions are computed as: X_i = Z_total * f_E * (p_i * m_i) / sum_j(p_j * m_j) where f_E is the normalised metal fraction, p_i the isotopic percentage (0-100 scale), and m_i the isotope's atomic mass.</li>
<li><b>Renormalisation</b> — Metal mass fractions are rescaled so their sum equals Z_total exactly.</li>
<li><b>Assembly</b> — <code>buildCompositionFromMassFractions(species, massFracs)</code> builds the final <code><aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a></code> object.</li>
</ol>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">metal_fraction_scheme</td><td>Block tag of the desired solar metal composition (e.g., <code>"GS98"</code>, <code>"AGSS09"</code>). Case-sensitive; must match a <code>BEGIN</code>/<code>END</code> tag in the embedded data exactly. </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">isotopic_percentage_scheme</td><td>Block tag of the isotopic percentage table (e.g., <code>"L03_data"</code>, <code>"L09_data"</code>). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">initial_z</td><td>Total metal mass fraction Z (0 <= Z < 1). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">initial_y</td><td>Total helium mass fraction Y (0 <= Y < 1, with X + Y + Z <= 1 recommended). X(H-1) is clamped to [0, 1] if the constraint is violated.</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd><code><aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a></code> Fully populated composition object with per-isotope mass fractions normalised to <code>initial_z</code> and <code>initial_y</code>.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">std::out_of_range</td><td>If a species name derived from the isotopic table is absent from <code><aclass="el"href="namespacefourdst_1_1atomic.html#a3f619cc8f8b2cd718a4082c6adb0de90"title="Map of species names to their corresponding Species objects.">atomic::species</a></code>, or if either scheme tag is not present in the embedded data. </td></tr>
<tr><tdclass="paramname">std::invalid_argument</td><td>If numeric fields in the embedded data are malformed (propagated from <code>std::stod</code> / <code>std::stoi</code>).</td></tr>
</table>
</dd>
</dl>
<dlclass="section user"><dt>Examples</dt><dd><divclass="fragment"><divclass="line"><spanclass="comment">// Grevesse & Sauval (1998) at Z = 0.02, Y = 0.28</span></div>
<divclass="ttc"id="anamespacefourdst_1_1composition_html_a708d71303db2fa22c8871f3bfc3d11d4"><divclass="ttname"><ahref="#a708d71303db2fa22c8871f3bfc3d11d4">fourdst::composition::get_composition_record</a></div><divclass="ttdeci">Composition get_composition_record(const std::string &metal_fraction_scheme, const std::string &isotopic_percentage_scheme, double initial_z, double initial_y)</div><divclass="ttdoc">Constructs a stellar Composition from a named solar metal-fraction scheme and isotopic-percentage tab...</div><divclass="ttdef"><b>Definition</b><ahref="standard__compositions_8cpp_source.html#l00252">standard_compositions.cpp:252</a></div></div>
</div><!-- fragment --></dd></dl>
<pclass="definition">Definition at line <aclass="el"href="standard__compositions_8cpp_source.html#l00252">252</a> of file <aclass="el"href="standard__compositions_8cpp_source.html">standard_compositions.cpp</a>.</p>
<p>Enum-based overload of <code><aclass="el"href="#a708d71303db2fa22c8871f3bfc3d11d4"title="Constructs a stellar Composition from a named solar metal-fraction scheme and isotopic-percentage tab...">get_composition_record()</a></code>. </p>
<p>Translates strongly-typed enum values to their canonical string representations via <code>SolarCompositions_to_string_map</code> and <code>IsotopicPercentages_to_string_map</code>, then delegates to the string-based overload. This overload is preferred as it prevents scheme name typos.</p>
<dlclass="params"><dt>Parameters</dt><dd>
<tableclass="params">
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">metal_fraction_scheme</td><td>Enum identifying the desired solar metal composition (e.g., <code>SolarCompositions::GS98</code>). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">isotopic_percentage_scheme</td><td>Enum identifying the isotopic percentage table (e.g., <code>IsotopicPercentages::L03</code>). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">initial_z</td><td>Total metal mass fraction Z (0 <= Z < 1). </td></tr>
<tr><tdclass="paramdir">[in]</td><tdclass="paramname">initial_y</td><td>Total helium mass fraction Y (0 <= Y < 1).</td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd><code><aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a></code> Fully populated composition; see the string-based overload for the complete algorithm description.</dd></dl>
<dlclass="exception"><dt>Exceptions</dt><dd>
<tableclass="exception">
<tr><tdclass="paramname">std::out_of_range</td><td>If the enum value is absent from its lookup map (should not occur with valid named enum members).</td></tr>
<pclass="definition">Definition at line <aclass="el"href="standard__compositions_8cpp_source.html#l00390">390</a> of file <aclass="el"href="standard__compositions_8cpp_source.html">standard_compositions.cpp</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="utils_8cpp_source.html#l00189">189</a> of file <aclass="el"href="utils_8cpp_source.html">utils.cpp</a>.</p>
<tr><tdclass="paramname">composition</td><td>The <aclass="el"href="classfourdst_1_1composition_1_1_composition.html"title="Manages a collection of chemical species and their abundances.">Composition</a> to output. </td></tr>
<pclass="definition">Definition at line <aclass="el"href="composition_8cpp_source.html#l00746">746</a> of file <aclass="el"href="composition_8cpp_source.html">composition.cpp</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="composition_8h_source.html#l00858">858</a> of file <aclass="el"href="composition_8h_source.html">composition.h</a>.</p>
<liclass="footer">Generated by <ahref="https://www.doxygen.org/index.html"><imgclass="footer"src="doxygen.svg"width="104"height="31"alt="doxygen"/></a> 1.13.2 </li>