Skip to content

Commit

Permalink
Refactor isotope mass fraction handling and configuration
Browse files Browse the repository at this point in the history
- Remove raw_isotope_abundance from Composition class
- Update mass fraction parsing to conditionally apply isotope decay
- Modify default model_isotope_time_0 to -1 s to allow skipping decay
- Update test fixtures to explicitly set model_isotope_time_0
- Simplify mass fraction parsing functions by removing redundant returns
  • Loading branch information
wkerzendorf committed Feb 16, 2025
1 parent 13c9a31 commit 7c2e477
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 31 deletions.
2 changes: 1 addition & 1 deletion tardis/energy_input/tests/test_gamma_ray_channel.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def gamma_ray_test_composition(gamma_ray_simulation_state):
"""

raw_isotopic_mass_fraction = (
gamma_ray_simulation_state.composition.raw_isotope_abundance
gamma_ray_simulation_state.composition.isotopic_mass_fraction
)
composition = gamma_ray_simulation_state.composition
cell_masses = composition.calculate_cell_masses(
Expand Down
4 changes: 2 additions & 2 deletions tardis/io/configuration/schemas/model_definitions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ definitions:
description: filename
model_isotope_time_0:
type: quantity
default: 0 s
default: -1 s
description: Initial time for isotope decay

required:
Expand All @@ -199,7 +199,7 @@ definitions:
- uniform
model_isotope_time_0:
type: quantity
default: 0 s
default: -1 s
description: Initial time for isotope decay
additionalProperties:
type: number
Expand Down
14 changes: 4 additions & 10 deletions tardis/io/model/parse_composition_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,14 @@ def parse_composition_from_config(atom_data, config, time_explosion, geometry):
"""
density, electron_densities = parse_density_from_config(config)

(
nuclide_mass_fractions,
raw_isotope_mass_fractions,
) = parse_mass_fractions_from_config(config, geometry, time_explosion)
(nuclide_mass_fractions) = parse_mass_fractions_from_config(
config, geometry, time_explosion
)

return (
Composition(
density,
nuclide_mass_fractions,
raw_isotope_mass_fractions,
atom_data.atom_data.mass.copy(),
),
electron_densities,
Expand Down Expand Up @@ -86,15 +84,11 @@ def parse_composition_from_csvy(
csvy_model_config, csvy_model_data, time_explosion
)

(
nuclide_mass_fractions,
raw_isotope_mass_fractions,
) = parse_mass_fractions_from_csvy(
(nuclide_mass_fractions) = parse_mass_fractions_from_csvy(
csvy_model_config, csvy_model_data, geometry, time_explosion
)
return Composition(
density,
nuclide_mass_fractions,
raw_isotope_mass_fractions,
atom_data.atom_data.mass.copy(),
)
22 changes: 7 additions & 15 deletions tardis/io/model/parse_mass_fraction_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,18 +89,16 @@ def parse_mass_fractions_from_config(config, geometry, time_explosion):
isotope_mass_fractions /= norm_factor
# The next line is if the mass_fractions are given via dict
# and not gone through the schema validator
raw_isotope_mass_fractions = isotope_mass_fractions
model_isotope_time_0 = config.model.abundances.get(
"model_isotope_time_0", 0.0 * u.day
)
isotope_mass_fractions = IsotopicMassFraction(
isotope_mass_fractions, time_0=model_isotope_time_0
).decay(time_explosion)
model_isotope_time_0 = config.model.abundances.model_isotope_time_0
if model_isotope_time_0 >= 0 * u.s:
isotope_mass_fractions = IsotopicMassFraction(
isotope_mass_fractions, time_0=model_isotope_time_0
).decay(time_explosion)

nuclide_mass_fractions = convert_to_nuclide_mass_fractions(
isotope_mass_fractions, mass_fractions
)
return nuclide_mass_fractions, raw_isotope_mass_fractions
return nuclide_mass_fractions


def parse_mass_fractions_from_csvy(
Expand Down Expand Up @@ -171,16 +169,10 @@ def parse_mass_fractions_from_csvy(
mass_fractions /= norm_factor
isotope_mass_fractions /= norm_factor

raw_isotope_mass_fraction = isotope_mass_fractions
isotope_mass_fractions = IsotopicMassFraction(
isotope_mass_fractions, time_0=csvy_model_config.model_isotope_time_0
).decay(time_explosion)
return (
convert_to_nuclide_mass_fractions(
isotope_mass_fractions, mass_fractions
),
raw_isotope_mass_fraction,
)
return convert_to_nuclide_mass_fractions(isotope_mass_fractions, mass_fractions)


def convert_to_nuclide_mass_fractions(isotopic_mass_fractions, mass_fractions):
Expand Down
2 changes: 0 additions & 2 deletions tardis/model/matter/composition.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ def __init__(
self,
density,
nuclide_mass_fraction,
raw_isotope_abundance,
element_masses,
element_masses_unit=u.g,
):
Expand All @@ -89,7 +88,6 @@ def __init__(
isotope_masses = self.assemble_isotope_masses()

self.nuclide_masses = pd.concat([self.nuclide_masses, isotope_masses])
self.raw_isotope_abundance = raw_isotope_abundance

def assemble_isotope_masses(self):
isotope_mass_df = pd.Series(
Expand Down
3 changes: 2 additions & 1 deletion tardis/model/tests/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ def non_uniform_simulation_state(atomic_dataset, example_model_file_dir):
config = Configuration.from_yaml(
example_model_file_dir / "tardis_configv1_isotope_iabund.yml"
)

config.model.abundances.model_isotope_time_0 = 0 * u.s
return SimulationState.from_config(config, atom_data=atomic_dataset)


Expand Down Expand Up @@ -435,6 +435,7 @@ def simulation_state(self, example_model_file_dir, atomic_dataset):
config = Configuration.from_yaml(
example_model_file_dir / "tardis_configv1_isotope_iabund.yml"
)
config.model.abundances.model_isotope_time_0 = 0 * u.s
return SimulationState.from_config(config, atom_data=atomic_dataset)

def test_atomic_mass(self, simulation_state):
Expand Down
2 changes: 2 additions & 0 deletions tardis/model/tests/test_csvy_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import numpy.testing as npt
import pandas as pd
import pytest
from astropy import units as u

from tardis.io.configuration.config_reader import Configuration
from tardis.model import SimulationState
Expand Down Expand Up @@ -32,6 +33,7 @@ def test_compare_models(model_config_fnames, atomic_dataset):
csvy_config_file, old_config_file = model_config_fnames
tardis_config = Configuration.from_yaml(csvy_config_file)
tardis_config_old = Configuration.from_yaml(old_config_file)
tardis_config_old.model.abundances.model_isotope_time_0 = 0 * u.s
csvy_simulation_state = SimulationState.from_csvy(
tardis_config, atom_data=atomic_dataset
)
Expand Down
2 changes: 2 additions & 0 deletions tardis/plasma/tests/test_tardis_model_density_config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import numpy.testing as npt
import pandas.testing as pdt
import pytest
from astropy import units as u

from tardis.io.configuration.config_reader import Configuration
from tardis.model import SimulationState
Expand All @@ -16,6 +17,7 @@ def tardis_model_density_config(example_model_file_dir):

@pytest.fixture
def raw_simulation_state(tardis_model_density_config, kurucz_atomic_data):
tardis_model_density_config.model.abundances.model_isotope_time_0 = 0 * u.s
return SimulationState.from_config(
tardis_model_density_config, atom_data=kurucz_atomic_data
)
Expand Down

0 comments on commit 7c2e477

Please sign in to comment.