From d5835104869e45fcb438a8597d6ae0419faabc3d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Apr 2024 17:38:31 -0400 Subject: [PATCH 001/118] change numberdensity to input --- tardis/plasma/properties/general.py | 18 ----- tardis/plasma/properties/plasma_input.py | 18 ++++- .../plasma/properties/property_collections.py | 2 +- tardis/plasma/standard_plasmas.py | 81 +++++++++---------- tardis/plasma/tests/test_complete_plasmas.py | 8 +- 5 files changed, 61 insertions(+), 66 deletions(-) diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index 9988f656411..e1a41306077 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -12,7 +12,6 @@ __all__ = [ "BetaRadiation", "GElectron", - "NumberDensity", "IsotopeNumberDensity", "SelectedAtoms", "ElectronTemperature", @@ -79,23 +78,6 @@ def calculate(self, beta_electron): return super(ThermalGElectron, self).calculate(beta_electron) -class NumberDensity(ProcessingPlasmaProperty): - """ - Attributes - ---------- - number_density : Pandas DataFrame, dtype float - Indexed by atomic number, columns corresponding to zones - """ - - outputs = ("number_density",) - latex_name = ("N_{i}",) - - @staticmethod - def calculate(atomic_mass, abundance, density): - number_densities = abundance * density - return number_densities.div(atomic_mass.loc[abundance.index], axis=0) - - class IsotopeNumberDensity(ProcessingPlasmaProperty): """ Calculate the atom number density based on isotope mass. diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index 2d7b67ca4d6..288e44042e7 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -1,10 +1,14 @@ -from tardis.plasma.properties.base import Input, ArrayInput, DataFrameInput +from tardis.plasma.properties.base import ( + ArrayInput, + Input, +) __all__ = [ "TRadiative", "DilutionFactor", "AtomicData", "Abundance", + "NumberDensity", "IsotopeAbundance", "Density", "TimeExplosion", @@ -160,3 +164,15 @@ class NLTEIonizationSpecies(Input): class NLTEExcitationSpecies(Input): outputs = ("nlte_excitation_species",) + + +class NumberDensity(Input): + """ + Attributes + ---------- + number_density : Pandas DataFrame, dtype float + Indexed by atomic number, columns corresponding to zones + """ + + outputs = ("number_density",) + latex_name = ("N_{i}",) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index deb2405347b..8565d740e04 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -10,6 +10,7 @@ class PlasmaPropertyCollection(list): TRadiative, Abundance, Density, + NumberDensity, TimeExplosion, AtomicData, DilutionFactor, @@ -29,7 +30,6 @@ class PlasmaPropertyCollection(list): PartitionFunction, GElectron, IonizationData, - NumberDensity, LinesLowerLevelIndex, LinesUpperLevelIndex, TauSobolev, diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index 42d81af1e1b..db8ca8876ee 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -1,57 +1,53 @@ -from astropy import units as u -import os import logging import numpy as np import pandas as pd +from astropy import units as u -from tardis.io.atom_data import AtomData +from tardis.plasma import BasePlasma +from tardis.plasma.exceptions import PlasmaConfigError +from tardis.plasma.properties import ( + HeliumNumericalNLTE, + IonNumberDensity, + IonNumberDensityHeNLTE, + JBluesBlackBody, + JBluesDetailed, + JBluesDiluteBlackBody, + LevelBoltzmannFactorNLTE, + MarkovChainTransProbsCollector, + RadiationFieldCorrection, + StimulatedEmissionFactor, +) +from tardis.plasma.properties.base import TransitionProbabilitiesProperty from tardis.plasma.properties.level_population import LevelNumberDensity from tardis.plasma.properties.nlte_rate_equation_solver import ( NLTEPopulationSolverLU, NLTEPopulationSolverRoot, ) -from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper -from tardis.util.base import species_string_to_tuple -from tardis.plasma import BasePlasma -from tardis.plasma.properties.base import TransitionProbabilitiesProperty from tardis.plasma.properties.property_collections import ( + adiabatic_cooling_properties, basic_inputs, basic_properties, + continuum_interaction_inputs, + continuum_interaction_properties, + detailed_j_blues_inputs, + detailed_j_blues_properties, + dilute_lte_excitation_properties, + helium_lte_properties, + helium_nlte_properties, + helium_numerical_nlte_properties, lte_excitation_properties, lte_ionization_properties, macro_atom_properties, - dilute_lte_excitation_properties, nebular_ionization_properties, - non_nlte_properties, - nlte_properties, - helium_nlte_properties, - helium_numerical_nlte_properties, - helium_lte_properties, - detailed_j_blues_properties, - detailed_j_blues_inputs, - continuum_interaction_properties, - continuum_interaction_inputs, - adiabatic_cooling_properties, - two_photon_properties, - isotope_properties, nlte_lu_solver_properties, + nlte_properties, nlte_root_solver_properties, + non_nlte_properties, + two_photon_properties, ) -from tardis.plasma.exceptions import PlasmaConfigError - -from tardis.plasma.properties import ( - LevelBoltzmannFactorNLTE, - JBluesBlackBody, - JBluesDiluteBlackBody, - JBluesDetailed, - RadiationFieldCorrection, - StimulatedEmissionFactor, - HeliumNumericalNLTE, - IonNumberDensity, - IonNumberDensityHeNLTE, - MarkovChainTransProbsCollector, -) +from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper +from tardis.util.base import species_string_to_tuple logger = logging.getLogger(__name__) @@ -122,6 +118,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): t_rad=simulation_state.t_radiative, abundance=simulation_state.abundance, density=simulation_state.density, + number_density=simulation_state.composition.elemental_number_density, atomic_data=atom_data, time_explosion=simulation_state.time_explosion, w=simulation_state.dilution_factor, @@ -138,7 +135,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): if line_interaction_type != "macroatom": raise PlasmaConfigError( "Continuum interactions require line_interaction_type " - "macroatom (instead of {}).".format(line_interaction_type) + f"macroatom (instead of {line_interaction_type})." ) plasma_modules += continuum_interaction_properties @@ -171,8 +168,9 @@ def assemble_plasma(config, simulation_state, atom_data=None): if config.plasma.nlte_ionization_species: nlte_ionization_species = config.plasma.nlte_ionization_species for species in nlte_ionization_species: - if not ( - species in config.plasma.continuum_interaction.species + if ( + species + not in config.plasma.continuum_interaction.species ): raise PlasmaConfigError( f"NLTE ionization species {species} not in continuum species." @@ -180,8 +178,9 @@ def assemble_plasma(config, simulation_state, atom_data=None): if config.plasma.nlte_excitation_species: nlte_excitation_species = config.plasma.nlte_excitation_species for species in nlte_excitation_species: - if not ( - species in config.plasma.continuum_interaction.species + if ( + species + not in config.plasma.continuum_interaction.species ): raise PlasmaConfigError( f"NLTE excitation species {species} not in continuum species." @@ -199,9 +198,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): plasma_modules += nlte_root_solver_properties else: raise PlasmaConfigError( - "NLTE solver type unknown - {}".format( - config.plasma.nlte_solver - ) + f"NLTE solver type unknown - {config.plasma.nlte_solver}" ) kwargs.update( diff --git a/tardis/plasma/tests/test_complete_plasmas.py b/tardis/plasma/tests/test_complete_plasmas.py index ed7d4428852..a28aeba63e8 100644 --- a/tardis/plasma/tests/test_complete_plasmas.py +++ b/tardis/plasma/tests/test_complete_plasmas.py @@ -193,7 +193,7 @@ def test_plasma_properties(self, plasma, attr): def test_levels(self, plasma): actual = pd.DataFrame(plasma.levels) - key = f"plasma/levels" + key = "plasma/levels" expected = pd.read_hdf(self.regression_data.fpath, key) pdt.assert_frame_equal(actual, expected) @@ -202,13 +202,13 @@ def test_scalars_properties(self, plasma, attr): actual = getattr(plasma, attr) if hasattr(actual, "cgs"): actual = actual.cgs.value - key = f"plasma/scalars" + key = "plasma/scalars" expected = pd.read_hdf(self.regression_data.fpath, key)[attr] npt.assert_equal(actual, expected) def test_helium_treatment(self, plasma): actual = plasma.helium_treatment - key = f"plasma/scalars" + key = "plasma/scalars" expected = pd.read_hdf(self.regression_data.fpath, key)[ "helium_treatment" ] @@ -217,6 +217,6 @@ def test_helium_treatment(self, plasma): def test_zeta_data(self, plasma): if hasattr(plasma, "zeta_data"): actual = plasma.zeta_data - key = f"plasma/zeta_data" + key = "plasma/zeta_data" expected = pd.read_hdf(self.regression_data.fpath, key) npt.assert_allclose(actual, expected.values) From 7aaba5d73904e5f1d0bd97cadb1437eda1f9e20f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 4 May 2024 16:18:47 -0400 Subject: [PATCH 002/118] fixed number density --- tardis/model/base.py | 19 ++++++++ tardis/plasma/properties/general.py | 43 ------------------- .../plasma/properties/property_collections.py | 3 -- tardis/plasma/standard_plasmas.py | 2 +- 4 files changed, 20 insertions(+), 47 deletions(-) diff --git a/tardis/model/base.py b/tardis/model/base.py index cf4e2da7548..72d4c157a20 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -161,6 +161,25 @@ def t_radiative(self, new_t_radiative): "Trying to set t_radiative for different number of shells." ) + @property + def elemental_number_density(self): + elemental_number_density = ( + ( + self.composition.elemental_mass_fraction + * self.composition.density + ) + .divide(self.composition.element_masses, axis=0) + .dropna() + ) + elemental_number_density = elemental_number_density.iloc[ + :, + self.geometry.v_inner_boundary_index : self.geometry.v_outer_boundary_index, + ] + elemental_number_density.columns = range( + len(elemental_number_density.columns) + ) + return elemental_number_density + @property def radius(self): return self.time_explosion * self.velocity diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index e1a41306077..55823b0fe14 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -12,7 +12,6 @@ __all__ = [ "BetaRadiation", "GElectron", - "IsotopeNumberDensity", "SelectedAtoms", "ElectronTemperature", "BetaElectron", @@ -77,48 +76,6 @@ class ThermalGElectron(GElectron): def calculate(self, beta_electron): return super(ThermalGElectron, self).calculate(beta_electron) - -class IsotopeNumberDensity(ProcessingPlasmaProperty): - """ - Calculate the atom number density based on isotope mass. - - Attributes - ---------- - isotope_number_density : Pandas DataFrame, dtype float - Indexed by atomic number, columns corresponding to zones - """ - - outputs = ("isotope_number_density",) - latex_name = ("N_{i}",) - - @staticmethod - def calculate(isotope_mass, isotope_abundance, density): - """ - Calculate the atom number density based on isotope mass. - - Parameters - ---------- - isotope_mass : pandas.DataFrame - Masses of isotopes. - isotope_abundance : pandas.DataFrame - Fractional abundance of isotopes. - density : pandas.DataFrame - Density of each shell. - - Returns - ------- - pandas.DataFrame - Indexed by atomic number, columns corresponding to zones. - """ - number_densities = isotope_abundance * density - isotope_number_density_array = ( - number_densities.to_numpy() / isotope_mass.to_numpy() - ) - return pd.DataFrame( - isotope_number_density_array, index=isotope_abundance.index - ) - - class SelectedAtoms(ProcessingPlasmaProperty): """ Attributes diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index 8565d740e04..eb6c15da97e 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -153,6 +153,3 @@ class PlasmaPropertyCollection(list): TwoPhotonFrequencySampler, ] ) -isotope_properties = PlasmaPropertyCollection( - [IsotopeAbundance, IsotopeMass, IsotopeNumberDensity] -) diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index db8ca8876ee..40b11aca649 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -118,7 +118,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): t_rad=simulation_state.t_radiative, abundance=simulation_state.abundance, density=simulation_state.density, - number_density=simulation_state.composition.elemental_number_density, + number_density=simulation_state.elemental_number_density, atomic_data=atom_data, time_explosion=simulation_state.time_explosion, w=simulation_state.dilution_factor, From 32b22ea4a84e2f53bc52b568727759a4be57e675 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 5 May 2024 19:55:06 -0400 Subject: [PATCH 003/118] some fixes --- tardis/plasma/properties/atomic.py | 2 -- tardis/tests/test_tardis_full_formal_integral.py | 5 +++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tardis/plasma/properties/atomic.py b/tardis/plasma/properties/atomic.py index f206264d3e4..f5153baf697 100644 --- a/tardis/plasma/properties/atomic.py +++ b/tardis/plasma/properties/atomic.py @@ -76,8 +76,6 @@ def _filter_atomic_property(self, levels, selected_atoms): return levels[levels.index.isin(selected_atoms, level="atomic_number")] def _set_index(self, levels): - # levels = levels.set_index(['atomic_number', 'ion_number', - # 'level_number']) return ( levels.index, levels["energy"], diff --git a/tardis/tests/test_tardis_full_formal_integral.py b/tardis/tests/test_tardis_full_formal_integral.py index f28203045f1..d3a0eeaecc5 100644 --- a/tardis/tests/test_tardis_full_formal_integral.py +++ b/tardis/tests/test_tardis_full_formal_integral.py @@ -1,11 +1,12 @@ from pathlib import Path -import pytest + import numpy.testing as npt +import pytest from astropy import units as u from astropy.tests.helper import assert_quantity_allclose -from tardis.simulation.base import Simulation from tardis.io.configuration.config_reader import Configuration +from tardis.simulation.base import Simulation config_line_modes = ["downbranch", "macroatom"] interpolate_shells = [-1, 30] From 261bbad532567b949a66d2db760e824a0b14d538 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 5 May 2024 20:14:04 -0400 Subject: [PATCH 004/118] removing density --- tardis/plasma/properties/property_collections.py | 1 - tardis/plasma/standard_plasmas.py | 1 - tardis/plasma/tests/test_hdf_plasma.py | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index eb6c15da97e..a266c1618db 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -9,7 +9,6 @@ class PlasmaPropertyCollection(list): [ TRadiative, Abundance, - Density, NumberDensity, TimeExplosion, AtomicData, diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index 40b11aca649..da772508140 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -117,7 +117,6 @@ def assemble_plasma(config, simulation_state, atom_data=None): kwargs = dict( t_rad=simulation_state.t_radiative, abundance=simulation_state.abundance, - density=simulation_state.density, number_density=simulation_state.elemental_number_density, atomic_data=atom_data, time_explosion=simulation_state.time_explosion, diff --git a/tardis/plasma/tests/test_hdf_plasma.py b/tardis/plasma/tests/test_hdf_plasma.py index d0c4f4c6433..13169bdfa4e 100644 --- a/tardis/plasma/tests/test_hdf_plasma.py +++ b/tardis/plasma/tests/test_hdf_plasma.py @@ -86,7 +86,7 @@ def test_atomic_data_uuid(simulation_verysimple, regression_data): assert actual == expected -COLLECTION_PROPERTIES = ["t_rad", "w", "density"] +COLLECTION_PROPERTIES = ["t_rad", "w"] @pytest.mark.parametrize("attr", COLLECTION_PROPERTIES) From df3c406c27fafa5c6eeb13cbe7c4b7f067251153 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 5 May 2024 20:28:09 -0400 Subject: [PATCH 005/118] remove atomic and isotope mass --- tardis/plasma/properties/atomic.py | 66 ------------------- .../plasma/properties/property_collections.py | 1 - 2 files changed, 67 deletions(-) diff --git a/tardis/plasma/properties/atomic.py b/tardis/plasma/properties/atomic.py index f5153baf697..c917c08c421 100644 --- a/tardis/plasma/properties/atomic.py +++ b/tardis/plasma/properties/atomic.py @@ -31,8 +31,6 @@ "Lines", "LinesLowerLevelIndex", "LinesUpperLevelIndex", - "AtomicMass", - "IsotopeMass", "IonizationData", "ZetaData", "NLTEData", @@ -538,70 +536,6 @@ def calculate(self, level_idxs2line_idx, level_idxs2continuum_idx): return level_idxs2transition_idx - -class AtomicMass(ProcessingPlasmaProperty): - """ - Attributes - ---------- - atomic_mass : pandas.Series - Atomic masses of the elements used. Indexed by atomic number. - """ - - outputs = ("atomic_mass",) - - def calculate(self, atomic_data, selected_atoms): - if getattr(self, self.outputs[0]) is not None: - return (getattr(self, self.outputs[0]),) - else: - return atomic_data.atom_data.loc[selected_atoms].mass - - -class IsotopeMass(ProcessingPlasmaProperty): - """ - Attributes - ---------- - isotope_mass : pandas.Series - Masses of the isotopes used. Indexed by isotope name e.g. 'Ni56'. - """ - - outputs = ("isotope_mass",) - - def calculate(self, isotope_abundance): - """ - Determine mass of each isotope. - - Parameters - ---------- - isotope_abundance : pandas.DataFrame - Fractional abundance of isotopes. - - Returns - ------- - pandas.DataFrame - Masses of the isotopes used. Indexed by isotope name e.g. 'Ni56'. - """ - if getattr(self, self.outputs[0]) is not None: - return (getattr(self, self.outputs[0]),) - else: - if isotope_abundance.empty: - return None - isotope_mass_dict = {} - for Z, A in isotope_abundance.index: - element_name = rd.utils.Z_to_elem(Z) - isotope_name = element_name + str(A) - - isotope_mass_dict[(Z, A)] = rd.Nuclide(isotope_name).atomic_mass - - isotope_mass_df = pd.DataFrame.from_dict( - isotope_mass_dict, orient="index", columns=["mass"] - ) - isotope_mass_df.index = pd.MultiIndex.from_tuples( - isotope_mass_df.index - ) - isotope_mass_df.index.names = ["atomic_number", "mass_number"] - return isotope_mass_df / const.N_A - - class IonizationData(BaseAtomicDataProperty): """ Attributes diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index a266c1618db..d93b6016442 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -25,7 +25,6 @@ class PlasmaPropertyCollection(list): BetaRadiation, Levels, Lines, - AtomicMass, PartitionFunction, GElectron, IonizationData, From d05e819353400c01f93d31c79aa41495fa97661a Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 6 May 2024 14:22:13 -0400 Subject: [PATCH 006/118] add isotopic_number_density --- tardis/model/base.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tardis/model/base.py b/tardis/model/base.py index 72d4c157a20..fbc15f3f64b 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -180,6 +180,26 @@ def elemental_number_density(self): ) return elemental_number_density + @property + def isotopic_number_density(self): + isotopic_number_density = ( + self.composition.isotopic_mass_fraction * self.composition.density + ).divide( + self.composition.isotope_masses.loc[ + self.composition.isotopic_mass_fraction.index + ] + * u.u.to(u.g), + axis=0, + ) + isotopic_number_density = isotopic_number_density.iloc[ + :, + self.geometry.v_inner_boundary_index : self.geometry.v_outer_boundary_index, + ] + isotopic_number_density.columns = range( + len(isotopic_number_density.columns) + ) + return isotopic_number_density + @property def radius(self): return self.time_explosion * self.velocity From e8049426d4dc46d6f13e09b456debfb013598607 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 6 May 2024 16:11:43 -0400 Subject: [PATCH 007/118] add opacities package --- benchmarks/transport_montecarlo_opacities.py | 2 +- benchmarks/transport_montecarlo_packet.py | 7 +- tardis/energy_input/gamma_packet_loop.py | 35 +++--- tardis/energy_input/gamma_ray_estimators.py | 19 ++-- tardis/energy_input/gamma_ray_interactions.py | 26 ++--- tardis/energy_input/gamma_ray_transport.py | 7 +- tardis/energy_input/tests/test_util.py | 2 +- tardis/energy_input/util.py | 13 ++- tardis/opacities/__init__.py | 0 .../montecarlo => opacities}/opacities.py | 0 tardis/opacities/tau_sobolev.py | 104 ++++++++++++++++++ .../plasma/properties/property_collections.py | 1 + .../plasma/properties/radiative_properties.py | 70 ------------ .../montecarlo/single_packet_loop.py | 16 +-- .../montecarlo/tests/test_opacities.py | 2 +- .../transport/montecarlo/tests/test_packet.py | 8 +- tardis/transport/montecarlo/vpacket.py | 39 +++---- tardis/transport/r_packet_transport.py | 14 +-- 18 files changed, 196 insertions(+), 169 deletions(-) create mode 100644 tardis/opacities/__init__.py rename tardis/{transport/montecarlo => opacities}/opacities.py (100%) create mode 100644 tardis/opacities/tau_sobolev.py diff --git a/benchmarks/transport_montecarlo_opacities.py b/benchmarks/transport_montecarlo_opacities.py index b56fed5a2e6..c5fe0196f47 100644 --- a/benchmarks/transport_montecarlo_opacities.py +++ b/benchmarks/transport_montecarlo_opacities.py @@ -4,7 +4,7 @@ from asv_runner.benchmarks.mark import parameterize -import tardis.transport.montecarlo.opacities as calculate_opacity +import tardis.opacities.opacities as calculate_opacity from benchmarks.benchmark_base import BenchmarkBase diff --git a/benchmarks/transport_montecarlo_packet.py b/benchmarks/transport_montecarlo_packet.py index 1c2f79bdf66..ae1cd9b00e7 100644 --- a/benchmarks/transport_montecarlo_packet.py +++ b/benchmarks/transport_montecarlo_packet.py @@ -5,14 +5,13 @@ import numpy as np from asv_runner.benchmarks.mark import parameterize, skip_benchmark -import tardis.transport.montecarlo.estimators.radfield_mc_estimators +import tardis.opacities.opacities as opacities +import tardis.transport.frame_transformations as frame_transformations +import tardis.transport.geometry.calculate_distances as calculate_distances import tardis.transport.montecarlo.estimators.radfield_mc_estimators import tardis.transport.montecarlo.numba_interface as numba_interface -import tardis.transport.montecarlo.opacities as opacities import tardis.transport.montecarlo.r_packet as r_packet import tardis.transport.montecarlo.utils as utils -import tardis.transport.frame_transformations as frame_transformations -import tardis.transport.geometry.calculate_distances as calculate_distances import tardis.transport.r_packet_transport as r_packet_transport from benchmarks.benchmark_base import BenchmarkBase from tardis.model.geometry.radial1d import NumbaRadial1DGeometry diff --git a/tardis/energy_input/gamma_packet_loop.py b/tardis/energy_input/gamma_packet_loop.py index 66d83ac131a..385febda679 100644 --- a/tardis/energy_input/gamma_packet_loop.py +++ b/tardis/energy_input/gamma_packet_loop.py @@ -1,34 +1,33 @@ import numpy as np from numba import njit -from tardis.transport.montecarlo import njit_dict_no_parallel -from tardis.transport.montecarlo.opacities import ( - compton_opacity_calculation, - photoabsorption_opacity_calculation, - pair_creation_opacity_calculation, - photoabsorption_opacity_calculation_kasen, - kappa_calculation, - pair_creation_opacity_artis, - SIGMA_T, -) +from tardis.energy_input.gamma_ray_estimators import deposition_estimator_kasen from tardis.energy_input.gamma_ray_grid import ( distance_trace, move_packet, ) +from tardis.energy_input.gamma_ray_interactions import ( + compton_scatter, + get_compton_fraction_artis, + pair_creation_packet, + scatter_type, +) +from tardis.energy_input.GXPacket import GXPacketStatus from tardis.energy_input.util import ( - doppler_factor_3d, C_CGS, H_CGS_KEV, + doppler_factor_3d, get_index, ) -from tardis.energy_input.GXPacket import GXPacketStatus -from tardis.energy_input.gamma_ray_interactions import ( - get_compton_fraction_artis, - scatter_type, - compton_scatter, - pair_creation_packet, +from tardis.opacities.opacities import ( + SIGMA_T, + compton_opacity_calculation, + kappa_calculation, + pair_creation_opacity_artis, + pair_creation_opacity_calculation, + photoabsorption_opacity_calculation, ) -from tardis.energy_input.gamma_ray_estimators import deposition_estimator_kasen +from tardis.transport.montecarlo import njit_dict_no_parallel @njit(**njit_dict_no_parallel) diff --git a/tardis/energy_input/gamma_ray_estimators.py b/tardis/energy_input/gamma_ray_estimators.py index 87a313775b2..e28ba5029ff 100644 --- a/tardis/energy_input/gamma_ray_estimators.py +++ b/tardis/energy_input/gamma_ray_estimators.py @@ -1,19 +1,19 @@ import numpy as np from numba import njit -from tardis.transport.montecarlo import njit_dict_no_parallel -from tardis.transport.montecarlo.opacities import ( - compton_opacity_calculation, - SIGMA_T, - photoabsorption_opacity_calculation, - kappa_calculation, -) from tardis.energy_input.util import ( + ELECTRON_MASS_ENERGY_KEV, + H_CGS_KEV, angle_aberration_gamma, doppler_factor_3d, - H_CGS_KEV, - ELECTRON_MASS_ENERGY_KEV, ) +from tardis.opacities.opacities import ( + SIGMA_T, + compton_opacity_calculation, + kappa_calculation, + photoabsorption_opacity_calculation, +) +from tardis.transport.montecarlo import njit_dict_no_parallel def compton_emissivity_estimator(packet, distance): @@ -32,7 +32,6 @@ def compton_emissivity_estimator(packet, distance): float64, int Unnormalized emissivity estimator, line index """ - cmf_direction = angle_aberration_gamma( packet.get_direction_vector(), packet.location_r ) diff --git a/tardis/energy_input/gamma_ray_interactions.py b/tardis/energy_input/gamma_ray_interactions.py index c70ec6babd2..649a526af72 100644 --- a/tardis/energy_input/gamma_ray_interactions.py +++ b/tardis/energy_input/gamma_ray_interactions.py @@ -1,22 +1,22 @@ import numpy as np from numba import njit -from tardis.transport.montecarlo import njit_dict_no_parallel -from tardis.transport.montecarlo.opacities import ( - compton_opacity_partial, - kappa_calculation, -) +from tardis.energy_input.GXPacket import GXPacketStatus from tardis.energy_input.util import ( - get_random_unit_vector, - euler_rodrigues, - compton_theta_distribution, - get_perpendicular_vector, - angle_aberration_gamma, - doppler_factor_3d, ELECTRON_MASS_ENERGY_KEV, H_CGS_KEV, + angle_aberration_gamma, + compton_theta_distribution, + doppler_factor_3d, + euler_rodrigues, + get_perpendicular_vector, + get_random_unit_vector, ) -from tardis.energy_input.GXPacket import GXPacketStatus +from tardis.opacities.opacities import ( + compton_opacity_partial, + kappa_calculation, +) +from tardis.transport.montecarlo import njit_dict_no_parallel @njit(**njit_dict_no_parallel) @@ -195,7 +195,6 @@ def compton_scatter(photon, compton_angle): float64 Photon phi direction """ - # get comoving frame direction comov_direction = angle_aberration_gamma( photon.direction, photon.location, photon.time_current @@ -254,7 +253,6 @@ def pair_creation_packet(packet): GXPacket outgoing packet """ - probability_gamma = ( 2 * ELECTRON_MASS_ENERGY_KEV / (H_CGS_KEV * packet.nu_cmf) ) diff --git a/tardis/energy_input/gamma_ray_transport.py b/tardis/energy_input/gamma_ray_transport.py index 867414ee1bd..bd769191195 100644 --- a/tardis/energy_input/gamma_ray_transport.py +++ b/tardis/energy_input/gamma_ray_transport.py @@ -1,14 +1,15 @@ import logging + +import astropy.units as u import numpy as np import pandas as pd -import astropy.units as u import radioactivedecay as rd from tardis.energy_input.energy_source import ( get_all_isotopes, setup_input_energy, ) -from tardis.transport.montecarlo.opacities import M_P +from tardis.opacities.opacities import M_P # Energy: keV, exported as eV for SF solver # distance: cm @@ -317,10 +318,12 @@ def decay_chain_energies( def fractional_decay_energy(decay_energy): """Function to calculate fractional decay energy + Parameters ---------- decay_energy : Dict dictionary of decay chain energies for each isotope in each shell + Returns ------- fractional_decay_energy : Dict diff --git a/tardis/energy_input/tests/test_util.py b/tardis/energy_input/tests/test_util.py index 6d0268dd8b4..052a68efc20 100644 --- a/tardis/energy_input/tests/test_util.py +++ b/tardis/energy_input/tests/test_util.py @@ -8,7 +8,7 @@ klein_nishina, spherical_to_cartesian, ) -from tardis.transport.montecarlo.opacities import ( +from tardis.opacities.opacities import ( kappa_calculation, ) diff --git a/tardis/energy_input/util.py b/tardis/energy_input/util.py index 5f47c5bbda4..061017158b7 100644 --- a/tardis/energy_input/util.py +++ b/tardis/energy_input/util.py @@ -1,10 +1,10 @@ import astropy.units as u -import tardis.constants as const import numpy as np from numba import njit +import tardis.constants as const +from tardis.opacities.opacities import kappa_calculation from tardis.transport.montecarlo import njit_dict_no_parallel -from tardis.transport.montecarlo.opacities import kappa_calculation R_ELECTRON_SQUARED = (const.a0.cgs.value * const.alpha.cgs.value**2.0) ** 2.0 ELECTRON_MASS_ENERGY_KEV = (const.m_e * const.c**2.0).to("keV").value @@ -42,7 +42,8 @@ def spherical_to_cartesian(r, theta, phi): def get_random_unit_vector(): """Generate a random unit vector - Returns: + Returns + ------- array: random unit vector """ theta = get_random_theta_photon() @@ -218,9 +219,9 @@ def klein_nishina(energy, theta_C): https://en.wikipedia.org/wiki/Klein%E2%80%93Nishina_formula .. math:: - \frac{r_e}{2} [1 + \kappa (1 - \cos\theta_C)]^{-2} \left( 1 + \cos^2\theta_C + \frac{\kappa^2 (1 - \cos\theta_C)^2}{1 + \kappa(1 - \cos\theta_C)}\right) + \frac{r_e}{2} [1 + \\kappa (1 - \\cos\theta_C)]^{-2} \\left( 1 + \\cos^2\theta_C + \frac{\\kappa^2 (1 - \\cos\theta_C)^2}{1 + \\kappa(1 - \\cos\theta_C)}\right) - where :math:`\kappa = E / (m_e c^2)` + where :math:`\\kappa = E / (m_e c^2)` Parameters ---------- @@ -228,6 +229,7 @@ def klein_nishina(energy, theta_C): Packet energy theta_C : float Compton angle + Returns ------- float @@ -275,6 +277,7 @@ def compton_theta_distribution(energy, sample_resolution=100): @njit(**njit_dict_no_parallel) def get_random_theta_photon(): """Get a random theta direction between 0 and pi + Returns ------- float diff --git a/tardis/opacities/__init__.py b/tardis/opacities/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/transport/montecarlo/opacities.py b/tardis/opacities/opacities.py similarity index 100% rename from tardis/transport/montecarlo/opacities.py rename to tardis/opacities/opacities.py diff --git a/tardis/opacities/tau_sobolev.py b/tardis/opacities/tau_sobolev.py new file mode 100644 index 00000000000..95997683ea3 --- /dev/null +++ b/tardis/opacities/tau_sobolev.py @@ -0,0 +1,104 @@ +import numpy as np +import pandas as pd +from astropy import units as u + +from tardis import constants as const +from tardis.plasma.properties.base import ProcessingPlasmaProperty + +SOBOLEV_COEFFICIENT = ( + ( + ((np.pi * const.e.gauss**2) / (const.m_e.cgs * const.c.cgs)) + * u.cm + * u.s + / u.cm**3 + ) + .to(1) + .value +) + + +def calculate_sobolev_line_opacity( + lines, + level_number_density, + time_explosion, + stimulated_emission_factor, +): + tau_sobolevs = (lines.wavelength_cm * lines.f_lu).values[np.newaxis].T + tau_sobolevs *= ( + SOBOLEV_COEFFICIENT + * time_explosion.to(u.s).value + * stimulated_emission_factor + ) + tau_sobolevs *= level_number_density.reindex( + lines.droplevel(-1).index + ).values + return tau_sobolevs + + +class TauSobolev(ProcessingPlasmaProperty): + """ + Attributes + ---------- + tau_sobolev : Pandas DataFrame, dtype float + Sobolev optical depth for each line. Indexed by line. + Columns as zones. + """ + + outputs = ("tau_sobolevs",) + latex_name = (r"\tau_{\textrm{sobolev}}",) + latex_formula = ( + r"\dfrac{\pi e^{2}}{m_{e} c}f_{lu}\lambda t_{exp}\ + n_{lower} \Big(1-\dfrac{g_{lower}n_{upper}}{g_{upper}n_{lower}}\Big)", + ) + + def __init__(self, plasma_parent): + super(TauSobolev, self).__init__(plasma_parent) + self.sobolev_coefficient = ( + ( + ((np.pi * const.e.gauss**2) / (const.m_e.cgs * const.c.cgs)) + * u.cm + * u.s + / u.cm**3 + ) + .to(1) + .value + ) + + def calculate( + self, + lines, + level_number_density, + lines_lower_level_index, + time_explosion, + stimulated_emission_factor, + j_blues, + f_lu, + wavelength_cm, + ): + f_lu = f_lu.values[np.newaxis].T + wavelength = wavelength_cm.values[np.newaxis].T + n_lower = level_number_density.values.take( + lines_lower_level_index, axis=0, mode="raise" + ) + tau_sobolevs = ( + self.sobolev_coefficient + * f_lu + * wavelength + * time_explosion + * n_lower + * stimulated_emission_factor + ) + + if np.any(np.isnan(tau_sobolevs)) or np.any( + np.isinf(np.abs(tau_sobolevs)) + ): + raise ValueError( + "Some tau_sobolevs are nan, inf, -inf in tau_sobolevs." + " Something went wrong!" + ) + + return pd.DataFrame( + tau_sobolevs, + index=lines.index, + columns=np.array(level_number_density.columns), + ) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index d93b6016442..26d08db5d64 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -1,4 +1,5 @@ from tardis.plasma.properties import * +from tardis.opacities.tau_sobolev import TauSobolev class PlasmaPropertyCollection(list): diff --git a/tardis/plasma/properties/radiative_properties.py b/tardis/plasma/properties/radiative_properties.py index f3b5671de46..99d34e91924 100644 --- a/tardis/plasma/properties/radiative_properties.py +++ b/tardis/plasma/properties/radiative_properties.py @@ -16,7 +16,6 @@ __all__ = [ "StimulatedEmissionFactor", - "TauSobolev", "BetaSobolev", "TransitionProbabilities", "RawRadBoundBoundTransProbs", @@ -115,75 +114,6 @@ def calculate( return stimulated_emission_factor -class TauSobolev(ProcessingPlasmaProperty): - """ - Attributes - ---------- - tau_sobolev : Pandas DataFrame, dtype float - Sobolev optical depth for each line. Indexed by line. - Columns as zones. - """ - - outputs = ("tau_sobolevs",) - latex_name = (r"\tau_{\textrm{sobolev}}",) - latex_formula = ( - r"\dfrac{\pi e^{2}}{m_{e} c}f_{lu}\lambda t_{exp}\ - n_{lower} \Big(1-\dfrac{g_{lower}n_{upper}}{g_{upper}n_{lower}}\Big)", - ) - - def __init__(self, plasma_parent): - super(TauSobolev, self).__init__(plasma_parent) - self.sobolev_coefficient = ( - ( - ((np.pi * const.e.gauss**2) / (const.m_e.cgs * const.c.cgs)) - * u.cm - * u.s - / u.cm**3 - ) - .to(1) - .value - ) - - def calculate( - self, - lines, - level_number_density, - lines_lower_level_index, - time_explosion, - stimulated_emission_factor, - j_blues, - f_lu, - wavelength_cm, - ): - f_lu = f_lu.values[np.newaxis].T - wavelength = wavelength_cm.values[np.newaxis].T - n_lower = level_number_density.values.take( - lines_lower_level_index, axis=0, mode="raise" - ) - tau_sobolevs = ( - self.sobolev_coefficient - * f_lu - * wavelength - * time_explosion - * n_lower - * stimulated_emission_factor - ) - - if np.any(np.isnan(tau_sobolevs)) or np.any( - np.isinf(np.abs(tau_sobolevs)) - ): - raise ValueError( - "Some tau_sobolevs are nan, inf, -inf in tau_sobolevs." - " Something went wrong!" - ) - - return pd.DataFrame( - tau_sobolevs, - index=lines.index, - columns=np.array(level_number_density.columns), - ) - - class BetaSobolev(ProcessingPlasmaProperty): """ Attributes diff --git a/tardis/transport/montecarlo/single_packet_loop.py b/tardis/transport/montecarlo/single_packet_loop.py index 693cd75d6ea..2560c814410 100644 --- a/tardis/transport/montecarlo/single_packet_loop.py +++ b/tardis/transport/montecarlo/single_packet_loop.py @@ -1,6 +1,14 @@ from numba import njit from tardis import constants as const +from tardis.opacities.opacities import ( + chi_continuum_calculator, + chi_electron_calculator, +) +from tardis.transport.frame_transformations import ( + get_doppler_factor, + get_inverse_doppler_factor, +) from tardis.transport.montecarlo.estimators.radfield_estimator_calcs import ( update_bound_free_estimators, ) @@ -9,19 +17,11 @@ line_scatter, thomson_scatter, ) -from tardis.transport.montecarlo.opacities import ( - chi_continuum_calculator, - chi_electron_calculator, -) from tardis.transport.montecarlo.r_packet import ( InteractionType, PacketStatus, ) from tardis.transport.montecarlo.vpacket import trace_vpacket_volley -from tardis.transport.frame_transformations import ( - get_doppler_factor, - get_inverse_doppler_factor, -) from tardis.transport.r_packet_transport import ( move_packet_across_shell_boundary, move_r_packet, diff --git a/tardis/transport/montecarlo/tests/test_opacities.py b/tardis/transport/montecarlo/tests/test_opacities.py index 53933960579..07096d6e0c6 100644 --- a/tardis/transport/montecarlo/tests/test_opacities.py +++ b/tardis/transport/montecarlo/tests/test_opacities.py @@ -1,7 +1,7 @@ import numpy.testing as npt import pytest -from tardis.transport.montecarlo.opacities import ( +from tardis.opacities.opacities import ( compton_opacity_calculation, kappa_calculation, pair_creation_opacity_calculation, diff --git a/tardis/transport/montecarlo/tests/test_packet.py b/tardis/transport/montecarlo/tests/test_packet.py index b0c602b6b08..c0e27c128e2 100644 --- a/tardis/transport/montecarlo/tests/test_packet.py +++ b/tardis/transport/montecarlo/tests/test_packet.py @@ -1,14 +1,14 @@ import numpy as np import pytest -import tardis.transport.montecarlo.montecarlo_configuration as numba_config +import tardis.opacities.opacities as opacities +import tardis.transport.frame_transformations as frame_transformations +import tardis.transport.geometry.calculate_distances as calculate_distances import tardis.transport.montecarlo.estimators.radfield_mc_estimators +import tardis.transport.montecarlo.montecarlo_configuration as numba_config import tardis.transport.montecarlo.numba_interface as numba_interface -import tardis.transport.montecarlo.opacities as opacities import tardis.transport.montecarlo.r_packet as r_packet import tardis.transport.montecarlo.utils as utils -import tardis.transport.frame_transformations as frame_transformations -import tardis.transport.geometry.calculate_distances as calculate_distances import tardis.transport.r_packet_transport as r_packet_transport from tardis import constants as const from tardis.model.geometry.radial1d import NumbaRadial1DGeometry diff --git a/tardis/transport/montecarlo/vpacket.py b/tardis/transport/montecarlo/vpacket.py index ee084a4d580..3aacd8a5be9 100644 --- a/tardis/transport/montecarlo/vpacket.py +++ b/tardis/transport/montecarlo/vpacket.py @@ -1,35 +1,31 @@ import math import numpy as np -from tardis.transport.montecarlo.opacities import ( - chi_continuum_calculator, -) -from numba import float64, int64 -from numba import njit +from numba import float64, int64, njit from numba.experimental import jitclass -from tardis.transport.montecarlo import njit_dict_no_parallel -from tardis.transport.montecarlo.r_packet import ( - PacketStatus, +from tardis.opacities.opacities import ( + chi_continuum_calculator, ) -from tardis.transport.r_packet_transport import ( - move_packet_across_shell_boundary, +from tardis.transport.frame_transformations import ( + angle_aberration_CMF_to_LF, + angle_aberration_LF_to_CMF, + get_doppler_factor, ) - from tardis.transport.geometry.calculate_distances import ( calculate_distance_boundary, calculate_distance_line, ) - -from tardis.transport.frame_transformations import ( - get_doppler_factor, - angle_aberration_LF_to_CMF, - angle_aberration_CMF_to_LF, -) - +from tardis.transport.montecarlo import njit_dict_no_parallel from tardis.transport.montecarlo.numba_config import ( - SIGMA_THOMSON, C_SPEED_OF_LIGHT, + SIGMA_THOMSON, +) +from tardis.transport.montecarlo.r_packet import ( + PacketStatus, +) +from tardis.transport.r_packet_transport import ( + move_packet_across_shell_boundary, ) vpacket_spec = [ @@ -45,7 +41,7 @@ @jitclass(vpacket_spec) -class VPacket(object): +class VPacket: def __init__( self, r, @@ -175,6 +171,7 @@ def trace_vpacket( ): """ Trace single vpacket. + Parameters ---------- v_packet @@ -185,7 +182,6 @@ def trace_vpacket( ------- """ - tau_trace_combined = 0.0 while True: ( @@ -262,7 +258,6 @@ def trace_vpacket_volley( opacity_state : [type] [description] """ - if (r_packet.nu < vpacket_collection.v_packet_spawn_start_frequency) or ( r_packet.nu > vpacket_collection.v_packet_spawn_end_frequency ): diff --git a/tardis/transport/r_packet_transport.py b/tardis/transport/r_packet_transport.py index 598e60adfdc..97976a2de43 100644 --- a/tardis/transport/r_packet_transport.py +++ b/tardis/transport/r_packet_transport.py @@ -1,20 +1,18 @@ import numpy as np from numba import njit -from tardis.transport.montecarlo import njit_dict_no_parallel +from tardis.transport.frame_transformations import ( + get_doppler_factor, +) from tardis.transport.geometry.calculate_distances import ( calculate_distance_boundary, - calculate_distance_electron, calculate_distance_line, ) +from tardis.transport.montecarlo import njit_dict_no_parallel from tardis.transport.montecarlo.estimators.radfield_estimator_calcs import ( - update_line_estimators, update_base_estimators, + update_line_estimators, ) -from tardis.transport.frame_transformations import ( - get_doppler_factor, -) -from tardis.transport.montecarlo.opacities import calculate_tau_electron from tardis.transport.montecarlo.r_packet import ( InteractionType, PacketStatus, @@ -48,7 +46,6 @@ def trace_packet( Returns ------- """ - r_inner = numba_radial_1d_geometry.r_inner[r_packet.current_shell_id] r_outer = numba_radial_1d_geometry.r_outer[r_packet.current_shell_id] @@ -199,7 +196,6 @@ def move_r_packet( distance : float distance in cm """ - doppler_factor = get_doppler_factor( r_packet.r, r_packet.mu, time_explosion, enable_full_relativity ) From e573f16eca2e02369573ed3ce8a5c66e0efed658 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 6 May 2024 21:26:35 -0400 Subject: [PATCH 008/118] Update imports in property_collections.py, base.py, test_numba_interface.py, transport_montecarlo_numba_interface.py, conftest.py, formal_integral.py, base.py, and macro_atom.py --- .../transport_montecarlo_numba_interface.py | 2 +- tardis/opacities/tau_sobolev.py | 58 ++--- .../plasma/properties/property_collections.py | 4 + .../plasma/properties/radiative_properties.py | 142 +---------- tardis/plasma/properties/util/macro_atom.py | 61 ----- tardis/radiation_field/base.py | 2 +- tardis/transport/montecarlo/base.py | 2 +- .../transport/montecarlo/formal_integral.py | 6 +- .../transport/montecarlo/numba_interface.py | 240 ------------------ tardis/transport/montecarlo/tests/conftest.py | 2 +- .../montecarlo/tests/test_numba_interface.py | 2 +- 11 files changed, 36 insertions(+), 485 deletions(-) delete mode 100644 tardis/plasma/properties/util/macro_atom.py diff --git a/benchmarks/transport_montecarlo_numba_interface.py b/benchmarks/transport_montecarlo_numba_interface.py index 9b999c7c848..3d8ead2ed04 100644 --- a/benchmarks/transport_montecarlo_numba_interface.py +++ b/benchmarks/transport_montecarlo_numba_interface.py @@ -5,7 +5,7 @@ import numpy as np from asv_runner.benchmarks.mark import parameterize -import tardis.transport.montecarlo.numba_interface as numba_interface +import tardis.opacities.opacity_state as numba_interface from benchmarks.benchmark_base import BenchmarkBase diff --git a/tardis/opacities/tau_sobolev.py b/tardis/opacities/tau_sobolev.py index 95997683ea3..302e00a6f64 100644 --- a/tardis/opacities/tau_sobolev.py +++ b/tardis/opacities/tau_sobolev.py @@ -23,16 +23,25 @@ def calculate_sobolev_line_opacity( time_explosion, stimulated_emission_factor, ): - tau_sobolevs = (lines.wavelength_cm * lines.f_lu).values[np.newaxis].T - tau_sobolevs *= ( - SOBOLEV_COEFFICIENT + tau_sobolevs = ( + (lines.wavelength_cm * lines.f_lu).values[np.newaxis].T + * SOBOLEV_COEFFICIENT * time_explosion.to(u.s).value * stimulated_emission_factor + * level_number_density.reindex(lines.droplevel(-1).index).values + ) + + if np.any(np.isnan(tau_sobolevs)) or np.any(np.isinf(np.abs(tau_sobolevs))): + raise ValueError( + "Some tau_sobolevs are nan, inf, -inf in tau_sobolevs." + " Something went wrong!" + ) + + return pd.DataFrame( + tau_sobolevs, + index=lines.index, + columns=np.array(level_number_density.columns), ) - tau_sobolevs *= level_number_density.reindex( - lines.droplevel(-1).index - ).values - return tau_sobolevs class TauSobolev(ProcessingPlasmaProperty): @@ -68,37 +77,12 @@ def calculate( self, lines, level_number_density, - lines_lower_level_index, time_explosion, stimulated_emission_factor, - j_blues, - f_lu, - wavelength_cm, ): - f_lu = f_lu.values[np.newaxis].T - wavelength = wavelength_cm.values[np.newaxis].T - n_lower = level_number_density.values.take( - lines_lower_level_index, axis=0, mode="raise" - ) - tau_sobolevs = ( - self.sobolev_coefficient - * f_lu - * wavelength - * time_explosion - * n_lower - * stimulated_emission_factor - ) - - if np.any(np.isnan(tau_sobolevs)) or np.any( - np.isinf(np.abs(tau_sobolevs)) - ): - raise ValueError( - "Some tau_sobolevs are nan, inf, -inf in tau_sobolevs." - " Something went wrong!" - ) - - return pd.DataFrame( - tau_sobolevs, - index=lines.index, - columns=np.array(level_number_density.columns), + return calculate_sobolev_line_opacity( + lines, + level_number_density, + time_explosion, + stimulated_emission_factor, ) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index 26d08db5d64..3b1e8ebc5cd 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -1,3 +1,7 @@ +from tardis.opacities.macro_atom.base import ( + NonMarkovChainTransitionProbabilities, + TransitionProbabilities, +) from tardis.plasma.properties import * from tardis.opacities.tau_sobolev import TauSobolev diff --git a/tardis/plasma/properties/radiative_properties.py b/tardis/plasma/properties/radiative_properties.py index 99d34e91924..6facf1e8d27 100644 --- a/tardis/plasma/properties/radiative_properties.py +++ b/tardis/plasma/properties/radiative_properties.py @@ -3,21 +3,20 @@ import numpy as np import pandas as pd from astropy import units as u -from tardis import constants as const from numba import jit, prange +from tardis import constants as const +from tardis.opacities.macro_atom.base import TransitionProbabilities from tardis.plasma.properties.base import ( ProcessingPlasmaProperty, TransitionProbabilitiesProperty, ) -from tardis.plasma.properties.util import macro_atom logger = logging.getLogger(__name__) __all__ = [ "StimulatedEmissionFactor", "BetaSobolev", - "TransitionProbabilities", "RawRadBoundBoundTransProbs", "NonMarkovChainTransitionProbabilities", ] @@ -154,143 +153,6 @@ def calculate_beta_sobolev(tau_sobolevs, beta_sobolevs): return beta_sobolevs -class TransitionProbabilities(ProcessingPlasmaProperty): - """ - Attributes - ---------- - transition_probabilities : Pandas DataFrame, dtype float - """ - - outputs = ("transition_probabilities",) - - def __init__(self, plasma_parent): - super(TransitionProbabilities, self).__init__(plasma_parent) - self.initialize = True - self.normalize = True - - def calculate( - self, - atomic_data, - beta_sobolev, - j_blues, - stimulated_emission_factor, - tau_sobolevs, - ): - # I wonder why? - # Not sure who wrote this but the answer is that when the plasma is - # first initialised (before the first iteration, without temperature - # values etc.) there are no j_blues values so this just prevents - # an error. Aoife. - if len(j_blues) == 0: - return None - macro_atom_data = self._get_macro_atom_data(atomic_data) - if self.initialize: - self.initialize_macro_atom_transition_type_filters( - atomic_data, macro_atom_data - ) - self.transition_probability_coef = ( - self._get_transition_probability_coefs(macro_atom_data) - ) - self.initialize = False - transition_probabilities = self._calculate_transition_probability( - macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor - ) - transition_probabilities = pd.DataFrame( - transition_probabilities, - index=macro_atom_data.transition_line_id, - columns=tau_sobolevs.columns, - ) - return transition_probabilities - - def _calculate_transition_probability( - self, macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor - ): - transition_probabilities = np.empty( - (self.transition_probability_coef.shape[0], beta_sobolev.shape[1]) - ) - # trans_old = self.calculate_transition_probabilities(macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor) - transition_type = macro_atom_data.transition_type.values - lines_idx = macro_atom_data.lines_idx.values - tpos = macro_atom_data.transition_probability.values - macro_atom.calculate_transition_probabilities( - tpos, - beta_sobolev.values, - j_blues.values, - stimulated_emission_factor, - transition_type, - lines_idx, - self.block_references, - transition_probabilities, - self.normalize, - ) - return transition_probabilities - - def calculate_transition_probabilities( - self, macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor - ): - transition_probabilities = self.prepare_transition_probabilities( - macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor - ) - return transition_probabilities - - def initialize_macro_atom_transition_type_filters( - self, atomic_data, macro_atom_data - ): - self.transition_up_filter = macro_atom_data.transition_type.values == 1 - self.transition_up_line_filter = macro_atom_data.lines_idx.values[ - self.transition_up_filter - ] - self.block_references = np.hstack( - ( - atomic_data.macro_atom_references.block_references, - len(macro_atom_data), - ) - ) - - @staticmethod - def _get_transition_probability_coefs(macro_atom_data): - return macro_atom_data.transition_probability.values[np.newaxis].T - - def prepare_transition_probabilities( - self, macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor - ): - current_beta_sobolev = beta_sobolev.values.take( - macro_atom_data.lines_idx.values, axis=0, mode="raise" - ) - transition_probabilities = ( - self.transition_probability_coef * current_beta_sobolev - ) - j_blues = j_blues.take( - self.transition_up_line_filter, axis=0, mode="raise" - ) - macro_stimulated_emission = stimulated_emission_factor.take( - self.transition_up_line_filter, axis=0, mode="raise" - ) - transition_probabilities[self.transition_up_filter] *= ( - j_blues * macro_stimulated_emission - ) - return transition_probabilities - - def _normalize_transition_probabilities(self, transition_probabilities): - macro_atom.normalize_transition_probabilities( - transition_probabilities, self.block_references - ) - - @staticmethod - def _get_macro_atom_data(atomic_data): - try: - return atomic_data.macro_atom_data - except: - logger.debug( - "Macro Atom Data was not found. Instead returning All Macro Atom Data" - ) - return atomic_data.macro_atom_data_all - - -class NonMarkovChainTransitionProbabilities(TransitionProbabilities): - outputs = ("non_markov_transition_probabilities",) - - class RawRadBoundBoundTransProbs( TransitionProbabilities, TransitionProbabilitiesProperty ): diff --git a/tardis/plasma/properties/util/macro_atom.py b/tardis/plasma/properties/util/macro_atom.py deleted file mode 100644 index c72781f4b41..00000000000 --- a/tardis/plasma/properties/util/macro_atom.py +++ /dev/null @@ -1,61 +0,0 @@ -import numpy as np -from numba import njit - -from tardis import constants as const -from tardis.transport.montecarlo import njit_dict - -h_cgs = const.h.cgs.value -c = const.c.to("cm/s").value -kb = const.k_B.cgs.value -inv_c2 = 1 / (c**2) - - -@njit(**njit_dict) -def calculate_transition_probabilities( - transition_probability_coef, - beta_sobolev, - j_blues, - stimulated_emission_factor, - transition_type, - lines_idx, - block_references, - transition_probabilities, - normalize, -): - """ - Calculates transition probabilities for macro_atom interactions - - transition_probability_coef must be a 1D array - transition_type, lines_idx, and block_references must be int-type arrays - beta_sobolev, j_blues,stimulated_emission_factor, and transition_probabilities must be 2D array - """ - norm_factor = np.zeros(transition_probabilities.shape[1]) - - for i in range(transition_probabilities.shape[0]): - line_idx = lines_idx[i] - for j in range(transition_probabilities.shape[1]): - transition_probabilities[i, j] = ( - transition_probability_coef[i] * beta_sobolev[line_idx, j] - ) - if transition_type[i] == 1: - for j in range(transition_probabilities.shape[1]): - transition_probabilities[i, j] *= ( - stimulated_emission_factor[line_idx, j] - * j_blues[line_idx, j] - ) - - if normalize: - for i in range(block_references.shape[0] - 1): - for k in range(transition_probabilities.shape[1]): - norm_factor[k] = 0.0 - for j in range(block_references[i], block_references[i + 1]): - for k in range(transition_probabilities.shape[1]): - norm_factor[k] += transition_probabilities[j, k] - for k in range(transition_probabilities.shape[1]): - if norm_factor[k] != 0.0: - norm_factor[k] = 1 / norm_factor[k] - else: - norm_factor[k] = 1.0 - for j in range(block_references[i], block_references[i + 1]): - for k in range(transition_probabilities.shape[1]): - transition_probabilities[j, k] *= norm_factor[k] diff --git a/tardis/radiation_field/base.py b/tardis/radiation_field/base.py index 9614c5f4621..4fe0658c20c 100644 --- a/tardis/radiation_field/base.py +++ b/tardis/radiation_field/base.py @@ -2,7 +2,7 @@ from astropy import units as u from tardis.transport.montecarlo.packet_source import BasePacketSource -from tardis.transport.montecarlo.numba_interface import OpacityState +from tardis.opacities.opacity_state import OpacityState class MonteCarloRadiationFieldState: diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index d607616ed71..c97b6d6a1b9 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -7,6 +7,7 @@ from tardis import constants as const from tardis.io.logger import montecarlo_tracking as mc_tracker from tardis.io.util import HDFWriterMixin +from tardis.opacities.opacity_state import opacity_state_initialize from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( initialize_estimator_statistics, ) @@ -20,7 +21,6 @@ from tardis.transport.montecarlo.formal_integral import FormalIntegrator from tardis.transport.montecarlo.numba_interface import ( NumbaModel, - opacity_state_initialize, ) from tardis.transport.montecarlo.r_packet import ( rpacket_trackers_to_dataframe, diff --git a/tardis/transport/montecarlo/formal_integral.py b/tardis/transport/montecarlo/formal_integral.py index e27df091055..6b3154d01b4 100644 --- a/tardis/transport/montecarlo/formal_integral.py +++ b/tardis/transport/montecarlo/formal_integral.py @@ -10,12 +10,14 @@ from numba.experimental import jitclass +from tardis.opacities.opacity_state import ( + OpacityState, + opacity_state_initialize, +) from tardis.transport.montecarlo.numba_config import SIGMA_THOMSON from tardis.transport.montecarlo import njit_dict, njit_dict_no_parallel from tardis.transport.montecarlo.numba_interface import ( - opacity_state_initialize, NumbaModel, - OpacityState, ) from tardis.transport.montecarlo.formal_integral_cuda import ( CudaFormalIntegrator, diff --git a/tardis/transport/montecarlo/numba_interface.py b/tardis/transport/montecarlo/numba_interface.py index f6c9198444d..1962315ef4e 100644 --- a/tardis/transport/montecarlo/numba_interface.py +++ b/tardis/transport/montecarlo/numba_interface.py @@ -28,246 +28,6 @@ def __init__(self, time_explosion): self.time_explosion = time_explosion -opacity_state_spec = [ - ("electron_density", float64[:]), - ("t_electrons", float64[:]), - ("line_list_nu", float64[:]), - ("tau_sobolev", float64[:, :]), - ("transition_probabilities", float64[:, :]), - ("line2macro_level_upper", int64[:]), - ("macro_block_references", int64[:]), - ("transition_type", int64[:]), - ("destination_level_id", int64[:]), - ("transition_line_id", int64[:]), - ("bf_threshold_list_nu", float64[:]), - ("p_fb_deactivation", float64[:, :]), - ("photo_ion_nu_threshold_mins", float64[:]), - ("photo_ion_nu_threshold_maxs", float64[:]), - ("photo_ion_block_references", int64[:]), - ("chi_bf", float64[:, :]), - ("x_sect", float64[:]), - ("phot_nus", float64[:]), - ("ff_opacity_factor", float64[:]), - ("emissivities", float64[:, :]), - ("photo_ion_activation_idx", int64[:]), - ("k_packet_idx", int64), -] - - -@jitclass(opacity_state_spec) -class OpacityState(object): - def __init__( - self, - electron_density, - t_electrons, - line_list_nu, - tau_sobolev, - transition_probabilities, - line2macro_level_upper, - macro_block_references, - transition_type, - destination_level_id, - transition_line_id, - bf_threshold_list_nu, - p_fb_deactivation, - photo_ion_nu_threshold_mins, - photo_ion_nu_threshold_maxs, - photo_ion_block_references, - chi_bf, - x_sect, - phot_nus, - ff_opacity_factor, - emissivities, - photo_ion_activation_idx, - k_packet_idx, - ): - """ - Plasma for the Numba code - - Parameters - ---------- - electron_density : numpy.ndarray - t_electrons : numpy.ndarray - line_list_nu : numpy.ndarray - tau_sobolev : numpy.ndarray - transition_probabilities : numpy.ndarray - line2macro_level_upper : numpy.ndarray - macro_block_references : numpy.ndarray - transition_type : numpy.ndarray - destination_level_id : numpy.ndarray - transition_line_id : numpy.ndarray - bf_threshold_list_nu : numpy.ndarray - """ - - self.electron_density = electron_density - self.t_electrons = t_electrons - self.line_list_nu = line_list_nu - self.tau_sobolev = tau_sobolev - self.bf_threshold_list_nu = bf_threshold_list_nu - - #### Macro Atom transition probabilities - self.transition_probabilities = transition_probabilities - self.line2macro_level_upper = line2macro_level_upper - - self.macro_block_references = macro_block_references - self.transition_type = transition_type - - # Destination level is not needed and/or generated for downbranch - self.destination_level_id = destination_level_id - self.transition_line_id = transition_line_id - self.p_fb_deactivation = p_fb_deactivation - - # Continuum Opacity Data - self.photo_ion_nu_threshold_mins = photo_ion_nu_threshold_mins - self.photo_ion_nu_threshold_maxs = photo_ion_nu_threshold_maxs - - self.photo_ion_block_references = photo_ion_block_references - self.chi_bf = chi_bf - self.x_sect = x_sect - self.phot_nus = phot_nus - self.ff_opacity_factor = ff_opacity_factor - self.emissivities = emissivities - self.photo_ion_activation_idx = photo_ion_activation_idx - self.k_packet_idx = k_packet_idx - - -def opacity_state_initialize( - plasma, - line_interaction_type, - disable_line_scattering, - continuum_processes_enabled, -): - """ - Initialize the OpacityState object and copy over the data over from TARDIS Plasma - - Parameters - ---------- - plasma : tardis.plasma.BasePlasma - line_interaction_type : enum - """ - - electron_densities = plasma.electron_densities.values - t_electrons = plasma.t_electrons - line_list_nu = plasma.atomic_data.lines.nu.values - tau_sobolev = np.ascontiguousarray( - plasma.tau_sobolevs.values.copy(), dtype=np.float64 - ) - if disable_line_scattering: - tau_sobolev *= 0 - - if line_interaction_type == "scatter": - # to adhere to data types, we must have an array of minimum size 1 - array_size = 1 - transition_probabilities = np.zeros( - (array_size, array_size), dtype=np.float64 - ) # to adhere to data types - line2macro_level_upper = np.zeros(array_size, dtype=np.int64) - macro_block_references = np.zeros(array_size, dtype=np.int64) - transition_type = np.zeros(array_size, dtype=np.int64) - destination_level_id = np.zeros(array_size, dtype=np.int64) - transition_line_id = np.zeros(array_size, dtype=np.int64) - else: - transition_probabilities = np.ascontiguousarray( - plasma.transition_probabilities.values.copy(), dtype=np.float64 - ) - line2macro_level_upper = ( - plasma.atomic_data.lines_upper2macro_reference_idx - ) - # TODO: Fix setting of block references for non-continuum mode - - if continuum_processes_enabled: - macro_block_references = plasma.macro_block_references - else: - macro_block_references = plasma.atomic_data.macro_atom_references[ - "block_references" - ].values - transition_type = plasma.macro_atom_data["transition_type"].values - - # Destination level is not needed and/or generated for downbranch - destination_level_id = plasma.macro_atom_data[ - "destination_level_idx" - ].values - transition_line_id = plasma.macro_atom_data["lines_idx"].values - if continuum_processes_enabled: - bf_threshold_list_nu = plasma.nu_i.loc[ - plasma.level2continuum_idx.index - ].values - p_fb_deactivation = np.ascontiguousarray( - plasma.p_fb_deactivation.values.copy(), dtype=np.float64 - ) - - phot_nus = plasma.photo_ion_cross_sections.nu.loc[ - plasma.level2continuum_idx.index - ] - photo_ion_block_references = np.pad( - phot_nus.groupby(level=[0, 1, 2], sort=False) - .count() - .values.cumsum(), - [1, 0], - ) - photo_ion_nu_threshold_mins = ( - phot_nus.groupby(level=[0, 1, 2], sort=False).first().values - ) - photo_ion_nu_threshold_maxs = ( - phot_nus.groupby(level=[0, 1, 2], sort=False).last().values - ) - - chi_bf = plasma.chi_bf.loc[plasma.level2continuum_idx.index].values - x_sect = plasma.photo_ion_cross_sections.x_sect.loc[ - plasma.level2continuum_idx.index - ].values - - phot_nus = phot_nus.values - ff_opacity_factor = ( - plasma.ff_cooling_factor / np.sqrt(t_electrons) - ).astype(np.float64) - emissivities = plasma.fb_emission_cdf.loc[ - plasma.level2continuum_idx.index - ].values - photo_ion_activation_idx = plasma.photo_ion_idx.loc[ - plasma.level2continuum_idx.index, "destination_level_idx" - ].values - k_packet_idx = np.int64(plasma.k_packet_idx) - else: - bf_threshold_list_nu = np.zeros(0, dtype=np.float64) - p_fb_deactivation = np.zeros((0, 0), dtype=np.float64) - photo_ion_nu_threshold_mins = np.zeros(0, dtype=np.float64) - photo_ion_nu_threshold_maxs = np.zeros(0, dtype=np.float64) - photo_ion_block_references = np.zeros(0, dtype=np.int64) - chi_bf = np.zeros((0, 0), dtype=np.float64) - x_sect = np.zeros(0, dtype=np.float64) - phot_nus = np.zeros(0, dtype=np.float64) - ff_opacity_factor = np.zeros(0, dtype=np.float64) - emissivities = np.zeros((0, 0), dtype=np.float64) - photo_ion_activation_idx = np.zeros(0, dtype=np.int64) - k_packet_idx = np.int64(-1) - - return OpacityState( - electron_densities, - t_electrons, - line_list_nu, - tau_sobolev, - transition_probabilities, - line2macro_level_upper, - macro_block_references, - transition_type, - destination_level_id, - transition_line_id, - bf_threshold_list_nu, - p_fb_deactivation, - photo_ion_nu_threshold_mins, - photo_ion_nu_threshold_maxs, - photo_ion_block_references, - chi_bf, - x_sect, - phot_nus, - ff_opacity_factor, - emissivities, - photo_ion_activation_idx, - k_packet_idx, - ) - - rpacket_tracker_spec = [ ("length", int64), ("seed", int64), diff --git a/tardis/transport/montecarlo/tests/conftest.py b/tardis/transport/montecarlo/tests/conftest.py index 659f2037be9..eae3827f577 100644 --- a/tardis/transport/montecarlo/tests/conftest.py +++ b/tardis/transport/montecarlo/tests/conftest.py @@ -3,6 +3,7 @@ import pytest import numpy as np from numba import njit +from tardis.opacities.opacity_state import opacity_state_initialize from tardis.transport.montecarlo.packet_collections import ( VPacketCollection, ) @@ -15,7 +16,6 @@ from tardis.transport.montecarlo.numba_interface import ( - opacity_state_initialize, NumbaModel, ) diff --git a/tardis/transport/montecarlo/tests/test_numba_interface.py b/tardis/transport/montecarlo/tests/test_numba_interface.py index 5d779ce36d2..0b41c863eef 100644 --- a/tardis/transport/montecarlo/tests/test_numba_interface.py +++ b/tardis/transport/montecarlo/tests/test_numba_interface.py @@ -1,5 +1,5 @@ import pytest -import tardis.transport.montecarlo.numba_interface as numba_interface +import tardis.opacities.opacity_state as numba_interface import numpy.testing as npt import numpy as np From 73f2ddcc015e7fb977225fee4059f809fd9b6bf3 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 6 May 2024 21:27:13 -0400 Subject: [PATCH 009/118] Add calculate_transition_probabilities function to util.py in macro_atom package --- tardis/opacities/macro_atom/base.py | 144 ++++++++++++++++ tardis/opacities/macro_atom/util.py | 61 +++++++ tardis/opacities/opacity_state.py | 249 ++++++++++++++++++++++++++++ 3 files changed, 454 insertions(+) create mode 100644 tardis/opacities/macro_atom/base.py create mode 100644 tardis/opacities/macro_atom/util.py create mode 100644 tardis/opacities/opacity_state.py diff --git a/tardis/opacities/macro_atom/base.py b/tardis/opacities/macro_atom/base.py new file mode 100644 index 00000000000..251ddeaf792 --- /dev/null +++ b/tardis/opacities/macro_atom/base.py @@ -0,0 +1,144 @@ +from tardis.plasma.properties.base import ProcessingPlasmaProperty +from tardis.plasma.properties.radiative_properties import logger +from tardis.opacities.macro_atom import util + + +import numpy as np +import pandas as pd + + +class TransitionProbabilities(ProcessingPlasmaProperty): + """ + Attributes + ---------- + transition_probabilities : Pandas DataFrame, dtype float + """ + + outputs = ("transition_probabilities",) + + def __init__(self, plasma_parent): + super(TransitionProbabilities, self).__init__(plasma_parent) + self.initialize = True + self.normalize = True + + def calculate( + self, + atomic_data, + beta_sobolev, + j_blues, + stimulated_emission_factor, + tau_sobolevs, + ): + # I wonder why? + # Not sure who wrote this but the answer is that when the plasma is + # first initialised (before the first iteration, without temperature + # values etc.) there are no j_blues values so this just prevents + # an error. Aoife. + if len(j_blues) == 0: + return None + macro_atom_data = self._get_macro_atom_data(atomic_data) + if self.initialize: + self.initialize_macro_atom_transition_type_filters( + atomic_data, macro_atom_data + ) + self.transition_probability_coef = ( + self._get_transition_probability_coefs(macro_atom_data) + ) + self.initialize = False + transition_probabilities = self._calculate_transition_probability( + macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor + ) + transition_probabilities = pd.DataFrame( + transition_probabilities, + index=macro_atom_data.transition_line_id, + columns=tau_sobolevs.columns, + ) + return transition_probabilities + + def _calculate_transition_probability( + self, macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor + ): + transition_probabilities = np.empty( + (self.transition_probability_coef.shape[0], beta_sobolev.shape[1]) + ) + # trans_old = self.calculate_transition_probabilities(macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor) + transition_type = macro_atom_data.transition_type.values + lines_idx = macro_atom_data.lines_idx.values + tpos = macro_atom_data.transition_probability.values + util.calculate_transition_probabilities( + tpos, + beta_sobolev.values, + j_blues.values, + stimulated_emission_factor, + transition_type, + lines_idx, + self.block_references, + transition_probabilities, + self.normalize, + ) + return transition_probabilities + + def calculate_transition_probabilities( + self, macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor + ): + transition_probabilities = self.prepare_transition_probabilities( + macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor + ) + return transition_probabilities + + def initialize_macro_atom_transition_type_filters( + self, atomic_data, macro_atom_data + ): + self.transition_up_filter = macro_atom_data.transition_type.values == 1 + self.transition_up_line_filter = macro_atom_data.lines_idx.values[ + self.transition_up_filter + ] + self.block_references = np.hstack( + ( + atomic_data.macro_atom_references.block_references, + len(macro_atom_data), + ) + ) + + @staticmethod + def _get_transition_probability_coefs(macro_atom_data): + return macro_atom_data.transition_probability.values[np.newaxis].T + + def prepare_transition_probabilities( + self, macro_atom_data, beta_sobolev, j_blues, stimulated_emission_factor + ): + current_beta_sobolev = beta_sobolev.values.take( + macro_atom_data.lines_idx.values, axis=0, mode="raise" + ) + transition_probabilities = ( + self.transition_probability_coef * current_beta_sobolev + ) + j_blues = j_blues.take( + self.transition_up_line_filter, axis=0, mode="raise" + ) + macro_stimulated_emission = stimulated_emission_factor.take( + self.transition_up_line_filter, axis=0, mode="raise" + ) + transition_probabilities[self.transition_up_filter] *= ( + j_blues * macro_stimulated_emission + ) + return transition_probabilities + + def _normalize_transition_probabilities(self, transition_probabilities): + util.normalize_transition_probabilities( + transition_probabilities, self.block_references + ) + + @staticmethod + def _get_macro_atom_data(atomic_data): + try: + return atomic_data.macro_atom_data + except: + logger.debug( + "Macro Atom Data was not found. Instead returning All Macro Atom Data" + ) + return atomic_data.macro_atom_data_all + + +class NonMarkovChainTransitionProbabilities(TransitionProbabilities): + outputs = ("non_markov_transition_probabilities",) diff --git a/tardis/opacities/macro_atom/util.py b/tardis/opacities/macro_atom/util.py new file mode 100644 index 00000000000..c72781f4b41 --- /dev/null +++ b/tardis/opacities/macro_atom/util.py @@ -0,0 +1,61 @@ +import numpy as np +from numba import njit + +from tardis import constants as const +from tardis.transport.montecarlo import njit_dict + +h_cgs = const.h.cgs.value +c = const.c.to("cm/s").value +kb = const.k_B.cgs.value +inv_c2 = 1 / (c**2) + + +@njit(**njit_dict) +def calculate_transition_probabilities( + transition_probability_coef, + beta_sobolev, + j_blues, + stimulated_emission_factor, + transition_type, + lines_idx, + block_references, + transition_probabilities, + normalize, +): + """ + Calculates transition probabilities for macro_atom interactions + + transition_probability_coef must be a 1D array + transition_type, lines_idx, and block_references must be int-type arrays + beta_sobolev, j_blues,stimulated_emission_factor, and transition_probabilities must be 2D array + """ + norm_factor = np.zeros(transition_probabilities.shape[1]) + + for i in range(transition_probabilities.shape[0]): + line_idx = lines_idx[i] + for j in range(transition_probabilities.shape[1]): + transition_probabilities[i, j] = ( + transition_probability_coef[i] * beta_sobolev[line_idx, j] + ) + if transition_type[i] == 1: + for j in range(transition_probabilities.shape[1]): + transition_probabilities[i, j] *= ( + stimulated_emission_factor[line_idx, j] + * j_blues[line_idx, j] + ) + + if normalize: + for i in range(block_references.shape[0] - 1): + for k in range(transition_probabilities.shape[1]): + norm_factor[k] = 0.0 + for j in range(block_references[i], block_references[i + 1]): + for k in range(transition_probabilities.shape[1]): + norm_factor[k] += transition_probabilities[j, k] + for k in range(transition_probabilities.shape[1]): + if norm_factor[k] != 0.0: + norm_factor[k] = 1 / norm_factor[k] + else: + norm_factor[k] = 1.0 + for j in range(block_references[i], block_references[i + 1]): + for k in range(transition_probabilities.shape[1]): + transition_probabilities[j, k] *= norm_factor[k] diff --git a/tardis/opacities/opacity_state.py b/tardis/opacities/opacity_state.py new file mode 100644 index 00000000000..6bfa5e308c0 --- /dev/null +++ b/tardis/opacities/opacity_state.py @@ -0,0 +1,249 @@ +import numpy as np +from numba import float64, int64 +from numba.experimental import jitclass + +from tardis.opacities.tau_sobolev import calculate_sobolev_line_opacity + +opacity_state_spec = [ + ("electron_density", float64[:]), + ("t_electrons", float64[:]), + ("line_list_nu", float64[:]), + ("tau_sobolev", float64[:, :]), + ("transition_probabilities", float64[:, :]), + ("line2macro_level_upper", int64[:]), + ("macro_block_references", int64[:]), + ("transition_type", int64[:]), + ("destination_level_id", int64[:]), + ("transition_line_id", int64[:]), + ("bf_threshold_list_nu", float64[:]), + ("p_fb_deactivation", float64[:, :]), + ("photo_ion_nu_threshold_mins", float64[:]), + ("photo_ion_nu_threshold_maxs", float64[:]), + ("photo_ion_block_references", int64[:]), + ("chi_bf", float64[:, :]), + ("x_sect", float64[:]), + ("phot_nus", float64[:]), + ("ff_opacity_factor", float64[:]), + ("emissivities", float64[:, :]), + ("photo_ion_activation_idx", int64[:]), + ("k_packet_idx", int64), +] + + +@jitclass(opacity_state_spec) +class OpacityState: + def __init__( + self, + electron_density, + t_electrons, + line_list_nu, + tau_sobolev, + transition_probabilities, + line2macro_level_upper, + macro_block_references, + transition_type, + destination_level_id, + transition_line_id, + bf_threshold_list_nu, + p_fb_deactivation, + photo_ion_nu_threshold_mins, + photo_ion_nu_threshold_maxs, + photo_ion_block_references, + chi_bf, + x_sect, + phot_nus, + ff_opacity_factor, + emissivities, + photo_ion_activation_idx, + k_packet_idx, + ): + """ + Plasma for the Numba code + + Parameters + ---------- + electron_density : numpy.ndarray + t_electrons : numpy.ndarray + line_list_nu : numpy.ndarray + tau_sobolev : numpy.ndarray + transition_probabilities : numpy.ndarray + line2macro_level_upper : numpy.ndarray + macro_block_references : numpy.ndarray + transition_type : numpy.ndarray + destination_level_id : numpy.ndarray + transition_line_id : numpy.ndarray + bf_threshold_list_nu : numpy.ndarray + """ + self.electron_density = electron_density + self.t_electrons = t_electrons + self.line_list_nu = line_list_nu + self.tau_sobolev = tau_sobolev + self.bf_threshold_list_nu = bf_threshold_list_nu + + #### Macro Atom transition probabilities + self.transition_probabilities = transition_probabilities + self.line2macro_level_upper = line2macro_level_upper + + self.macro_block_references = macro_block_references + self.transition_type = transition_type + + # Destination level is not needed and/or generated for downbranch + self.destination_level_id = destination_level_id + self.transition_line_id = transition_line_id + self.p_fb_deactivation = p_fb_deactivation + + # Continuum Opacity Data + self.photo_ion_nu_threshold_mins = photo_ion_nu_threshold_mins + self.photo_ion_nu_threshold_maxs = photo_ion_nu_threshold_maxs + + self.photo_ion_block_references = photo_ion_block_references + self.chi_bf = chi_bf + self.x_sect = x_sect + self.phot_nus = phot_nus + self.ff_opacity_factor = ff_opacity_factor + self.emissivities = emissivities + self.photo_ion_activation_idx = photo_ion_activation_idx + self.k_packet_idx = k_packet_idx + + +def opacity_state_initialize( + plasma, + line_interaction_type, + disable_line_scattering, + continuum_processes_enabled, +): + """ + Initialize the OpacityState object and copy over the data over from TARDIS Plasma + + Parameters + ---------- + plasma : tardis.plasma.BasePlasma + line_interaction_type : enum + """ + electron_densities = plasma.electron_densities.values + t_electrons = plasma.t_electrons + line_list_nu = plasma.atomic_data.lines.nu.values + + tau_sobolev_df = calculate_sobolev_line_opacity( + plasma.atomic_data.lines, + plasma.level_number_density, + plasma.time_explosion, + plasma.stimulated_emission_factor, + ) + + tau_sobolev = np.ascontiguousarray(tau_sobolev_df, dtype=np.float64) + + if disable_line_scattering: + tau_sobolev *= 0 + + if line_interaction_type == "scatter": + # to adhere to data types, we must have an array of minimum size 1 + array_size = 1 + transition_probabilities = np.zeros( + (array_size, array_size), dtype=np.float64 + ) # to adhere to data types + line2macro_level_upper = np.zeros(array_size, dtype=np.int64) + macro_block_references = np.zeros(array_size, dtype=np.int64) + transition_type = np.zeros(array_size, dtype=np.int64) + destination_level_id = np.zeros(array_size, dtype=np.int64) + transition_line_id = np.zeros(array_size, dtype=np.int64) + else: + transition_probabilities = np.ascontiguousarray( + plasma.transition_probabilities.values.copy(), dtype=np.float64 + ) + line2macro_level_upper = ( + plasma.atomic_data.lines_upper2macro_reference_idx + ) + # TODO: Fix setting of block references for non-continuum mode + + if continuum_processes_enabled: + macro_block_references = plasma.macro_block_references + else: + macro_block_references = plasma.atomic_data.macro_atom_references[ + "block_references" + ].values + transition_type = plasma.macro_atom_data["transition_type"].values + + # Destination level is not needed and/or generated for downbranch + destination_level_id = plasma.macro_atom_data[ + "destination_level_idx" + ].values + transition_line_id = plasma.macro_atom_data["lines_idx"].values + if continuum_processes_enabled: + bf_threshold_list_nu = plasma.nu_i.loc[ + plasma.level2continuum_idx.index + ].values + p_fb_deactivation = np.ascontiguousarray( + plasma.p_fb_deactivation.values.copy(), dtype=np.float64 + ) + + phot_nus = plasma.photo_ion_cross_sections.nu.loc[ + plasma.level2continuum_idx.index + ] + photo_ion_block_references = np.pad( + phot_nus.groupby(level=[0, 1, 2], sort=False) + .count() + .values.cumsum(), + [1, 0], + ) + photo_ion_nu_threshold_mins = ( + phot_nus.groupby(level=[0, 1, 2], sort=False).first().values + ) + photo_ion_nu_threshold_maxs = ( + phot_nus.groupby(level=[0, 1, 2], sort=False).last().values + ) + + chi_bf = plasma.chi_bf.loc[plasma.level2continuum_idx.index].values + x_sect = plasma.photo_ion_cross_sections.x_sect.loc[ + plasma.level2continuum_idx.index + ].values + + phot_nus = phot_nus.values + ff_opacity_factor = ( + plasma.ff_cooling_factor / np.sqrt(t_electrons) + ).astype(np.float64) + emissivities = plasma.fb_emission_cdf.loc[ + plasma.level2continuum_idx.index + ].values + photo_ion_activation_idx = plasma.photo_ion_idx.loc[ + plasma.level2continuum_idx.index, "destination_level_idx" + ].values + k_packet_idx = np.int64(plasma.k_packet_idx) + else: + bf_threshold_list_nu = np.zeros(0, dtype=np.float64) + p_fb_deactivation = np.zeros((0, 0), dtype=np.float64) + photo_ion_nu_threshold_mins = np.zeros(0, dtype=np.float64) + photo_ion_nu_threshold_maxs = np.zeros(0, dtype=np.float64) + photo_ion_block_references = np.zeros(0, dtype=np.int64) + chi_bf = np.zeros((0, 0), dtype=np.float64) + x_sect = np.zeros(0, dtype=np.float64) + phot_nus = np.zeros(0, dtype=np.float64) + ff_opacity_factor = np.zeros(0, dtype=np.float64) + emissivities = np.zeros((0, 0), dtype=np.float64) + photo_ion_activation_idx = np.zeros(0, dtype=np.int64) + k_packet_idx = np.int64(-1) + + return OpacityState( + electron_densities, + t_electrons, + line_list_nu, + tau_sobolev, + transition_probabilities, + line2macro_level_upper, + macro_block_references, + transition_type, + destination_level_id, + transition_line_id, + bf_threshold_list_nu, + p_fb_deactivation, + photo_ion_nu_threshold_mins, + photo_ion_nu_threshold_maxs, + photo_ion_block_references, + chi_bf, + x_sect, + phot_nus, + ff_opacity_factor, + emissivities, + photo_ion_activation_idx, + k_packet_idx, + ) From 52d5523d84e210c5b336493f1ddfa023a88bcdf6 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 9 May 2024 17:01:57 -0400 Subject: [PATCH 010/118] Add calculate_transition_probabilities function to util.py in macro_atom package --- .../macro_atom/transition_probabilities.py | 425 ++++++++++++++++++ 1 file changed, 425 insertions(+) create mode 100644 tardis/opacities/macro_atom/transition_probabilities.py diff --git a/tardis/opacities/macro_atom/transition_probabilities.py b/tardis/opacities/macro_atom/transition_probabilities.py new file mode 100644 index 00000000000..75f841b1eb2 --- /dev/null +++ b/tardis/opacities/macro_atom/transition_probabilities.py @@ -0,0 +1,425 @@ +import logging + +import numpy as np +import pandas as pd + +from scipy import sparse as sp + +from tardis.plasma.properties.base import ProcessingPlasmaProperty +from tardis.plasma.properties.continuum_processes import ( + get_ground_state_multi_index, +) +from tardis.transport.montecarlo.macro_atom import ( + MacroAtomTransitionType, +) + +__all__ = [ + "MarkovChainTransProbs", + "MarkovChainIndex", + "MarkovChainTransProbsCollector", + "NonContinuumTransProbsMask", + "MonteCarloTransProbs", +] + +logger = logging.getLogger(__name__) + + +def normalize_trans_probs(p): + """ + Normalize a set of transition probabilities. + + Parameters + ---------- + p : pandas.DataFrame, dtype float + Unnormalized transition probabilities. Indexed by + source_level_idx, destination_level_idx. + + Returns + ------- + pandas.DataFrame, dtype float + Normalized transition probabilities: the sum of + all probabilites with the same source_level_idx sum to one. + Indexed by source_level_idx, destination_level_idx. + """ + p = p.astype(np.float64) + p_summed = p.groupby(level=0).sum() + p_summed[p_summed == 0] = 1 + index = p.index.get_level_values("source_level_idx") + p_norm = p / p_summed.loc[index].values + assert np.all(np.isfinite(p_norm)) + return p_norm + + +class SpMatrixSeriesConverterMixin(object): + @staticmethod + def series2matrix(series, idx2reduced_idx): + """ + Convert a Pandas Series to a sparse matrix and re-index it. + + Parameters + ---------- + series : pandas.Series, dtype float + Rates or transition probabilities. Indexed by + source_level_idx, destination_level_idx. + idx2reduced_idx : pandas.Series + Values of (compact) matrix index. Indexed by references_idx. + Maps the references_idx of a level to the index + used in the sparse matrix. + + Returns + ------- + scipy.sparse.coo.coo_matrix + Sparse matrix of rates or transition probabilites. + """ + q_indices = ( + series.index.get_level_values(0), + series.index.get_level_values(1), + ) + q_indices = ( + idx2reduced_idx.loc[q_indices[0]].values, + idx2reduced_idx.loc[q_indices[1]].values, + ) + max_idx = idx2reduced_idx.max() + 1 + matrix = sp.coo_matrix( + (series.astype(np.float64), q_indices), shape=(max_idx, max_idx) + ) + return matrix + + @staticmethod + def matrix2series(matrix, idx2reduced_idx, names=None): + """ + Convert a sparse matrix to a Pandas Series and index it. + + Parameters + ---------- + matrix : scipy.sparse.coo.coo_matrix + Sparse matrix of rates or transition probabilites. + idx2reduced_idx : pandas.Series + Values of (compact) matrix index. Indexed by references_idx. + Maps the references_idx of a level to the index + used in the sparse matrix. + names : array-like, optional + Names of levels in MultiIndex of returned Series. + + Returns + ------- + pandas.Series + Rates or transition probabilities. Indexed by + source_level_idx, destination_level_idx. + """ + reduced_idx2idx = pd.Series( + idx2reduced_idx.index, index=idx2reduced_idx + ) + matrix = matrix.tocoo() + index = pd.MultiIndex.from_arrays( + [reduced_idx2idx.loc[matrix.row], reduced_idx2idx.loc[matrix.col]] + ) + series = pd.Series(matrix.data, index=index) + if names: + series.index.names = names + return series + + +class MarkovChainIndex(ProcessingPlasmaProperty): + """ + Attributes + ---------- + idx2mkv_idx : pandas.Series, dtype int + k_packet_idx : int + Macro atom level idx corresponding to a k-packet. + idx2deactivation_idx : pandas.Series, dtype int + """ + + outputs = ("idx2mkv_idx", "k_packet_idx", "idx2deactivation_idx") + + def calculate(self, atomic_data, continuum_interaction_species): + ma_ref = atomic_data.macro_atom_references + mask = ma_ref.index.droplevel("source_level_number").isin( + continuum_interaction_species + ) + mask2 = ma_ref.index.isin( + get_ground_state_multi_index(continuum_interaction_species) + ) + mask = np.logical_or(mask, mask2) + idx = ma_ref[mask].references_idx.values + idx2mkv_idx = pd.Series(np.arange(len(idx)), index=idx) + idx2mkv_idx.loc["k"] = idx2mkv_idx.max() + 1 + + k_packet_idx = ma_ref.references_idx.max() + 1 + + idx2deactivation_idx = idx2mkv_idx + k_packet_idx + 1 + return idx2mkv_idx, k_packet_idx, idx2deactivation_idx + + +class NonContinuumTransProbsMask(ProcessingPlasmaProperty): + """ + Attributes + ---------- + non_continuum_trans_probs_mask : numpy.ndarray, dtype bool + """ + + outputs = ("non_continuum_trans_probs_mask",) + + def calculate(self, atomic_data, continuum_interaction_species): + # I don't have to remove the ground states of + # the next higher ionization states of the continuum species + # since they only contain zero probabilities. + continuum_trans_probs_mask = atomic_data.macro_atom_data.set_index( + ["atomic_number", "ion_number"] + ).index.isin(continuum_interaction_species) + non_continuum_trans_probs_mask = np.logical_not( + continuum_trans_probs_mask + ) + return non_continuum_trans_probs_mask + + +class MarkovChainTransProbsCollector(ProcessingPlasmaProperty): + """ + Attributes + ---------- + p_combined : pandas.DataFrame, dtype float + Combined and normalized transition probabilities. + Indexed by source_level_idx, destination_level_idx. + """ + + outputs = ("p_combined",) + + def __init__(self, plasma_parent, inputs): + super().__init__(plasma_parent) + self.inputs = inputs + + def calculate(self, *args): + p = pd.concat(args) + p = p.groupby(level=[0, 1, 2]).sum() + p = normalize_trans_probs(p) + return p + + +class MarkovChainTransProbs( + ProcessingPlasmaProperty, SpMatrixSeriesConverterMixin +): + outputs = ("N", "R", "B", "p_deactivation") + latex_name = ("N", "R", "B", r"p_\textrm{deactivation}") + """ + Attributes + ---------- + N : pandas.DataFrame, dtype float + Fundamental matrix of the Markov-chain macro atom. + Indexed by source_level_idx, destination_level_idx. + Expected number of visits to destination_level_idx starting + from souce_level_idx (before being absorbed). + R : pandas.DataFrame, dtype float + Deactivation probabilities of the Markov-chain macro atom. + Indexed by source_level_idx. + Probability of deactivation/absorption in source_level_idx. + B : pandas.DataFrame, dtype float + Absorbing probabilities of the Markov-chain macro atom. + Indexed by source_level_idx, destination_level_idx. + Probability of being absorbed in destination_level_idx when + starting from source_level_idx. + p_deactivation : pandas.DataFrame, dtype float + Redistribution probabilities after deactivation of the Markov-chain + macro atom. Indexed by source_level_idx, destination_level_idx. + Probability of an r-packet being emitted in the transition + (source_level_idx --> destination_level_idx) after deactivation + in source_level_idx. + """ + + def calculate(self, p_combined, idx2mkv_idx): + p = p_combined + p_internal = p.xs(0, level="transition_type") + p_deactivation = normalize_trans_probs( + p.xs(-1, level="transition_type") + ) + + N = pd.DataFrame(columns=p_internal.columns) + B = pd.DataFrame(columns=p_internal.columns) + R = pd.DataFrame(columns=p_internal.columns, index=idx2mkv_idx.index) + R.index.name = "source_level_idx" + for column in p_internal: + Q = self.series2matrix(p_internal[column], idx2mkv_idx) + inv_N = sp.identity(Q.shape[0]) - Q + N1 = sp.linalg.inv(inv_N.tocsc()) + R1 = (1 - np.asarray(Q.sum(axis=1))).flatten() + B1 = N1.multiply(R1) + N1 = self.matrix2series( + N1, idx2mkv_idx, names=p_internal.index.names + ) + B1 = self.matrix2series( + B1, idx2mkv_idx, names=p_internal.index.names + ) + N[column] = N1 + B[column] = B1 + R[column] = R1 + N = N.sort_index() + B = B.sort_index() + return N, R, B, p_deactivation + + +class MonteCarloTransProbs(ProcessingPlasmaProperty): + outputs = ( + "non_continuum_trans_probs", + "level_absorption_probs", + "deactivation_channel_probs", + "transition_probabilities", + "macro_block_references", + "macro_atom_data", + ) + """ + Attributes + ---------- + non_continuum_trans_probs + level_absorption_probs + deactivation_channel_probs + transition_probabilities + macro_block_references + macro_atom_data + """ + + def calculate( + self, + non_markov_transition_probabilities, + atomic_data, + non_continuum_trans_probs_mask, + k_packet_idx, + idx2deactivation_idx, + level_idxs2transition_idx, + p_deactivation, + cool_rate_fb, + cool_rate_fb_tot, + level2continuum_idx, + B, + ): + # Prepare the transition probabilities for the non continuum species + macro_atom_data = atomic_data.macro_atom_data + transition_info = macro_atom_data[ + ["lines_idx", "transition_type"] + ].set_index(non_markov_transition_probabilities.index) + non_continuum_trans_probs = pd.concat( + [transition_info, non_markov_transition_probabilities], axis=1 + ) + index = macro_atom_data.set_index( + ["source_level_idx", "destination_level_idx"] + ).index + non_continuum_trans_probs = non_continuum_trans_probs.set_index(index) + non_continuum_trans_probs = non_continuum_trans_probs[ + non_continuum_trans_probs_mask + ] + + # Prepare the level absorption probabilities for the continuum species + level_absorption_probs = B.copy() + level_absorption_probs.insert(0, "lines_idx", -1) + level_absorption_probs.insert(0, "transition_type", 3) + destination_level_idx = level_absorption_probs.index.get_level_values( + "destination_level_idx" + ) + source_level_idx = level_absorption_probs.rename( + index={"k": k_packet_idx} + ).index.get_level_values("source_level_idx") + destination_level_idx = idx2deactivation_idx.loc[destination_level_idx] + absorption_index = pd.MultiIndex.from_arrays( + [source_level_idx, destination_level_idx], names=B.index.names + ) + level_absorption_probs.index = absorption_index + + # Prepare the free-bound cooling probabilities + fb_cooling_probs = ( + cool_rate_fb + / cool_rate_fb_tot.values + * p_deactivation.loc[("k"), ("bf")] + ) + continuum_idx = level2continuum_idx.loc[fb_cooling_probs.index].values + fb_cooling_probs.index = pd.MultiIndex.from_product( + [["k"], np.ones(len(fb_cooling_probs), dtype=int) * -1], + names=p_deactivation.index.names, + ) + fb_cooling_probs.insert(0, "lines_idx", continuum_idx) + fb_cooling_probs.insert( + 0, + "transition_type", + level_idxs2transition_idx.at[("k", "bf"), "transition_type"], + ) + + # Check if there are two-photon decays + if "two-photon" in p_deactivation.index.get_level_values(1): + two_photon_index = p_deactivation[ + p_deactivation.index.get_level_values(1) == "two-photon" + ].index + level_idxs2transition_idx_two_photon = pd.DataFrame( + [[-1, MacroAtomTransitionType.TWO_PHOTON.value]], + index=two_photon_index, + columns=level_idxs2transition_idx.columns, + ) + level_idxs2transition_idx = pd.concat( + [ + level_idxs2transition_idx_two_photon, + level_idxs2transition_idx, + ] + ) + + # Prepare the deactivation channel probabilities for the continuum species + deactivation_channel_probs = p_deactivation.copy() + deactivation_channel_probs = pd.concat( + [ + level_idxs2transition_idx.reindex( + deactivation_channel_probs.index + ), + deactivation_channel_probs, + ], + axis=1, + ).reindex(deactivation_channel_probs.index) + + deactivation_channel_probs = deactivation_channel_probs.drop( + ("k", "bf") + ) + deactivation_channel_probs = pd.concat( + [deactivation_channel_probs, fb_cooling_probs], sort=False + ) + + source_level_idx = deactivation_channel_probs.index.get_level_values( + "source_level_idx" + ) + + source_level_idx = idx2deactivation_idx.loc[source_level_idx] + destination_level_idx = np.ones_like(source_level_idx) * -1 + deactivation_index = pd.MultiIndex.from_arrays( + [source_level_idx, destination_level_idx], names=B.index.names + ) + + deactivation_channel_probs.index = deactivation_index + + # Combine everything + combined_trans_probs = pd.concat( + [ + level_absorption_probs, + deactivation_channel_probs, + non_continuum_trans_probs, + ] + ) + combined_trans_probs = combined_trans_probs.sort_index() + + block_references = ( + combined_trans_probs[0].groupby("source_level_idx").count().cumsum() + ) + continous_index = np.arange(block_references.index.max() + 1) + block_references = ( + block_references.reindex(continous_index).ffill().astype(int) + ) # This is needed because some macro atom levels have no transitions + block_references = np.pad(block_references, (1, 0), constant_values=0.0) + + macro_atom_info = combined_trans_probs[ + ["transition_type", "lines_idx"] + ].reset_index() + + combined_trans_probs = combined_trans_probs.drop( + ["lines_idx", "transition_type"], axis="columns" + ) + + return ( + non_continuum_trans_probs, + level_absorption_probs, + deactivation_channel_probs, + combined_trans_probs, + block_references, + macro_atom_info, + ) From 9530fee2ba5db7ea5ab38dda3270f8288ee2fcd8 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 9 May 2024 17:02:20 -0400 Subject: [PATCH 011/118] Remove unused imports and update plasma properties --- tardis/opacities/macro_atom/base.py | 9 +- tardis/plasma/properties/__init__.py | 12 +- tardis/plasma/properties/general.py | 3 +- tardis/plasma/properties/j_blues.py | 4 +- .../plasma/properties/radiative_properties.py | 1 - .../properties/transition_probabilities.py | 425 ------------------ tardis/plasma/standard_plasmas.py | 2 +- 7 files changed, 15 insertions(+), 441 deletions(-) delete mode 100644 tardis/plasma/properties/transition_probabilities.py diff --git a/tardis/opacities/macro_atom/base.py b/tardis/opacities/macro_atom/base.py index 251ddeaf792..6d649b8b12c 100644 --- a/tardis/opacities/macro_atom/base.py +++ b/tardis/opacities/macro_atom/base.py @@ -1,11 +1,12 @@ -from tardis.plasma.properties.base import ProcessingPlasmaProperty -from tardis.plasma.properties.radiative_properties import logger -from tardis.opacities.macro_atom import util - +import logging import numpy as np import pandas as pd +from tardis.opacities.macro_atom import util +from tardis.plasma.properties.base import ProcessingPlasmaProperty + +logger = logging.getLogger(__name__) class TransitionProbabilities(ProcessingPlasmaProperty): """ diff --git a/tardis/plasma/properties/__init__.py b/tardis/plasma/properties/__init__.py index 8ec73b81bcb..63d473f01f9 100644 --- a/tardis/plasma/properties/__init__.py +++ b/tardis/plasma/properties/__init__.py @@ -5,17 +5,17 @@ Every property has a calculate function that returns the values of its outputs. """ +from tardis.opacities.macro_atom.transition_probabilities import * from tardis.plasma.properties.atomic import * +from tardis.plasma.properties.continuum_processes import * from tardis.plasma.properties.general import * +from tardis.plasma.properties.helium_nlte import * from tardis.plasma.properties.ion_population import * +from tardis.plasma.properties.j_blues import * from tardis.plasma.properties.level_population import * +from tardis.plasma.properties.nlte import * +from tardis.plasma.properties.nlte_rate_equation_solver import * from tardis.plasma.properties.partition_function import * from tardis.plasma.properties.plasma_input import * from tardis.plasma.properties.radiative_properties import * -from tardis.plasma.properties.nlte import * -from tardis.plasma.properties.j_blues import * -from tardis.plasma.properties.continuum_processes import * -from tardis.plasma.properties.transition_probabilities import * -from tardis.plasma.properties.helium_nlte import * from tardis.plasma.properties.rate_matrix_index import * -from tardis.plasma.properties.nlte_rate_equation_solver import * diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index 55823b0fe14..6b2cb7b68b5 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -1,10 +1,9 @@ import logging import numpy as np -import pandas as pd from astropy import units as u -from tardis import constants as const +from tardis import constants as const from tardis.plasma.properties.base import ProcessingPlasmaProperty logger = logging.getLogger(__name__) diff --git a/tardis/plasma/properties/j_blues.py b/tardis/plasma/properties/j_blues.py index 9ffbe3c1b5c..1f34f0a276b 100644 --- a/tardis/plasma/properties/j_blues.py +++ b/tardis/plasma/properties/j_blues.py @@ -1,10 +1,10 @@ import numpy as np import pandas as pd -from tardis import constants as const +from tardis import constants as const from tardis.plasma.properties.base import ( - ProcessingPlasmaProperty, DataFrameInput, + ProcessingPlasmaProperty, ) from tardis.util.base import intensity_black_body diff --git a/tardis/plasma/properties/radiative_properties.py b/tardis/plasma/properties/radiative_properties.py index 6facf1e8d27..37170b5c9e6 100644 --- a/tardis/plasma/properties/radiative_properties.py +++ b/tardis/plasma/properties/radiative_properties.py @@ -18,7 +18,6 @@ "StimulatedEmissionFactor", "BetaSobolev", "RawRadBoundBoundTransProbs", - "NonMarkovChainTransitionProbabilities", ] C_EINSTEIN = ( diff --git a/tardis/plasma/properties/transition_probabilities.py b/tardis/plasma/properties/transition_probabilities.py deleted file mode 100644 index 75f841b1eb2..00000000000 --- a/tardis/plasma/properties/transition_probabilities.py +++ /dev/null @@ -1,425 +0,0 @@ -import logging - -import numpy as np -import pandas as pd - -from scipy import sparse as sp - -from tardis.plasma.properties.base import ProcessingPlasmaProperty -from tardis.plasma.properties.continuum_processes import ( - get_ground_state_multi_index, -) -from tardis.transport.montecarlo.macro_atom import ( - MacroAtomTransitionType, -) - -__all__ = [ - "MarkovChainTransProbs", - "MarkovChainIndex", - "MarkovChainTransProbsCollector", - "NonContinuumTransProbsMask", - "MonteCarloTransProbs", -] - -logger = logging.getLogger(__name__) - - -def normalize_trans_probs(p): - """ - Normalize a set of transition probabilities. - - Parameters - ---------- - p : pandas.DataFrame, dtype float - Unnormalized transition probabilities. Indexed by - source_level_idx, destination_level_idx. - - Returns - ------- - pandas.DataFrame, dtype float - Normalized transition probabilities: the sum of - all probabilites with the same source_level_idx sum to one. - Indexed by source_level_idx, destination_level_idx. - """ - p = p.astype(np.float64) - p_summed = p.groupby(level=0).sum() - p_summed[p_summed == 0] = 1 - index = p.index.get_level_values("source_level_idx") - p_norm = p / p_summed.loc[index].values - assert np.all(np.isfinite(p_norm)) - return p_norm - - -class SpMatrixSeriesConverterMixin(object): - @staticmethod - def series2matrix(series, idx2reduced_idx): - """ - Convert a Pandas Series to a sparse matrix and re-index it. - - Parameters - ---------- - series : pandas.Series, dtype float - Rates or transition probabilities. Indexed by - source_level_idx, destination_level_idx. - idx2reduced_idx : pandas.Series - Values of (compact) matrix index. Indexed by references_idx. - Maps the references_idx of a level to the index - used in the sparse matrix. - - Returns - ------- - scipy.sparse.coo.coo_matrix - Sparse matrix of rates or transition probabilites. - """ - q_indices = ( - series.index.get_level_values(0), - series.index.get_level_values(1), - ) - q_indices = ( - idx2reduced_idx.loc[q_indices[0]].values, - idx2reduced_idx.loc[q_indices[1]].values, - ) - max_idx = idx2reduced_idx.max() + 1 - matrix = sp.coo_matrix( - (series.astype(np.float64), q_indices), shape=(max_idx, max_idx) - ) - return matrix - - @staticmethod - def matrix2series(matrix, idx2reduced_idx, names=None): - """ - Convert a sparse matrix to a Pandas Series and index it. - - Parameters - ---------- - matrix : scipy.sparse.coo.coo_matrix - Sparse matrix of rates or transition probabilites. - idx2reduced_idx : pandas.Series - Values of (compact) matrix index. Indexed by references_idx. - Maps the references_idx of a level to the index - used in the sparse matrix. - names : array-like, optional - Names of levels in MultiIndex of returned Series. - - Returns - ------- - pandas.Series - Rates or transition probabilities. Indexed by - source_level_idx, destination_level_idx. - """ - reduced_idx2idx = pd.Series( - idx2reduced_idx.index, index=idx2reduced_idx - ) - matrix = matrix.tocoo() - index = pd.MultiIndex.from_arrays( - [reduced_idx2idx.loc[matrix.row], reduced_idx2idx.loc[matrix.col]] - ) - series = pd.Series(matrix.data, index=index) - if names: - series.index.names = names - return series - - -class MarkovChainIndex(ProcessingPlasmaProperty): - """ - Attributes - ---------- - idx2mkv_idx : pandas.Series, dtype int - k_packet_idx : int - Macro atom level idx corresponding to a k-packet. - idx2deactivation_idx : pandas.Series, dtype int - """ - - outputs = ("idx2mkv_idx", "k_packet_idx", "idx2deactivation_idx") - - def calculate(self, atomic_data, continuum_interaction_species): - ma_ref = atomic_data.macro_atom_references - mask = ma_ref.index.droplevel("source_level_number").isin( - continuum_interaction_species - ) - mask2 = ma_ref.index.isin( - get_ground_state_multi_index(continuum_interaction_species) - ) - mask = np.logical_or(mask, mask2) - idx = ma_ref[mask].references_idx.values - idx2mkv_idx = pd.Series(np.arange(len(idx)), index=idx) - idx2mkv_idx.loc["k"] = idx2mkv_idx.max() + 1 - - k_packet_idx = ma_ref.references_idx.max() + 1 - - idx2deactivation_idx = idx2mkv_idx + k_packet_idx + 1 - return idx2mkv_idx, k_packet_idx, idx2deactivation_idx - - -class NonContinuumTransProbsMask(ProcessingPlasmaProperty): - """ - Attributes - ---------- - non_continuum_trans_probs_mask : numpy.ndarray, dtype bool - """ - - outputs = ("non_continuum_trans_probs_mask",) - - def calculate(self, atomic_data, continuum_interaction_species): - # I don't have to remove the ground states of - # the next higher ionization states of the continuum species - # since they only contain zero probabilities. - continuum_trans_probs_mask = atomic_data.macro_atom_data.set_index( - ["atomic_number", "ion_number"] - ).index.isin(continuum_interaction_species) - non_continuum_trans_probs_mask = np.logical_not( - continuum_trans_probs_mask - ) - return non_continuum_trans_probs_mask - - -class MarkovChainTransProbsCollector(ProcessingPlasmaProperty): - """ - Attributes - ---------- - p_combined : pandas.DataFrame, dtype float - Combined and normalized transition probabilities. - Indexed by source_level_idx, destination_level_idx. - """ - - outputs = ("p_combined",) - - def __init__(self, plasma_parent, inputs): - super().__init__(plasma_parent) - self.inputs = inputs - - def calculate(self, *args): - p = pd.concat(args) - p = p.groupby(level=[0, 1, 2]).sum() - p = normalize_trans_probs(p) - return p - - -class MarkovChainTransProbs( - ProcessingPlasmaProperty, SpMatrixSeriesConverterMixin -): - outputs = ("N", "R", "B", "p_deactivation") - latex_name = ("N", "R", "B", r"p_\textrm{deactivation}") - """ - Attributes - ---------- - N : pandas.DataFrame, dtype float - Fundamental matrix of the Markov-chain macro atom. - Indexed by source_level_idx, destination_level_idx. - Expected number of visits to destination_level_idx starting - from souce_level_idx (before being absorbed). - R : pandas.DataFrame, dtype float - Deactivation probabilities of the Markov-chain macro atom. - Indexed by source_level_idx. - Probability of deactivation/absorption in source_level_idx. - B : pandas.DataFrame, dtype float - Absorbing probabilities of the Markov-chain macro atom. - Indexed by source_level_idx, destination_level_idx. - Probability of being absorbed in destination_level_idx when - starting from source_level_idx. - p_deactivation : pandas.DataFrame, dtype float - Redistribution probabilities after deactivation of the Markov-chain - macro atom. Indexed by source_level_idx, destination_level_idx. - Probability of an r-packet being emitted in the transition - (source_level_idx --> destination_level_idx) after deactivation - in source_level_idx. - """ - - def calculate(self, p_combined, idx2mkv_idx): - p = p_combined - p_internal = p.xs(0, level="transition_type") - p_deactivation = normalize_trans_probs( - p.xs(-1, level="transition_type") - ) - - N = pd.DataFrame(columns=p_internal.columns) - B = pd.DataFrame(columns=p_internal.columns) - R = pd.DataFrame(columns=p_internal.columns, index=idx2mkv_idx.index) - R.index.name = "source_level_idx" - for column in p_internal: - Q = self.series2matrix(p_internal[column], idx2mkv_idx) - inv_N = sp.identity(Q.shape[0]) - Q - N1 = sp.linalg.inv(inv_N.tocsc()) - R1 = (1 - np.asarray(Q.sum(axis=1))).flatten() - B1 = N1.multiply(R1) - N1 = self.matrix2series( - N1, idx2mkv_idx, names=p_internal.index.names - ) - B1 = self.matrix2series( - B1, idx2mkv_idx, names=p_internal.index.names - ) - N[column] = N1 - B[column] = B1 - R[column] = R1 - N = N.sort_index() - B = B.sort_index() - return N, R, B, p_deactivation - - -class MonteCarloTransProbs(ProcessingPlasmaProperty): - outputs = ( - "non_continuum_trans_probs", - "level_absorption_probs", - "deactivation_channel_probs", - "transition_probabilities", - "macro_block_references", - "macro_atom_data", - ) - """ - Attributes - ---------- - non_continuum_trans_probs - level_absorption_probs - deactivation_channel_probs - transition_probabilities - macro_block_references - macro_atom_data - """ - - def calculate( - self, - non_markov_transition_probabilities, - atomic_data, - non_continuum_trans_probs_mask, - k_packet_idx, - idx2deactivation_idx, - level_idxs2transition_idx, - p_deactivation, - cool_rate_fb, - cool_rate_fb_tot, - level2continuum_idx, - B, - ): - # Prepare the transition probabilities for the non continuum species - macro_atom_data = atomic_data.macro_atom_data - transition_info = macro_atom_data[ - ["lines_idx", "transition_type"] - ].set_index(non_markov_transition_probabilities.index) - non_continuum_trans_probs = pd.concat( - [transition_info, non_markov_transition_probabilities], axis=1 - ) - index = macro_atom_data.set_index( - ["source_level_idx", "destination_level_idx"] - ).index - non_continuum_trans_probs = non_continuum_trans_probs.set_index(index) - non_continuum_trans_probs = non_continuum_trans_probs[ - non_continuum_trans_probs_mask - ] - - # Prepare the level absorption probabilities for the continuum species - level_absorption_probs = B.copy() - level_absorption_probs.insert(0, "lines_idx", -1) - level_absorption_probs.insert(0, "transition_type", 3) - destination_level_idx = level_absorption_probs.index.get_level_values( - "destination_level_idx" - ) - source_level_idx = level_absorption_probs.rename( - index={"k": k_packet_idx} - ).index.get_level_values("source_level_idx") - destination_level_idx = idx2deactivation_idx.loc[destination_level_idx] - absorption_index = pd.MultiIndex.from_arrays( - [source_level_idx, destination_level_idx], names=B.index.names - ) - level_absorption_probs.index = absorption_index - - # Prepare the free-bound cooling probabilities - fb_cooling_probs = ( - cool_rate_fb - / cool_rate_fb_tot.values - * p_deactivation.loc[("k"), ("bf")] - ) - continuum_idx = level2continuum_idx.loc[fb_cooling_probs.index].values - fb_cooling_probs.index = pd.MultiIndex.from_product( - [["k"], np.ones(len(fb_cooling_probs), dtype=int) * -1], - names=p_deactivation.index.names, - ) - fb_cooling_probs.insert(0, "lines_idx", continuum_idx) - fb_cooling_probs.insert( - 0, - "transition_type", - level_idxs2transition_idx.at[("k", "bf"), "transition_type"], - ) - - # Check if there are two-photon decays - if "two-photon" in p_deactivation.index.get_level_values(1): - two_photon_index = p_deactivation[ - p_deactivation.index.get_level_values(1) == "two-photon" - ].index - level_idxs2transition_idx_two_photon = pd.DataFrame( - [[-1, MacroAtomTransitionType.TWO_PHOTON.value]], - index=two_photon_index, - columns=level_idxs2transition_idx.columns, - ) - level_idxs2transition_idx = pd.concat( - [ - level_idxs2transition_idx_two_photon, - level_idxs2transition_idx, - ] - ) - - # Prepare the deactivation channel probabilities for the continuum species - deactivation_channel_probs = p_deactivation.copy() - deactivation_channel_probs = pd.concat( - [ - level_idxs2transition_idx.reindex( - deactivation_channel_probs.index - ), - deactivation_channel_probs, - ], - axis=1, - ).reindex(deactivation_channel_probs.index) - - deactivation_channel_probs = deactivation_channel_probs.drop( - ("k", "bf") - ) - deactivation_channel_probs = pd.concat( - [deactivation_channel_probs, fb_cooling_probs], sort=False - ) - - source_level_idx = deactivation_channel_probs.index.get_level_values( - "source_level_idx" - ) - - source_level_idx = idx2deactivation_idx.loc[source_level_idx] - destination_level_idx = np.ones_like(source_level_idx) * -1 - deactivation_index = pd.MultiIndex.from_arrays( - [source_level_idx, destination_level_idx], names=B.index.names - ) - - deactivation_channel_probs.index = deactivation_index - - # Combine everything - combined_trans_probs = pd.concat( - [ - level_absorption_probs, - deactivation_channel_probs, - non_continuum_trans_probs, - ] - ) - combined_trans_probs = combined_trans_probs.sort_index() - - block_references = ( - combined_trans_probs[0].groupby("source_level_idx").count().cumsum() - ) - continous_index = np.arange(block_references.index.max() + 1) - block_references = ( - block_references.reindex(continous_index).ffill().astype(int) - ) # This is needed because some macro atom levels have no transitions - block_references = np.pad(block_references, (1, 0), constant_values=0.0) - - macro_atom_info = combined_trans_probs[ - ["transition_type", "lines_idx"] - ].reset_index() - - combined_trans_probs = combined_trans_probs.drop( - ["lines_idx", "transition_type"], axis="columns" - ) - - return ( - non_continuum_trans_probs, - level_absorption_probs, - deactivation_channel_probs, - combined_trans_probs, - block_references, - macro_atom_info, - ) diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index da772508140..2a72c5eb6fa 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -60,7 +60,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): Parameters ---------- config : io.config_reader.Configuration - model : model.SimulationState + simulation_state : model.SimulationState atom_data : atomic.AtomData If None, an attempt will be made to read the atomic data from config. From 2fb7f92763349da97dc489f6de9e8aee55d989d0 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 9 May 2024 17:43:01 -0400 Subject: [PATCH 012/118] add __init__ to macroatom --- tardis/opacities/macro_atom/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tardis/opacities/macro_atom/__init__.py diff --git a/tardis/opacities/macro_atom/__init__.py b/tardis/opacities/macro_atom/__init__.py new file mode 100644 index 00000000000..e69de29bb2d From 6ac3e883652fe694aa0ba18c74e0ec5325f9170f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 10 May 2024 14:18:51 -0400 Subject: [PATCH 013/118] blackify tardis --- tardis/opacities/macro_atom/base.py | 1 + tardis/plasma/properties/atomic.py | 1 + tardis/plasma/properties/general.py | 1 + 3 files changed, 3 insertions(+) diff --git a/tardis/opacities/macro_atom/base.py b/tardis/opacities/macro_atom/base.py index 6d649b8b12c..5bfc7e1bb52 100644 --- a/tardis/opacities/macro_atom/base.py +++ b/tardis/opacities/macro_atom/base.py @@ -8,6 +8,7 @@ logger = logging.getLogger(__name__) + class TransitionProbabilities(ProcessingPlasmaProperty): """ Attributes diff --git a/tardis/plasma/properties/atomic.py b/tardis/plasma/properties/atomic.py index c917c08c421..72fd4b6b472 100644 --- a/tardis/plasma/properties/atomic.py +++ b/tardis/plasma/properties/atomic.py @@ -536,6 +536,7 @@ def calculate(self, level_idxs2line_idx, level_idxs2continuum_idx): return level_idxs2transition_idx + class IonizationData(BaseAtomicDataProperty): """ Attributes diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index 6b2cb7b68b5..cfc56fba66c 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -75,6 +75,7 @@ class ThermalGElectron(GElectron): def calculate(self, beta_electron): return super(ThermalGElectron, self).calculate(beta_electron) + class SelectedAtoms(ProcessingPlasmaProperty): """ Attributes From 801c92b1055d8633b076b3d221d95430c7988b5a Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 10 May 2024 14:56:22 -0400 Subject: [PATCH 014/118] blackified --- tardis/plasma/properties/atomic.py | 1 + tardis/plasma/properties/general.py | 1 + 2 files changed, 2 insertions(+) diff --git a/tardis/plasma/properties/atomic.py b/tardis/plasma/properties/atomic.py index c917c08c421..72fd4b6b472 100644 --- a/tardis/plasma/properties/atomic.py +++ b/tardis/plasma/properties/atomic.py @@ -536,6 +536,7 @@ def calculate(self, level_idxs2line_idx, level_idxs2continuum_idx): return level_idxs2transition_idx + class IonizationData(BaseAtomicDataProperty): """ Attributes diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index 55823b0fe14..660991c1d32 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -76,6 +76,7 @@ class ThermalGElectron(GElectron): def calculate(self, beta_electron): return super(ThermalGElectron, self).calculate(beta_electron) + class SelectedAtoms(ProcessingPlasmaProperty): """ Attributes From ae0650dcab4fad00e8b7cbee6d70f2700cedc634 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 10 May 2024 17:40:02 -0400 Subject: [PATCH 015/118] chore: Update imports and remove unused code --- tardis/model/base.py | 2 +- tardis/model/parse_input.py | 2 +- tardis/model/radiation_field_state.py | 70 ------------------- tardis/radiation_field/base.py | 34 --------- tardis/radiation_field/opacities/__init__.py | 1 - .../continuum_radfield_properties.py | 2 +- .../estimators/dilute_blackbody_properties.py | 2 +- 7 files changed, 4 insertions(+), 109 deletions(-) delete mode 100644 tardis/model/radiation_field_state.py delete mode 100644 tardis/radiation_field/base.py delete mode 100644 tardis/radiation_field/opacities/__init__.py diff --git a/tardis/model/base.py b/tardis/model/base.py index adb86b99bd6..a55361c0b86 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -23,7 +23,7 @@ parse_packet_source, ) from tardis.transport.montecarlo.packet_source import BlackBodySimpleSource -from tardis.model.radiation_field_state import ( +from tardis.radiation_field.planck_rad_field import ( DiluteBlackBodyRadiationFieldState, ) from tardis.util.base import is_valid_nuclide_or_elem diff --git a/tardis/model/parse_input.py b/tardis/model/parse_input.py index 935e1994be1..66f12ad49ca 100644 --- a/tardis/model/parse_input.py +++ b/tardis/model/parse_input.py @@ -17,7 +17,7 @@ from tardis.model.geometry.radial1d import HomologousRadial1DGeometry from tardis.model.matter.composition import Composition from tardis.model.matter.decay import IsotopicMassFraction -from tardis.model.radiation_field_state import ( +from tardis.radiation_field.planck_rad_field import ( DiluteBlackBodyRadiationFieldState, ) from tardis.transport.montecarlo.packet_source import ( diff --git a/tardis/model/radiation_field_state.py b/tardis/model/radiation_field_state.py deleted file mode 100644 index dff0bd65bbc..00000000000 --- a/tardis/model/radiation_field_state.py +++ /dev/null @@ -1,70 +0,0 @@ -import numpy as np -from astropy import units as u - -from tardis.util.base import intensity_black_body - -from typing import Union - - -class DiluteBlackBodyRadiationFieldState: - """ - Represents the state of a dilute thermal radiation field. - - - Parameters - ---------- - t_radiative : u.Quantity - Radiative temperature in each shell - dilution_factor : numpy.ndarray - Dilution Factors in each shell - geometry: tardis.model.Radial1DModel - The geometry of the model that uses to constrains the active shells - """ - - def __init__( - self, - t_radiative: u.Quantity, - dilution_factor: np.ndarray, - geometry=None, - ): - # ensuring that the radiation_field has both - # dilution_factor and t_radiative equal length - assert len(t_radiative) == len(dilution_factor) - if ( - geometry is not None - ): # check the active shells only (this is used when setting up the radiation_field_state) - assert np.all( - t_radiative[ - geometry.v_inner_boundary_index : geometry.v_outer_boundary_index - ] - > 0 * u.K - ) - assert np.all( - dilution_factor[ - geometry.v_inner_boundary_index : geometry.v_outer_boundary_index - ] - > 0 - ) - else: - assert np.all(t_radiative > 0 * u.K) - assert np.all(dilution_factor > 0) - self.t_radiative = t_radiative - self.dilution_factor = dilution_factor - - def calculate_mean_intensity(self, nu: Union[u.Quantity, np.ndarray]): - """ - Calculate the intensity of the radiation field at a given frequency. - - Parameters - ---------- - nu : u.Quantity - Frequency at which the intensity is to be calculated - - Returns - ------- - intensity : u.Quantity - Intensity of the radiation field at the given frequency - """ - return self.dilution_factor * intensity_black_body( - nu[np.newaxis].T, self.t_radiative - ) diff --git a/tardis/radiation_field/base.py b/tardis/radiation_field/base.py deleted file mode 100644 index 4fe0658c20c..00000000000 --- a/tardis/radiation_field/base.py +++ /dev/null @@ -1,34 +0,0 @@ -import numpy as np -from astropy import units as u - -from tardis.transport.montecarlo.packet_source import BasePacketSource -from tardis.opacities.opacity_state import OpacityState - - -class MonteCarloRadiationFieldState: - """_summary_ - - Parameters - ---------- - t_radiative : u.Quantity - Radiative temperature in each shell - dilution_factor : numpy.ndarray - Dilution Factors in each shell - opacities : OpacityState - Opacity container object - packet_source : SourceFunction - Source function for radiative transfer, for example a packet_source - """ - - def __init__( - self, - t_radiative: u.Quantity, - dilution_factor: np.ndarray, - opacities: OpacityState, - packet_source: BasePacketSource, - ): - self.t_radiative = t_radiative - self.dilution_factor = dilution_factor - self.t_rad = self.t_radiative - self.opacities = opacities - self.packet_source = packet_source diff --git a/tardis/radiation_field/opacities/__init__.py b/tardis/radiation_field/opacities/__init__.py deleted file mode 100644 index 47f2c79e60d..00000000000 --- a/tardis/radiation_field/opacities/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from tardis.radiation_field.opacities.base import * diff --git a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py index dcd3b9e1560..64b0064e3e7 100644 --- a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py +++ b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py @@ -6,7 +6,7 @@ import tardis.constants as const from tardis.io.atom_data import AtomData -from tardis.model.radiation_field_state import ( +from tardis.radiation_field.planck_rad_field import ( DiluteBlackBodyRadiationFieldState, ) from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( diff --git a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py b/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py index 8e7c98c7ed7..b097356a6aa 100644 --- a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py +++ b/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py @@ -3,7 +3,7 @@ from scipy.special import zeta from tardis import constants as const -from tardis.model.radiation_field_state import ( +from tardis.radiation_field.planck_rad_field import ( DiluteBlackBodyRadiationFieldState, ) From 69dc1b5dd3c67d139b025623aed06f88ef0703de Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 10 May 2024 17:40:10 -0400 Subject: [PATCH 016/118] chore: Add PlanckRadiationField and DilutePlanckRadiationField classes --- tardis/radiation_field/planck_rad_field.py | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 tardis/radiation_field/planck_rad_field.py diff --git a/tardis/radiation_field/planck_rad_field.py b/tardis/radiation_field/planck_rad_field.py new file mode 100644 index 00000000000..7e4926b65f1 --- /dev/null +++ b/tardis/radiation_field/planck_rad_field.py @@ -0,0 +1,88 @@ +from astropy import units as u +import numpy as np +from tardis.util.base import intensity_black_body + + +class PlanckRadiationField: + def __init__(self, temperature) -> None: + self.temperature = u.Quantity(temperature, u.K) + + def calculate_mean_intensity(self, nu): + return intensity_black_body( + nu.values[np.newaxis].T, self.temperature.value + ) + + +class DilutePlanckRadiationField: + def __init__(self, temperature, dilution_factor) -> None: + self.temperature = u.Quantity(temperature, u.K) + self.dilution_factor = dilution_factor + + def calculate_mean_intensity(self, nu): + return self.dilution_factor * intensity_black_body( + nu.values[np.newaxis].T, self.temperature.value + ) + + +class DiluteBlackBodyRadiationFieldState: + """ + Represents the state of a dilute thermal radiation field. + + + Parameters + ---------- + t_radiative : u.Quantity + Radiative temperature in each shell + dilution_factor : numpy.ndarray + Dilution Factors in each shell + geometry: tardis.model.Radial1DModel + The geometry of the model that uses to constrains the active shells + """ + + def __init__( + self, + t_radiative: u.Quantity, + dilution_factor: np.ndarray, + geometry=None, + ): + # ensuring that the radiation_field has both + # dilution_factor and t_radiative equal length + assert len(t_radiative) == len(dilution_factor) + if ( + geometry is not None + ): # check the active shells only (this is used when setting up the radiation_field_state) + assert np.all( + t_radiative[ + geometry.v_inner_boundary_index : geometry.v_outer_boundary_index + ] + > 0 * u.K + ) + assert np.all( + dilution_factor[ + geometry.v_inner_boundary_index : geometry.v_outer_boundary_index + ] + > 0 + ) + else: + assert np.all(t_radiative > 0 * u.K) + assert np.all(dilution_factor > 0) + self.t_radiative = t_radiative + self.dilution_factor = dilution_factor + + def calculate_mean_intensity(self, nu: Union[u.Quantity, np.ndarray]): + """ + Calculate the intensity of the radiation field at a given frequency. + + Parameters + ---------- + nu : u.Quantity + Frequency at which the intensity is to be calculated + + Returns + ------- + intensity : u.Quantity + Intensity of the radiation field at the given frequency + """ + return self.dilution_factor * intensity_black_body( + nu[np.newaxis].T, self.t_radiative + ) From 448d5c481fe6a1d57c34b0e7ca58c7efe2e01df9 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 10 May 2024 17:44:27 -0400 Subject: [PATCH 017/118] chore: Update imports and remove unused code --- tardis/model/base.py | 7 +------ tardis/radiation_field/planck_rad_field.py | 5 ++++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/tardis/model/base.py b/tardis/model/base.py index a55361c0b86..41cf7ca3cc6 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -5,7 +5,6 @@ import numpy as np from astropy import units as u -from tardis import constants from tardis.io.configuration.config_reader import Configuration from tardis.io.configuration.config_validator import validate_dict from tardis.io.model.readers.csvy import ( @@ -18,13 +17,9 @@ parse_csvy_composition, parse_csvy_geometry, parse_csvy_radiation_field_state, + parse_packet_source, parse_radiation_field_state, parse_structure_config, - parse_packet_source, -) -from tardis.transport.montecarlo.packet_source import BlackBodySimpleSource -from tardis.radiation_field.planck_rad_field import ( - DiluteBlackBodyRadiationFieldState, ) from tardis.util.base import is_valid_nuclide_or_elem diff --git a/tardis/radiation_field/planck_rad_field.py b/tardis/radiation_field/planck_rad_field.py index 7e4926b65f1..c643440ca7c 100644 --- a/tardis/radiation_field/planck_rad_field.py +++ b/tardis/radiation_field/planck_rad_field.py @@ -1,5 +1,8 @@ -from astropy import units as u +from typing import Union + import numpy as np +from astropy import units as u + from tardis.util.base import intensity_black_body From c1dc52daf979332d190309e49223e55ae9e11ea3 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 13 May 2024 10:31:55 -0400 Subject: [PATCH 018/118] removed density --- tardis/plasma/properties/plasma_input.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index 288e44042e7..ae8b6ab4adc 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -10,7 +10,6 @@ "Abundance", "NumberDensity", "IsotopeAbundance", - "Density", "TimeExplosion", "JBlueEstimator", "LinkTRadTElectron", @@ -80,18 +79,6 @@ class IsotopeAbundance(Input): outputs = ("isotope_abundance",) -class Density(ArrayInput): - """ - Attributes - ---------- - density : Numpy array, dtype float - Total density values - """ - - outputs = ("density",) - latex_name = (r"\rho",) - - class TimeExplosion(Input): """ Attributes From 5e020545d10e43cca181a73d863dac4820178081 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 6 Jun 2024 15:51:11 -0400 Subject: [PATCH 019/118] ruff output --- tardis/opacities/macro_atom/transition_probabilities.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tardis/opacities/macro_atom/transition_probabilities.py b/tardis/opacities/macro_atom/transition_probabilities.py index 75f841b1eb2..6facd5ee70a 100644 --- a/tardis/opacities/macro_atom/transition_probabilities.py +++ b/tardis/opacities/macro_atom/transition_probabilities.py @@ -2,7 +2,6 @@ import numpy as np import pandas as pd - from scipy import sparse as sp from tardis.plasma.properties.base import ProcessingPlasmaProperty @@ -50,7 +49,7 @@ def normalize_trans_probs(p): return p_norm -class SpMatrixSeriesConverterMixin(object): +class SpMatrixSeriesConverterMixin: @staticmethod def series2matrix(series, idx2reduced_idx): """ From 28c43485b86b081196c2e402f2cc37e519f747c8 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 6 Jun 2024 16:59:03 -0400 Subject: [PATCH 020/118] cleanup and adding object mode --- tardis/plasma/properties/base.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tardis/plasma/properties/base.py b/tardis/plasma/properties/base.py index 50de6154d08..4c790b596d3 100644 --- a/tardis/plasma/properties/base.py +++ b/tardis/plasma/properties/base.py @@ -1,6 +1,6 @@ import logging -from abc import ABCMeta, abstractmethod, abstractproperty +from abc import ABCMeta, abstractmethod import numpy as np import pandas as pd @@ -31,7 +31,8 @@ class BasePlasmaProperty(object, metaclass=ABCMeta): Used to label nodes when plotting graphs """ - @abstractproperty + @property + @abstractmethod def outputs(self): pass @@ -144,7 +145,8 @@ class TransitionProbabilitiesProperty( track all transition probabilities and to later combine them. """ - @abstractproperty + @property + @abstractmethod def transition_probabilities_outputs(self): pass @@ -202,6 +204,12 @@ def _set_output_value(self, output, value): setattr(self, output, np.array(value, copy=False)) +class ObjectInput(Input): + def set_value(self, value): + for output in self.outputs: + self._set_output_value(self, output, getattr(value, output)) + + class DataFrameInput(Input): def _set_output_value(self, output, value): setattr(self, output, np.array(pd.DataFrame(value), copy=False)) From cfffe5bf9f37f926e71950040b98f396b674ba5f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 7 Jun 2024 15:22:53 -0400 Subject: [PATCH 021/118] starting to make radiation_field a thing --- tardis/model/parse_input.py | 10 ++--- tardis/plasma/properties/base.py | 15 ++++--- tardis/plasma/properties/plasma_input.py | 10 +++-- tardis/plasma/standard_plasmas.py | 7 ++++ tardis/radiation_field/planck_rad_field.py | 41 ++++++------------- .../continuum_radfield_properties.py | 8 ++-- .../estimators/dilute_blackbody_properties.py | 4 +- .../montecarlo/montecarlo_transport_state.py | 2 +- 8 files changed, 45 insertions(+), 52 deletions(-) diff --git a/tardis/model/parse_input.py b/tardis/model/parse_input.py index 66f12ad49ca..c3cf8cafcf4 100644 --- a/tardis/model/parse_input.py +++ b/tardis/model/parse_input.py @@ -18,7 +18,7 @@ from tardis.model.matter.composition import Composition from tardis.model.matter.decay import IsotopicMassFraction from tardis.radiation_field.planck_rad_field import ( - DiluteBlackBodyRadiationFieldState, + DilutePlanckianRadiationField, ) from tardis.transport.montecarlo.packet_source import ( BlackBodySimpleSource, @@ -581,9 +581,7 @@ def parse_radiation_field_state( assert len(dilution_factor) == geometry.no_of_shells - return DiluteBlackBodyRadiationFieldState( - t_radiative, dilution_factor, geometry - ) + return DilutePlanckianRadiationField(t_radiative, dilution_factor, geometry) def initialize_packet_source( @@ -714,9 +712,7 @@ def parse_csvy_radiation_field_state( else: dilution_factor = calculate_geometric_dilution_factor(geometry) - return DiluteBlackBodyRadiationFieldState( - t_radiative, dilution_factor, geometry - ) + return DilutePlanckianRadiationField(t_radiative, dilution_factor, geometry) def calculate_t_radiative_from_t_inner(geometry, packet_source): diff --git a/tardis/plasma/properties/base.py b/tardis/plasma/properties/base.py index 4c790b596d3..1bac9e7658e 100644 --- a/tardis/plasma/properties/base.py +++ b/tardis/plasma/properties/base.py @@ -1,10 +1,9 @@ import logging - from abc import ABCMeta, abstractmethod + import numpy as np import pandas as pd - __all__ = [ "BasePlasmaProperty", "BaseAtomicDataProperty", @@ -19,7 +18,7 @@ logger = logging.getLogger(__name__) -class BasePlasmaProperty(object, metaclass=ABCMeta): +class BasePlasmaProperty(metaclass=ABCMeta): """ Attributes ---------- @@ -115,7 +114,7 @@ def update(self): for i, output in enumerate(self.outputs): setattr(self, output, new_values[i]) else: - logger.info("{} has been frozen!".format(self.name)) + logger.info(f"{self.name} has been frozen!") @abstractmethod def calculate(self, *args, **kwargs): @@ -205,9 +204,15 @@ def _set_output_value(self, output, value): class ObjectInput(Input): + + input_object_map = {} # mapping output names from input object attributes def set_value(self, value): for output in self.outputs: - self._set_output_value(self, output, getattr(value, output)) + if output in self.input_object_map: + object_attr = self.input_object_map[output] + self._set_output_value(output, getattr(value, object_attr)) + else: + self._set_output_value(output, getattr(value, output)) class DataFrameInput(Input): diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index 288e44042e7..44ab2622527 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -1,7 +1,4 @@ -from tardis.plasma.properties.base import ( - ArrayInput, - Input, -) +from tardis.plasma.properties.base import ArrayInput, Input, ObjectInput __all__ = [ "TRadiative", @@ -176,3 +173,8 @@ class NumberDensity(Input): outputs = ("number_density",) latex_name = ("N_{i}",) + + +class DilutePlanckianRadFieldInput(ObjectInput): + input_object_map = {"t_rad": "temperature_kelvin", "w": "dilution_factor"} + outputs = ("t_rad", "w") diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index 2a72c5eb6fa..92322a38a3f 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -70,6 +70,13 @@ def assemble_plasma(config, simulation_state, atom_data=None): : plasma.BasePlasma """ + + if (config.plasma.ionization == "nebular") or ( + config.plasma.excitation == "dilute-lte" + ): + radiation_field = "dilute_planckian_radiation_field" + else: + pass # Convert the nlte species list to a proper format. nlte_species = [ species_string_to_tuple(s) for s in config.plasma.nlte.species diff --git a/tardis/radiation_field/planck_rad_field.py b/tardis/radiation_field/planck_rad_field.py index c643440ca7c..be58a0de665 100644 --- a/tardis/radiation_field/planck_rad_field.py +++ b/tardis/radiation_field/planck_rad_field.py @@ -6,35 +6,14 @@ from tardis.util.base import intensity_black_body -class PlanckRadiationField: - def __init__(self, temperature) -> None: - self.temperature = u.Quantity(temperature, u.K) - - def calculate_mean_intensity(self, nu): - return intensity_black_body( - nu.values[np.newaxis].T, self.temperature.value - ) - - -class DilutePlanckRadiationField: - def __init__(self, temperature, dilution_factor) -> None: - self.temperature = u.Quantity(temperature, u.K) - self.dilution_factor = dilution_factor - - def calculate_mean_intensity(self, nu): - return self.dilution_factor * intensity_black_body( - nu.values[np.newaxis].T, self.temperature.value - ) - - -class DiluteBlackBodyRadiationFieldState: +class DilutePlanckianRadiationField: """ Represents the state of a dilute thermal radiation field. Parameters ---------- - t_radiative : u.Quantity + temperature : u.Quantity Radiative temperature in each shell dilution_factor : numpy.ndarray Dilution Factors in each shell @@ -44,18 +23,18 @@ class DiluteBlackBodyRadiationFieldState: def __init__( self, - t_radiative: u.Quantity, + temperature: u.Quantity, dilution_factor: np.ndarray, geometry=None, ): # ensuring that the radiation_field has both # dilution_factor and t_radiative equal length - assert len(t_radiative) == len(dilution_factor) + assert len(temperature) == len(dilution_factor) if ( geometry is not None ): # check the active shells only (this is used when setting up the radiation_field_state) assert np.all( - t_radiative[ + temperature[ geometry.v_inner_boundary_index : geometry.v_outer_boundary_index ] > 0 * u.K @@ -67,11 +46,15 @@ def __init__( > 0 ) else: - assert np.all(t_radiative > 0 * u.K) + assert np.all(temperature > 0 * u.K) assert np.all(dilution_factor > 0) - self.t_radiative = t_radiative + self.temperature = temperature self.dilution_factor = dilution_factor + @property + def temperature_kelvin(self): + return self.temperature.to(u.K).value + def calculate_mean_intensity(self, nu: Union[u.Quantity, np.ndarray]): """ Calculate the intensity of the radiation field at a given frequency. @@ -87,5 +70,5 @@ def calculate_mean_intensity(self, nu: Union[u.Quantity, np.ndarray]): Intensity of the radiation field at the given frequency """ return self.dilution_factor * intensity_black_body( - nu[np.newaxis].T, self.t_radiative + nu[np.newaxis].T, self.temperature ) diff --git a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py index 64b0064e3e7..64db0f8f6e0 100644 --- a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py +++ b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py @@ -7,7 +7,7 @@ import tardis.constants as const from tardis.io.atom_data import AtomData from tardis.radiation_field.planck_rad_field import ( - DiluteBlackBodyRadiationFieldState, + DilutePlanckianRadiationField, ) from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( RadiationFieldMCEstimators, @@ -76,7 +76,7 @@ def __init__(self, atom_data: AtomData) -> None: def solve( self, - dilute_blackbody_radiationfield_state: DiluteBlackBodyRadiationFieldState, + dilute_blackbody_radiationfield_state: DilutePlanckianRadiationField, t_electrons: u.Quantity, ): """ @@ -202,7 +202,7 @@ def calculate_stimulated_recomb_rate_factor( def calculate_mean_intensity_photo_ion_table( self, - dilute_blackbody_radiationfield_state: DiluteBlackBodyRadiationFieldState, + dilute_blackbody_radiationfield_state: DilutePlanckianRadiationField, ): mean_intensity = ( dilute_blackbody_radiationfield_state.calculate_mean_intensity( @@ -213,7 +213,7 @@ def calculate_mean_intensity_photo_ion_table( mean_intensity, index=self.atom_data.photoionization_data.index, columns=np.arange( - len(dilute_blackbody_radiationfield_state.t_radiative) + len(dilute_blackbody_radiationfield_state.temperature) ), ) return mean_intensity_df diff --git a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py b/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py index b097356a6aa..b8a33125ecf 100644 --- a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py +++ b/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py @@ -4,7 +4,7 @@ from tardis import constants as const from tardis.radiation_field.planck_rad_field import ( - DiluteBlackBodyRadiationFieldState, + DilutePlanckianRadiationField, ) DILUTION_FACTOR_ESTIMATOR_CONSTANT = ( @@ -52,6 +52,6 @@ def solve(self, radfield_mc_estimators, time_of_simulation, volume): * volume ) - return DiluteBlackBodyRadiationFieldState( + return DilutePlanckianRadiationField( temperature_radiative, dilution_factor ) diff --git a/tardis/transport/montecarlo/montecarlo_transport_state.py b/tardis/transport/montecarlo/montecarlo_transport_state.py index 30bceccc3a8..f4802101773 100644 --- a/tardis/transport/montecarlo/montecarlo_transport_state.py +++ b/tardis/transport/montecarlo/montecarlo_transport_state.py @@ -106,7 +106,7 @@ def calculate_radiationfield_properties(self): ) return ( - dilute_bb_radfield.t_radiative, + dilute_bb_radfield.temperature, dilute_bb_radfield.dilution_factor, ) From 41779e2702834b46284858c729fccc0e2da4507d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 9 Jun 2024 09:51:04 -0400 Subject: [PATCH 022/118] switched over to old tau_sobolev calculation --- tardis/opacities/tau_sobolev.py | 34 ++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/tardis/opacities/tau_sobolev.py b/tardis/opacities/tau_sobolev.py index 302e00a6f64..7431c014b2b 100644 --- a/tardis/opacities/tau_sobolev.py +++ b/tardis/opacities/tau_sobolev.py @@ -77,12 +77,36 @@ def calculate( self, lines, level_number_density, + lines_lower_level_index, time_explosion, stimulated_emission_factor, + f_lu, + wavelength_cm, ): - return calculate_sobolev_line_opacity( - lines, - level_number_density, - time_explosion, - stimulated_emission_factor, + f_lu = f_lu.values[np.newaxis].T + wavelength = wavelength_cm.values[np.newaxis].T + n_lower = level_number_density.values.take( + lines_lower_level_index, axis=0, mode="raise" + ) + tau_sobolevs = ( + self.sobolev_coefficient + * f_lu + * wavelength + * time_explosion + * n_lower + * stimulated_emission_factor + ) + + if np.any(np.isnan(tau_sobolevs)) or np.any( + np.isinf(np.abs(tau_sobolevs)) + ): + raise ValueError( + "Some tau_sobolevs are nan, inf, -inf in tau_sobolevs." + " Something went wrong!" + ) + + return pd.DataFrame( + tau_sobolevs, + index=lines.index, + columns=np.array(level_number_density.columns), ) From 0d1bc4db43303ae2d25199c37359bd24df1aad43 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 9 Jun 2024 16:49:21 -0400 Subject: [PATCH 023/118] renamed function to indicate numba use --- tardis/opacities/macro_atom/base.py | 2 +- tardis/opacities/macro_atom/util.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tardis/opacities/macro_atom/base.py b/tardis/opacities/macro_atom/base.py index 5bfc7e1bb52..32b71187a09 100644 --- a/tardis/opacities/macro_atom/base.py +++ b/tardis/opacities/macro_atom/base.py @@ -67,7 +67,7 @@ def _calculate_transition_probability( transition_type = macro_atom_data.transition_type.values lines_idx = macro_atom_data.lines_idx.values tpos = macro_atom_data.transition_probability.values - util.calculate_transition_probabilities( + util.fast_calculate_transition_probabilities( tpos, beta_sobolev.values, j_blues.values, diff --git a/tardis/opacities/macro_atom/util.py b/tardis/opacities/macro_atom/util.py index c72781f4b41..8cb5eed473a 100644 --- a/tardis/opacities/macro_atom/util.py +++ b/tardis/opacities/macro_atom/util.py @@ -4,14 +4,14 @@ from tardis import constants as const from tardis.transport.montecarlo import njit_dict -h_cgs = const.h.cgs.value -c = const.c.to("cm/s").value -kb = const.k_B.cgs.value -inv_c2 = 1 / (c**2) +H_CGS = const.h.cgs.value +C = const.c.to("cm/s").value +K_BOLTZMANN = const.k_B.cgs.value +INV_C2 = 1 / (C**2) @njit(**njit_dict) -def calculate_transition_probabilities( +def fast_calculate_transition_probabilities( transition_probability_coef, beta_sobolev, j_blues, From c92474988308a4920c85c3e1261debf347ce2023 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 10 Jun 2024 19:40:44 -0400 Subject: [PATCH 024/118] address comments --- tardis/opacities/macro_atom/base.py | 5 --- tardis/opacities/macro_atom/util.py | 5 --- tardis/opacities/tau_sobolev.py | 58 +++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 10 deletions(-) diff --git a/tardis/opacities/macro_atom/base.py b/tardis/opacities/macro_atom/base.py index 32b71187a09..d23e5473198 100644 --- a/tardis/opacities/macro_atom/base.py +++ b/tardis/opacities/macro_atom/base.py @@ -126,11 +126,6 @@ def prepare_transition_probabilities( ) return transition_probabilities - def _normalize_transition_probabilities(self, transition_probabilities): - util.normalize_transition_probabilities( - transition_probabilities, self.block_references - ) - @staticmethod def _get_macro_atom_data(atomic_data): try: diff --git a/tardis/opacities/macro_atom/util.py b/tardis/opacities/macro_atom/util.py index 8cb5eed473a..97eb98f1a64 100644 --- a/tardis/opacities/macro_atom/util.py +++ b/tardis/opacities/macro_atom/util.py @@ -4,11 +4,6 @@ from tardis import constants as const from tardis.transport.montecarlo import njit_dict -H_CGS = const.h.cgs.value -C = const.c.to("cm/s").value -K_BOLTZMANN = const.k_B.cgs.value -INV_C2 = 1 / (C**2) - @njit(**njit_dict) def fast_calculate_transition_probabilities( diff --git a/tardis/opacities/tau_sobolev.py b/tardis/opacities/tau_sobolev.py index 7431c014b2b..cf667f9f0ff 100644 --- a/tardis/opacities/tau_sobolev.py +++ b/tardis/opacities/tau_sobolev.py @@ -23,6 +23,34 @@ def calculate_sobolev_line_opacity( time_explosion, stimulated_emission_factor, ): + """ + Calculates the Sobolev line opacity based on the provided parameters. + + Parameters + ---------- + lines : pandas.DataFrame + DataFrame containing information about spectral lines. + level_number_density : pandas.DataFrame + DataFrame with level number densities. + time_explosion : astropy.units.Quantity + Time since explosion. + stimulated_emission_factor : float + Factor for stimulated emission. + + Returns + ------- + pandas.DataFrame + Calculated Sobolev line opacity values. + + Raises + ------ + ValueError + If any calculated tau_sobolevs are nan or inf. + + Examples + -------- + >>> calculate_sobolev_line_opacity(lines_data, level_density_data, time_exp, stim_factor) + """ tau_sobolevs = ( (lines.wavelength_cm * lines.f_lu).values[np.newaxis].T * SOBOLEV_COEFFICIENT @@ -83,6 +111,36 @@ def calculate( f_lu, wavelength_cm, ): + """ + Calculate Sobolev line opacity. + + Calculates the Sobolev line opacity based on the provided parameters. + + Parameters + ---------- + lines : pandas.DataFrame + DataFrame containing information about spectral lines. + level_number_density : pandas.DataFrame + DataFrame with level number densities. + time_explosion : astropy.units.Quantity + Time since explosion. + stimulated_emission_factor : float + Factor for stimulated emission. + + Returns + ------- + pandas.DataFrame + Calculated Sobolev line opacity values. + + Raises + ------ + ValueError + If any calculated tau_sobolevs are nan or inf. + + Examples + -------- + >>> calculate_sobolev_line_opacity(lines_data, level_density_data, time_exp, stim_factor) + """ f_lu = f_lu.values[np.newaxis].T wavelength = wavelength_cm.values[np.newaxis].T n_lower = level_number_density.values.take( From af7e39e6398451e78380abcb8c7a68de1cd920fa Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 10 Jun 2024 22:04:43 -0400 Subject: [PATCH 025/118] added dilute planckian radiation field --- tardis/model/base.py | 4 ++-- tardis/plasma/properties/plasma_input.py | 21 +++++++++++++------ .../plasma/properties/property_collections.py | 3 ++- tardis/plasma/standard_plasmas.py | 11 ++++++---- tardis/radiation_field/__init__.py | 3 +++ 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/tardis/model/base.py b/tardis/model/base.py index 41cf7ca3cc6..4bfd68ca6e1 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -141,14 +141,14 @@ def dilution_factor(self, new_dilution_factor): @property def t_radiative(self): - return self.radiation_field_state.t_radiative[ + return self.radiation_field_state.temperature[ self.geometry.v_inner_boundary_index : self.geometry.v_outer_boundary_index ] @t_radiative.setter def t_radiative(self, new_t_radiative): if len(new_t_radiative) == self.no_of_shells: - self.radiation_field_state.t_radiative[ + self.radiation_field_state.temperature[ self.geometry.v_inner_boundary_index : self.geometry.v_outer_boundary_index ] = new_t_radiative else: diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index defa0f4543f..f9d70216dcc 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -1,4 +1,8 @@ -from tardis.plasma.properties.base import ArrayInput, Input, ObjectInput +from tardis.plasma.properties.base import ( + ArrayInput, + Input, + ProcessingPlasmaProperty, +) __all__ = [ "TRadiative", @@ -17,10 +21,11 @@ "ContinuumInteractionSpecies", "NLTEIonizationSpecies", "NLTEExcitationSpecies", + "DilutePlanckianRadField", ] -class TRadiative(ArrayInput): +class TRadiative(ProcessingPlasmaProperty): """ Attributes ---------- @@ -30,8 +35,11 @@ class TRadiative(ArrayInput): outputs = ("t_rad",) latex_name = (r"T_{\textrm{rad}}",) + def calculate(self, dilute_planckian_radiation_field): + return dilute_planckian_radiation_field.temperature.cgs.value -class DilutionFactor(ArrayInput): + +class DilutionFactor(ProcessingPlasmaProperty): """ Attributes ---------- @@ -42,6 +50,8 @@ class DilutionFactor(ArrayInput): outputs = ("w",) latex_name = ("W",) + def calculate(self, dilute_planckian_radiation_field): + return dilute_planckian_radiation_field.dilution_factor class AtomicData(Input): @@ -162,6 +172,5 @@ class NumberDensity(Input): latex_name = ("N_{i}",) -class DilutePlanckianRadFieldInput(ObjectInput): - input_object_map = {"t_rad": "temperature_kelvin", "w": "dilution_factor"} - outputs = ("t_rad", "w") +class DilutePlanckianRadField(Input): + outputs = ("dilute_planckian_radiation_field",) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index 3b1e8ebc5cd..dc72e8b217f 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -12,11 +12,12 @@ class PlasmaPropertyCollection(list): basic_inputs = PlasmaPropertyCollection( [ - TRadiative, + DilutePlanckianRadField, Abundance, NumberDensity, TimeExplosion, AtomicData, + TRadiative, DilutionFactor, LinkTRadTElectron, HeliumTreatment, diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index 92322a38a3f..05391d7e399 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -47,6 +47,7 @@ two_photon_properties, ) from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper +from tardis.radiation_field import DilutePlanckianRadiationField from tardis.util.base import species_string_to_tuple logger = logging.getLogger(__name__) @@ -70,13 +71,13 @@ def assemble_plasma(config, simulation_state, atom_data=None): : plasma.BasePlasma """ - if (config.plasma.ionization == "nebular") or ( config.plasma.excitation == "dilute-lte" ): radiation_field = "dilute_planckian_radiation_field" else: - pass + radiation_field = "dilute_planckian_radiation_field" + # Convert the nlte species list to a proper format. nlte_species = [ species_string_to_tuple(s) for s in config.plasma.nlte.species @@ -121,13 +122,15 @@ def assemble_plasma(config, simulation_state, atom_data=None): for s in config.plasma.nlte_excitation_species ] + dilute_planckian_radiation_field = DilutePlanckianRadiationField( + simulation_state.t_radiative, simulation_state.dilution_factor + ) kwargs = dict( - t_rad=simulation_state.t_radiative, + dilute_planckian_radiation_field=dilute_planckian_radiation_field, abundance=simulation_state.abundance, number_density=simulation_state.elemental_number_density, atomic_data=atom_data, time_explosion=simulation_state.time_explosion, - w=simulation_state.dilution_factor, link_t_rad_t_electron=config.plasma.link_t_rad_t_electron, continuum_interaction_species=continuum_interaction_species, nlte_ionization_species=nlte_ionization_species, diff --git a/tardis/radiation_field/__init__.py b/tardis/radiation_field/__init__.py index e69de29bb2d..ba732d148bf 100644 --- a/tardis/radiation_field/__init__.py +++ b/tardis/radiation_field/__init__.py @@ -0,0 +1,3 @@ +from tardis.radiation_field.planck_rad_field import ( + DilutePlanckianRadiationField, +) From 36fa4b60ecb771688d67fbfdc8699897f588f18d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 12 Jun 2024 21:38:46 -0400 Subject: [PATCH 026/118] refactor: Convert species lists to proper format in assemble_plasma function --- astropy_helpers | 1 + docs/physics/nlte/nlte_rates.ipynb | 960 ++++++++++++++++++ .../plasma/construction_simple_plasma.ipynb | 115 +++ tardis/plasma/nlte/__init__.py | 0 tardis/plasma/nlte/nlte_data.py | 123 +++ tardis/plasma/standard_plasmas.py | 22 +- test.txt | 2 + 7 files changed, 1209 insertions(+), 14 deletions(-) create mode 160000 astropy_helpers create mode 100644 docs/physics/nlte/nlte_rates.ipynb create mode 100644 docs/physics/plasma/construction_simple_plasma.ipynb create mode 100644 tardis/plasma/nlte/__init__.py create mode 100644 tardis/plasma/nlte/nlte_data.py create mode 100644 test.txt diff --git a/astropy_helpers b/astropy_helpers new file mode 160000 index 00000000000..9f82aac6c21 --- /dev/null +++ b/astropy_helpers @@ -0,0 +1 @@ +Subproject commit 9f82aac6c2141b425e2d639560f7260189d90b54 diff --git a/docs/physics/nlte/nlte_rates.ipynb b/docs/physics/nlte/nlte_rates.ipynb new file mode 100644 index 00000000000..3f0d08a38c7 --- /dev/null +++ b/docs/physics/nlte/nlte_rates.ipynb @@ -0,0 +1,960 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "from tardis.plasma.nlte import nlte_data\n", + "from tardis.io.atom_data.util import download_atom_data\n", + "from tardis.io.atom_data import AtomData\n", + "\n", + "from scipy import sparse\n", + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Atomic Data kurucz_cd23_chianti_H_He already exists in /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5. Will not download - override with force_download=True.\n" + ] + } + ], + "source": [ + "download_atom_data('kurucz_cd23_chianti_H_He')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "NLTE_SPECIES = [(1,0)]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "atom_data = AtomData.from_hdf('kurucz_cd23_chianti_H_He.h5')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_25979/2147926970.py:1: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " test = atom_data.lines.loc[NLTE_SPECIES[0]]\n" + ] + } + ], + "source": [ + "test = atom_data.lines.loc[NLTE_SPECIES[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "325 µs ± 11.2 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "test.A_ul.unstack(fill_value=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "full_level_multi_index = pd.MultiIndex.from_product([atom_data.levels.loc[NLTE_SPECIES[0]].index, atom_data.levels.loc[NLTE_SPECIES[0]].index])" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
level_number0123456789...15161718192021222324
level_number
0NaN6.273665e+08NaN6.262443e+081.670556e+08NaN1.664219e+08NaNNaN6.805429e+07...NaN3.438596e+07NaN3.438596e+07NaNNaNNaNNaNNaNNaN
1NaNNaNNaNNaNNaN2.105076e+06NaN5.378844e+07NaNNaN...NaNNaN429939.240273NaN7.855694e+06NaNNaNNaNNaNNaN
2NaNNaNNaNNaN2.244369e+07NaN2.244401e+07NaNNaN9.661716e+06...NaN4.954019e+06NaN4.945181e+06NaNNaNNaNNaNNaNNaN
3NaNNaNNaNNaNNaN4.209949e+06NaN1.079587e+076.474973e+07NaN...NaNNaN859850.753800NaN1.574627e+069.435974e+06NaNNaNNaNNaN
4NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN302288.604192NaN2.830168e+06NaNNaNNaNNaNNaN
5NaNNaNNaNNaNNaNNaNNaNNaNNaN3.062191e+06...NaN1.637221e+06NaN1.633173e+06NaNNaNNaNNaNNaNNaN
6NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN602531.413900NaN5.650034e+053.394761e+06NaNNaNNaNNaN
7NaNNaNNaNNaNNaNNaNNaNNaNNaN3.479209e+05...NaN1.495171e+05NaN1.491122e+04NaNNaN4.240070e+06NaNNaNNaN
8NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...1.379376e+07NaNNaN1.349097e+05NaNNaN3.029557e+054.544335e+06NaNNaN
9NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN215292.953168NaN1.238973e+06NaNNaNNaNNaNNaN
10NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaN7.372768e+05NaN7.372907e+05NaNNaNNaNNaNNaNNaN
11NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaN430569.564168NaN2.477853e+051.482659e+06NaNNaNNaNNaN
12NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaN1.884757e+05NaN1.888855e+04NaNNaN2.410167e+06NaNNaNNaN
13NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN1.695886e+05NaNNaN1.726362e+052.584466e+06NaNNaN
14NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN5.047039e+042.403367e+03NaNNaN3.828462e+06NaN
15NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaN4.806703e+04NaNNaN2.736774e+054.386991e+06
16NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
17NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
18NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
19NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
20NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
21NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
22NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
23NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
24NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "

25 rows × 25 columns

\n", + "
" + ], + "text/plain": [ + "level_number 0 1 2 3 4 5 \\\n", + "level_number \n", + "0 NaN 6.273665e+08 NaN 6.262443e+08 1.670556e+08 NaN \n", + "1 NaN NaN NaN NaN NaN 2.105076e+06 \n", + "2 NaN NaN NaN NaN 2.244369e+07 NaN \n", + "3 NaN NaN NaN NaN NaN 4.209949e+06 \n", + "4 NaN NaN NaN NaN NaN NaN \n", + "5 NaN NaN NaN NaN NaN NaN \n", + "6 NaN NaN NaN NaN NaN NaN \n", + "7 NaN NaN NaN NaN NaN NaN \n", + "8 NaN NaN NaN NaN NaN NaN \n", + "9 NaN NaN NaN NaN NaN NaN \n", + "10 NaN NaN NaN NaN NaN NaN \n", + "11 NaN NaN NaN NaN NaN NaN \n", + "12 NaN NaN NaN NaN NaN NaN \n", + "13 NaN NaN NaN NaN NaN NaN \n", + "14 NaN NaN NaN NaN NaN NaN \n", + "15 NaN NaN NaN NaN NaN NaN \n", + "16 NaN NaN NaN NaN NaN NaN \n", + "17 NaN NaN NaN NaN NaN NaN \n", + "18 NaN NaN NaN NaN NaN NaN \n", + "19 NaN NaN NaN NaN NaN NaN \n", + "20 NaN NaN NaN NaN NaN NaN \n", + "21 NaN NaN NaN NaN NaN NaN \n", + "22 NaN NaN NaN NaN NaN NaN \n", + "23 NaN NaN NaN NaN NaN NaN \n", + "24 NaN NaN NaN NaN NaN NaN \n", + "\n", + "level_number 6 7 8 9 ... \\\n", + "level_number ... \n", + "0 1.664219e+08 NaN NaN 6.805429e+07 ... \n", + "1 NaN 5.378844e+07 NaN NaN ... \n", + "2 2.244401e+07 NaN NaN 9.661716e+06 ... \n", + "3 NaN 1.079587e+07 6.474973e+07 NaN ... \n", + "4 NaN NaN NaN NaN ... \n", + "5 NaN NaN NaN 3.062191e+06 ... \n", + "6 NaN NaN NaN NaN ... \n", + "7 NaN NaN NaN 3.479209e+05 ... \n", + "8 NaN NaN NaN NaN ... \n", + "9 NaN NaN NaN NaN ... \n", + "10 NaN NaN NaN NaN ... \n", + "11 NaN NaN NaN NaN ... \n", + "12 NaN NaN NaN NaN ... \n", + "13 NaN NaN NaN NaN ... \n", + "14 NaN NaN NaN NaN ... \n", + "15 NaN NaN NaN NaN ... \n", + "16 NaN NaN NaN NaN ... \n", + "17 NaN NaN NaN NaN ... \n", + "18 NaN NaN NaN NaN ... \n", + "19 NaN NaN NaN NaN ... \n", + "20 NaN NaN NaN NaN ... \n", + "21 NaN NaN NaN NaN ... \n", + "22 NaN NaN NaN NaN ... \n", + "23 NaN NaN NaN NaN ... \n", + "24 NaN NaN NaN NaN ... \n", + "\n", + "level_number 15 16 17 18 \\\n", + "level_number \n", + "0 NaN 3.438596e+07 NaN 3.438596e+07 \n", + "1 NaN NaN 429939.240273 NaN \n", + "2 NaN 4.954019e+06 NaN 4.945181e+06 \n", + "3 NaN NaN 859850.753800 NaN \n", + "4 NaN NaN 302288.604192 NaN \n", + "5 NaN 1.637221e+06 NaN 1.633173e+06 \n", + "6 NaN NaN 602531.413900 NaN \n", + "7 NaN 1.495171e+05 NaN 1.491122e+04 \n", + "8 1.379376e+07 NaN NaN 1.349097e+05 \n", + "9 NaN NaN 215292.953168 NaN \n", + "10 NaN 7.372768e+05 NaN 7.372907e+05 \n", + "11 NaN NaN 430569.564168 NaN \n", + "12 NaN 1.884757e+05 NaN 1.888855e+04 \n", + "13 NaN NaN NaN 1.695886e+05 \n", + "14 NaN NaN NaN NaN \n", + "15 NaN NaN NaN NaN \n", + "16 NaN NaN NaN NaN \n", + "17 NaN NaN NaN NaN \n", + "18 NaN NaN NaN NaN \n", + "19 NaN NaN NaN NaN \n", + "20 NaN NaN NaN NaN \n", + "21 NaN NaN NaN NaN \n", + "22 NaN NaN NaN NaN \n", + "23 NaN NaN NaN NaN \n", + "24 NaN NaN NaN NaN \n", + "\n", + "level_number 19 20 21 22 \\\n", + "level_number \n", + "0 NaN NaN NaN NaN \n", + "1 7.855694e+06 NaN NaN NaN \n", + "2 NaN NaN NaN NaN \n", + "3 1.574627e+06 9.435974e+06 NaN NaN \n", + "4 2.830168e+06 NaN NaN NaN \n", + "5 NaN NaN NaN NaN \n", + "6 5.650034e+05 3.394761e+06 NaN NaN \n", + "7 NaN NaN 4.240070e+06 NaN \n", + "8 NaN NaN 3.029557e+05 4.544335e+06 \n", + "9 1.238973e+06 NaN NaN NaN \n", + "10 NaN NaN NaN NaN \n", + "11 2.477853e+05 1.482659e+06 NaN NaN \n", + "12 NaN NaN 2.410167e+06 NaN \n", + "13 NaN NaN 1.726362e+05 2.584466e+06 \n", + "14 5.047039e+04 2.403367e+03 NaN NaN \n", + "15 NaN 4.806703e+04 NaN NaN \n", + "16 NaN NaN NaN NaN \n", + "17 NaN NaN NaN NaN \n", + "18 NaN NaN NaN NaN \n", + "19 NaN NaN NaN NaN \n", + "20 NaN NaN NaN NaN \n", + "21 NaN NaN NaN NaN \n", + "22 NaN NaN NaN NaN \n", + "23 NaN NaN NaN NaN \n", + "24 NaN NaN NaN NaN \n", + "\n", + "level_number 23 24 \n", + "level_number \n", + "0 NaN NaN \n", + "1 NaN NaN \n", + "2 NaN NaN \n", + "3 NaN NaN \n", + "4 NaN NaN \n", + "5 NaN NaN \n", + "6 NaN NaN \n", + "7 NaN NaN \n", + "8 NaN NaN \n", + "9 NaN NaN \n", + "10 NaN NaN \n", + "11 NaN NaN \n", + "12 NaN NaN \n", + "13 NaN NaN \n", + "14 3.828462e+06 NaN \n", + "15 2.736774e+05 4.386991e+06 \n", + "16 NaN NaN \n", + "17 NaN NaN \n", + "18 NaN NaN \n", + "19 NaN NaN \n", + "20 NaN NaN \n", + "21 NaN NaN \n", + "22 NaN NaN \n", + "23 NaN NaN \n", + "24 NaN NaN \n", + "\n", + "[25 rows x 25 columns]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test.reindex(full_level_multi_index, fill_value=np.nan).A_ul.unstack(fill_value=0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "tardis-devel", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.1.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/physics/plasma/construction_simple_plasma.ipynb b/docs/physics/plasma/construction_simple_plasma.ipynb new file mode 100644 index 00000000000..44849be37d3 --- /dev/null +++ b/docs/physics/plasma/construction_simple_plasma.ipynb @@ -0,0 +1,115 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Constructing a simple plasma" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/python/tardis/tardis/__init__.py:20: UserWarning: Astropy is already imported externally. Astropy should be imported after TARDIS.\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bbbd27367e48465696aa4e40f25b8496", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Iterations: 0/? [00:00 Date: Fri, 14 Jun 2024 12:47:44 -0400 Subject: [PATCH 027/118] moved radiation field into plasma. Resulting in some renames --- tardis/plasma/radiation_field/__init__.py | 3 + .../radiation_field/planck_rad_field.py | 74 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 tardis/plasma/radiation_field/__init__.py create mode 100644 tardis/plasma/radiation_field/planck_rad_field.py diff --git a/tardis/plasma/radiation_field/__init__.py b/tardis/plasma/radiation_field/__init__.py new file mode 100644 index 00000000000..307ea6046c5 --- /dev/null +++ b/tardis/plasma/radiation_field/__init__.py @@ -0,0 +1,3 @@ +from tardis.plasma.radiation_field.planck_rad_field import ( + DilutePlanckianRadiationField, +) diff --git a/tardis/plasma/radiation_field/planck_rad_field.py b/tardis/plasma/radiation_field/planck_rad_field.py new file mode 100644 index 00000000000..be58a0de665 --- /dev/null +++ b/tardis/plasma/radiation_field/planck_rad_field.py @@ -0,0 +1,74 @@ +from typing import Union + +import numpy as np +from astropy import units as u + +from tardis.util.base import intensity_black_body + + +class DilutePlanckianRadiationField: + """ + Represents the state of a dilute thermal radiation field. + + + Parameters + ---------- + temperature : u.Quantity + Radiative temperature in each shell + dilution_factor : numpy.ndarray + Dilution Factors in each shell + geometry: tardis.model.Radial1DModel + The geometry of the model that uses to constrains the active shells + """ + + def __init__( + self, + temperature: u.Quantity, + dilution_factor: np.ndarray, + geometry=None, + ): + # ensuring that the radiation_field has both + # dilution_factor and t_radiative equal length + assert len(temperature) == len(dilution_factor) + if ( + geometry is not None + ): # check the active shells only (this is used when setting up the radiation_field_state) + assert np.all( + temperature[ + geometry.v_inner_boundary_index : geometry.v_outer_boundary_index + ] + > 0 * u.K + ) + assert np.all( + dilution_factor[ + geometry.v_inner_boundary_index : geometry.v_outer_boundary_index + ] + > 0 + ) + else: + assert np.all(temperature > 0 * u.K) + assert np.all(dilution_factor > 0) + self.temperature = temperature + self.dilution_factor = dilution_factor + + @property + def temperature_kelvin(self): + return self.temperature.to(u.K).value + + def calculate_mean_intensity(self, nu: Union[u.Quantity, np.ndarray]): + """ + Calculate the intensity of the radiation field at a given frequency. + + Parameters + ---------- + nu : u.Quantity + Frequency at which the intensity is to be calculated + + Returns + ------- + intensity : u.Quantity + Intensity of the radiation field at the given frequency + """ + return self.dilution_factor * intensity_black_body( + nu[np.newaxis].T, self.temperature + ) From 2f042f25adcf9b24a4763adf8f2cc051337a6076 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 19 Jun 2024 16:18:26 -0400 Subject: [PATCH 028/118] some fixes --- tardis/model/parse_input.py | 2 +- .../radiation_field/planck_rad_field.py | 2 +- tardis/plasma/standard_plasmas.py | 2 +- tardis/radiation_field/__init__.py | 3 - tardis/radiation_field/planck_rad_field.py | 74 ------------------- tardis/simulation/base.py | 9 ++- .../continuum_radfield_properties.py | 2 +- .../estimators/dilute_blackbody_properties.py | 2 +- 8 files changed, 11 insertions(+), 85 deletions(-) delete mode 100644 tardis/radiation_field/__init__.py delete mode 100644 tardis/radiation_field/planck_rad_field.py diff --git a/tardis/model/parse_input.py b/tardis/model/parse_input.py index 8d01e022bf8..8da8080ec11 100644 --- a/tardis/model/parse_input.py +++ b/tardis/model/parse_input.py @@ -17,7 +17,7 @@ from tardis.model.geometry.radial1d import HomologousRadial1DGeometry from tardis.model.matter.composition import Composition from tardis.model.matter.decay import IsotopicMassFraction -from tardis.radiation_field.planck_rad_field import ( +from tardis.plasma.radiation_field.planck_rad_field import ( DilutePlanckianRadiationField, ) from tardis.transport.montecarlo.packet_source import ( diff --git a/tardis/plasma/radiation_field/planck_rad_field.py b/tardis/plasma/radiation_field/planck_rad_field.py index be58a0de665..bcd443081e2 100644 --- a/tardis/plasma/radiation_field/planck_rad_field.py +++ b/tardis/plasma/radiation_field/planck_rad_field.py @@ -47,7 +47,7 @@ def __init__( ) else: assert np.all(temperature > 0 * u.K) - assert np.all(dilution_factor > 0) + assert np.all(dilution_factor >= 0) self.temperature = temperature self.dilution_factor = dilution_factor diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index 072093344b4..a048a59c254 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -47,7 +47,7 @@ two_photon_properties, ) from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper -from tardis.radiation_field import DilutePlanckianRadiationField +from tardis.plasma.radiation_field import DilutePlanckianRadiationField from tardis.util.base import species_string_to_tuple logger = logging.getLogger(__name__) diff --git a/tardis/radiation_field/__init__.py b/tardis/radiation_field/__init__.py deleted file mode 100644 index ba732d148bf..00000000000 --- a/tardis/radiation_field/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from tardis.radiation_field.planck_rad_field import ( - DilutePlanckianRadiationField, -) diff --git a/tardis/radiation_field/planck_rad_field.py b/tardis/radiation_field/planck_rad_field.py deleted file mode 100644 index be58a0de665..00000000000 --- a/tardis/radiation_field/planck_rad_field.py +++ /dev/null @@ -1,74 +0,0 @@ -from typing import Union - -import numpy as np -from astropy import units as u - -from tardis.util.base import intensity_black_body - - -class DilutePlanckianRadiationField: - """ - Represents the state of a dilute thermal radiation field. - - - Parameters - ---------- - temperature : u.Quantity - Radiative temperature in each shell - dilution_factor : numpy.ndarray - Dilution Factors in each shell - geometry: tardis.model.Radial1DModel - The geometry of the model that uses to constrains the active shells - """ - - def __init__( - self, - temperature: u.Quantity, - dilution_factor: np.ndarray, - geometry=None, - ): - # ensuring that the radiation_field has both - # dilution_factor and t_radiative equal length - assert len(temperature) == len(dilution_factor) - if ( - geometry is not None - ): # check the active shells only (this is used when setting up the radiation_field_state) - assert np.all( - temperature[ - geometry.v_inner_boundary_index : geometry.v_outer_boundary_index - ] - > 0 * u.K - ) - assert np.all( - dilution_factor[ - geometry.v_inner_boundary_index : geometry.v_outer_boundary_index - ] - > 0 - ) - else: - assert np.all(temperature > 0 * u.K) - assert np.all(dilution_factor > 0) - self.temperature = temperature - self.dilution_factor = dilution_factor - - @property - def temperature_kelvin(self): - return self.temperature.to(u.K).value - - def calculate_mean_intensity(self, nu: Union[u.Quantity, np.ndarray]): - """ - Calculate the intensity of the radiation field at a given frequency. - - Parameters - ---------- - nu : u.Quantity - Frequency at which the intensity is to be calculated - - Returns - ------- - intensity : u.Quantity - Intensity of the radiation field at the given frequency - """ - return self.dilution_factor * intensity_black_body( - nu[np.newaxis].T, self.temperature - ) diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 219e20f363f..0470beb656d 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -17,6 +17,7 @@ from tardis.model.parse_input import initialize_packet_source from tardis.transport.montecarlo.base import MonteCarloTransportSolver from tardis.plasma.standard_plasmas import assemble_plasma +from tardis.plasma.radiation_field import DilutePlanckianRadiationField from tardis.simulation.convergence import ConvergenceSolver from tardis.util.base import is_notebook from tardis.visualization import ConvergencePlots @@ -339,10 +340,12 @@ def advance_state(self): # Bad test to see if this is a nlte run if "nlte_data" in self.plasma.outputs_dict: self.plasma.store_previous_properties() - + radiation_field = DilutePlanckianRadiationField( + temperature=self.simulation_state.t_radiative, + dilution_factor=self.simulation_state.dilution_factor, + ) update_properties = dict( - t_rad=self.simulation_state.t_radiative, - w=self.simulation_state.dilution_factor, + dilute_planckian_radiation_field=radiation_field ) # A check to see if the plasma is set with JBluesDetailed, in which # case it needs some extra kwargs. diff --git a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py index 64db0f8f6e0..da742cc1ee3 100644 --- a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py +++ b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py @@ -6,7 +6,7 @@ import tardis.constants as const from tardis.io.atom_data import AtomData -from tardis.radiation_field.planck_rad_field import ( +from tardis.plasma.radiation_field.planck_rad_field import ( DilutePlanckianRadiationField, ) from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( diff --git a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py b/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py index b8a33125ecf..c82612584ea 100644 --- a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py +++ b/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py @@ -3,7 +3,7 @@ from scipy.special import zeta from tardis import constants as const -from tardis.radiation_field.planck_rad_field import ( +from tardis.plasma.radiation_field.planck_rad_field import ( DilutePlanckianRadiationField, ) From d849f859a8108adac65ae7ef82f8e1f599f42590 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 19 Jun 2024 16:18:55 -0400 Subject: [PATCH 029/118] black montecarlo --- tardis/transport/montecarlo/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index 8d4b4599e5a..ce62695eb4d 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -187,9 +187,9 @@ def run( total_iterations=total_iterations, ) - transport_state._montecarlo_virtual_luminosity.value[:] = ( - v_packets_energy_hist - ) + transport_state._montecarlo_virtual_luminosity.value[ + : + ] = v_packets_energy_hist transport_state.last_interaction_type = last_interaction_tracker.types transport_state.last_interaction_in_nu = last_interaction_tracker.in_nus transport_state.last_line_interaction_in_id = ( From 17864364cb18351fa5e0f22ccab999c5fa94d635 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 19 Jun 2024 17:00:34 -0400 Subject: [PATCH 030/118] chore: Initialize atom data and simulation state in `initialization.py` --- tardis/simulation/base.py | 94 +++++++------------------ tardis/simulation/initialization.py | 105 ++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 70 deletions(-) create mode 100644 tardis/simulation/initialization.py diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 0470beb656d..4926d4ad984 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -1,7 +1,6 @@ import logging import time from collections import OrderedDict -from pathlib import Path import numpy as np import pandas as pd @@ -10,19 +9,19 @@ import tardis from tardis import constants as const -from tardis.io.atom_data.base import AtomData from tardis.io.configuration.config_reader import ConfigurationError from tardis.io.util import HDFWriterMixin -from tardis.model import SimulationState -from tardis.model.parse_input import initialize_packet_source -from tardis.transport.montecarlo.base import MonteCarloTransportSolver -from tardis.plasma.standard_plasmas import assemble_plasma from tardis.plasma.radiation_field import DilutePlanckianRadiationField +from tardis.plasma.standard_plasmas import assemble_plasma from tardis.simulation.convergence import ConvergenceSolver +from tardis.simulation.initialization import ( + initialize_atom_data, + initialize_simulation_state, +) +from tardis.transport.montecarlo.base import MonteCarloTransportSolver from tardis.util.base import is_notebook from tardis.visualization import ConvergencePlots -# Adding logging support logger = logging.getLogger(__name__) @@ -496,12 +495,12 @@ def log_plasma_state( ---------- t_rad : astropy.units.Quanity current t_rad - w : astropy.units.Quanity - current w + dilution_factor : np.ndarray + current dilution_factor next_t_rad : astropy.units.Quanity next t_rad - next_w : astropy.units.Quanity - next_w + next_dilution_factor : np.ndarray + next dilution_factor log_sampling : int the n-th shells to be plotted @@ -617,6 +616,9 @@ def from_config( show_convergence_plots=False, show_progress_bars=True, legacy_mode_enabled=False, + atom_data=None, + plasma=None, + transport=None, **kwargs, ): """ @@ -638,70 +640,22 @@ def from_config( # Allow overriding some config structures. This is useful in some # unit tests, and could be extended in all the from_config classmethods. - atom_data = kwargs.get("atom_data", None) - if atom_data is None: - if "atom_data" in config: - if Path(config.atom_data).is_absolute(): - atom_data_fname = Path(config.atom_data) - else: - atom_data_fname = ( - Path(config.config_dirname) / config.atom_data - ) - - else: - raise ValueError( - "No atom_data option found in the configuration." - ) - - logger.info(f"\n\tReading Atomic Data from {atom_data_fname}") - - try: - atom_data = AtomData.from_hdf(atom_data_fname) - except TypeError as e: - print( - e, - "Error might be from the use of an old-format of the atomic database, \n" - "please see https://github.com/tardis-sn/tardis-refdata/tree/master/atom_data" - " for the most recent version.", - ) - raise - if "model" in kwargs: - simulation_state = kwargs["model"] - else: - if hasattr(config, "csvy_model"): - simulation_state = SimulationState.from_csvy( - config, - atom_data=atom_data, - legacy_mode_enabled=legacy_mode_enabled, - ) - else: - simulation_state = SimulationState.from_config( - config, - atom_data=atom_data, - legacy_mode_enabled=legacy_mode_enabled, - ) - if packet_source is not None: - simulation_state.packet_source = initialize_packet_source( - config, - simulation_state.geometry, - packet_source, - legacy_mode_enabled, - ) - if "plasma" in kwargs: - plasma = kwargs["plasma"] - else: + atom_data = initialize_atom_data(config, atom_data=atom_data) + simulation_state = initialize_simulation_state( + config, packet_source, legacy_mode_enabled, kwargs, atom_data + ) + if plasma is None: plasma = assemble_plasma( config, simulation_state, atom_data=atom_data, ) - if "transport" in kwargs: - if packet_source is not None: - raise ConfigurationError( - "Cannot specify packet_source and transport at the same time." - ) - transport = kwargs["transport"] - else: + + if (transport is not None) and (packet_source is not None): + raise ConfigurationError( + "Cannot specify packet_source and transport at the same time." + ) + if transport is None: transport = MonteCarloTransportSolver.from_config( config, packet_source=simulation_state.packet_source, diff --git a/tardis/simulation/initialization.py b/tardis/simulation/initialization.py new file mode 100644 index 00000000000..e95ab558e69 --- /dev/null +++ b/tardis/simulation/initialization.py @@ -0,0 +1,105 @@ +import logging +from pathlib import Path + +from tardis.io.atom_data.base import AtomData +from tardis.model import SimulationState +from tardis.model.parse_input import initialize_packet_source + +logger = logging.getLogger(__name__) + + +def initialize_atom_data(config, atom_data=None): + """ + Initialize atom data for the simulation. + + Parameters + ---------- + config : object + The configuration object containing information about the atom data. + atom_data : object, optional + Existing atom data to be used, if provided. + + Returns + ------- + object + The initialized atom data. + + Raises + ------ + ValueError + If no atom_data option is found in the configuration. + """ + if atom_data is None: + if "atom_data" in config: + if Path(config.atom_data).is_absolute(): + atom_data_fname = Path(config.atom_data) + else: + atom_data_fname = Path(config.config_dirname) / config.atom_data + + else: + raise ValueError("No atom_data option found in the configuration.") + + logger.info(f"\n\tReading Atomic Data from {atom_data_fname}") + + try: + atom_data = AtomData.from_hdf(atom_data_fname) + except TypeError as e: + print( + e, + "Error might be from the use of an old-format of the atomic database, \n" + "please see https://github.com/tardis-sn/tardis-refdata/tree/master/atom_data" + " for the most recent version.", + ) + raise + + return atom_data + + +def initialize_simulation_state( + config, packet_source, legacy_mode_enabled, kwargs, atom_data +): + """ + Initialize the simulation state. + + Parameters + ---------- + config : object + The configuration object for the simulation. + packet_source : object + The packet source for the simulation. + legacy_mode_enabled : bool + Flag indicating if legacy mode is enabled. + kwargs : dict + Additional keyword arguments. + atom_data : object + The atom data for the simulation. + + Returns + ------- + object + The initialized simulation state. + """ + if "model" in kwargs: + simulation_state = kwargs["model"] + else: + if hasattr(config, "csvy_model"): + simulation_state = SimulationState.from_csvy( + config, + atom_data=atom_data, + legacy_mode_enabled=legacy_mode_enabled, + ) + else: + simulation_state = SimulationState.from_config( + config, + atom_data=atom_data, + legacy_mode_enabled=legacy_mode_enabled, + ) + if packet_source is not None: + simulation_state.packet_source = initialize_packet_source( + config, + simulation_state.geometry, + packet_source, + legacy_mode_enabled, + ) + + return simulation_state From 5740708e4c602ed9655143eff0268fe533a8ea15 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 19 Jun 2024 17:16:06 -0400 Subject: [PATCH 031/118] updating the documentation --- tardis/simulation/base.py | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 4926d4ad984..cb814fcf9d1 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -622,20 +622,35 @@ def from_config( **kwargs, ): """ - Create a new Simulation instance from a Configuration object. + Create a simulation instance from the provided configuration. Parameters ---------- - config : tardis.io.config_reader.Configuration - + config : object + The configuration object for the simulation. + packet_source : object, optional + The packet source for the simulation. + virtual_packet_logging : bool, optional + Flag indicating virtual packet logging. + show_convergence_plots : bool, optional + Flag indicating whether to show convergence plots. + show_progress_bars : bool, optional + Flag indicating whether to show progress bars. + legacy_mode_enabled : bool, optional + Flag indicating if legacy mode is enabled. + atom_data : object, optional + The atom data for the simulation. + plasma : object, optional + The plasma object for the simulation. + transport : object, optional + The transport solver for the simulation. **kwargs - Allow overriding some structures, such as model, plasma, atomic data - and the transport, instead of creating them from the configuration - object. + Additional keyword arguments. Returns ------- - Simulation + object + The created simulation instance. """ # Allow overriding some config structures. This is useful in some # unit tests, and could be extended in all the from_config classmethods. From 92f4e90cacc92e34c5f91c445ff7b1badec773f7 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 19 Jun 2024 20:18:18 -0400 Subject: [PATCH 032/118] feat: Add EstimatedRadiationFieldProperties class for Monte Carlo estimators --- tardis/transport/montecarlo/estimators/base.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 tardis/transport/montecarlo/estimators/base.py diff --git a/tardis/transport/montecarlo/estimators/base.py b/tardis/transport/montecarlo/estimators/base.py new file mode 100644 index 00000000000..641fa045028 --- /dev/null +++ b/tardis/transport/montecarlo/estimators/base.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass + +import numpy as np + +from tardis.plasma.radiation_field import DilutePlanckianRadiationField + + +@dataclass +class EstimatedRadiationFieldProperties: + dilute_blackbody_radiationfield_state: DilutePlanckianRadiationField + j_blues: np.ndarray From e3f1819ce89f77db2448ef87ca6838d9471b44dd Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 21 Jun 2024 18:21:43 -0400 Subject: [PATCH 033/118] trying to get rid of j_blues in plasma with MC restructure --- tardis/plasma/properties/general.py | 18 ------ tardis/plasma/properties/plasma_input.py | 11 ---- tardis/simulation/base.py | 37 ++++++++--- tardis/transport/montecarlo/base.py | 14 +++- .../montecarlo/estimators/__init__.py | 3 + .../estimators/dilute_blackbody_properties.py | 64 +++++++++++++++++-- .../montecarlo/montecarlo_transport_state.py | 33 +--------- 7 files changed, 104 insertions(+), 76 deletions(-) diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index cfc56fba66c..b63acb66559 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -122,21 +122,3 @@ def __init__(self, plasma_parent): def calculate(self, t_electrons): return 1 / (self.k_B_cgs * t_electrons) - - -class LuminosityInner(ProcessingPlasmaProperty): - outputs = ("luminosity_inner",) - - @staticmethod - def calculate(r_inner, t_inner): - return ( - 4 * np.pi * const.sigma_sb.cgs * r_inner[0] ** 2 * t_inner**4 - ).to("erg/s") - - -class TimeSimulation(ProcessingPlasmaProperty): - outputs = ("time_simulation",) - - @staticmethod - def calculate(luminosity_inner): - return 1.0 * u.erg / luminosity_inner diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index f9d70216dcc..31f37f1ad48 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -15,8 +15,6 @@ "JBlueEstimator", "LinkTRadTElectron", "HeliumTreatment", - "RInner", - "TInner", "Volume", "ContinuumInteractionSpecies", "NLTEIonizationSpecies", @@ -125,15 +123,6 @@ class LinkTRadTElectron(Input): class HeliumTreatment(Input): outputs = ("helium_treatment",) - -class RInner(Input): - outputs = ("r_inner",) - - -class TInner(Input): - outputs = ("t_inner",) - - class Volume(Input): outputs = ("volume",) diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index cb814fcf9d1..9f56307787c 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -262,10 +262,23 @@ def advance_state(self): ------- converged : bool """ - ( - estimated_t_rad, - estimated_dilution_factor, - ) = self.transport.transport_state.calculate_radiationfield_properties() + estimated_radfield_properties = ( + self.transport.radfield_prop_solver.solve( + self.transport.transport_state.radfield_mc_estimators, + self.transport.transport_state.time_explosion, + self.transport.transport_state.time_of_simulation, + self.transport.transport_state.geometry_state.volume, + self.transport.transport_state.opacity_state.line_list_nu, + ) + ) + + estimated_t_rad = ( + estimated_radfield_properties.dilute_blackbody_radiationfield_state.temperature + ) + estimated_dilution_factor = ( + estimated_radfield_properties.dilute_blackbody_radiationfield_state.dilution_factor + ) + estimated_t_inner = self.estimate_t_inner( self.simulation_state.t_inner, self.luminosity_requested, @@ -334,11 +347,6 @@ def advance_state(self): self.simulation_state.dilution_factor = next_dilution_factor self.simulation_state.blackbody_packet_source.temperature = next_t_inner - # model.calculate_j_blues() equivalent - # model.update_plasmas() equivalent - # Bad test to see if this is a nlte run - if "nlte_data" in self.plasma.outputs_dict: - self.plasma.store_previous_properties() radiation_field = DilutePlanckianRadiationField( temperature=self.simulation_state.t_radiative, dilution_factor=self.simulation_state.dilution_factor, @@ -346,6 +354,16 @@ def advance_state(self): update_properties = dict( dilute_planckian_radiation_field=radiation_field ) + + # model.calculate_j_blues() equivalent + # model.update_plasmas() equivalent + # Bad test to see if this is a nlte run + if "nlte_data" in self.plasma.outputs_dict: + self.plasma.store_previous_properties() + update_properties = dict( + j_blues=estimated_radfield_properties.j_blues + ) + # A check to see if the plasma is set with JBluesDetailed, in which # case it needs some extra kwargs. @@ -382,7 +400,6 @@ def iterate(self, no_of_packets, no_of_virtual_packets=0): self.transport.run( transport_state, - time_explosion=self.simulation_state.time_explosion, iteration=self.iterations_executed, total_iterations=self.iterations, show_progress_bars=self.show_progress_bars, diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index ce62695eb4d..9f206852f72 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -10,6 +10,9 @@ montecarlo_main_loop, numba_config, ) +from tardis.transport.montecarlo.estimators.dilute_blackbody_properties import ( + MCRadiationFieldPropertiesSolver, +) from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( initialize_estimator_statistics, ) @@ -49,6 +52,7 @@ class MonteCarloTransportSolver(HDFWriterMixin): def __init__( self, + radfield_prop_solver, spectrum_frequency, virtual_spectrum_spawn_range, enable_full_relativity, @@ -64,6 +68,7 @@ def __init__( use_gpu=False, montecarlo_configuration=None, ): + self.radfield_prop_solver = radfield_prop_solver # inject different packets self.spectrum_frequency = spectrum_frequency self.virtual_spectrum_spawn_range = virtual_spectrum_spawn_range @@ -124,6 +129,7 @@ def initialize_transport_state( spectrum_frequency=self.spectrum_frequency, geometry_state=geometry_state, opacity_state=opacity_state, + time_explosion=simulation_state.time_explosion, ) transport_state.enable_full_relativity = ( @@ -142,7 +148,6 @@ def initialize_transport_state( def run( self, transport_state, - time_explosion, iteration=0, total_iterations=0, show_progress_bars=True, @@ -176,7 +181,7 @@ def run( ) = montecarlo_main_loop( transport_state.packet_collection, transport_state.geometry_state, - time_explosion.cgs.value, + transport_state.time_explosion.cgs.value, transport_state.opacity_state, self.montecarlo_configuration, transport_state.radfield_mc_estimators, @@ -289,7 +294,12 @@ def from_config( config.montecarlo.tracking.initial_array_length ) + radfield_prop_solver = MCRadiationFieldPropertiesSolver( + config.plasma.w_epsilon + ) + return cls( + radfield_prop_solver=radfield_prop_solver, spectrum_frequency=spectrum_frequency, virtual_spectrum_spawn_range=config.montecarlo.virtual_spectrum_spawn_range, enable_full_relativity=config.montecarlo.enable_full_relativity, diff --git a/tardis/transport/montecarlo/estimators/__init__.py b/tardis/transport/montecarlo/estimators/__init__.py index e69de29bb2d..f0b7f1abf73 100644 --- a/tardis/transport/montecarlo/estimators/__init__.py +++ b/tardis/transport/montecarlo/estimators/__init__.py @@ -0,0 +1,3 @@ +from tardis.transport.montecarlo.estimators.base import ( + EstimatedRadiationFieldProperties, +) diff --git a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py b/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py index c82612584ea..8682ec7a156 100644 --- a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py +++ b/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py @@ -6,6 +6,9 @@ from tardis.plasma.radiation_field.planck_rad_field import ( DilutePlanckianRadiationField, ) +from tardis.transport.montecarlo.estimators.base import ( + EstimatedRadiationFieldProperties, +) DILUTION_FACTOR_ESTIMATOR_CONSTANT = ( (const.c**2 / (2 * const.h)) @@ -18,11 +21,20 @@ ).cgs.value -class MCDiluteBlackBodyRadFieldSolver: - def __init__(self) -> None: - pass +class MCRadiationFieldPropertiesSolver: + w_epsilon = 1e-10 + + def __init__(self, w_epsilon=1e-10) -> None: + self.w_epsilon = w_epsilon - def solve(self, radfield_mc_estimators, time_of_simulation, volume): + def solve( + self, + radfield_mc_estimators, + time_explosion, + time_of_simulation, + volume, + line_list_nu, + ): """ Calculate an updated radiation field from the :math: `\\bar{nu}_\\textrm{estimator}` and :math:`\\J_\\textrm{estimator}` @@ -39,6 +51,26 @@ def solve(self, radfield_mc_estimators, time_of_simulation, volume): t_radiative : astropy.units.Quantity (float) dilution_factor : numpy.ndarray (float) """ + dilute_planck_rad_field = self.estimate_dilute_planck_radiation_field( + radfield_mc_estimators, time_of_simulation, volume + ) + j_blues = self.estimate_jblues( + radfield_mc_estimators.j_blue_estimator, + dilute_planck_rad_field, + time_explosion, + time_of_simulation, + volume, + line_list_nu, + ) + + return EstimatedRadiationFieldProperties( + dilute_blackbody_radiationfield_state=dilute_planck_rad_field, + j_blues=j_blues, + ) + + def estimate_dilute_planck_radiation_field( + self, radfield_mc_estimators, time_of_simulation, volume + ): temperature_radiative = ( T_RADIATIVE_ESTIMATOR_CONSTANT * radfield_mc_estimators.nu_bar_estimator @@ -51,7 +83,29 @@ def solve(self, radfield_mc_estimators, time_of_simulation, volume): * time_of_simulation.value * volume ) - return DilutePlanckianRadiationField( temperature_radiative, dilution_factor ) + + def estimate_jblues( + self, + j_blue_estimator, + estimated_radfield_state, + time_explosion, + time_of_simulation, + volume, + line_list_nu, + ): + j_blues_norm_factor = ( + const.c.cgs + * time_explosion + / (4 * np.pi * time_of_simulation * volume) + ) + j_blues = j_blue_estimator * j_blues_norm_factor.cgs.value + planck_j_blues = estimated_radfield_state.calculate_mean_intensity( + line_list_nu + ) + zero_j_blues = j_blues == 0.0 + j_blues[zero_j_blues] = self.w_epsilon * planck_j_blues[zero_j_blues] + + return j_blues diff --git a/tardis/transport/montecarlo/montecarlo_transport_state.py b/tardis/transport/montecarlo/montecarlo_transport_state.py index 14d678a5b9c..582127a56bb 100644 --- a/tardis/transport/montecarlo/montecarlo_transport_state.py +++ b/tardis/transport/montecarlo/montecarlo_transport_state.py @@ -5,7 +5,7 @@ from tardis.io.util import HDFWriterMixin from tardis.transport.montecarlo.estimators.dilute_blackbody_properties import ( - MCDiluteBlackBodyRadFieldSolver, + MCRadiationFieldPropertiesSolver, ) from tardis.transport.montecarlo.formal_integral import IntegrationError from tardis.spectrum import TARDISSpectrum @@ -62,9 +62,11 @@ def __init__( spectrum_frequency, geometry_state, opacity_state, + time_explosion, rpacket_tracker=None, vpacket_tracker=None, ): + self.time_explosion = time_explosion self.packet_collection = packet_collection self.radfield_mc_estimators = radfield_mc_estimators self.spectrum_frequency = spectrum_frequency @@ -81,35 +83,6 @@ def __init__( self.rpacket_tracker = rpacket_tracker self.vpacket_tracker = vpacket_tracker - def calculate_radiationfield_properties(self): - """ - Calculate an updated radiation field from the :math: - `\\bar{nu}_\\textrm{estimator}` and :math:`\\J_\\textrm{estimator}` - calculated in the montecarlo simulation. - The details of the calculation can be found in the documentation. - - Parameters - ---------- - nubar_estimator : np.ndarray (float) - j_estimator : np.ndarray (float) - - Returns - ------- - t_radiative : astropy.units.Quantity (float) - dilution_factor : numpy.ndarray (float) - """ - dilute_bb_solver = MCDiluteBlackBodyRadFieldSolver() - dilute_bb_radfield = dilute_bb_solver.solve( - self.radfield_mc_estimators, - self.time_of_simulation, - self.geometry_state.volume, - ) - - return ( - dilute_bb_radfield.temperature, - dilute_bb_radfield.dilution_factor, - ) - @property def output_nu(self): return self.packet_collection.output_nus * u.Hz From a99fbb87b50cb6a0b544162b4ccc06da021fcf44 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 22 Jun 2024 18:08:34 -0400 Subject: [PATCH 034/118] completely restructure j_blues. Estimators and all. --- tardis/plasma/base.py | 45 +++++---- tardis/plasma/properties/__init__.py | 1 - .../plasma/properties/continuum_processes.py | 37 +++----- tardis/plasma/properties/general.py | 2 - tardis/plasma/properties/j_blues.py | 94 ------------------- tardis/plasma/properties/plasma_input.py | 8 +- .../plasma/properties/property_collections.py | 15 +-- .../radiation_field/planck_rad_field.py | 58 ++++++++++++ tardis/plasma/standard_plasmas.py | 48 ++++++---- tardis/simulation/base.py | 46 +++++++-- 10 files changed, 172 insertions(+), 182 deletions(-) delete mode 100644 tardis/plasma/properties/j_blues.py diff --git a/tardis/plasma/base.py b/tardis/plasma/base.py index ef785486673..b5189f3798a 100644 --- a/tardis/plasma/base.py +++ b/tardis/plasma/base.py @@ -1,24 +1,36 @@ -import os -import re +import fileinput import logging +import re import tempfile -import fileinput +import dataclasses import networkx as nx -from tardis.plasma.exceptions import PlasmaMissingModule, NotInitializedModule -from tardis.plasma.properties.base import * from tardis.io.util import PlasmaWriterMixin +from tardis.plasma.exceptions import NotInitializedModule, PlasmaMissingModule +from tardis.plasma.properties.base import * logger = logging.getLogger(__name__) +@dataclasses.dataclass(frozen=True) +class PlasmaSolverSettings: + RADIATIVE_RATES_TYPE: str = "blackbody" + + class BasePlasma(PlasmaWriterMixin): outputs_dict = {} hdf_name = "plasma" - def __init__(self, plasma_properties, property_kwargs=None, **kwargs): + def __init__( + self, + plasma_properties, + plasma_solver_settings, + property_kwargs=None, + **kwargs, + ): + self.plasma_solver_settings = plasma_solver_settings self.outputs_dict = {} self.input_properties = [] self.plasma_properties = self._init_properties( @@ -63,7 +75,6 @@ def _build_graph(self): :param plasma_modules: :return: """ - self.graph = nx.DiGraph() # Adding all nodes self.graph.add_nodes_from( @@ -200,8 +211,7 @@ def freeze(self, *args): for key in args: if key not in self.outputs_dict: raise PlasmaMissingModule( - "Trying to freeze property {0}" - " that is unavailable".format(key) + f"Trying to freeze property {key}" " that is unavailable" ) self.outputs_dict[key].frozen = True @@ -224,8 +234,7 @@ def thaw(self, *args): for key in args: if key not in self.outputs_dict: raise PlasmaMissingModule( - "Trying to thaw property {0}" - " that is unavailable".format(key) + f"Trying to thaw property {key}" " that is unavailable" ) self.outputs_dict[key].frozen = False @@ -249,7 +258,6 @@ def _resolve_update_list(self, changed_properties): : list all affected modules. """ - descendants_ob = [] for plasma_property in changed_properties: @@ -284,11 +292,10 @@ def write_to_dot(self, fname, args=None, latex_label=True): enables/disables writing LaTeX equations and edge labels into the file. """ - try: - import pygraphviz + pass except: - logger.warn( + logger.warning( "pygraphviz missing. Plasma graph will not be " "generated." ) return @@ -303,7 +310,7 @@ def write_to_dot(self, fname, args=None, latex_label=True): ] = f"\\\\textrm{{{node}: }}" node_list = self.plasma_properties_dict[node] formulae = node_list.latex_formula - for output in range(0, len(formulae)): + for output in range(len(formulae)): formula = formulae[output] label = formula.replace("\\", "\\\\") print_graph.nodes[str(node)]["label"] += label @@ -341,7 +348,7 @@ def write_to_dot(self, fname, args=None, latex_label=True): ) if args is not None: - with open(fname, "r") as file: + with open(fname) as file: lines = file.readlines() for newline in args: @@ -374,7 +381,7 @@ def write_to_tex(self, fname_graph, scale=0.5, args=None, latex_label=True): try: import dot2tex except: - logger.warn( + logger.warning( "dot2tex missing. Plasma graph will not be " "generated." ) return @@ -383,7 +390,7 @@ def write_to_tex(self, fname_graph, scale=0.5, args=None, latex_label=True): self.write_to_dot(temp_fname, args=args, latex_label=latex_label) - with open(temp_fname, "r") as file: + with open(temp_fname) as file: dot_string = file.read().replace("\\\\", "\\") texcode = dot2tex.dot2tex( diff --git a/tardis/plasma/properties/__init__.py b/tardis/plasma/properties/__init__.py index 63d473f01f9..3363cbd9bcd 100644 --- a/tardis/plasma/properties/__init__.py +++ b/tardis/plasma/properties/__init__.py @@ -11,7 +11,6 @@ from tardis.plasma.properties.general import * from tardis.plasma.properties.helium_nlte import * from tardis.plasma.properties.ion_population import * -from tardis.plasma.properties.j_blues import * from tardis.plasma.properties.level_population import * from tardis.plasma.properties.nlte import * from tardis.plasma.properties.nlte_rate_equation_solver import * diff --git a/tardis/plasma/properties/continuum_processes.py b/tardis/plasma/properties/continuum_processes.py index 06121cc4e20..a95c7f2dea3 100644 --- a/tardis/plasma/properties/continuum_processes.py +++ b/tardis/plasma/properties/continuum_processes.py @@ -5,18 +5,17 @@ from numba import njit, prange from tardis import constants as const -from tardis.transport.montecarlo.estimators.util import ( - bound_free_estimator_array2frame, - integrate_array_by_blocks, -) -from tardis.transport.montecarlo import njit_dict from tardis.plasma.exceptions import PlasmaException from tardis.plasma.properties.base import ( Input, ProcessingPlasmaProperty, TransitionProbabilitiesProperty, ) -from tardis.plasma.properties.j_blues import JBluesDiluteBlackBody +from tardis.transport.montecarlo import njit_dict +from tardis.transport.montecarlo.estimators.util import ( + bound_free_estimator_array2frame, + integrate_array_by_blocks, +) __all__ = [ "SpontRecombRateCoeff", @@ -356,8 +355,7 @@ def calculate( photo_ion_norm_factor, photo_ion_block_references, photo_ion_index, - t_rad, - w, + dilute_planckian_radiation_field, level2continuum_idx, ): # Used for initialization @@ -366,8 +364,7 @@ def calculate( photo_ion_cross_sections, photo_ion_block_references, photo_ion_index, - t_rad, - w, + dilute_planckian_radiation_field, ) else: gamma_estimator = bound_free_estimator_array2frame( @@ -382,13 +379,12 @@ def calculate_from_dilute_bb( photo_ion_cross_sections, photo_ion_block_references, photo_ion_index, - t_rad, - w, + dilute_planckian_radiation_field, ): nu = photo_ion_cross_sections["nu"] x_sect = photo_ion_cross_sections["x_sect"] - j_nus = JBluesDiluteBlackBody.calculate( - photo_ion_cross_sections, nu, t_rad, w + j_nus = dilute_planckian_radiation_field.calculate_mean_intensity( + nu, ) gamma = j_nus.multiply(4.0 * np.pi * x_sect / nu / H, axis=0) gamma = integrate_array_by_blocks( @@ -416,8 +412,7 @@ def calculate( photo_ion_norm_factor, photo_ion_block_references, photo_ion_index, - t_rad, - w, + dilute_planckian_radiation_field, phi_ik, t_electrons, boltzmann_factor_photo_ion, @@ -429,8 +424,7 @@ def calculate( photo_ion_cross_sections, photo_ion_block_references, photo_ion_index, - t_rad, - w, + dilute_planckian_radiation_field, t_electrons, boltzmann_factor_photo_ion, ) @@ -447,16 +441,13 @@ def calculate_from_dilute_bb( photo_ion_cross_sections, photo_ion_block_references, photo_ion_index, - t_rad, - w, + dilute_planckian_radiation_field, t_electrons, boltzmann_factor_photo_ion, ): nu = photo_ion_cross_sections["nu"] x_sect = photo_ion_cross_sections["x_sect"] - j_nus = JBluesDiluteBlackBody.calculate( - photo_ion_cross_sections, nu, t_rad, w - ) + j_nus = dilute_planckian_radiation_field.calculate_mean_intensity(nu) j_nus *= boltzmann_factor_photo_ion alpha_stim = j_nus.multiply(4.0 * np.pi * x_sect / nu / H, axis=0) alpha_stim = integrate_array_by_blocks( diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index b63acb66559..cb6e46ef650 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -14,8 +14,6 @@ "SelectedAtoms", "ElectronTemperature", "BetaElectron", - "LuminosityInner", - "TimeSimulation", "ThermalGElectron", ] diff --git a/tardis/plasma/properties/j_blues.py b/tardis/plasma/properties/j_blues.py deleted file mode 100644 index 1f34f0a276b..00000000000 --- a/tardis/plasma/properties/j_blues.py +++ /dev/null @@ -1,94 +0,0 @@ -import numpy as np -import pandas as pd - -from tardis import constants as const -from tardis.plasma.properties.base import ( - DataFrameInput, - ProcessingPlasmaProperty, -) -from tardis.util.base import intensity_black_body - - -class JBluesBlackBody(ProcessingPlasmaProperty): - """ - Attributes - ---------- - lte_j_blues : Pandas DataFrame, dtype float - J_blue values as calculated in LTE. - """ - - outputs = ("j_blues",) - latex_name = "J^{b}_{lu(LTE)}" - - @staticmethod - def calculate(lines, nu, t_rad): - j_blues = intensity_black_body(nu.values[np.newaxis].T, t_rad) - j_blues = pd.DataFrame( - j_blues, index=lines.index, columns=np.arange(len(t_rad)) - ) - return j_blues - - -class JBluesDiluteBlackBody(ProcessingPlasmaProperty): - outputs = ("j_blues",) - latex_name = r"J_{\textrm{blue}}" - - @staticmethod - def calculate(lines, nu, t_rad, w): - j_blues = w * intensity_black_body(nu.values[np.newaxis].T, t_rad) - j_blues = pd.DataFrame( - j_blues, index=lines.index, columns=np.arange(len(t_rad)) - ) - return j_blues - - -class JBluesDetailed(ProcessingPlasmaProperty): - outputs = ("j_blues",) - latex_name = "J_{\\textrm{blue}}" - - def __init__(self, plasma_parent, w_epsilon): - super(JBluesDetailed, self).__init__(plasma_parent) - self.w_epsilon = w_epsilon - - def calculate( - self, lines, nu, t_rad, w, j_blues_norm_factor, j_blue_estimator - ): - # Used for initialization - if len(j_blue_estimator) == 0: - return JBluesDiluteBlackBody.calculate(lines, nu, t_rad, w) - else: - j_blues = pd.DataFrame( - j_blue_estimator * j_blues_norm_factor.value, - index=lines.index, - columns=np.arange(len(t_rad)), - ) - - for i in range(len(t_rad)): - zero_j_blues = j_blues[i] == 0.0 - j_blues[i][ - zero_j_blues - ] = self.w_epsilon * intensity_black_body( - nu[zero_j_blues].values, t_rad[i] - ) - return j_blues - - -class JBluesNormFactor(ProcessingPlasmaProperty): - - outputs = ("j_blues_norm_factor",) - latex = ( - r"\frac{c time_\textrm{simulation}}}{4\pi" - r"time_\textrm{simulation} volume}" - ) - - @staticmethod - def calculate(time_explosion, time_simulation, volume): - return ( - const.c.cgs - * time_explosion - / (4 * np.pi * time_simulation * volume) - ) - - -class JBluesEstimator(DataFrameInput): - outputs = ("j_blue_estimator",) diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index 31f37f1ad48..917c1ec4193 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -12,7 +12,7 @@ "NumberDensity", "IsotopeAbundance", "TimeExplosion", - "JBlueEstimator", + "JBlues", "LinkTRadTElectron", "HeliumTreatment", "Volume", @@ -96,15 +96,15 @@ class TimeExplosion(Input): latex_name = (r"t_{\textrm{exp}}",) -class JBlueEstimator(ArrayInput): +class JBlues(Input): """ Attributes ---------- j_blue_estimators : Numpy array """ - outputs = ("j_blue_estimators",) - latex_name = (r"J_{\textrm{blue-estimator}}",) + outputs = ("j_blues",) + latex_name = (r"J_{\textrm{blue}}",) class LinkTRadTElectron(Input): diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index dc72e8b217f..119423568d7 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -17,8 +17,7 @@ class PlasmaPropertyCollection(list): NumberDensity, TimeExplosion, AtomicData, - TRadiative, - DilutionFactor, + JBlues, LinkTRadTElectron, HeliumTreatment, ContinuumInteractionSpecies, @@ -28,6 +27,8 @@ class PlasmaPropertyCollection(list): ) basic_properties = PlasmaPropertyCollection( [ + TRadiative, + DilutionFactor, BetaRadiation, Levels, Lines, @@ -85,18 +86,10 @@ class PlasmaPropertyCollection(list): helium_numerical_nlte_properties = PlasmaPropertyCollection( [HeliumNumericalNLTE] ) -detailed_j_blues_inputs = PlasmaPropertyCollection( - [JBluesEstimator, RInner, TInner, Volume] -) -detailed_j_blues_properties = PlasmaPropertyCollection( - [JBluesDetailed, JBluesNormFactor, LuminosityInner, TimeSimulation] -) continuum_interaction_inputs = PlasmaPropertyCollection( [ StimRecombRateCoeffEstimator, PhotoIonRateCoeffEstimator, - RInner, - TInner, Volume, BfHeatingRateCoeffEstimator, StimRecombCoolingRateCoeffEstimator, @@ -114,9 +107,7 @@ class PlasmaPropertyCollection(list): ThermalGElectron, ThermalPhiSahaLTE, SahaFactor, - TimeSimulation, PhotoIonEstimatorsNormFactor, - LuminosityInner, StimRecombRateCoeff, CorrPhotoIonRateCoeff, SpontRecombCoolingRateCoeff, diff --git a/tardis/plasma/radiation_field/planck_rad_field.py b/tardis/plasma/radiation_field/planck_rad_field.py index bcd443081e2..a411062737c 100644 --- a/tardis/plasma/radiation_field/planck_rad_field.py +++ b/tardis/plasma/radiation_field/planck_rad_field.py @@ -72,3 +72,61 @@ def calculate_mean_intensity(self, nu: Union[u.Quantity, np.ndarray]): return self.dilution_factor * intensity_black_body( nu[np.newaxis].T, self.temperature ) + + def to_planckian_radiation_field(self): + return PlanckianRadiationField(self.temperature) + + +class PlanckianRadiationField: + """ + Represents the state of a dilute thermal radiation field. + + + Parameters + ---------- + temperature : u.Quantity + Radiative temperature in each shell + dilution_factor : numpy.ndarray + Dilution Factors in each shell + geometry: tardis.model.Radial1DModel + The geometry of the model that uses to constrains the active shells + """ + + def __init__( + self, + temperature: u.Quantity, + geometry=None, + ): + if ( + geometry is not None + ): # check the active shells only (this is used when setting up the radiation_field_state) + assert np.all( + temperature[ + geometry.v_inner_boundary_index : geometry.v_outer_boundary_index + ] + > 0 * u.K + ) + else: + assert np.all(temperature > 0 * u.K) + assert np.all(dilution_factor >= 0) + self.temperature = temperature + + @property + def temperature_kelvin(self): + return self.temperature.to(u.K).value + + def calculate_mean_intensity(self, nu: Union[u.Quantity, np.ndarray]): + """ + Calculate the intensity of the radiation field at a given frequency. + + Parameters + ---------- + nu : u.Quantity + Frequency at which the intensity is to be calculated + + Returns + ------- + intensity : u.Quantity + Intensity of the radiation field at the given frequency + """ + return intensity_black_body(nu[np.newaxis].T, self.temperature) diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index a048a59c254..caca28b4b70 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -5,14 +5,12 @@ from astropy import units as u from tardis.plasma import BasePlasma +from tardis.plasma.base import PlasmaSolverSettings from tardis.plasma.exceptions import PlasmaConfigError from tardis.plasma.properties import ( HeliumNumericalNLTE, IonNumberDensity, IonNumberDensityHeNLTE, - JBluesBlackBody, - JBluesDetailed, - JBluesDiluteBlackBody, LevelBoltzmannFactorNLTE, MarkovChainTransProbsCollector, RadiationFieldCorrection, @@ -30,8 +28,6 @@ basic_properties, continuum_interaction_inputs, continuum_interaction_properties, - detailed_j_blues_inputs, - detailed_j_blues_properties, dilute_lte_excitation_properties, helium_lte_properties, helium_nlte_properties, @@ -213,22 +209,37 @@ def assemble_plasma(config, simulation_state, atom_data=None): r_inner=simulation_state.r_inner.to(u.cm), t_inner=simulation_state.t_inner, ) - if config.plasma.radiative_rates_type == "blackbody": - plasma_modules.append(JBluesBlackBody) - elif config.plasma.radiative_rates_type == "dilute-blackbody": - plasma_modules.append(JBluesDiluteBlackBody) - elif config.plasma.radiative_rates_type == "detailed": - plasma_modules += detailed_j_blues_properties + detailed_j_blues_inputs - kwargs.update( - r_inner=simulation_state.r_inner.to(u.cm), - t_inner=simulation_state.t_inner, - volume=simulation_state.volume, - j_blue_estimator=None, + + ##### RADIATIVE RATES SETUP + + plasma_solver_settings = PlasmaSolverSettings( + RADIATIVE_RATES_TYPE=config.plasma.radiative_rates_type + ) + + if (plasma_solver_settings.RADIATIVE_RATES_TYPE == "dilute-blackbody") or ( + plasma_solver_settings.RADIATIVE_RATES_TYPE == "detailed" + ): + kwargs["j_blues"] = pd.DataFrame( + dilute_planckian_radiation_field.calculate_mean_intensity( + atom_data.lines["nu"].values + ), + index=atom_data.lines.index, + ) + + elif plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody": + planckian_rad_field = ( + dilute_planckian_radiation_field.to_planckian_radiation_field() + ) + kwargs["j_blues"] = pd.DataFrame( + planckian_rad_field.calculate_mean_intensity( + atom_data.lines["nu"].values + ), + index=atom_data.lines.index, ) - property_kwargs[JBluesDetailed] = {"w_epsilon": config.plasma.w_epsilon} + else: raise ValueError( - f"radiative_rates_type type unknown - {config.plasma.radiative_rates_type}" + f"radiative_rates_type type unknown - {plasma_solver_settings.RADIATIVE_RATES_TYPE}" ) if config.plasma.excitation == "lte": @@ -335,6 +346,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): plasma = BasePlasma( plasma_properties=plasma_modules, property_kwargs=property_kwargs, + plasma_solver_settings=plasma_solver_settings, **kwargs, ) diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 9f56307787c..fff263f76aa 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -358,21 +358,49 @@ def advance_state(self): # model.calculate_j_blues() equivalent # model.update_plasmas() equivalent # Bad test to see if this is a nlte run - if "nlte_data" in self.plasma.outputs_dict: - self.plasma.store_previous_properties() - update_properties = dict( - j_blues=estimated_radfield_properties.j_blues + if ( + self.plasma.plasma_solver_settings.RADIATIVE_RATES_TYPE + == "blackbody" + ): + j_blues = radiation_field.calculate_mean_intensity( + self.plasma.atomic_data.lines.nu.values + ) + update_properties["j_blues"] = pd.DataFrame( + j_blues, index=self.plasma.atomic_data.lines.index + ) + raise NotImplementedError( + "This is not right yet - calculate dilute mean intensity" ) + elif ( + self.plasma.plasma_solver_settings.RADIATIVE_RATES_TYPE + == "dilute-blackbody" + ): + j_blues = radiation_field.calculate_mean_intensity( + self.plasma.atomic_data.lines.nu.values + ) + update_properties["j_blues"] = pd.DataFrame( + j_blues, index=self.plasma.atomic_data.lines.index + ) + elif ( + self.plasma.plasma_solver_settings.RADIATIVE_RATES_TYPE + == "detailed" + ): + update_properties["j_blues"] = pd.DataFrame( + estimated_radfield_properties.j_blues, + index=self.plasma.atomic_data.lines.index, + ) + else: + raise ValueError( + f"radiative_rates_type type unknown - {self.plasma.plasma_solver_settings.RADIATIVE_RATES_TYPE}" + ) + + self.plasma.store_previous_properties() # A check to see if the plasma is set with JBluesDetailed, in which # case it needs some extra kwargs. estimators = self.transport.transport_state.radfield_mc_estimators - if "j_blue_estimator" in self.plasma.outputs_dict: - update_properties.update( - t_inner=next_t_inner, - j_blue_estimator=estimators.j_blue_estimator, - ) + if "gamma_estimator" in self.plasma.outputs_dict: update_properties.update( gamma_estimator=estimators.photo_ion_estimator, From 2d7e1c55de96fce027af53737956c8af03ccc6fb Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 22 Jun 2024 18:36:26 -0400 Subject: [PATCH 035/118] cleanup for the restructure --- tardis/plasma/base.py | 2 +- tardis/plasma/radiation_field/planck_rad_field.py | 1 - tardis/simulation/base.py | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tardis/plasma/base.py b/tardis/plasma/base.py index b5189f3798a..8a42c32dfdb 100644 --- a/tardis/plasma/base.py +++ b/tardis/plasma/base.py @@ -1,8 +1,8 @@ +import dataclasses import fileinput import logging import re import tempfile -import dataclasses import networkx as nx diff --git a/tardis/plasma/radiation_field/planck_rad_field.py b/tardis/plasma/radiation_field/planck_rad_field.py index a411062737c..69d656bd0d6 100644 --- a/tardis/plasma/radiation_field/planck_rad_field.py +++ b/tardis/plasma/radiation_field/planck_rad_field.py @@ -108,7 +108,6 @@ def __init__( ) else: assert np.all(temperature > 0 * u.K) - assert np.all(dilution_factor >= 0) self.temperature = temperature @property diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index fff263f76aa..141879e2302 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -362,15 +362,15 @@ def advance_state(self): self.plasma.plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody" ): - j_blues = radiation_field.calculate_mean_intensity( + planckian_radiation_field = ( + radiation_field.to_planckian_radiation_field() + ) + j_blues = planckian_radiation_field.calculate_mean_intensity( self.plasma.atomic_data.lines.nu.values ) update_properties["j_blues"] = pd.DataFrame( j_blues, index=self.plasma.atomic_data.lines.index ) - raise NotImplementedError( - "This is not right yet - calculate dilute mean intensity" - ) elif ( self.plasma.plasma_solver_settings.RADIATIVE_RATES_TYPE == "dilute-blackbody" From 818c6d438089b94fdc14d62fb6314351c4d20f29 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 23 Jul 2024 16:38:54 -0400 Subject: [PATCH 036/118] remove parse_input.py --- tardis/model/parse_input.py | 718 ------------------------------------ 1 file changed, 718 deletions(-) delete mode 100644 tardis/model/parse_input.py diff --git a/tardis/model/parse_input.py b/tardis/model/parse_input.py deleted file mode 100644 index 8da8080ec11..00000000000 --- a/tardis/model/parse_input.py +++ /dev/null @@ -1,718 +0,0 @@ -import logging -import os - -import numpy as np -import pandas as pd -from astropy import units as u - -from tardis import constants as const -from tardis.io.model.parse_density_configuration import ( - calculate_density_after_time, - parse_config_v1_density, - parse_csvy_density, -) -from tardis.io.model.readers.base import read_abundances_file, read_density_file -from tardis.io.model.readers.csvy import parse_csv_abundances -from tardis.io.model.readers.generic_readers import read_uniform_abundances -from tardis.model.geometry.radial1d import HomologousRadial1DGeometry -from tardis.model.matter.composition import Composition -from tardis.model.matter.decay import IsotopicMassFraction -from tardis.plasma.radiation_field.planck_rad_field import ( - DilutePlanckianRadiationField, -) -from tardis.transport.montecarlo.packet_source import ( - BlackBodySimpleSource, - BlackBodySimpleSourceRelativistic, -) -from tardis.util.base import quantity_linspace - -logger = logging.getLogger(__name__) - - -def parse_structure_config(config, time_explosion, enable_homology=True): - """ - Parse the structure configuration data. - - Parameters - ---------- - config : object - The configuration data. - time_explosion : float - The time of the explosion. - enable_homology : bool, optional - Whether to enable homology (default is True). - - Returns - ------- - electron_densities : object - The parsed electron densities. - temperature : object - The parsed temperature. - geometry : object - The parsed geometry. - density : object - The parsed density. - - Raises - ------ - NotImplementedError - If the structure configuration type is not supported. - - Notes - ----- - This function parses the structure configuration data and returns the parsed electron - densities, temperature, geometry, and density. The structure configuration can be of - type 'specific' or 'file'. If it is of type 'specific', the velocity and density are - parsed from the configuration. If it is of type 'file', the velocity and density are - read from a file. The parsed data is used to create a homologous radial 1D geometry object. - """ - electron_densities = None - temperature = None - structure_config = config.model.structure - if structure_config.type == "specific": - velocity = quantity_linspace( - structure_config.velocity.start, - structure_config.velocity.stop, - structure_config.velocity.num + 1, - ).cgs - density = parse_config_v1_density(config) - - elif structure_config.type == "file": - if os.path.isabs(structure_config.filename): - structure_config_fname = structure_config.filename - else: - structure_config_fname = os.path.join( - config.config_dirname, structure_config.filename - ) - - ( - time_0, - velocity, - density_0, - electron_densities, - temperature, - ) = read_density_file(structure_config_fname, structure_config.filetype) - density_0 = density_0.insert(0, 0) - - density = calculate_density_after_time( - density_0, time_0, time_explosion - ) - - else: - raise NotImplementedError - - # Note: This is the number of shells *without* taking in mind the - # v boundaries. - if len(density) == len(velocity): - logger.warning( - "Number of density points larger than number of shells. Assuming inner point irrelevant" - ) - density = density[1:] - geometry = HomologousRadial1DGeometry( - velocity[:-1], # v_inner - velocity[1:], # v_outer - v_inner_boundary=structure_config.get("v_inner_boundary", None), - v_outer_boundary=structure_config.get("v_outer_boundary", None), - time_explosion=time_explosion, - ) - return electron_densities, temperature, geometry, density - - -def parse_csvy_geometry( - config, csvy_model_config, csvy_model_data, time_explosion -): - """ - Parse the geometry data from a CSVY model. - - Parameters - ---------- - config : object - The configuration data. - csvy_model_config : object - The configuration data of the CSVY model. - csvy_model_data : object - The data of the CSVY model. - time_explosion : float - The time of the explosion. - - Returns - ------- - geometry : object - The parsed geometry. - - Raises - ------ - None. - - Notes - ----- - This function parses the geometry data from a CSVY model. It extracts the velocity - information from the CSVY model configuration or data. The parsed velocity data is - used to create a homologous radial 1D geometry object, which is returned. - """ - if hasattr(config, "model"): - if hasattr(config.model, "v_inner_boundary"): - v_boundary_inner = config.model.v_inner_boundary - else: - v_boundary_inner = None - - if hasattr(config.model, "v_outer_boundary"): - v_boundary_outer = config.model.v_outer_boundary - else: - v_boundary_outer = None - else: - v_boundary_inner = None - v_boundary_outer = None - - if hasattr(csvy_model_config, "velocity"): - velocity = quantity_linspace( - csvy_model_config.velocity.start, - csvy_model_config.velocity.stop, - csvy_model_config.velocity.num + 1, - ).cgs - else: - velocity_field_index = [ - field["name"] for field in csvy_model_config.datatype.fields - ].index("velocity") - velocity_unit = u.Unit( - csvy_model_config.datatype.fields[velocity_field_index]["unit"] - ) - velocity = csvy_model_data["velocity"].values * velocity_unit - velocity = velocity.to("cm/s") - - geometry = HomologousRadial1DGeometry( - velocity[:-1], # v_inner - velocity[1:], # v_outer - v_inner_boundary=v_boundary_inner, - v_outer_boundary=v_boundary_outer, - time_explosion=time_explosion, - ) - return geometry - - -def parse_abundance_config(config, geometry, time_explosion): - """ - Parse the abundance configuration data. - - Parameters - ---------- - config : object - The configuration data. - geometry : object - The geometry of the model. - time_explosion : float - The time of the explosion. - - Returns - ------- - nuclide_mass_fraction : object - The parsed nuclide mass fraction. - - raw_isotope_abundance : object - The parsed raw isotope abundance. This is the isotope abundance data before decay. - - Raises - ------ - None. - - Notes - ----- - This function parses the abundance configuration data and returns the parsed nuclide - mass fraction. The abundance configuration can be of type 'uniform' or 'file'. If it - is of type 'uniform', the abundance and isotope abundance are read using the - 'read_uniform_abundances' function. If it is of type 'file', the abundance and - isotope abundance are read from a file using the 'read_abundances_file' function. - The parsed data is then processed to replace NaN values with 0.0, remove rows with - zero sum, and normalize the data if necessary. The resulting nuclide mass fraction - is returned. - """ - abundances_section = config.model.abundances - isotope_abundance = pd.DataFrame() - - if abundances_section.type == "uniform": - abundance, isotope_abundance = read_uniform_abundances( - abundances_section, geometry.no_of_shells - ) - - elif abundances_section.type == "file": - if os.path.isabs(abundances_section.filename): - abundances_fname = abundances_section.filename - else: - abundances_fname = os.path.join( - config.config_dirname, abundances_section.filename - ) - - index, abundance, isotope_abundance = read_abundances_file( - abundances_fname, abundances_section.filetype - ) - - abundance = abundance.replace(np.nan, 0.0) - abundance = abundance[abundance.sum(axis=1) > 0] - - norm_factor = abundance.sum(axis=0) + isotope_abundance.sum(axis=0) - - if np.any(np.abs(norm_factor - 1) > 1e-12): - logger.warning( - "Abundances have not been normalized to 1. - normalizing" - ) - abundance /= norm_factor - isotope_abundance /= norm_factor - # The next line is if the abundances are given via dict - # and not gone through the schema validator - raw_isotope_abundance = isotope_abundance - model_isotope_time_0 = config.model.abundances.get( - "model_isotope_time_0", 0.0 * u.day - ) - isotope_abundance = IsotopicMassFraction( - isotope_abundance, time_0=model_isotope_time_0 - ).decay(time_explosion) - - nuclide_mass_fraction = convert_to_nuclide_mass_fraction( - isotope_abundance, abundance - ) - return nuclide_mass_fraction, raw_isotope_abundance - - -def convert_to_nuclide_mass_fraction(isotopic_mass_fraction, mass_fraction): - """ - Convert the abundance and isotope abundance data to nuclide mass fraction. - - Parameters - ---------- - isotope_abundance : pandas.DataFrame - The isotope abundance data. - abundance : pandas.DataFrame - The abundance data. - - Returns - ------- - nuclide_mass_fraction : pandas.DataFrame - The converted nuclide mass fraction. - - Raises - ------ - None. - - Notes - ----- - This function converts the abundance and isotope abundance data to nuclide mass fraction. - If the abundance data is not None, it is converted to nuclide mass fraction by mapping - the abundance index to nuclide indices using the 'convert_element2nuclide_index' function. - The resulting abundance data is then concatenated with the isotope abundance data to - obtain the final nuclide mass fraction. - """ - nuclide_mass_fraction = pd.DataFrame() - if mass_fraction is not None: - mass_fraction.index = Composition.convert_element2nuclide_index( - mass_fraction.index - ) - nuclide_mass_fraction = mass_fraction - else: - nuclide_mass_fraction = pd.DataFrame() - - if isotopic_mass_fraction is not None: - nuclide_mass_fraction = pd.concat( - [nuclide_mass_fraction, isotopic_mass_fraction] - ) - return nuclide_mass_fraction - - -def parse_csvy_composition( - atom_data, csvy_model_config, csvy_model_data, time_explosion, geometry -): - """ - Parse the composition data from a CSVY model. - - Parameters - ---------- - atom_data : object - The atom data used for parsing. - csvy_model_config : object - The configuration data of the CSVY model. - csvy_model_data : object - The data of the CSVY model. - time_explosion : float - The time of the explosion. - geometry : object - The geometry of the model. - - Returns - ------- - density : object - The parsed density data. - abundance : object - The parsed abundance data. - isotope_abundance : object - The parsed isotope abundance data. - elemental_mass : object - The elemental mass data. - - Raises - ------ - None. - - Notes - ----- - This function parses the composition data from a CSVY model. It calls the 'parse_density_csvy' - function to parse the density data, and the 'parse_abundance_csvy' function to parse the abundance - and isotope abundance data. The parsed data is returned as density, abundance, isotope_abundance, - and elemental_mass. - """ - density = parse_density_csvy( - csvy_model_config, csvy_model_data, time_explosion - ) - - nuclide_mass_fraction, raw_isotope_mass_fraction = parse_abundance_csvy( - csvy_model_config, csvy_model_data, geometry, time_explosion - ) - return Composition( - density, - nuclide_mass_fraction, - raw_isotope_mass_fraction, - atom_data.atom_data.mass.copy(), - ) - - -def parse_abundance_csvy( - csvy_model_config, csvy_model_data, geometry, time_explosion -): - """ - Parse the abundance data from a CSVY model. - - Parameters - ---------- - csvy_model_config : object - The configuration data of the CSVY model. - csvy_model_data : object - The data of the CSVY model. - geometry : object - The geometry of the model. - - Returns - ------- - abundance : pd.DataFrame - The parsed abundance data. - isotope_abundance : pandas.DataFrame - The parsed isotope abundance data. - - Raises - ------ - None. - - Notes - ----- - This function parses the abundance data from a CSVY model. If the CSVY model - configuration contains an 'abundance' attribute, it uses the 'read_uniform_abundances' - function to parse the abundance and isotope abundance data. Otherwise, it uses the - 'parse_csv_abundances' function to parse the data. The parsed data is then processed - to replace NaN values with 0.0, remove rows with zero sum, and normalize the data - if necessary. The resulting abundance and isotope abundance arrays are returned. - """ - if hasattr(csvy_model_config, "abundance"): - abundances_section = csvy_model_config.abundance - mass_fraction, isotope_mass_fraction = read_uniform_abundances( - abundances_section, geometry.no_of_shells - ) - else: - _, mass_fraction, isotope_mass_fraction = parse_csv_abundances( - csvy_model_data - ) - mass_fraction = mass_fraction.loc[:, 1:] - mass_fraction.columns = np.arange(mass_fraction.shape[1]) - isotope_mass_fraction = isotope_mass_fraction.loc[:, 1:] - isotope_mass_fraction.columns = np.arange( - isotope_mass_fraction.shape[1] - ) - - mass_fraction = mass_fraction.replace(np.nan, 0.0) - mass_fraction = mass_fraction[mass_fraction.sum(axis=1) > 0] - isotope_mass_fraction = isotope_mass_fraction.replace(np.nan, 0.0) - isotope_mass_fraction = isotope_mass_fraction[ - isotope_mass_fraction.sum(axis=1) > 0 - ] - norm_factor = mass_fraction.sum(axis=0) + isotope_mass_fraction.sum(axis=0) - - if np.any(np.abs(norm_factor - 1) > 1e-12): - logger.warning( - "Abundances have not been normalized to 1. - normalizing" - ) - mass_fraction /= norm_factor - isotope_mass_fraction /= norm_factor - - raw_isotope_mass_fraction = isotope_mass_fraction - isotope_mass_fraction = IsotopicMassFraction( - isotope_mass_fraction, time_0=csvy_model_config.model_isotope_time_0 - ).decay(time_explosion) - return ( - convert_to_nuclide_mass_fraction(isotope_mass_fraction, mass_fraction), - raw_isotope_mass_fraction, - ) - - -def parse_density_csvy(csvy_model_config, csvy_model_data, time_explosion): - """ - Parse the density data from a CSVY model. - - Parameters - ---------- - csvy_model_config : object - The configuration data of the CSVY model. - csvy_model_data : object - The data of the CSVY model. - time_explosion : float - The time of the explosion. - - Returns - ------- - density : object - The parsed density data. - - Raises - ------ - None. - - Notes - ----- - This function parses the density data from a CSVY model. If the CSVY model configuration - contains a 'density' attribute, it uses the 'parse_csvy_density' function to parse the - density data. Otherwise, it calculates the density data using the 'calculate_density_after_time' - function. The parsed density data is returned. - """ - if hasattr(csvy_model_config, "density"): - density = parse_csvy_density(csvy_model_config, time_explosion) - else: - time_0 = csvy_model_config.model_density_time_0 - density_field_index = [ - field["name"] for field in csvy_model_config.datatype.fields - ].index("density") - density_unit = u.Unit( - csvy_model_config.datatype.fields[density_field_index]["unit"] - ) - density_0 = csvy_model_data["density"].values * density_unit - # Removing as thee new architecture removes the 0th shell already - # density_0 = density_0.to("g/cm^3")[1:] - # density_0 = density_0.insert(0, 0) - density = calculate_density_after_time( - density_0, time_0, time_explosion - ) - - return density - - -def parse_radiation_field_state( - config, t_radiative, geometry, dilution_factor=None, packet_source=None -): - """ - Parses the radiation field state based on the provided configuration, radiative temperature, geometry, dilution factor, and packet source. - - Parameters - ---------- - config : Config - The configuration object. - t_radiative : {None, Quantity}, optional - The radiative temperature. If None, it is calculated based on the initial_t_rad value in the plasma configuration. - geometry : Geometry - The geometry object. - dilution_factor : {None, ndarray}, optional - The dilution factor. If None, it is calculated based on the geometry. - packet_source : {None, PacketSource}, optional - The packet source object. - - Returns - ------- - DiluteThermalRadiationFieldState - The parsed radiation field state. - - Raises - ------ - AssertionError - If the length of t_radiative or dilution_factor is not compatible with the geometry. - """ - if t_radiative is None: - if config.plasma.initial_t_rad > 0 * u.K: - t_radiative = ( - np.ones(geometry.no_of_shells) * config.plasma.initial_t_rad - ) - else: - t_radiative = calculate_t_radiative_from_t_inner( - geometry, packet_source - ) - - assert len(t_radiative) == geometry.no_of_shells - - if dilution_factor is None: - dilution_factor = calculate_geometric_dilution_factor(geometry) - - assert len(dilution_factor) == geometry.no_of_shells - - return DilutePlanckianRadiationField(t_radiative, dilution_factor, geometry) - - -def initialize_packet_source( - config, geometry, packet_source, legacy_mode_enabled -): - """ - Initialize the packet source based on config and geometry - - Parameters - ---------- - config : Config - The configuration object containing the supernova and plasma settings. - geometry : Geometry - The geometry object containing the inner radius information. - packet_source : BasePacketSource - The packet source object based on the configuration and geometry. - - Returns - ------- - packet_source : BasePacketSource - The packet source object based on the configuration and geometry. - - Raises - ------ - ValueError - If both t_inner and luminosity_requested are None. - """ - if config.montecarlo.enable_full_relativity: - packet_source = BlackBodySimpleSourceRelativistic( - base_seed=config.montecarlo.seed, - time_explosion=config.supernova.time_explosion, - legacy_mode_enabled=legacy_mode_enabled, - ) - else: - packet_source = BlackBodySimpleSource( - base_seed=config.montecarlo.seed, - legacy_mode_enabled=legacy_mode_enabled, - ) - - luminosity_requested = config.supernova.luminosity_requested - if config.plasma.initial_t_inner > 0.0 * u.K: - packet_source.radius = geometry.r_inner_active[0] - packet_source.temperature = config.plasma.initial_t_inner - - elif (config.plasma.initial_t_inner < 0.0 * u.K) and ( - luminosity_requested is not None - ): - packet_source.radius = geometry.r_inner_active[0] - packet_source.set_temperature_from_luminosity(luminosity_requested) - else: - raise ValueError( - "Both t_inner and luminosity_requested cannot be None." - ) - - return packet_source - - -def parse_packet_source(config, geometry, legacy_mode_enabled): - """ - Parse the packet source based on the given configuration and geometry. - - Parameters - ---------- - config : Config - The configuration object containing the supernova and plasma settings. - geometry : Geometry - The geometry object containing the inner radius information. - - Returns - ------- - packet_source : BlackBodySimpleSource - The packet source object based on the configuration and geometry. - """ - if config.montecarlo.enable_full_relativity: - packet_source = BlackBodySimpleSourceRelativistic( - base_seed=config.montecarlo.seed, - time_explosion=config.supernova.time_explosion, - legacy_mode_enabled=legacy_mode_enabled, - ) - else: - packet_source = BlackBodySimpleSource( - base_seed=config.montecarlo.seed, - legacy_mode_enabled=legacy_mode_enabled, - ) - - return initialize_packet_source( - config, geometry, packet_source, legacy_mode_enabled - ) - - -def parse_csvy_radiation_field_state( - config, csvy_model_config, csvy_model_data, geometry, packet_source -): - t_radiative = None - dilution_factor = None - - if hasattr(csvy_model_data, "columns") and ( - "t_rad" in csvy_model_data.columns - ): - t_rad_field_index = [ - field["name"] for field in csvy_model_config.datatype.fields - ].index("t_rad") - t_rad_unit = u.Unit( - csvy_model_config.datatype.fields[t_rad_field_index]["unit"] - ) - t_radiative = csvy_model_data["t_rad"].iloc[1:].values * t_rad_unit - - elif config.plasma.initial_t_rad > 0 * u.K: - t_radiative = ( - np.ones(geometry.no_of_shells) * config.plasma.initial_t_rad - ) - else: - t_radiative = calculate_t_radiative_from_t_inner( - geometry, packet_source - ) - - if np.any(t_radiative < 1000 * u.K): - logging.critical( - "Radiative temperature is too low in some of the shells, temperatures below 1000K " - f"(e.g., T_rad = {t_radiative[np.argmin(t_radiative)]} in shell {np.argmin(t_radiative)} in your model) " - "are not accurately handled by TARDIS.", - ) - - if hasattr(csvy_model_data, "columns") and ( - "dilution_factor" in csvy_model_data.columns - ): - dilution_factor = csvy_model_data["dilution_factor"].iloc[1:].values - else: - dilution_factor = calculate_geometric_dilution_factor(geometry) - - return DilutePlanckianRadiationField(t_radiative, dilution_factor, geometry) - - -def calculate_t_radiative_from_t_inner(geometry, packet_source): - """ - Calculates the radiative temperature based on the inner temperature and the geometry of the system. - - Parameters - ---------- - geometry : Geometry - The geometry object. - packet_source : PacketSource - The packet source object. - - Returns - ------- - Quantity - The calculated radiative temperature. - """ - lambda_wien_inner = const.b_wien / packet_source.temperature - t_radiative = const.b_wien / ( - lambda_wien_inner - * (1 + (geometry.v_middle - geometry.v_inner_boundary) / const.c) - ) - return t_radiative - - -def calculate_geometric_dilution_factor(geometry): - return 0.5 * ( - 1 - - np.sqrt( - 1 - - ( - geometry.r_inner[geometry.v_inner_boundary_index] ** 2 - / geometry.r_middle**2 - ) - .to(1) - .value - ) - ) From 3ec64f180acc69557559be9544ad73a47f613a81 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 23 Jul 2024 16:54:44 -0400 Subject: [PATCH 037/118] chore: Refactor radiation field configuration parsing and state creation Refactor the `parse_radiation_field_configuration.py` module to improve code organization and readability. Update the import statements to reflect the changes in the module structure. Replace the deprecated `DiluteBlackBodyRadiationFieldState` class with the new `DilutePlanckianRadiationField` class from the `tardis.plasma.radiation_field` module. This change ensures consistency and compatibility with the latest codebase. Also, update the `tardis/simulation/base.py` module to import the `DilutePlanckianRadiationField` class from the `tardis.plasma.radiation_field` module. This change ensures that the correct class is used for creating the radiation field in the simulation. --- .../io/model/parse_radiation_field_configuration.py | 13 +++---------- tardis/simulation/base.py | 5 +++-- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/tardis/io/model/parse_radiation_field_configuration.py b/tardis/io/model/parse_radiation_field_configuration.py index e12c319feb2..d311ad94923 100644 --- a/tardis/io/model/parse_radiation_field_configuration.py +++ b/tardis/io/model/parse_radiation_field_configuration.py @@ -1,5 +1,4 @@ import logging -import os import numpy as np from astropy import units as u @@ -8,9 +7,7 @@ from tardis.io.model.parse_geometry_configuration import ( parse_structure_from_config, ) -from tardis.model.radiation_field_state import ( - DiluteBlackBodyRadiationFieldState, -) +from tardis.plasma.radiation_field import DilutePlanckianRadiationField logger = logging.getLogger(__name__) @@ -67,9 +64,7 @@ def parse_radiation_field_state_from_config( assert len(dilution_factor) == geometry.no_of_shells - return DiluteBlackBodyRadiationFieldState( - temperature, dilution_factor, geometry - ) + return DilutePlanckianRadiationField(temperature, dilution_factor, geometry) def parse_radiation_field_state_from_csvy( @@ -132,9 +127,7 @@ def parse_radiation_field_state_from_csvy( else: dilution_factor = calculate_geometric_dilution_factor(geometry) - return DiluteBlackBodyRadiationFieldState( - t_radiative, dilution_factor, geometry - ) + return DilutePlanckianRadiationField(t_radiative, dilution_factor, geometry) def calculate_t_radiative_from_t_inner(geometry, packet_source): diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 48a401fe04b..e6933a4651e 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -17,14 +17,15 @@ ) from tardis.io.util import HDFWriterMixin from tardis.model import SimulationState +from tardis.plasma.radiation_field import DilutePlanckianRadiationField from tardis.plasma.standard_plasmas import assemble_plasma -from tardis.spectrum.formal_integral import FormalIntegrator from tardis.simulation.convergence import ConvergenceSolver +from tardis.spectrum.base import SpectrumSolver +from tardis.spectrum.formal_integral import FormalIntegrator from tardis.transport.montecarlo.base import MonteCarloTransportSolver from tardis.transport.montecarlo.configuration import montecarlo_globals from tardis.util.base import is_notebook from tardis.visualization import ConvergencePlots -from tardis.spectrum.base import SpectrumSolver # Adding logging support logger = logging.getLogger(__name__) From f1f0cddead4ae286c71c71d042e6d82e481b446e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 23 Jul 2024 16:56:03 -0400 Subject: [PATCH 038/118] revert astropy_helpers --- astropy_helpers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/astropy_helpers b/astropy_helpers index 9f82aac6c21..3b45ed3191c 160000 --- a/astropy_helpers +++ b/astropy_helpers @@ -1 +1 @@ -Subproject commit 9f82aac6c2141b425e2d639560f7260189d90b54 +Subproject commit 3b45ed3191ceb45c574db304ec0f33282d2e4a98 From 2a7d460e7c7d892cb5cf224895b888dd15152257 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 23 Jul 2024 16:56:52 -0400 Subject: [PATCH 039/118] remove astropy_helpers --- astropy_helpers | 1 - 1 file changed, 1 deletion(-) delete mode 160000 astropy_helpers diff --git a/astropy_helpers b/astropy_helpers deleted file mode 160000 index 3b45ed3191c..00000000000 --- a/astropy_helpers +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3b45ed3191ceb45c574db304ec0f33282d2e4a98 From dbc34acc25b3cf68ec79103b25692f16d5ca9b1f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 23 Jul 2024 17:16:25 -0400 Subject: [PATCH 040/118] removed test.txt --- test.txt | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 test.txt diff --git a/test.txt b/test.txt deleted file mode 100644 index 1f2a7fffe05..00000000000 --- a/test.txt +++ /dev/null @@ -1,2 +0,0 @@ -conda-linux-64.lock:https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.2-py312h1d6d2e6_1.conda#ae00b61f3000d2284d1f2584d4dfafa8 -conda-osx-64.lock:https://conda.anaconda.org/conda-forge/osx-64/pandas-2.2.2-py312h1171441_1.conda#240737937f1f046b0e03ecc11ac4ec98 From 251d1cbb32cf2bb1a2b9ebb884aa2de30eb0bca4 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 23 Jul 2024 17:38:26 -0400 Subject: [PATCH 041/118] blackified code --- tardis/plasma/properties/base.py | 1 + tardis/plasma/properties/plasma_input.py | 1 + tardis/simulation/base.py | 6 +++--- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tardis/plasma/properties/base.py b/tardis/plasma/properties/base.py index 1bac9e7658e..351b42a4d02 100644 --- a/tardis/plasma/properties/base.py +++ b/tardis/plasma/properties/base.py @@ -206,6 +206,7 @@ def _set_output_value(self, output, value): class ObjectInput(Input): input_object_map = {} # mapping output names from input object attributes + def set_value(self, value): for output in self.outputs: if output in self.input_object_map: diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index f9d70216dcc..06ff2a23c94 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -50,6 +50,7 @@ class DilutionFactor(ProcessingPlasmaProperty): outputs = ("w",) latex_name = ("W",) + def calculate(self, dilute_planckian_radiation_field): return dilute_planckian_radiation_field.dilution_factor diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index e6933a4651e..09fd0cf942d 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -400,9 +400,9 @@ def iterate(self, no_of_packets, no_of_virtual_packets=0): # Set up spectrum solver self.spectrum_solver.transport_state = transport_state - self.spectrum_solver._montecarlo_virtual_luminosity.value[:] = ( - v_packets_energy_hist - ) + self.spectrum_solver._montecarlo_virtual_luminosity.value[ + : + ] = v_packets_energy_hist output_energy = ( self.transport.transport_state.packet_collection.output_energies From d49a49c4c24bceaeba6781aa4050c3740ce2e275 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 23 Jul 2024 18:01:42 -0400 Subject: [PATCH 042/118] cleanup simulation from merges --- tardis/simulation/base.py | 8 ++++---- tardis/simulation/initialization.py | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index c587956849e..cc67a409b51 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -10,14 +10,14 @@ import tardis from tardis import constants as const from tardis.io.configuration.config_reader import ConfigurationError -from tardis.io.model.parse_packet_source_configuration import ( - initialize_packet_source, -) from tardis.io.util import HDFWriterMixin -from tardis.model import SimulationState from tardis.plasma.radiation_field import DilutePlanckianRadiationField from tardis.plasma.standard_plasmas import assemble_plasma from tardis.simulation.convergence import ConvergenceSolver +from tardis.simulation.initialization import ( + initialize_atom_data, + initialize_simulation_state, +) from tardis.spectrum.base import SpectrumSolver from tardis.spectrum.formal_integral import FormalIntegrator from tardis.transport.montecarlo.base import MonteCarloTransportSolver diff --git a/tardis/simulation/initialization.py b/tardis/simulation/initialization.py index e95ab558e69..e140d61b647 100644 --- a/tardis/simulation/initialization.py +++ b/tardis/simulation/initialization.py @@ -2,8 +2,10 @@ from pathlib import Path from tardis.io.atom_data.base import AtomData +from tardis.io.model.parse_packet_source_configuration import ( + initialize_packet_source, +) from tardis.model import SimulationState -from tardis.model.parse_input import initialize_packet_source logger = logging.getLogger(__name__) From adbaf7fa59f111f64bb2a26d324e955aa5cd8636 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 12:13:53 -0400 Subject: [PATCH 043/118] fix --- tardis/io/model/readers/csvy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/io/model/readers/csvy.py b/tardis/io/model/readers/csvy.py index 2c03272b5ec..7e6c1f1c73b 100644 --- a/tardis/io/model/readers/csvy.py +++ b/tardis/io/model/readers/csvy.py @@ -23,7 +23,7 @@ def load_csvy(fname): ------- yaml_dict : dictionary YAML part of the csvy file - data : pandas.dataframe + data : pandas.DataFrame csv data from csvy file """ with open(fname) as fh: From bb19fdb276844e5da5881f0afce009a4d8d3485c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 13:10:33 -0400 Subject: [PATCH 044/118] remove unused Input --- tardis/plasma/properties/base.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/tardis/plasma/properties/base.py b/tardis/plasma/properties/base.py index 351b42a4d02..c81038143fc 100644 --- a/tardis/plasma/properties/base.py +++ b/tardis/plasma/properties/base.py @@ -202,20 +202,6 @@ class ArrayInput(Input): def _set_output_value(self, output, value): setattr(self, output, np.array(value, copy=False)) - -class ObjectInput(Input): - - input_object_map = {} # mapping output names from input object attributes - - def set_value(self, value): - for output in self.outputs: - if output in self.input_object_map: - object_attr = self.input_object_map[output] - self._set_output_value(output, getattr(value, object_attr)) - else: - self._set_output_value(output, getattr(value, output)) - - class DataFrameInput(Input): def _set_output_value(self, output, value): setattr(self, output, np.array(pd.DataFrame(value), copy=False)) From aca109977e9154d1192583694fa4959c73896a5f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 13:46:20 -0400 Subject: [PATCH 045/118] added description --- tardis/plasma/properties/plasma_input.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index 06ff2a23c94..ac77507f978 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -27,6 +27,8 @@ class TRadiative(ProcessingPlasmaProperty): """ + Radiative temperature property. + Attributes ---------- t_rad : Numpy Array, dtype float @@ -41,6 +43,8 @@ def calculate(self, dilute_planckian_radiation_field): class DilutionFactor(ProcessingPlasmaProperty): """ + Dilution factor of the radiation field. + Attributes ---------- w : Numpy Array, dtype float between 0 and 1 From 54ffe6854c62d0233e57e0f7a5c6f0ddd1b036f6 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 14:03:42 -0400 Subject: [PATCH 046/118] blackiefied codebase --- tardis/plasma/properties/base.py | 1 + tardis/simulation/base.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tardis/plasma/properties/base.py b/tardis/plasma/properties/base.py index c81038143fc..9ed4f2f5229 100644 --- a/tardis/plasma/properties/base.py +++ b/tardis/plasma/properties/base.py @@ -202,6 +202,7 @@ class ArrayInput(Input): def _set_output_value(self, output, value): setattr(self, output, np.array(value, copy=False)) + class DataFrameInput(Input): def _set_output_value(self, output, value): setattr(self, output, np.array(pd.DataFrame(value), copy=False)) diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index cc67a409b51..906d7e0a99e 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -397,9 +397,9 @@ def iterate(self, no_of_packets, no_of_virtual_packets=0): # Set up spectrum solver self.spectrum_solver.transport_state = transport_state - self.spectrum_solver._montecarlo_virtual_luminosity.value[:] = ( - v_packets_energy_hist - ) + self.spectrum_solver._montecarlo_virtual_luminosity.value[ + : + ] = v_packets_energy_hist output_energy = ( self.transport.transport_state.packet_collection.output_energies From 2ea3122abc4ad0a291c92a69b15f52d30ddb3df4 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 16:26:39 -0400 Subject: [PATCH 047/118] cleanup of branch --- tardis/transport/montecarlo/base.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index cd5cf9bfe59..efb6ced9e9d 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -7,9 +7,9 @@ from tardis import constants as const from tardis.io.logger import montecarlo_tracking as mc_tracker from tardis.io.util import HDFWriterMixin -from tardis.transport.montecarlo.montecarlo_main_loop import ( - montecarlo_main_loop, - numba_config, +from tardis.transport.montecarlo.configuration.base import ( + MonteCarloConfiguration, + configuration_initialize, ) from tardis.transport.montecarlo.estimators.dilute_blackbody_properties import ( MCRadiationFieldPropertiesSolver, @@ -17,6 +17,9 @@ from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( initialize_estimator_statistics, ) +from tardis.transport.montecarlo.montecarlo_main_loop import ( + montecarlo_main_loop, +) from tardis.transport.montecarlo.montecarlo_transport_state import ( MonteCarloTransportState, ) From 9800fc821ee65b2fde77a09441c245c6b19e91e8 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 16:36:46 -0400 Subject: [PATCH 048/118] blackify code --- tardis/plasma/properties/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tardis/plasma/properties/base.py b/tardis/plasma/properties/base.py index c81038143fc..9ed4f2f5229 100644 --- a/tardis/plasma/properties/base.py +++ b/tardis/plasma/properties/base.py @@ -202,6 +202,7 @@ class ArrayInput(Input): def _set_output_value(self, output, value): setattr(self, output, np.array(value, copy=False)) + class DataFrameInput(Input): def _set_output_value(self, output, value): setattr(self, output, np.array(pd.DataFrame(value), copy=False)) From d19e423e7e4eb46b96f199c636168a1055d8433b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 16:43:15 -0400 Subject: [PATCH 049/118] chore: Refactor atom data parsing and simulation state initialization --- tardis/io/model/parse_atom_data.py | 52 ++++++++++++++++++ .../model/parse_simulation_state.py} | 55 +------------------ tardis/simulation/base.py | 10 ++-- 3 files changed, 58 insertions(+), 59 deletions(-) create mode 100644 tardis/io/model/parse_atom_data.py rename tardis/{simulation/initialization.py => io/model/parse_simulation_state.py} (50%) diff --git a/tardis/io/model/parse_atom_data.py b/tardis/io/model/parse_atom_data.py new file mode 100644 index 00000000000..ccd25805df5 --- /dev/null +++ b/tardis/io/model/parse_atom_data.py @@ -0,0 +1,52 @@ +from tardis.io.atom_data.base import AtomData +from tardis.simulation.initialization import logger + + +from pathlib import Path + + +def parse_atom_data(config, atom_data=None): + """ + Parse atom data for the simulation. + + Parameters + ---------- + config : object + The configuration object containing information about the atom data. + atom_data : object, optional + Existing atom data to be used, if provided. + + Returns + ------- + object + The initialized atom data. + + Raises + ------ + ValueError + If no atom_data option is found in the configuration. + """ + if atom_data is None: + if "atom_data" in config: + if Path(config.atom_data).is_absolute(): + atom_data_fname = Path(config.atom_data) + else: + atom_data_fname = Path(config.config_dirname) / config.atom_data + + else: + raise ValueError("No atom_data option found in the configuration.") + + logger.info(f"\n\tReading Atomic Data from {atom_data_fname}") + + try: + atom_data = AtomData.from_hdf(atom_data_fname) + except TypeError as e: + print( + e, + "Error might be from the use of an old-format of the atomic database, \n" + "please see https://github.com/tardis-sn/tardis-refdata/tree/master/atom_data" + " for the most recent version.", + ) + raise + + return atom_data diff --git a/tardis/simulation/initialization.py b/tardis/io/model/parse_simulation_state.py similarity index 50% rename from tardis/simulation/initialization.py rename to tardis/io/model/parse_simulation_state.py index e140d61b647..ff9773bd126 100644 --- a/tardis/simulation/initialization.py +++ b/tardis/io/model/parse_simulation_state.py @@ -1,63 +1,10 @@ -import logging -from pathlib import Path - -from tardis.io.atom_data.base import AtomData from tardis.io.model.parse_packet_source_configuration import ( initialize_packet_source, ) from tardis.model import SimulationState -logger = logging.getLogger(__name__) - - -def initialize_atom_data(config, atom_data=None): - """ - Initialize atom data for the simulation. - - Parameters - ---------- - config : object - The configuration object containing information about the atom data. - atom_data : object, optional - Existing atom data to be used, if provided. - - Returns - ------- - object - The initialized atom data. - - Raises - ------ - ValueError - If no atom_data option is found in the configuration. - """ - if atom_data is None: - if "atom_data" in config: - if Path(config.atom_data).is_absolute(): - atom_data_fname = Path(config.atom_data) - else: - atom_data_fname = Path(config.config_dirname) / config.atom_data - - else: - raise ValueError("No atom_data option found in the configuration.") - - logger.info(f"\n\tReading Atomic Data from {atom_data_fname}") - - try: - atom_data = AtomData.from_hdf(atom_data_fname) - except TypeError as e: - print( - e, - "Error might be from the use of an old-format of the atomic database, \n" - "please see https://github.com/tardis-sn/tardis-refdata/tree/master/atom_data" - " for the most recent version.", - ) - raise - - return atom_data - -def initialize_simulation_state( +def parse_simulation_state( config, packet_source, legacy_mode_enabled, kwargs, atom_data ): """ diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 906d7e0a99e..8ce3047f2af 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -14,10 +14,10 @@ from tardis.plasma.radiation_field import DilutePlanckianRadiationField from tardis.plasma.standard_plasmas import assemble_plasma from tardis.simulation.convergence import ConvergenceSolver -from tardis.simulation.initialization import ( - initialize_atom_data, - initialize_simulation_state, +from tardis.io.model.parse_simulation_state import ( + parse_simulation_state, ) +from tardis.io.model.parse_atom_data import parse_atom_data from tardis.spectrum.base import SpectrumSolver from tardis.spectrum.formal_integral import FormalIntegrator from tardis.transport.montecarlo.base import MonteCarloTransportSolver @@ -673,8 +673,8 @@ def from_config( # Allow overriding some config structures. This is useful in some # unit tests, and could be extended in all the from_config classmethods. - atom_data = initialize_atom_data(config, atom_data=atom_data) - simulation_state = initialize_simulation_state( + atom_data = parse_atom_data(config, atom_data=atom_data) + simulation_state = parse_simulation_state( config, packet_source, legacy_mode_enabled, kwargs, atom_data ) if plasma is None: From b3bf356d241506573c8f7e4a3c10f733c5972fe3 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 16:54:57 -0400 Subject: [PATCH 050/118] restructure logger --- tardis/io/model/parse_atom_data.py | 8 ++++---- tardis/io/model/parse_packet_source_configuration.py | 6 +++--- tardis/io/model/parse_simulation_state.py | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tardis/io/model/parse_atom_data.py b/tardis/io/model/parse_atom_data.py index ccd25805df5..5cfe30197d7 100644 --- a/tardis/io/model/parse_atom_data.py +++ b/tardis/io/model/parse_atom_data.py @@ -1,9 +1,9 @@ -from tardis.io.atom_data.base import AtomData -from tardis.simulation.initialization import logger - - +import logging from pathlib import Path +from tardis.io.atom_data.base import AtomData + +logger = logging.getLogger(__name__) def parse_atom_data(config, atom_data=None): """ diff --git a/tardis/io/model/parse_packet_source_configuration.py b/tardis/io/model/parse_packet_source_configuration.py index 90aab02e556..2e711001b76 100644 --- a/tardis/io/model/parse_packet_source_configuration.py +++ b/tardis/io/model/parse_packet_source_configuration.py @@ -46,7 +46,7 @@ def initialize_packet_source(packet_source, config, geometry): return packet_source -def parse_packet_source_from_config(config, geometry, legacy_mode_enabled): +def parse_packet_source_from_config(config, geometry, enable_legacy_mode): """ Parse the packet source based on the given configuration and geometry. @@ -66,12 +66,12 @@ def parse_packet_source_from_config(config, geometry, legacy_mode_enabled): packet_source = BlackBodySimpleSourceRelativistic( base_seed=config.montecarlo.seed, time_explosion=config.supernova.time_explosion, - legacy_mode_enabled=legacy_mode_enabled, + legacy_mode_enabled=enable_legacy_mode, ) else: packet_source = BlackBodySimpleSource( base_seed=config.montecarlo.seed, - legacy_mode_enabled=legacy_mode_enabled, + legacy_mode_enabled=enable_legacy_mode, ) return initialize_packet_source(packet_source, config, geometry) diff --git a/tardis/io/model/parse_simulation_state.py b/tardis/io/model/parse_simulation_state.py index ff9773bd126..ffd5266a017 100644 --- a/tardis/io/model/parse_simulation_state.py +++ b/tardis/io/model/parse_simulation_state.py @@ -5,7 +5,7 @@ def parse_simulation_state( - config, packet_source, legacy_mode_enabled, kwargs, atom_data + config, packet_source, enable_legacy_mode, kwargs, atom_data ): """ Initialize the simulation state. @@ -35,20 +35,20 @@ def parse_simulation_state( simulation_state = SimulationState.from_csvy( config, atom_data=atom_data, - legacy_mode_enabled=legacy_mode_enabled, + legacy_mode_enabled=enable_legacy_mode, ) else: simulation_state = SimulationState.from_config( config, atom_data=atom_data, - legacy_mode_enabled=legacy_mode_enabled, + legacy_mode_enabled=enable_legacy_mode, ) if packet_source is not None: simulation_state.packet_source = initialize_packet_source( config, simulation_state.geometry, packet_source, - legacy_mode_enabled, + enable_legacy_mode, ) return simulation_state From 734ffc80e395e566c012bcbaf596b089e61e0c92 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 17:11:50 -0400 Subject: [PATCH 051/118] working on continuum radfield properties --- .../montecarlo/estimators/continuum_radfield_properties.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py index da742cc1ee3..4112723dade 100644 --- a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py +++ b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py @@ -6,6 +6,7 @@ import tardis.constants as const from tardis.io.atom_data import AtomData +from tardis.plasma.properties.continuum_processes import PhotoIonBoltzmannFactor from tardis.plasma.radiation_field.planck_rad_field import ( DilutePlanckianRadiationField, ) @@ -16,7 +17,6 @@ bound_free_estimator_array2frame, integrate_array_by_blocks, ) -from tardis.plasma.properties.continuum_processes import PhotoIonBoltzmannFactor H = const.h.cgs.value From d69533a4806389a057f8f91112b74b705d677a53 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 17:58:18 -0400 Subject: [PATCH 052/118] Refactor continuum processes module structure --- tardis/io/atom_data/base.py | 2 +- tardis/opacities/continuum/__init__.py | 0 tardis/opacities/continuum/bound_free.py | 36 ++ .../continuum_processes/__init__.py | 0 .../collisional_ion_trans_prob.py | 117 ++++++ .../macro_atom/transition_probabilities.py | 2 +- tardis/opacities/opacities.py | 6 +- tardis/plasma/properties/__init__.py | 2 +- tardis/plasma/properties/atomic.py | 2 +- .../continuum_processes/__init__.py | 0 .../continuum_processes/fast_array_util.py | 66 ++++ .../photo_ion_rate_coeff.py | 80 ++++ .../rates.py} | 364 +----------------- .../stim_recomb_rate_coeff.py | 85 ++++ tardis/plasma/properties/ion_population.py | 4 +- tardis/plasma/properties/util/__init__.py | 3 - .../util/integrate_array_by_blocks.py | 35 -- .../continuum_radfield_properties.py | 19 +- .../tests/test_continuum_property_solver.py | 8 +- 19 files changed, 416 insertions(+), 415 deletions(-) create mode 100644 tardis/opacities/continuum/__init__.py create mode 100644 tardis/opacities/continuum/bound_free.py create mode 100644 tardis/opacities/macro_atom/continuum_processes/__init__.py create mode 100644 tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py create mode 100644 tardis/plasma/properties/continuum_processes/__init__.py create mode 100644 tardis/plasma/properties/continuum_processes/fast_array_util.py create mode 100644 tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py rename tardis/plasma/properties/{continuum_processes.py => continuum_processes/rates.py} (69%) create mode 100644 tardis/plasma/properties/continuum_processes/stim_recomb_rate_coeff.py delete mode 100644 tardis/plasma/properties/util/__init__.py delete mode 100644 tardis/plasma/properties/util/integrate_array_by_blocks.py diff --git a/tardis/io/atom_data/base.py b/tardis/io/atom_data/base.py index 90628b0ec72..7011f995841 100644 --- a/tardis/io/atom_data/base.py +++ b/tardis/io/atom_data/base.py @@ -9,7 +9,7 @@ from tardis import constants as const from tardis.io.atom_data.util import resolve_atom_data_fname -from tardis.plasma.properties.continuum_processes import ( +from tardis.plasma.properties.continuum_proc.continuum_processes import ( get_ground_state_multi_index, ) diff --git a/tardis/opacities/continuum/__init__.py b/tardis/opacities/continuum/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/opacities/continuum/bound_free.py b/tardis/opacities/continuum/bound_free.py new file mode 100644 index 00000000000..e103f942ade --- /dev/null +++ b/tardis/opacities/continuum/bound_free.py @@ -0,0 +1,36 @@ +from tardis.plasma.exceptions import PlasmaException +from tardis.plasma.properties.base import ProcessingPlasmaProperty + + +class BoundFreeOpacity(ProcessingPlasmaProperty): + """ + Attributes + ---------- + chi_bf : pandas.DataFrame, dtype float + Bound-free opacity corrected for stimulated emission. + """ + + outputs = ("chi_bf",) + latex_name = (r"\chi^{\textrm{bf}}",) + + def calculate( + self, + photo_ion_cross_sections, + t_electrons, + phi_ik, + level_number_density, + lte_level_number_density, + boltzmann_factor_photo_ion, + ): + cross_section = photo_ion_cross_sections["x_sect"].values + + n_i = level_number_density.loc[photo_ion_cross_sections.index] + lte_n_i = lte_level_number_density.loc[photo_ion_cross_sections.index] + chi_bf = (n_i - lte_n_i * boltzmann_factor_photo_ion).multiply( + cross_section, axis=0 + ) + + num_neg_elements = (chi_bf < 0).sum().sum() + if num_neg_elements: + raise PlasmaException("Negative values in bound-free opacity.") + return chi_bf diff --git a/tardis/opacities/macro_atom/continuum_processes/__init__.py b/tardis/opacities/macro_atom/continuum_processes/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py b/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py new file mode 100644 index 00000000000..9747faa988b --- /dev/null +++ b/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py @@ -0,0 +1,117 @@ +from tardis.plasma.properties.base import ( + ProcessingPlasmaProperty, + TransitionProbabilitiesProperty, +) +from tardis.plasma.properties.continuum_processes.rates import ( + H, + IndexSetterMixin, +) + + +import pandas as pd + + +class RawCollIonTransProbs(TransitionProbabilitiesProperty, IndexSetterMixin): + """ + Attributes + ---------- + p_coll_ion : pandas.DataFrame, dtype float + The unnormalized transition probabilities for + collisional ionization. + p_coll_recomb : pandas.DataFrame, dtype float + The unnormalized transition probabilities for + collisional recombination. + cool_rate_coll_ion : pandas.DataFrame, dtype float + The collisional ionization cooling rates of the electron gas. + """ + + outputs = ("p_coll_ion", "p_coll_recomb", "cool_rate_coll_ion") + transition_probabilities_outputs = ( + "p_coll_ion", + "p_coll_recomb", + "cool_rate_coll_ion", + ) + latex_name = ( + r"p^{\textrm{coll ion}}", + r"p^{\textrm{coll recomb}}", + r"C^{\textrm{ion}}", + ) + + def calculate( + self, + coll_ion_coeff, + coll_recomb_coeff, + nu_i, + photo_ion_idx, + electron_densities, + energy_i, + level_number_density, + ): + p_coll_ion = coll_ion_coeff.multiply(energy_i, axis=0) + p_coll_ion = p_coll_ion.multiply(electron_densities, axis=1) + p_coll_ion = self.set_index(p_coll_ion, photo_ion_idx, reverse=False) + + coll_recomb_rate = coll_recomb_coeff.multiply( + electron_densities, axis=1 + ) # The full rate is obtained from this by multiplying by the + # electron density and ion number density. + p_recomb_deactivation = coll_recomb_rate.multiply(nu_i, axis=0) * H + p_recomb_deactivation = self.set_index( + p_recomb_deactivation, photo_ion_idx, transition_type=-1 + ) + p_recomb_deactivation = p_recomb_deactivation.groupby(level=[0]).sum() + index_dd = pd.MultiIndex.from_product( + [p_recomb_deactivation.index.values, ["k"], [0]], + names=list(photo_ion_idx.columns) + ["transition_type"], + ) + p_recomb_deactivation = p_recomb_deactivation.set_index(index_dd) + + p_recomb_internal = coll_recomb_rate.multiply(energy_i, axis=0) + p_recomb_internal = self.set_index( + p_recomb_internal, photo_ion_idx, transition_type=0 + ) + p_coll_recomb = pd.concat([p_recomb_deactivation, p_recomb_internal]) + + cool_rate_coll_ion = (coll_ion_coeff * electron_densities).multiply( + nu_i * H, axis=0 + ) + level_lower_index = coll_ion_coeff.index + cool_rate_coll_ion = ( + cool_rate_coll_ion + * level_number_density.loc[level_lower_index].values + ) + cool_rate_coll_ion = self.set_index( + cool_rate_coll_ion, photo_ion_idx, reverse=False + ) + cool_rate_coll_ion = cool_rate_coll_ion.groupby( + level="destination_level_idx" + ).sum() + ion_cool_index = pd.MultiIndex.from_product( + [["k"], cool_rate_coll_ion.index.values, [0]], + names=list(photo_ion_idx.columns) + ["transition_type"], + ) + cool_rate_coll_ion = cool_rate_coll_ion.set_index(ion_cool_index) + return p_coll_ion, p_coll_recomb, cool_rate_coll_ion + + +class CollRecombRateCoeff(ProcessingPlasmaProperty): + """ + Attributes + ---------- + coll_recomb_coeff : pandas.DataFrame, dtype float + The rate coefficient for collisional recombination. + Multiply with the electron density squared and the ion number density + to obtain the total rate. + + Notes + ----- + The collisional recombination rate coefficient is calculated from the + collisional ionization rate coefficient based on the requirement of detailed + balance. + """ + + outputs = ("coll_recomb_coeff",) + latex_name = (r"c_{\kappa\textrm{i,}}",) + + def calculate(self, phi_ik, coll_ion_coeff): + return coll_ion_coeff.multiply(phi_ik.loc[coll_ion_coeff.index]) diff --git a/tardis/opacities/macro_atom/transition_probabilities.py b/tardis/opacities/macro_atom/transition_probabilities.py index 6facd5ee70a..c22d337a6fb 100644 --- a/tardis/opacities/macro_atom/transition_probabilities.py +++ b/tardis/opacities/macro_atom/transition_probabilities.py @@ -5,7 +5,7 @@ from scipy import sparse as sp from tardis.plasma.properties.base import ProcessingPlasmaProperty -from tardis.plasma.properties.continuum_processes import ( +from tardis.plasma.properties.continuum_proc.continuum_processes import ( get_ground_state_multi_index, ) from tardis.transport.montecarlo.macro_atom import ( diff --git a/tardis/opacities/opacities.py b/tardis/opacities/opacities.py index dd7aeae83d4..71f193b9389 100644 --- a/tardis/opacities/opacities.py +++ b/tardis/opacities/opacities.py @@ -278,7 +278,8 @@ def compton_opacity_partial(energy, fraction): @njit(**njit_dict_no_parallel) def compton_opacity_calculation(energy, electron_density): - """Calculate the Compton scattering opacity for a given energy + """ + Calculate the Compton scattering opacity for a given energy (Rybicki & Lightman, 1979) $ @@ -364,7 +365,8 @@ def photoabsorption_opacity_calculation( def photoabsorption_opacity_calculation_kasen( energy, number_density, proton_count ): - """Calculates photoabsorption opacity for a given energy + """ + Calculates photoabsorption opacity for a given energy Approximate treatment from Kasen et al. (2006) Parameters diff --git a/tardis/plasma/properties/__init__.py b/tardis/plasma/properties/__init__.py index 3363cbd9bcd..d15c03afc74 100644 --- a/tardis/plasma/properties/__init__.py +++ b/tardis/plasma/properties/__init__.py @@ -7,7 +7,7 @@ from tardis.opacities.macro_atom.transition_probabilities import * from tardis.plasma.properties.atomic import * -from tardis.plasma.properties.continuum_processes import * +from tardis.plasma.properties.continuum_proc.continuum_processes import * from tardis.plasma.properties.general import * from tardis.plasma.properties.helium_nlte import * from tardis.plasma.properties.ion_population import * diff --git a/tardis/plasma/properties/atomic.py b/tardis/plasma/properties/atomic.py index 72fd4b6b472..5dcc206c784 100644 --- a/tardis/plasma/properties/atomic.py +++ b/tardis/plasma/properties/atomic.py @@ -15,7 +15,7 @@ HiddenPlasmaProperty, ProcessingPlasmaProperty, ) -from tardis.plasma.properties.continuum_processes import ( +from tardis.plasma.properties.continuum_proc.continuum_processes import ( A0, BETA_COLL, K_B, diff --git a/tardis/plasma/properties/continuum_processes/__init__.py b/tardis/plasma/properties/continuum_processes/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/plasma/properties/continuum_processes/fast_array_util.py b/tardis/plasma/properties/continuum_processes/fast_array_util.py new file mode 100644 index 00000000000..8e48a0dda80 --- /dev/null +++ b/tardis/plasma/properties/continuum_processes/fast_array_util.py @@ -0,0 +1,66 @@ +# It is currently not possible to use scipy.integrate.cumulative_trapezoid in +# numba. So here is my own implementation. +from tardis.transport.montecarlo import njit_dict + + +import numpy as np +from numba import njit, prange + + +@njit(**njit_dict) +def numba_cumulative_trapezoid(f, x): + """ + Cumulatively integrate f(x) using the composite trapezoidal rule. + + Parameters + ---------- + f : numpy.ndarray, dtype float + Input array to integrate. + x : numpy.ndarray, dtype float + The coordinate to integrate along. + + Returns + ------- + numpy.ndarray, dtype float + The result of cumulative integration of f along x + """ + integ = (np.diff(x) * (f[1:] + f[:-1]) / 2.0).cumsum() + return integ / integ[-1] + + +@njit(**njit_dict) +def cumulative_integrate_array_by_blocks(f, x, block_references): + """ + Cumulatively integrate a function over blocks. + + This function cumulatively integrates a function `f` defined at + locations `x` over blocks given in `block_references`. + + Parameters + ---------- + f : numpy.ndarray, dtype float + Input array to integrate. Shape is (N_freq, N_shells), where + N_freq is the number of frequency values and N_shells is the number + of computational shells. + x : numpy.ndarray, dtype float + The sample points corresponding to the `f` values. Shape is (N_freq,). + block_references : numpy.ndarray, dtype int + The start indices of the blocks to be integrated. Shape is (N_blocks,). + + Returns + ------- + numpy.ndarray, dtype float + Array with cumulatively integrated values. Shape is (N_freq, N_shells) + same as f. + """ + n_rows = len(block_references) - 1 + integrated = np.zeros_like(f) + for i in prange(f.shape[1]): # columns + # TODO: Avoid this loop through vectorization of cumulative_trapezoid + for j in prange(n_rows): # rows + start = block_references[j] + stop = block_references[j + 1] + integrated[start + 1 : stop, i] = numba_cumulative_trapezoid( + f[start:stop, i], x[start:stop] + ) + return integrated diff --git a/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py b/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py new file mode 100644 index 00000000000..1f4c719cb39 --- /dev/null +++ b/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py @@ -0,0 +1,80 @@ +import numpy as np +import pandas as pd + +from tardis.plasma.properties.base import Input +from tardis.plasma.properties.continuum_processes.rates import H +from tardis.transport.montecarlo.estimators.util import ( + ProcessingPlasmaProperty, + bound_free_estimator_array2frame, + integrate_array_by_blocks, +) + + +class PhotoIonRateCoeffEstimator(Input): + """ + Attributes + ---------- + gamma_estimator : pandas.DataFrame, dtype float + Unnormalized MC estimator for the rate coefficient for radiative + ionization. + """ + + outputs = ("gamma_estimator",) + latex_name = (r"\gamma_\textrm{estim}",) + + +class PhotoIonRateCoeff(ProcessingPlasmaProperty): + """ + Attributes + ---------- + gamma : pandas.DataFrame, dtype float + The rate coefficient for radiative ionization. + """ + + outputs = ("gamma",) + latex_name = (r"\gamma",) + + def calculate( + self, + photo_ion_cross_sections, + gamma_estimator, + photo_ion_norm_factor, + photo_ion_block_references, + photo_ion_index, + dilute_planckian_radiation_field, + level2continuum_idx, + ): + # Used for initialization + if gamma_estimator is None: + gamma = self.calculate_from_dilute_bb( + photo_ion_cross_sections, + photo_ion_block_references, + photo_ion_index, + dilute_planckian_radiation_field, + ) + else: + gamma_estimator = bound_free_estimator_array2frame( + gamma_estimator, level2continuum_idx + ) + gamma = gamma_estimator * photo_ion_norm_factor.value + + return gamma + + @staticmethod + def calculate_from_dilute_bb( + photo_ion_cross_sections, + photo_ion_block_references, + photo_ion_index, + dilute_planckian_radiation_field, + ): + nu = photo_ion_cross_sections["nu"] + x_sect = photo_ion_cross_sections["x_sect"] + j_nus = dilute_planckian_radiation_field.calculate_mean_intensity( + nu, + ) + gamma = j_nus.multiply(4.0 * np.pi * x_sect / nu / H, axis=0) + gamma = integrate_array_by_blocks( + gamma.values, nu.values, photo_ion_block_references + ) + gamma = pd.DataFrame(gamma, index=photo_ion_index) + return gamma diff --git a/tardis/plasma/properties/continuum_processes.py b/tardis/plasma/properties/continuum_processes/rates.py similarity index 69% rename from tardis/plasma/properties/continuum_processes.py rename to tardis/plasma/properties/continuum_processes/rates.py index a95c7f2dea3..9c9c6ef96ba 100644 --- a/tardis/plasma/properties/continuum_processes.py +++ b/tardis/plasma/properties/continuum_processes/rates.py @@ -2,7 +2,7 @@ import numpy as np import pandas as pd -from numba import njit, prange +from numba import njit from tardis import constants as const from tardis.plasma.exceptions import PlasmaException @@ -11,19 +11,15 @@ ProcessingPlasmaProperty, TransitionProbabilitiesProperty, ) -from tardis.transport.montecarlo import njit_dict +from tardis.plasma.properties.continuum_processes.fast_array_util import ( + cumulative_integrate_array_by_blocks, + numba_cumulative_trapezoid, +) from tardis.transport.montecarlo.estimators.util import ( - bound_free_estimator_array2frame, integrate_array_by_blocks, ) __all__ = [ - "SpontRecombRateCoeff", - "StimRecombRateCoeff", - "PhotoIonRateCoeff", - "PhotoIonEstimatorsNormFactor", - "PhotoIonRateCoeffEstimator", - "StimRecombRateCoeffEstimator", "CorrPhotoIonRateCoeff", "BfHeatingRateCoeffEstimator", "StimRecombCoolingRateCoeffEstimator", @@ -36,7 +32,6 @@ "AdiabaticCoolingRate", "FreeFreeCoolingRate", "FreeBoundCoolingRate", - "BoundFreeOpacity", "LevelNumberDensityLTE", "PhotoIonBoltzmannFactor", "FreeBoundEmissionCDF", @@ -44,8 +39,6 @@ "TwoPhotonEmissionCDF", "TwoPhotonFrequencySampler", "CollIonRateCoeffSeaton", - "CollRecombRateCoeff", - "RawCollIonTransProbs", ] N_A = const.N_A.cgs.value @@ -69,67 +62,6 @@ logger = logging.getLogger(__name__) -# It is currently not possible to use scipy.integrate.cumulative_trapezoid in -# numba. So here is my own implementation. -@njit(**njit_dict) -def numba_cumulative_trapezoid(f, x): - """ - Cumulatively integrate f(x) using the composite trapezoidal rule. - - Parameters - ---------- - f : numpy.ndarray, dtype float - Input array to integrate. - x : numpy.ndarray, dtype float - The coordinate to integrate along. - - Returns - ------- - numpy.ndarray, dtype float - The result of cumulative integration of f along x - """ - integ = (np.diff(x) * (f[1:] + f[:-1]) / 2.0).cumsum() - return integ / integ[-1] - - -@njit(**njit_dict) -def cumulative_integrate_array_by_blocks(f, x, block_references): - """ - Cumulatively integrate a function over blocks. - - This function cumulatively integrates a function `f` defined at - locations `x` over blocks given in `block_references`. - - Parameters - ---------- - f : numpy.ndarray, dtype float - Input array to integrate. Shape is (N_freq, N_shells), where - N_freq is the number of frequency values and N_shells is the number - of computational shells. - x : numpy.ndarray, dtype float - The sample points corresponding to the `f` values. Shape is (N_freq,). - block_references : numpy.ndarray, dtype int - The start indices of the blocks to be integrated. Shape is (N_blocks,). - - Returns - ------- - numpy.ndarray, dtype float - Array with cumulatively integrated values. Shape is (N_freq, N_shells) - same as f. - """ - n_rows = len(block_references) - 1 - integrated = np.zeros_like(f) - for i in prange(f.shape[1]): # columns - # TODO: Avoid this loop through vectorization of cumulative_trapezoid - for j in prange(n_rows): # rows - start = block_references[j] - stop = block_references[j + 1] - integrated[start + 1 : stop, i] = numba_cumulative_trapezoid( - f[start:stop, i], x[start:stop] - ) - return integrated - - def get_ion_multi_index(multi_index_full, next_higher=True): """ Calculate the corresponding ion MultiIndex for a level MultiIndex. @@ -337,126 +269,6 @@ def calculate( return fb_emission_cdf -class PhotoIonRateCoeff(ProcessingPlasmaProperty): - """ - Attributes - ---------- - gamma : pandas.DataFrame, dtype float - The rate coefficient for radiative ionization. - """ - - outputs = ("gamma",) - latex_name = (r"\gamma",) - - def calculate( - self, - photo_ion_cross_sections, - gamma_estimator, - photo_ion_norm_factor, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - level2continuum_idx, - ): - # Used for initialization - if gamma_estimator is None: - gamma = self.calculate_from_dilute_bb( - photo_ion_cross_sections, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - ) - else: - gamma_estimator = bound_free_estimator_array2frame( - gamma_estimator, level2continuum_idx - ) - gamma = gamma_estimator * photo_ion_norm_factor.value - - return gamma - - @staticmethod - def calculate_from_dilute_bb( - photo_ion_cross_sections, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - ): - nu = photo_ion_cross_sections["nu"] - x_sect = photo_ion_cross_sections["x_sect"] - j_nus = dilute_planckian_radiation_field.calculate_mean_intensity( - nu, - ) - gamma = j_nus.multiply(4.0 * np.pi * x_sect / nu / H, axis=0) - gamma = integrate_array_by_blocks( - gamma.values, nu.values, photo_ion_block_references - ) - gamma = pd.DataFrame(gamma, index=photo_ion_index) - return gamma - - -class StimRecombRateCoeff(ProcessingPlasmaProperty): - """ - Attributes - ---------- - alpha_stim : pandas.DataFrame, dtype float - The rate coefficient for stimulated recombination. - """ - - outputs = ("alpha_stim",) - latex_name = (r"\alpha^{\textrm{stim}}",) - - def calculate( - self, - photo_ion_cross_sections, - alpha_stim_estimator, - photo_ion_norm_factor, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - phi_ik, - t_electrons, - boltzmann_factor_photo_ion, - level2continuum_idx, - ): - # Used for initialization - if alpha_stim_estimator is None: - alpha_stim = self.calculate_from_dilute_bb( - photo_ion_cross_sections, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - t_electrons, - boltzmann_factor_photo_ion, - ) - else: - alpha_stim_estimator = bound_free_estimator_array2frame( - alpha_stim_estimator, level2continuum_idx - ) - alpha_stim = alpha_stim_estimator * photo_ion_norm_factor - alpha_stim *= phi_ik.loc[alpha_stim.index] - return alpha_stim - - @staticmethod - def calculate_from_dilute_bb( - photo_ion_cross_sections, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - t_electrons, - boltzmann_factor_photo_ion, - ): - nu = photo_ion_cross_sections["nu"] - x_sect = photo_ion_cross_sections["x_sect"] - j_nus = dilute_planckian_radiation_field.calculate_mean_intensity(nu) - j_nus *= boltzmann_factor_photo_ion - alpha_stim = j_nus.multiply(4.0 * np.pi * x_sect / nu / H, axis=0) - alpha_stim = integrate_array_by_blocks( - alpha_stim.values, nu.values, photo_ion_block_references - ) - alpha_stim = pd.DataFrame(alpha_stim, index=photo_ion_index) - return alpha_stim - - class RawRecombTransProbs(TransitionProbabilitiesProperty, IndexSetterMixin): """ Attributes @@ -546,32 +358,6 @@ def calculate(time_simulation, volume): return (time_simulation * volume * H) ** -1 -class PhotoIonRateCoeffEstimator(Input): - """ - Attributes - ---------- - gamma_estimator : pandas.DataFrame, dtype float - Unnormalized MC estimator for the rate coefficient for radiative - ionization. - """ - - outputs = ("gamma_estimator",) - latex_name = (r"\gamma_\textrm{estim}",) - - -class StimRecombRateCoeffEstimator(Input): - """ - Attributes - ---------- - alpha_stim_estimator : pandas.DataFrame, dtype float - Unnormalized MC estimator for the rate coefficient for stimulated - recombination. - """ - - outputs = ("alpha_stim_estimator",) - latex_name = (r"\alpha^{\textrm{stim}}_\textrm{estim}",) - - class StimRecombCoolingRateCoeffEstimator(Input): """ Attributes @@ -943,40 +729,6 @@ def calculate( return cool_rate_fb_tot, cool_rate_fb, p_fb_deactivation -class BoundFreeOpacity(ProcessingPlasmaProperty): - """ - Attributes - ---------- - chi_bf : pandas.DataFrame, dtype float - Bound-free opacity corrected for stimulated emission. - """ - - outputs = ("chi_bf",) - latex_name = (r"\chi^{\textrm{bf}}",) - - def calculate( - self, - photo_ion_cross_sections, - t_electrons, - phi_ik, - level_number_density, - lte_level_number_density, - boltzmann_factor_photo_ion, - ): - x_sect = photo_ion_cross_sections["x_sect"].values - - n_i = level_number_density.loc[photo_ion_cross_sections.index] - lte_n_i = lte_level_number_density.loc[photo_ion_cross_sections.index] - chi_bf = (n_i - lte_n_i * boltzmann_factor_photo_ion).multiply( - x_sect, axis=0 - ) - - num_neg_elements = (chi_bf < 0).sum().sum() - if num_neg_elements: - raise PlasmaException("Negative values in bound-free opacity.") - return chi_bf - - class LevelNumberDensityLTE(ProcessingPlasmaProperty): """ Attributes @@ -1064,109 +816,3 @@ def _calculate_factor(self, nu_i, t_electrons): def _calculate_u0s(nu, t_electrons): u0s = nu[np.newaxis].T / t_electrons * (H / K_B) return u0s - - -class CollRecombRateCoeff(ProcessingPlasmaProperty): - """ - Attributes - ---------- - coll_recomb_coeff : pandas.DataFrame, dtype float - The rate coefficient for collisional recombination. - Multiply with the electron density squared and the ion number density - to obtain the total rate. - - Notes - ----- - The collisional recombination rate coefficient is calculated from the - collisional ionization rate coefficient based on the requirement of detailed - balance. - """ - - outputs = ("coll_recomb_coeff",) - latex_name = (r"c_{\kappa\textrm{i,}}",) - - def calculate(self, phi_ik, coll_ion_coeff): - return coll_ion_coeff.multiply(phi_ik.loc[coll_ion_coeff.index]) - - -class RawCollIonTransProbs(TransitionProbabilitiesProperty, IndexSetterMixin): - """ - Attributes - ---------- - p_coll_ion : pandas.DataFrame, dtype float - The unnormalized transition probabilities for - collisional ionization. - p_coll_recomb : pandas.DataFrame, dtype float - The unnormalized transition probabilities for - collisional recombination. - cool_rate_coll_ion : pandas.DataFrame, dtype float - The collisional ionization cooling rates of the electron gas. - """ - - outputs = ("p_coll_ion", "p_coll_recomb", "cool_rate_coll_ion") - transition_probabilities_outputs = ( - "p_coll_ion", - "p_coll_recomb", - "cool_rate_coll_ion", - ) - latex_name = ( - r"p^{\textrm{coll ion}}", - r"p^{\textrm{coll recomb}}", - r"C^{\textrm{ion}}", - ) - - def calculate( - self, - coll_ion_coeff, - coll_recomb_coeff, - nu_i, - photo_ion_idx, - electron_densities, - energy_i, - level_number_density, - ): - p_coll_ion = coll_ion_coeff.multiply(energy_i, axis=0) - p_coll_ion = p_coll_ion.multiply(electron_densities, axis=1) - p_coll_ion = self.set_index(p_coll_ion, photo_ion_idx, reverse=False) - - coll_recomb_rate = coll_recomb_coeff.multiply( - electron_densities, axis=1 - ) # The full rate is obtained from this by multiplying by the - # electron density and ion number density. - p_recomb_deactivation = coll_recomb_rate.multiply(nu_i, axis=0) * H - p_recomb_deactivation = self.set_index( - p_recomb_deactivation, photo_ion_idx, transition_type=-1 - ) - p_recomb_deactivation = p_recomb_deactivation.groupby(level=[0]).sum() - index_dd = pd.MultiIndex.from_product( - [p_recomb_deactivation.index.values, ["k"], [0]], - names=list(photo_ion_idx.columns) + ["transition_type"], - ) - p_recomb_deactivation = p_recomb_deactivation.set_index(index_dd) - - p_recomb_internal = coll_recomb_rate.multiply(energy_i, axis=0) - p_recomb_internal = self.set_index( - p_recomb_internal, photo_ion_idx, transition_type=0 - ) - p_coll_recomb = pd.concat([p_recomb_deactivation, p_recomb_internal]) - - cool_rate_coll_ion = (coll_ion_coeff * electron_densities).multiply( - nu_i * H, axis=0 - ) - level_lower_index = coll_ion_coeff.index - cool_rate_coll_ion = ( - cool_rate_coll_ion - * level_number_density.loc[level_lower_index].values - ) - cool_rate_coll_ion = self.set_index( - cool_rate_coll_ion, photo_ion_idx, reverse=False - ) - cool_rate_coll_ion = cool_rate_coll_ion.groupby( - level="destination_level_idx" - ).sum() - ion_cool_index = pd.MultiIndex.from_product( - [["k"], cool_rate_coll_ion.index.values, [0]], - names=list(photo_ion_idx.columns) + ["transition_type"], - ) - cool_rate_coll_ion = cool_rate_coll_ion.set_index(ion_cool_index) - return p_coll_ion, p_coll_recomb, cool_rate_coll_ion diff --git a/tardis/plasma/properties/continuum_processes/stim_recomb_rate_coeff.py b/tardis/plasma/properties/continuum_processes/stim_recomb_rate_coeff.py new file mode 100644 index 00000000000..9e376442279 --- /dev/null +++ b/tardis/plasma/properties/continuum_processes/stim_recomb_rate_coeff.py @@ -0,0 +1,85 @@ +import numpy as np +import pandas as pd +from tardis.plasma.properties.base import Input +from tardis.plasma.properties.continuum_processes.rates import H +from tardis.transport.montecarlo.estimators.util import ( + bound_free_estimator_array2frame, + integrate_array_by_blocks, + ProcessingPlasmaProperty, +) + + +class StimRecombRateCoeffEstimator(Input): + """ + Attributes + ---------- + alpha_stim_estimator : pandas.DataFrame, dtype float + Unnormalized MC estimator for the rate coefficient for stimulated + recombination. + """ + + outputs = ("alpha_stim_estimator",) + latex_name = (r"\alpha^{\textrm{stim}}_\textrm{estim}",) + + +class StimRecombRateCoeff(ProcessingPlasmaProperty): + """ + Attributes + ---------- + alpha_stim : pandas.DataFrame, dtype float + The rate coefficient for stimulated recombination. + """ + + outputs = ("alpha_stim",) + latex_name = (r"\alpha^{\textrm{stim}}",) + + def calculate( + self, + photo_ion_cross_sections, + alpha_stim_estimator, + photo_ion_norm_factor, + photo_ion_block_references, + photo_ion_index, + dilute_planckian_radiation_field, + phi_ik, + t_electrons, + boltzmann_factor_photo_ion, + level2continuum_idx, + ): + # Used for initialization + if alpha_stim_estimator is None: + alpha_stim = self.calculate_from_dilute_bb( + photo_ion_cross_sections, + photo_ion_block_references, + photo_ion_index, + dilute_planckian_radiation_field, + t_electrons, + boltzmann_factor_photo_ion, + ) + else: + alpha_stim_estimator = bound_free_estimator_array2frame( + alpha_stim_estimator, level2continuum_idx + ) + alpha_stim = alpha_stim_estimator * photo_ion_norm_factor + alpha_stim *= phi_ik.loc[alpha_stim.index] + return alpha_stim + + @staticmethod + def calculate_from_dilute_bb( + photo_ion_cross_sections, + photo_ion_block_references, + photo_ion_index, + dilute_planckian_radiation_field, + t_electrons, + boltzmann_factor_photo_ion, + ): + nu = photo_ion_cross_sections["nu"] + x_sect = photo_ion_cross_sections["x_sect"] + j_nus = dilute_planckian_radiation_field.calculate_mean_intensity(nu) + j_nus *= boltzmann_factor_photo_ion + alpha_stim = j_nus.multiply(4.0 * np.pi * x_sect / nu / H, axis=0) + alpha_stim = integrate_array_by_blocks( + alpha_stim.values, nu.values, photo_ion_block_references + ) + alpha_stim = pd.DataFrame(alpha_stim, index=photo_ion_index) + return alpha_stim diff --git a/tardis/plasma/properties/ion_population.py b/tardis/plasma/properties/ion_population.py index 794ecde510d..1c42028fbfd 100644 --- a/tardis/plasma/properties/ion_population.py +++ b/tardis/plasma/properties/ion_population.py @@ -8,7 +8,9 @@ from tardis.plasma.exceptions import PlasmaIonizationError from tardis.plasma.properties.base import ProcessingPlasmaProperty -from tardis.plasma.properties.continuum_processes import get_ion_multi_index +from tardis.plasma.properties.continuum_proc.continuum_processes import ( + get_ion_multi_index, +) logger = logging.getLogger(__name__) diff --git a/tardis/plasma/properties/util/__init__.py b/tardis/plasma/properties/util/__init__.py deleted file mode 100644 index 9aec5b1c60a..00000000000 --- a/tardis/plasma/properties/util/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Calculating transition probabilities for macro_atom interactions. -""" diff --git a/tardis/plasma/properties/util/integrate_array_by_blocks.py b/tardis/plasma/properties/util/integrate_array_by_blocks.py deleted file mode 100644 index 3573b0f6447..00000000000 --- a/tardis/plasma/properties/util/integrate_array_by_blocks.py +++ /dev/null @@ -1,35 +0,0 @@ -import numpy as np -from numba import njit, prange - -from tardis.transport.montecarlo import njit_dict - - -@njit(**njit_dict) -def integrate_array_by_blocks(f, x, block_references): - """ - Integrate a function over blocks. - - This function integrates a function `f` defined at locations `x` - over blocks given in `block_references`. - - Parameters - ---------- - f : numpy.ndarray, dtype float - 2D input array to integrate. - x : numpy.ndarray, dtype float - 1D array with the sample points corresponding to the `f` values. - block_references : numpy.ndarray, dtype int - 1D array with the start indices of the blocks to be integrated. - - Returns - ------- - numpy.ndarray, dtype float - 2D array with integrated values. - """ - integrated = np.zeros((len(block_references) - 1, f.shape[1])) - for i in prange(f.shape[1]): # columns - for j in prange(len(integrated)): # rows - start = block_references[j] - stop = block_references[j + 1] - integrated[j, i] = np.trapz(f[start:stop, i], x[start:stop]) - return integrated diff --git a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py index 4112723dade..448575dd483 100644 --- a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py +++ b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py @@ -6,7 +6,9 @@ import tardis.constants as const from tardis.io.atom_data import AtomData -from tardis.plasma.properties.continuum_processes import PhotoIonBoltzmannFactor +from tardis.plasma.properties.continuum_proc.continuum_processes import ( + PhotoIonBoltzmannFactor, +) from tardis.plasma.radiation_field.planck_rad_field import ( DilutePlanckianRadiationField, ) @@ -139,20 +141,23 @@ def calculate_photo_ionization_rate_coefficient( ----- Equation 16 in Lucy 2003. """ - gamma = mean_intensity_photo_ion_df.multiply( + photo_ion_rate_coefficient = mean_intensity_photo_ion_df.multiply( 4.0 * np.pi * self.atom_data.photoionization_data.x_sect / (self.atom_data.photoionization_data.nu * H), axis=0, ) - gamma = integrate_array_by_blocks( - gamma.values, + photo_ion_rate_coefficient = integrate_array_by_blocks( + photo_ion_rate_coefficient.values, self.atom_data.photoionization_data.nu.values, self.atom_data.photo_ion_block_references, ) - gamma = pd.DataFrame(gamma, index=self.atom_data.photo_ion_unique_index) - return gamma + photo_ion_rate_coefficient = pd.DataFrame( + photo_ion_rate_coefficient, + index=self.atom_data.photo_ion_unique_index, + ) + return photo_ion_rate_coefficient def calculate_stimulated_recomb_rate_factor( self, @@ -221,5 +226,5 @@ def calculate_mean_intensity_photo_ion_table( @dataclass class ContinuumProperties: - stimulated_recomb_rate_factor: pd.DataFrame + stimulated_recombination_rate_coefficient: pd.DataFrame photo_ionization_rate_coefficient: pd.DataFrame diff --git a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py index b3e322c2aa2..aa50fe96990 100644 --- a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py +++ b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py @@ -43,9 +43,9 @@ def test_continuum_estimators( continuum_simulation.plasma.gamma, ) stimulated_recomb_rate_coeff = ( - continuum_properties_dilute_bb.stimulated_recomb_rate_factor + continuum_properties_dilute_bb.stimulated_recombination_rate_coefficient * continuum_plasma.phi_ik.loc[ - continuum_properties_dilute_bb.stimulated_recomb_rate_factor.index + continuum_properties_dilute_bb.stimulated_recombination_rate_coefficient.index ] ) pdt.assert_frame_equal( @@ -76,9 +76,9 @@ def test_continuum_estimators( continuum_simulation.plasma.gamma, ) stimulated_recomb_rate_coeff = ( - continuum_properties_mc.stimulated_recomb_rate_factor + continuum_properties_mc.stimulated_recombination_rate_coefficient * continuum_plasma.phi_ik.loc[ - continuum_properties_dilute_bb.stimulated_recomb_rate_factor.index + continuum_properties_dilute_bb.stimulated_recombination_rate_coefficient.index ] ) pdt.assert_frame_equal( From 98f83401a54c98e51ad060e2ce926e77f17f5e88 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 24 Jul 2024 18:09:22 -0400 Subject: [PATCH 053/118] Refactor opacities module structure --- benchmarks/transport_montecarlo_opacities.py | 3 +- tardis/energy_input/gamma_packet_loop.py | 4 +- tardis/energy_input/gamma_ray_estimators.py | 4 +- .../collisional_ion_trans_prob.py | 8 ++-- .../macro_atom/transition_probabilities.py | 2 +- .../properties/continuum_processes/rates.py | 33 ----------------- ...omb_rate_coeff.py => recomb_rate_coeff.py} | 37 ++++++++++++++++++- .../montecarlo/tests/test_opacities.py | 4 +- 8 files changed, 51 insertions(+), 44 deletions(-) rename tardis/plasma/properties/continuum_processes/{stim_recomb_rate_coeff.py => recomb_rate_coeff.py} (69%) diff --git a/benchmarks/transport_montecarlo_opacities.py b/benchmarks/transport_montecarlo_opacities.py index 52ff45ccd41..e536e5c49a5 100644 --- a/benchmarks/transport_montecarlo_opacities.py +++ b/benchmarks/transport_montecarlo_opacities.py @@ -4,6 +4,7 @@ from asv_runner.benchmarks.mark import parameterize +import tardis.opacities.compton_opacity_calculation import tardis.opacities.opacities as calculate_opacity from benchmarks.benchmark_base import BenchmarkBase @@ -28,7 +29,7 @@ class BenchmarkMontecarloMontecarloNumbaOpacities(BenchmarkBase): } ) def time_compton_opacity_calculation(self, electron_number_density, energy): - calculate_opacity.compton_opacity_calculation( + tardis.opacities.compton_opacity_calculation.compton_opacity_calculation( energy, electron_number_density ) diff --git a/tardis/energy_input/gamma_packet_loop.py b/tardis/energy_input/gamma_packet_loop.py index 385febda679..faac2164eef 100644 --- a/tardis/energy_input/gamma_packet_loop.py +++ b/tardis/energy_input/gamma_packet_loop.py @@ -19,9 +19,11 @@ doppler_factor_3d, get_index, ) +from tardis.opacities.compton_opacity_calculation import ( + compton_opacity_calculation, +) from tardis.opacities.opacities import ( SIGMA_T, - compton_opacity_calculation, kappa_calculation, pair_creation_opacity_artis, pair_creation_opacity_calculation, diff --git a/tardis/energy_input/gamma_ray_estimators.py b/tardis/energy_input/gamma_ray_estimators.py index e28ba5029ff..13ebc9e84c1 100644 --- a/tardis/energy_input/gamma_ray_estimators.py +++ b/tardis/energy_input/gamma_ray_estimators.py @@ -7,9 +7,11 @@ angle_aberration_gamma, doppler_factor_3d, ) +from tardis.opacities.compton_opacity_calculation import ( + compton_opacity_calculation, +) from tardis.opacities.opacities import ( SIGMA_T, - compton_opacity_calculation, kappa_calculation, photoabsorption_opacity_calculation, ) diff --git a/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py b/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py index 9747faa988b..944fc16c172 100644 --- a/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py +++ b/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py @@ -1,15 +1,15 @@ +import pandas as pd + +from tardis import constants as const from tardis.plasma.properties.base import ( ProcessingPlasmaProperty, TransitionProbabilitiesProperty, ) from tardis.plasma.properties.continuum_processes.rates import ( - H, IndexSetterMixin, ) - -import pandas as pd - +H = const.h.cgs.value class RawCollIonTransProbs(TransitionProbabilitiesProperty, IndexSetterMixin): """ diff --git a/tardis/opacities/macro_atom/transition_probabilities.py b/tardis/opacities/macro_atom/transition_probabilities.py index c22d337a6fb..0ae783d15a9 100644 --- a/tardis/opacities/macro_atom/transition_probabilities.py +++ b/tardis/opacities/macro_atom/transition_probabilities.py @@ -5,7 +5,7 @@ from scipy import sparse as sp from tardis.plasma.properties.base import ProcessingPlasmaProperty -from tardis.plasma.properties.continuum_proc.continuum_processes import ( +from tardis.plasma.properties.continuum_processes.rates import ( get_ground_state_multi_index, ) from tardis.transport.montecarlo.macro_atom import ( diff --git a/tardis/plasma/properties/continuum_processes/rates.py b/tardis/plasma/properties/continuum_processes/rates.py index 9c9c6ef96ba..42610b46e52 100644 --- a/tardis/plasma/properties/continuum_processes/rates.py +++ b/tardis/plasma/properties/continuum_processes/rates.py @@ -161,39 +161,6 @@ def set_index(p, photo_ion_idx, transition_type=0, reverse=True): return p -class SpontRecombRateCoeff(ProcessingPlasmaProperty): - """ - Attributes - ---------- - alpha_sp : pandas.DataFrame, dtype float - The rate coefficient for spontaneous recombination. - """ - - outputs = ("alpha_sp",) - latex_name = (r"\alpha^{\textrm{sp}}",) - - def calculate( - self, - photo_ion_cross_sections, - t_electrons, - photo_ion_block_references, - photo_ion_index, - phi_ik, - boltzmann_factor_photo_ion, - ): - x_sect = photo_ion_cross_sections["x_sect"].values - nu = photo_ion_cross_sections["nu"].values - - alpha_sp = 8 * np.pi * x_sect * nu**2 / C**2 - alpha_sp = alpha_sp[:, np.newaxis] - alpha_sp = alpha_sp * boltzmann_factor_photo_ion - alpha_sp = integrate_array_by_blocks( - alpha_sp, nu, photo_ion_block_references - ) - alpha_sp = pd.DataFrame(alpha_sp, index=photo_ion_index) - return alpha_sp * phi_ik.loc[alpha_sp.index] - - class SpontRecombCoolingRateCoeff(ProcessingPlasmaProperty): """ Attributes diff --git a/tardis/plasma/properties/continuum_processes/stim_recomb_rate_coeff.py b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py similarity index 69% rename from tardis/plasma/properties/continuum_processes/stim_recomb_rate_coeff.py rename to tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py index 9e376442279..1fe4132f709 100644 --- a/tardis/plasma/properties/continuum_processes/stim_recomb_rate_coeff.py +++ b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py @@ -1,7 +1,7 @@ import numpy as np import pandas as pd -from tardis.plasma.properties.base import Input -from tardis.plasma.properties.continuum_processes.rates import H +from tardis.plasma.properties.base import Input, ProcessingPlasmaProperty +from tardis.plasma.properties.continuum_processes.rates import C, H from tardis.transport.montecarlo.estimators.util import ( bound_free_estimator_array2frame, integrate_array_by_blocks, @@ -83,3 +83,36 @@ def calculate_from_dilute_bb( ) alpha_stim = pd.DataFrame(alpha_stim, index=photo_ion_index) return alpha_stim + + +class SpontRecombRateCoeff(ProcessingPlasmaProperty): + """ + Attributes + ---------- + alpha_sp : pandas.DataFrame, dtype float + The rate coefficient for spontaneous recombination. + """ + + outputs = ("alpha_sp",) + latex_name = (r"\alpha^{\textrm{sp}}",) + + def calculate( + self, + photo_ion_cross_sections, + t_electrons, + photo_ion_block_references, + photo_ion_index, + phi_ik, + boltzmann_factor_photo_ion, + ): + cross_section = photo_ion_cross_sections["x_sect"].values + nu = photo_ion_cross_sections["nu"].values + + alpha_sp = 8 * np.pi * cross_section * nu**2 / C**2 + alpha_sp = alpha_sp[:, np.newaxis] + alpha_sp = alpha_sp * boltzmann_factor_photo_ion + alpha_sp = integrate_array_by_blocks( + alpha_sp, nu, photo_ion_block_references + ) + alpha_sp = pd.DataFrame(alpha_sp, index=photo_ion_index) + return alpha_sp * phi_ik.loc[alpha_sp.index] diff --git a/tardis/transport/montecarlo/tests/test_opacities.py b/tardis/transport/montecarlo/tests/test_opacities.py index 07096d6e0c6..c5461112aed 100644 --- a/tardis/transport/montecarlo/tests/test_opacities.py +++ b/tardis/transport/montecarlo/tests/test_opacities.py @@ -1,8 +1,10 @@ import numpy.testing as npt import pytest -from tardis.opacities.opacities import ( +from tardis.opacities.compton_opacity_calculation import ( compton_opacity_calculation, +) +from tardis.opacities.opacities import ( kappa_calculation, pair_creation_opacity_calculation, photoabsorption_opacity_calculation, From 84671ca3b54bc743d7a53504de9851f38aeefe1f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 25 Jul 2024 11:00:18 -0400 Subject: [PATCH 054/118] cleanup from restructure --- tardis/io/atom_data/base.py | 2 +- tardis/plasma/properties/__init__.py | 2 +- tardis/plasma/properties/atomic.py | 2 +- .../photo_ion_rate_coeff.py | 67 +------------------ tardis/plasma/properties/ion_population.py | 2 +- .../plasma/properties/property_collections.py | 8 +-- tardis/simulation/base.py | 33 ++++++--- .../continuum_radfield_properties.py | 2 +- 8 files changed, 30 insertions(+), 88 deletions(-) diff --git a/tardis/io/atom_data/base.py b/tardis/io/atom_data/base.py index 7011f995841..ad870ae60fa 100644 --- a/tardis/io/atom_data/base.py +++ b/tardis/io/atom_data/base.py @@ -9,7 +9,7 @@ from tardis import constants as const from tardis.io.atom_data.util import resolve_atom_data_fname -from tardis.plasma.properties.continuum_proc.continuum_processes import ( +from tardis.plasma.properties.continuum_processes.rates import ( get_ground_state_multi_index, ) diff --git a/tardis/plasma/properties/__init__.py b/tardis/plasma/properties/__init__.py index d15c03afc74..671d19065f6 100644 --- a/tardis/plasma/properties/__init__.py +++ b/tardis/plasma/properties/__init__.py @@ -7,7 +7,7 @@ from tardis.opacities.macro_atom.transition_probabilities import * from tardis.plasma.properties.atomic import * -from tardis.plasma.properties.continuum_proc.continuum_processes import * +from tardis.plasma.properties.continuum_processes.rates import * from tardis.plasma.properties.general import * from tardis.plasma.properties.helium_nlte import * from tardis.plasma.properties.ion_population import * diff --git a/tardis/plasma/properties/atomic.py b/tardis/plasma/properties/atomic.py index 5dcc206c784..7c212c1933e 100644 --- a/tardis/plasma/properties/atomic.py +++ b/tardis/plasma/properties/atomic.py @@ -15,7 +15,7 @@ HiddenPlasmaProperty, ProcessingPlasmaProperty, ) -from tardis.plasma.properties.continuum_proc.continuum_processes import ( +from tardis.plasma.properties.continuum_processes.rates import ( A0, BETA_COLL, K_B, diff --git a/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py b/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py index 1f4c719cb39..c3bf1fff744 100644 --- a/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py +++ b/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py @@ -1,16 +1,8 @@ -import numpy as np -import pandas as pd - from tardis.plasma.properties.base import Input from tardis.plasma.properties.continuum_processes.rates import H -from tardis.transport.montecarlo.estimators.util import ( - ProcessingPlasmaProperty, - bound_free_estimator_array2frame, - integrate_array_by_blocks, -) -class PhotoIonRateCoeffEstimator(Input): +class PhotoIonRateCoeff(Input): """ Attributes ---------- @@ -19,62 +11,5 @@ class PhotoIonRateCoeffEstimator(Input): ionization. """ - outputs = ("gamma_estimator",) - latex_name = (r"\gamma_\textrm{estim}",) - - -class PhotoIonRateCoeff(ProcessingPlasmaProperty): - """ - Attributes - ---------- - gamma : pandas.DataFrame, dtype float - The rate coefficient for radiative ionization. - """ - outputs = ("gamma",) latex_name = (r"\gamma",) - - def calculate( - self, - photo_ion_cross_sections, - gamma_estimator, - photo_ion_norm_factor, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - level2continuum_idx, - ): - # Used for initialization - if gamma_estimator is None: - gamma = self.calculate_from_dilute_bb( - photo_ion_cross_sections, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - ) - else: - gamma_estimator = bound_free_estimator_array2frame( - gamma_estimator, level2continuum_idx - ) - gamma = gamma_estimator * photo_ion_norm_factor.value - - return gamma - - @staticmethod - def calculate_from_dilute_bb( - photo_ion_cross_sections, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - ): - nu = photo_ion_cross_sections["nu"] - x_sect = photo_ion_cross_sections["x_sect"] - j_nus = dilute_planckian_radiation_field.calculate_mean_intensity( - nu, - ) - gamma = j_nus.multiply(4.0 * np.pi * x_sect / nu / H, axis=0) - gamma = integrate_array_by_blocks( - gamma.values, nu.values, photo_ion_block_references - ) - gamma = pd.DataFrame(gamma, index=photo_ion_index) - return gamma diff --git a/tardis/plasma/properties/ion_population.py b/tardis/plasma/properties/ion_population.py index 1c42028fbfd..10f440b95c7 100644 --- a/tardis/plasma/properties/ion_population.py +++ b/tardis/plasma/properties/ion_population.py @@ -8,7 +8,7 @@ from tardis.plasma.exceptions import PlasmaIonizationError from tardis.plasma.properties.base import ProcessingPlasmaProperty -from tardis.plasma.properties.continuum_proc.continuum_processes import ( +from tardis.plasma.properties.continuum_processes.rates import ( get_ion_multi_index, ) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index 119423568d7..92fee62af76 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -2,8 +2,8 @@ NonMarkovChainTransitionProbabilities, TransitionProbabilities, ) -from tardis.plasma.properties import * from tardis.opacities.tau_sobolev import TauSobolev +from tardis.plasma.properties import * class PlasmaPropertyCollection(list): @@ -88,9 +88,6 @@ class PlasmaPropertyCollection(list): ) continuum_interaction_inputs = PlasmaPropertyCollection( [ - StimRecombRateCoeffEstimator, - PhotoIonRateCoeffEstimator, - Volume, BfHeatingRateCoeffEstimator, StimRecombCoolingRateCoeffEstimator, YgData, @@ -99,15 +96,12 @@ class PlasmaPropertyCollection(list): continuum_interaction_properties = PlasmaPropertyCollection( [ PhotoIonizationData, - SpontRecombRateCoeff, - PhotoIonRateCoeff, ThermalLevelBoltzmannFactorLTE, ThermalLTEPartitionFunction, BetaElectron, ThermalGElectron, ThermalPhiSahaLTE, SahaFactor, - PhotoIonEstimatorsNormFactor, StimRecombRateCoeff, CorrPhotoIonRateCoeff, SpontRecombCoolingRateCoeff, diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 13e893d85d2..5adb4bec945 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -10,18 +10,21 @@ import tardis from tardis import constants as const from tardis.io.configuration.config_reader import ConfigurationError +from tardis.io.model.parse_atom_data import parse_atom_data +from tardis.io.model.parse_simulation_state import ( + parse_simulation_state, +) from tardis.io.util import HDFWriterMixin from tardis.plasma.radiation_field import DilutePlanckianRadiationField from tardis.plasma.standard_plasmas import assemble_plasma from tardis.simulation.convergence import ConvergenceSolver -from tardis.io.model.parse_simulation_state import ( - parse_simulation_state, -) -from tardis.io.model.parse_atom_data import parse_atom_data from tardis.spectrum.base import SpectrumSolver from tardis.spectrum.formal_integral import FormalIntegrator from tardis.transport.montecarlo.base import MonteCarloTransportSolver from tardis.transport.montecarlo.configuration import montecarlo_globals +from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( + MCContinuumPropertiesSolver, +) from tardis.util.base import is_notebook from tardis.visualization import ConvergencePlots @@ -406,14 +409,24 @@ def advance_state(self, emitted_luminosity): # A check to see if the plasma is set with JBluesDetailed, in which # case it needs some extra kwargs. - estimators = self.transport.transport_state.radfield_mc_estimators + radfield_mc_estimators = ( + self.transport.transport_state.radfield_mc_estimators + ) - if "gamma_estimator" in self.plasma.outputs_dict: + if "gamma" in self.plasma.outputs_dict: + continuum_property_solver = MCContinuumPropertiesSolver( + self.atom_data + ) + estimated_continuum_properties = continuum_property_solver.solve( + radfield_mc_estimators, + self.transport.transport_state.time_of_simulation, + self.transport.transport_state.geometry_state.volume, + ) update_properties.update( - gamma_estimator=estimators.photo_ion_estimator, - alpha_stim_estimator=estimators.stim_recomb_estimator, - bf_heating_coeff_estimator=estimators.bf_heating_estimator, - stim_recomb_cooling_coeff_estimator=estimators.stim_recomb_cooling_estimator, + gamma=estimated_continuum_properties.photo_ion_coeff, + alpha_stim_coeff=estimated_continuum_properties.stim_recomb_estimator, + bf_heating_coeff_estimator=radfield_mc_estimators.bf_heating_estimator, + stim_recomb_cooling_coeff_estimator=radfield_mc_estimators.stim_recomb_cooling_estimator, ) self.plasma.update(**update_properties) diff --git a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py index 448575dd483..c5b5a1177b5 100644 --- a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py +++ b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py @@ -6,7 +6,7 @@ import tardis.constants as const from tardis.io.atom_data import AtomData -from tardis.plasma.properties.continuum_proc.continuum_processes import ( +from tardis.plasma.properties.continuum_processes.rates import ( PhotoIonBoltzmannFactor, ) from tardis.plasma.radiation_field.planck_rad_field import ( From 7782d07de8e63a43a7ca4bfdcdc2dbbb2ae7cb7c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 25 Jul 2024 16:18:37 -0400 Subject: [PATCH 055/118] cleanup --- .../collisional_ion_trans_prob.py | 24 ------------------- tardis/plasma/properties/__init__.py | 2 +- .../continuum_processes/__init__.py | 7 ++++++ .../properties/continuum_processes/rates.py | 23 ++++++++++++++++++ .../continuum_processes/recomb_rate_coeff.py | 8 +++---- .../plasma/properties/property_collections.py | 1 + tardis/simulation/base.py | 7 ++++-- 7 files changed, 41 insertions(+), 31 deletions(-) diff --git a/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py b/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py index 944fc16c172..c3bde599279 100644 --- a/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py +++ b/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py @@ -2,7 +2,6 @@ from tardis import constants as const from tardis.plasma.properties.base import ( - ProcessingPlasmaProperty, TransitionProbabilitiesProperty, ) from tardis.plasma.properties.continuum_processes.rates import ( @@ -92,26 +91,3 @@ def calculate( ) cool_rate_coll_ion = cool_rate_coll_ion.set_index(ion_cool_index) return p_coll_ion, p_coll_recomb, cool_rate_coll_ion - - -class CollRecombRateCoeff(ProcessingPlasmaProperty): - """ - Attributes - ---------- - coll_recomb_coeff : pandas.DataFrame, dtype float - The rate coefficient for collisional recombination. - Multiply with the electron density squared and the ion number density - to obtain the total rate. - - Notes - ----- - The collisional recombination rate coefficient is calculated from the - collisional ionization rate coefficient based on the requirement of detailed - balance. - """ - - outputs = ("coll_recomb_coeff",) - latex_name = (r"c_{\kappa\textrm{i,}}",) - - def calculate(self, phi_ik, coll_ion_coeff): - return coll_ion_coeff.multiply(phi_ik.loc[coll_ion_coeff.index]) diff --git a/tardis/plasma/properties/__init__.py b/tardis/plasma/properties/__init__.py index 671d19065f6..3363cbd9bcd 100644 --- a/tardis/plasma/properties/__init__.py +++ b/tardis/plasma/properties/__init__.py @@ -7,7 +7,7 @@ from tardis.opacities.macro_atom.transition_probabilities import * from tardis.plasma.properties.atomic import * -from tardis.plasma.properties.continuum_processes.rates import * +from tardis.plasma.properties.continuum_processes import * from tardis.plasma.properties.general import * from tardis.plasma.properties.helium_nlte import * from tardis.plasma.properties.ion_population import * diff --git a/tardis/plasma/properties/continuum_processes/__init__.py b/tardis/plasma/properties/continuum_processes/__init__.py index e69de29bb2d..c94ed467ffd 100644 --- a/tardis/plasma/properties/continuum_processes/__init__.py +++ b/tardis/plasma/properties/continuum_processes/__init__.py @@ -0,0 +1,7 @@ +from tardis.plasma.properties.continuum_processes.photo_ion_rate_coeff import ( + PhotoIonRateCoeff, +) +from tardis.plasma.properties.continuum_processes.rates import * +from tardis.plasma.properties.continuum_processes.recomb_rate_coeff import ( + StimRecombRateCoeff, +) diff --git a/tardis/plasma/properties/continuum_processes/rates.py b/tardis/plasma/properties/continuum_processes/rates.py index 42610b46e52..b7f9a055bd3 100644 --- a/tardis/plasma/properties/continuum_processes/rates.py +++ b/tardis/plasma/properties/continuum_processes/rates.py @@ -783,3 +783,26 @@ def _calculate_factor(self, nu_i, t_electrons): def _calculate_u0s(nu, t_electrons): u0s = nu[np.newaxis].T / t_electrons * (H / K_B) return u0s + + +class CollRecombRateCoeff(ProcessingPlasmaProperty): + """ + Attributes + ---------- + coll_recomb_coeff : pandas.DataFrame, dtype float + The rate coefficient for collisional recombination. + Multiply with the electron density squared and the ion number density + to obtain the total rate. + + Notes + ----- + The collisional recombination rate coefficient is calculated from the + collisional ionization rate coefficient based on the requirement of detailed + balance. + """ + + outputs = ("coll_recomb_coeff",) + latex_name = (r"c_{\kappa\textrm{i,}}",) + + def calculate(self, phi_ik, coll_ion_coeff): + return coll_ion_coeff.multiply(phi_ik.loc[coll_ion_coeff.index]) diff --git a/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py index 1fe4132f709..35ab06246f6 100644 --- a/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py +++ b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py @@ -1,15 +1,15 @@ import numpy as np import pandas as pd + from tardis.plasma.properties.base import Input, ProcessingPlasmaProperty from tardis.plasma.properties.continuum_processes.rates import C, H from tardis.transport.montecarlo.estimators.util import ( bound_free_estimator_array2frame, integrate_array_by_blocks, - ProcessingPlasmaProperty, ) -class StimRecombRateCoeffEstimator(Input): +class StimRecombRateCoeff(Input): """ Attributes ---------- @@ -18,11 +18,11 @@ class StimRecombRateCoeffEstimator(Input): recombination. """ - outputs = ("alpha_stim_estimator",) + outputs = ("alpha_stim",) latex_name = (r"\alpha^{\textrm{stim}}_\textrm{estim}",) -class StimRecombRateCoeff(ProcessingPlasmaProperty): +class StimRecombRateCoeffOLD(ProcessingPlasmaProperty): """ Attributes ---------- diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index f4c87f9f7d5..c30fe78d417 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -3,6 +3,7 @@ TransitionProbabilities, ) from tardis.opacities.tau_sobolev import TauSobolev +from tardis.opacities.continuum.bound_free import BoundFreeOpacity from tardis.plasma.properties import * diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index ca6f128b836..0334bfd9393 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -368,6 +368,11 @@ def advance_state(self, emitted_luminosity): # model.calculate_j_blues() equivalent # model.update_plasmas() equivalent # Bad test to see if this is a nlte run + + if "nlte_data" in self.plasma.outputs_dict: + self.plasma.store_previous_properties() + + # JBlues solver if ( self.plasma.plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody" @@ -404,8 +409,6 @@ def advance_state(self, emitted_luminosity): f"radiative_rates_type type unknown - {self.plasma.plasma_solver_settings.RADIATIVE_RATES_TYPE}" ) - self.plasma.store_previous_properties() - # A check to see if the plasma is set with JBluesDetailed, in which # case it needs some extra kwargs. From cfc5078e0e0ad5eb7930069d639ccd964f1da29e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 25 Jul 2024 17:01:30 -0400 Subject: [PATCH 056/118] clean up --- tardis/plasma/properties/property_collections.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index c30fe78d417..61e0d0881f3 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -4,6 +4,9 @@ ) from tardis.opacities.tau_sobolev import TauSobolev from tardis.opacities.continuum.bound_free import BoundFreeOpacity +from tardis.opacities.macro_atom.continuum_processes.collisional_ion_trans_prob import ( + RawCollIonTransProbs, +) from tardis.plasma.properties import * From ee864bbeee9a2aa2a84c882e75cff9116a1262f5 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 25 Jul 2024 17:35:24 -0400 Subject: [PATCH 057/118] more cleanup --- .../continuum_processes/__init__.py | 1 + .../properties/continuum_processes/rates.py | 11 +------- tardis/plasma/properties/plasma_input.py | 5 ---- .../plasma/properties/property_collections.py | 6 +++-- tardis/plasma/standard_plasmas.py | 26 ++++++++++++++----- .../montecarlo/tests/test_opacities.py | 4 +-- 6 files changed, 27 insertions(+), 26 deletions(-) diff --git a/tardis/plasma/properties/continuum_processes/__init__.py b/tardis/plasma/properties/continuum_processes/__init__.py index c94ed467ffd..29d4d5503ef 100644 --- a/tardis/plasma/properties/continuum_processes/__init__.py +++ b/tardis/plasma/properties/continuum_processes/__init__.py @@ -4,4 +4,5 @@ from tardis.plasma.properties.continuum_processes.rates import * from tardis.plasma.properties.continuum_processes.recomb_rate_coeff import ( StimRecombRateCoeff, + SpontRecombRateCoeff, ) diff --git a/tardis/plasma/properties/continuum_processes/rates.py b/tardis/plasma/properties/continuum_processes/rates.py index b7f9a055bd3..4dd697cfd64 100644 --- a/tardis/plasma/properties/continuum_processes/rates.py +++ b/tardis/plasma/properties/continuum_processes/rates.py @@ -28,6 +28,7 @@ "RawPhotoIonTransProbs", "CollDeexcRateCoeff", "CollExcRateCoeff", + "CollRecombRateCoeff", "RawCollisionTransProbs", "AdiabaticCoolingRate", "FreeFreeCoolingRate", @@ -315,16 +316,6 @@ def calculate( ) return gamma_corr - -class PhotoIonEstimatorsNormFactor(ProcessingPlasmaProperty): - outputs = ("photo_ion_norm_factor",) - latex_name = (r"\frac{1}{t_\textrm{simulation volume h}}",) - - @staticmethod - def calculate(time_simulation, volume): - return (time_simulation * volume * H) ** -1 - - class StimRecombCoolingRateCoeffEstimator(Input): """ Attributes diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index 76aa5f48a01..aac02e58308 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -15,7 +15,6 @@ "JBlues", "LinkTRadTElectron", "HeliumTreatment", - "Volume", "ContinuumInteractionSpecies", "NLTEIonizationSpecies", "NLTEExcitationSpecies", @@ -128,10 +127,6 @@ class LinkTRadTElectron(Input): class HeliumTreatment(Input): outputs = ("helium_treatment",) -class Volume(Input): - outputs = ("volume",) - - class ContinuumInteractionSpecies(Input): """ Attributes diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index 61e0d0881f3..b1fa21c29ff 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -1,12 +1,12 @@ +from tardis.opacities.continuum.bound_free import BoundFreeOpacity from tardis.opacities.macro_atom.base import ( NonMarkovChainTransitionProbabilities, TransitionProbabilities, ) -from tardis.opacities.tau_sobolev import TauSobolev -from tardis.opacities.continuum.bound_free import BoundFreeOpacity from tardis.opacities.macro_atom.continuum_processes.collisional_ion_trans_prob import ( RawCollIonTransProbs, ) +from tardis.opacities.tau_sobolev import TauSobolev from tardis.plasma.properties import * @@ -93,6 +93,7 @@ class PlasmaPropertyCollection(list): ) continuum_interaction_inputs = PlasmaPropertyCollection( [ + PhotoIonRateCoeff, BfHeatingRateCoeffEstimator, StimRecombCoolingRateCoeffEstimator, YgData, @@ -101,6 +102,7 @@ class PlasmaPropertyCollection(list): continuum_interaction_properties = PlasmaPropertyCollection( [ PhotoIonizationData, + SpontRecombRateCoeff, ThermalLevelBoltzmannFactorLTE, ThermalLTEPartitionFunction, BetaElectron, diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index caca28b4b70..1846beeea14 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -2,7 +2,6 @@ import numpy as np import pandas as pd -from astropy import units as u from tardis.plasma import BasePlasma from tardis.plasma.base import PlasmaSolverSettings @@ -44,6 +43,9 @@ ) from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper from tardis.plasma.radiation_field import DilutePlanckianRadiationField +from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( + DiluteBlackBodyContinuumPropertiesSolver, +) from tardis.util.base import species_string_to_tuple logger = logging.getLogger(__name__) @@ -129,6 +131,9 @@ def assemble_plasma(config, simulation_state, atom_data=None): plasma_modules = basic_inputs + basic_properties property_kwargs = {} + + ########### SETTING UP CONTINUUM INTERACTIONS + if len(config.plasma.continuum_interaction.species) > 0: line_interaction_type = config.plasma.line_interaction_type if line_interaction_type != "macroatom": @@ -200,14 +205,23 @@ def assemble_plasma(config, simulation_state, atom_data=None): f"NLTE solver type unknown - {config.plasma.nlte_solver}" ) + # initializing rates + t_electron = ( + config.plasma.link_t_rad_t_electron + * dilute_planckian_radiation_field.temperature.to(u.K).value + ) + initial_continuum_solver = DiluteBlackBodyContinuumPropertiesSolver( + atom_data + ) + initial_continuum_properties = initial_continuum_solver.solve( + dilute_planckian_radiation_field, t_electron + ) + kwargs.update( - gamma_estimator=None, + gamma=initial_continuum_properties.photo_ionization_rate_coefficient, bf_heating_coeff_estimator=None, stim_recomb_cooling_coeff_estimator=None, - alpha_stim_estimator=None, - volume=simulation_state.volume, - r_inner=simulation_state.r_inner.to(u.cm), - t_inner=simulation_state.t_inner, + alpha_stim=config.plasma.link_t_rad_t_electron, ) ##### RADIATIVE RATES SETUP diff --git a/tardis/transport/montecarlo/tests/test_opacities.py b/tardis/transport/montecarlo/tests/test_opacities.py index c5461112aed..5cda6b97f82 100644 --- a/tardis/transport/montecarlo/tests/test_opacities.py +++ b/tardis/transport/montecarlo/tests/test_opacities.py @@ -1,9 +1,7 @@ import numpy.testing as npt import pytest +from tardis.opacities.opacities import compton_opacity_calculation -from tardis.opacities.compton_opacity_calculation import ( - compton_opacity_calculation, -) from tardis.opacities.opacities import ( kappa_calculation, pair_creation_opacity_calculation, From 0ebcef8497e8b3105072bcd0239c7540cdc33628 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 25 Jul 2024 17:41:07 -0400 Subject: [PATCH 058/118] cleanup standard_plasmas.py --- tardis/plasma/standard_plasmas.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index 1846beeea14..e78a54a481c 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -206,7 +206,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): ) # initializing rates - t_electron = ( + t_electrons = ( config.plasma.link_t_rad_t_electron * dilute_planckian_radiation_field.temperature.to(u.K).value ) @@ -214,14 +214,14 @@ def assemble_plasma(config, simulation_state, atom_data=None): atom_data ) initial_continuum_properties = initial_continuum_solver.solve( - dilute_planckian_radiation_field, t_electron + dilute_planckian_radiation_field, t_electrons ) kwargs.update( gamma=initial_continuum_properties.photo_ionization_rate_coefficient, bf_heating_coeff_estimator=None, stim_recomb_cooling_coeff_estimator=None, - alpha_stim=config.plasma.link_t_rad_t_electron, + alpha_stim=initial_continuum_properties.stimulated_recombination_rate_coefficient, ) ##### RADIATIVE RATES SETUP From cf1396a5fd044daa25bc6ed7e612182fee5390fd Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 11:35:36 -0400 Subject: [PATCH 059/118] working nlte ionizations --- .../continuum_processes/__init__.py | 3 +- .../continuum_processes/recomb_rate_coeff.py | 55 ++----------------- .../plasma/properties/property_collections.py | 3 +- tardis/plasma/standard_plasmas.py | 3 +- .../continuum_radfield_properties.py | 3 +- .../tests/test_continuum_property_solver.py | 8 +-- 6 files changed, 17 insertions(+), 58 deletions(-) diff --git a/tardis/plasma/properties/continuum_processes/__init__.py b/tardis/plasma/properties/continuum_processes/__init__.py index 29d4d5503ef..572d3172c4e 100644 --- a/tardis/plasma/properties/continuum_processes/__init__.py +++ b/tardis/plasma/properties/continuum_processes/__init__.py @@ -3,6 +3,7 @@ ) from tardis.plasma.properties.continuum_processes.rates import * from tardis.plasma.properties.continuum_processes.recomb_rate_coeff import ( - StimRecombRateCoeff, + StimRecombRateFactor, SpontRecombRateCoeff, + StimRecombRateCoeff, ) diff --git a/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py index 35ab06246f6..a6ea2879d0b 100644 --- a/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py +++ b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py @@ -9,7 +9,7 @@ ) -class StimRecombRateCoeff(Input): +class StimRecombRateFactor(Input): """ Attributes ---------- @@ -18,11 +18,11 @@ class StimRecombRateCoeff(Input): recombination. """ - outputs = ("alpha_stim",) + outputs = ("alpha_stim_factor",) latex_name = (r"\alpha^{\textrm{stim}}_\textrm{estim}",) -class StimRecombRateCoeffOLD(ProcessingPlasmaProperty): +class StimRecombRateCoeff(ProcessingPlasmaProperty): """ Attributes ---------- @@ -35,54 +35,10 @@ class StimRecombRateCoeffOLD(ProcessingPlasmaProperty): def calculate( self, - photo_ion_cross_sections, - alpha_stim_estimator, - photo_ion_norm_factor, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, + alpha_stim_factor, phi_ik, - t_electrons, - boltzmann_factor_photo_ion, - level2continuum_idx, - ): - # Used for initialization - if alpha_stim_estimator is None: - alpha_stim = self.calculate_from_dilute_bb( - photo_ion_cross_sections, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - t_electrons, - boltzmann_factor_photo_ion, - ) - else: - alpha_stim_estimator = bound_free_estimator_array2frame( - alpha_stim_estimator, level2continuum_idx - ) - alpha_stim = alpha_stim_estimator * photo_ion_norm_factor - alpha_stim *= phi_ik.loc[alpha_stim.index] - return alpha_stim - - @staticmethod - def calculate_from_dilute_bb( - photo_ion_cross_sections, - photo_ion_block_references, - photo_ion_index, - dilute_planckian_radiation_field, - t_electrons, - boltzmann_factor_photo_ion, ): - nu = photo_ion_cross_sections["nu"] - x_sect = photo_ion_cross_sections["x_sect"] - j_nus = dilute_planckian_radiation_field.calculate_mean_intensity(nu) - j_nus *= boltzmann_factor_photo_ion - alpha_stim = j_nus.multiply(4.0 * np.pi * x_sect / nu / H, axis=0) - alpha_stim = integrate_array_by_blocks( - alpha_stim.values, nu.values, photo_ion_block_references - ) - alpha_stim = pd.DataFrame(alpha_stim, index=photo_ion_index) - return alpha_stim + return alpha_stim_factor * phi_ik.loc[alpha_stim_factor.index] class SpontRecombRateCoeff(ProcessingPlasmaProperty): @@ -99,7 +55,6 @@ class SpontRecombRateCoeff(ProcessingPlasmaProperty): def calculate( self, photo_ion_cross_sections, - t_electrons, photo_ion_block_references, photo_ion_index, phi_ik, diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index b1fa21c29ff..4cf62169ddb 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -94,6 +94,7 @@ class PlasmaPropertyCollection(list): continuum_interaction_inputs = PlasmaPropertyCollection( [ PhotoIonRateCoeff, + StimRecombRateFactor, BfHeatingRateCoeffEstimator, StimRecombCoolingRateCoeffEstimator, YgData, @@ -101,6 +102,7 @@ class PlasmaPropertyCollection(list): ) continuum_interaction_properties = PlasmaPropertyCollection( [ + StimRecombRateCoeff, PhotoIonizationData, SpontRecombRateCoeff, ThermalLevelBoltzmannFactorLTE, @@ -109,7 +111,6 @@ class PlasmaPropertyCollection(list): ThermalGElectron, ThermalPhiSahaLTE, SahaFactor, - StimRecombRateCoeff, CorrPhotoIonRateCoeff, SpontRecombCoolingRateCoeff, RawRecombTransProbs, diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py index e78a54a481c..7468233be6b 100644 --- a/tardis/plasma/standard_plasmas.py +++ b/tardis/plasma/standard_plasmas.py @@ -2,6 +2,7 @@ import numpy as np import pandas as pd +from astropy import units as u from tardis.plasma import BasePlasma from tardis.plasma.base import PlasmaSolverSettings @@ -221,7 +222,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): gamma=initial_continuum_properties.photo_ionization_rate_coefficient, bf_heating_coeff_estimator=None, stim_recomb_cooling_coeff_estimator=None, - alpha_stim=initial_continuum_properties.stimulated_recombination_rate_coefficient, + alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, ) ##### RADIATIVE RATES SETUP diff --git a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py index c5b5a1177b5..3f49a6629b1 100644 --- a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py +++ b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py @@ -226,5 +226,6 @@ def calculate_mean_intensity_photo_ion_table( @dataclass class ContinuumProperties: - stimulated_recombination_rate_coefficient: pd.DataFrame + # this is not the rate coefficient but misses Phi I_K + stimulated_recombination_rate_factor: pd.DataFrame photo_ionization_rate_coefficient: pd.DataFrame diff --git a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py index aa50fe96990..5fb75a0228c 100644 --- a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py +++ b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py @@ -43,9 +43,9 @@ def test_continuum_estimators( continuum_simulation.plasma.gamma, ) stimulated_recomb_rate_coeff = ( - continuum_properties_dilute_bb.stimulated_recombination_rate_coefficient + continuum_properties_dilute_bb.stimulated_recombination_rate_factor * continuum_plasma.phi_ik.loc[ - continuum_properties_dilute_bb.stimulated_recombination_rate_coefficient.index + continuum_properties_dilute_bb.stimulated_recombination_rate_factor.index ] ) pdt.assert_frame_equal( @@ -76,9 +76,9 @@ def test_continuum_estimators( continuum_simulation.plasma.gamma, ) stimulated_recomb_rate_coeff = ( - continuum_properties_mc.stimulated_recombination_rate_coefficient + continuum_properties_mc.stimulated_recombination_rate_factor * continuum_plasma.phi_ik.loc[ - continuum_properties_dilute_bb.stimulated_recombination_rate_coefficient.index + continuum_properties_dilute_bb.stimulated_recombination_rate_factor.index ] ) pdt.assert_frame_equal( From fcf2563ea6e8f40ac30ece6c7b01e0d4f3af6437 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 11:51:00 -0400 Subject: [PATCH 060/118] start of assemble plasma cleanup --- .../configuration/tests/test_config_reader.py | 2 +- tardis/plasma/standard_plasmas.py | 368 ------------------ tardis/plasma/tests/test_nlte_solver.py | 2 +- .../tests/test_tardis_model_density_config.py | 2 +- tardis/simulation/base.py | 2 +- 5 files changed, 4 insertions(+), 372 deletions(-) delete mode 100644 tardis/plasma/standard_plasmas.py diff --git a/tardis/io/configuration/tests/test_config_reader.py b/tardis/io/configuration/tests/test_config_reader.py index f525557ca63..2fe68ea061d 100644 --- a/tardis/io/configuration/tests/test_config_reader.py +++ b/tardis/io/configuration/tests/test_config_reader.py @@ -10,7 +10,7 @@ from astropy.units import Quantity from tardis.io.configuration.config_reader import Configuration from tardis.plasma.exceptions import PlasmaConfigError -from tardis.plasma.standard_plasmas import assemble_plasma +from tardis.plasma.assembly.standard_plasmas import assemble_plasma def test_convergence_section_parser(): diff --git a/tardis/plasma/standard_plasmas.py b/tardis/plasma/standard_plasmas.py deleted file mode 100644 index 7468233be6b..00000000000 --- a/tardis/plasma/standard_plasmas.py +++ /dev/null @@ -1,368 +0,0 @@ -import logging - -import numpy as np -import pandas as pd -from astropy import units as u - -from tardis.plasma import BasePlasma -from tardis.plasma.base import PlasmaSolverSettings -from tardis.plasma.exceptions import PlasmaConfigError -from tardis.plasma.properties import ( - HeliumNumericalNLTE, - IonNumberDensity, - IonNumberDensityHeNLTE, - LevelBoltzmannFactorNLTE, - MarkovChainTransProbsCollector, - RadiationFieldCorrection, - StimulatedEmissionFactor, -) -from tardis.plasma.properties.base import TransitionProbabilitiesProperty -from tardis.plasma.properties.level_population import LevelNumberDensity -from tardis.plasma.properties.nlte_rate_equation_solver import ( - NLTEPopulationSolverLU, - NLTEPopulationSolverRoot, -) -from tardis.plasma.properties.property_collections import ( - adiabatic_cooling_properties, - basic_inputs, - basic_properties, - continuum_interaction_inputs, - continuum_interaction_properties, - dilute_lte_excitation_properties, - helium_lte_properties, - helium_nlte_properties, - helium_numerical_nlte_properties, - lte_excitation_properties, - lte_ionization_properties, - macro_atom_properties, - nebular_ionization_properties, - nlte_lu_solver_properties, - nlte_properties, - nlte_root_solver_properties, - non_nlte_properties, - two_photon_properties, -) -from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper -from tardis.plasma.radiation_field import DilutePlanckianRadiationField -from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( - DiluteBlackBodyContinuumPropertiesSolver, -) -from tardis.util.base import species_string_to_tuple - -logger = logging.getLogger(__name__) - - -def assemble_plasma(config, simulation_state, atom_data=None): - """ - Create a BasePlasma instance from a Configuration object - and a SimulationState. - - Parameters - ---------- - config : io.config_reader.Configuration - simulation_state : model.SimulationState - atom_data : atomic.AtomData - If None, an attempt will be made to read the atomic data - from config. - - Returns - ------- - : plasma.BasePlasma - - """ - # Convert the nlte species list to a proper format. - nlte_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte.species - ] - - # Convert the continuum interaction species list to a proper format. - continuum_interaction_species = [ - species_string_to_tuple(species) - for species in config.plasma.continuum_interaction.species - ] - continuum_interaction_species = pd.MultiIndex.from_tuples( - continuum_interaction_species, names=["atomic_number", "ion_number"] - ) - - atom_data.prepare_atom_data( - simulation_state.abundance.index, - line_interaction_type=config.plasma.line_interaction_type, - continuum_interaction_species=continuum_interaction_species, - nlte_species=nlte_species, - ) - - # Check if continuum interaction species are in selected_atoms - continuum_atoms = continuum_interaction_species.get_level_values( - "atomic_number" - ) - continuum_atoms_in_selected_atoms = np.all( - continuum_atoms.isin(atom_data.selected_atomic_numbers) - ) - if not continuum_atoms_in_selected_atoms: - raise PlasmaConfigError( - "Not all continuum interaction species " - "belong to atoms that have been specified " - "in the configuration." - ) - - nlte_ionization_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte_ionization_species - ] - nlte_excitation_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte_excitation_species - ] - - dilute_planckian_radiation_field = DilutePlanckianRadiationField( - simulation_state.t_radiative, simulation_state.dilution_factor - ) - kwargs = dict( - dilute_planckian_radiation_field=dilute_planckian_radiation_field, - abundance=simulation_state.abundance, - number_density=simulation_state.elemental_number_density, - atomic_data=atom_data, - time_explosion=simulation_state.time_explosion, - link_t_rad_t_electron=config.plasma.link_t_rad_t_electron, - continuum_interaction_species=continuum_interaction_species, - nlte_ionization_species=nlte_ionization_species, - nlte_excitation_species=nlte_excitation_species, - ) - - plasma_modules = basic_inputs + basic_properties - property_kwargs = {} - - ########### SETTING UP CONTINUUM INTERACTIONS - - if len(config.plasma.continuum_interaction.species) > 0: - line_interaction_type = config.plasma.line_interaction_type - if line_interaction_type != "macroatom": - raise PlasmaConfigError( - "Continuum interactions require line_interaction_type " - f"macroatom (instead of {line_interaction_type})." - ) - - plasma_modules += continuum_interaction_properties - plasma_modules += continuum_interaction_inputs - - if config.plasma.continuum_interaction.enable_adiabatic_cooling: - plasma_modules += adiabatic_cooling_properties - - if config.plasma.continuum_interaction.enable_two_photon_decay: - plasma_modules += two_photon_properties - - transition_probabilities_outputs = [ - plasma_property.transition_probabilities_outputs - for plasma_property in plasma_modules - if issubclass(plasma_property, TransitionProbabilitiesProperty) - ] - transition_probabilities_outputs = [ - item - for sublist in transition_probabilities_outputs - for item in sublist - ] - - property_kwargs[MarkovChainTransProbsCollector] = { - "inputs": transition_probabilities_outputs - } - if ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ): - if config.plasma.nlte_ionization_species: - nlte_ionization_species = config.plasma.nlte_ionization_species - for species in nlte_ionization_species: - if ( - species - not in config.plasma.continuum_interaction.species - ): - raise PlasmaConfigError( - f"NLTE ionization species {species} not in continuum species." - ) - if config.plasma.nlte_excitation_species: - nlte_excitation_species = config.plasma.nlte_excitation_species - for species in nlte_excitation_species: - if ( - species - not in config.plasma.continuum_interaction.species - ): - raise PlasmaConfigError( - f"NLTE excitation species {species} not in continuum species." - ) - property_kwargs[NLTEIndexHelper] = { - "nlte_ionization_species": config.plasma.nlte_ionization_species, - "nlte_excitation_species": config.plasma.nlte_excitation_species, - } - if config.plasma.nlte_solver == "lu": - plasma_modules += nlte_lu_solver_properties - logger.warning( - "LU solver will be inaccurate for NLTE excitation, proceed with caution." - ) - elif config.plasma.nlte_solver == "root": - plasma_modules += nlte_root_solver_properties - else: - raise PlasmaConfigError( - f"NLTE solver type unknown - {config.plasma.nlte_solver}" - ) - - # initializing rates - t_electrons = ( - config.plasma.link_t_rad_t_electron - * dilute_planckian_radiation_field.temperature.to(u.K).value - ) - initial_continuum_solver = DiluteBlackBodyContinuumPropertiesSolver( - atom_data - ) - initial_continuum_properties = initial_continuum_solver.solve( - dilute_planckian_radiation_field, t_electrons - ) - - kwargs.update( - gamma=initial_continuum_properties.photo_ionization_rate_coefficient, - bf_heating_coeff_estimator=None, - stim_recomb_cooling_coeff_estimator=None, - alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, - ) - - ##### RADIATIVE RATES SETUP - - plasma_solver_settings = PlasmaSolverSettings( - RADIATIVE_RATES_TYPE=config.plasma.radiative_rates_type - ) - - if (plasma_solver_settings.RADIATIVE_RATES_TYPE == "dilute-blackbody") or ( - plasma_solver_settings.RADIATIVE_RATES_TYPE == "detailed" - ): - kwargs["j_blues"] = pd.DataFrame( - dilute_planckian_radiation_field.calculate_mean_intensity( - atom_data.lines["nu"].values - ), - index=atom_data.lines.index, - ) - - elif plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody": - planckian_rad_field = ( - dilute_planckian_radiation_field.to_planckian_radiation_field() - ) - kwargs["j_blues"] = pd.DataFrame( - planckian_rad_field.calculate_mean_intensity( - atom_data.lines["nu"].values - ), - index=atom_data.lines.index, - ) - - else: - raise ValueError( - f"radiative_rates_type type unknown - {plasma_solver_settings.RADIATIVE_RATES_TYPE}" - ) - - if config.plasma.excitation == "lte": - plasma_modules += lte_excitation_properties - elif config.plasma.excitation == "dilute-lte": - plasma_modules += dilute_lte_excitation_properties - - if config.plasma.ionization == "lte": - plasma_modules += lte_ionization_properties - elif config.plasma.ionization == "nebular": - plasma_modules += nebular_ionization_properties - - if nlte_species: - plasma_modules += nlte_properties - nlte_conf = config.plasma.nlte - plasma_modules.append(LevelBoltzmannFactorNLTE.from_config(nlte_conf)) - property_kwargs[StimulatedEmissionFactor] = dict( - nlte_species=nlte_species - ) - else: - plasma_modules += non_nlte_properties - - if config.plasma.line_interaction_type in ("downbranch", "macroatom"): - if not config.plasma.continuum_interaction.species: - plasma_modules += macro_atom_properties - - if "delta_treatment" in config.plasma: - property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=config.plasma.delta_treatment - ) - - if ( - config.plasma.helium_treatment == "recomb-nlte" - or config.plasma.helium_treatment == "numerical-nlte" - ) and ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ): - # Prevent the user from using helium NLTE treatment with - # NLTE ionization and excitation treatment. This is because - # the helium_nlte_properties could overwrite the NLTE ionization - # and excitation ion number and electron densities. - # helium_numerical_nlte_properties is also included here because - # it is currently in the same if else block, and thus may block - # the addition of the components from the else block. - raise PlasmaConfigError( - "Helium NLTE treatment is incompatible with the NLTE eonization and excitation treatment." - ) - - # TODO: Disentangle these if else block such that compatible components - # can be added independently. - if config.plasma.helium_treatment == "recomb-nlte": - plasma_modules += helium_nlte_properties - elif config.plasma.helium_treatment == "numerical-nlte": - plasma_modules += helium_numerical_nlte_properties - # TODO: See issue #633 - if config.plasma.heating_rate_data_file in ["none", None]: - raise PlasmaConfigError("Heating rate data file not specified") - else: - property_kwargs[HeliumNumericalNLTE] = dict( - heating_rate_data_file=config.plasma.heating_rate_data_file - ) - else: - # If nlte ionization species are present, we don't want to add the - # IonNumberDensity from helium_lte_properties, since we want - # to use the IonNumberDensity provided by the NLTE solver. - if ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ): - plasma_modules += [LevelNumberDensity] - else: - plasma_modules += helium_lte_properties - - if simulation_state._electron_densities is not None: - electron_densities = pd.Series( - simulation_state._electron_densities.cgs.value - ) - if config.plasma.helium_treatment == "numerical-nlte": - property_kwargs[IonNumberDensityHeNLTE] = dict( - electron_densities=electron_densities - ) - elif ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ) and config.plasma.nlte_solver == "root": - property_kwargs[NLTEPopulationSolverRoot] = dict( - electron_densities=electron_densities - ) - elif ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ) and config.plasma.nlte_solver == "lu": - property_kwargs[NLTEPopulationSolverLU] = dict( - electron_densities=electron_densities - ) - else: - property_kwargs[IonNumberDensity] = dict( - electron_densities=electron_densities - ) - - kwargs["helium_treatment"] = config.plasma.helium_treatment - - plasma = BasePlasma( - plasma_properties=plasma_modules, - property_kwargs=property_kwargs, - plasma_solver_settings=plasma_solver_settings, - **kwargs, - ) - - return plasma diff --git a/tardis/plasma/tests/test_nlte_solver.py b/tardis/plasma/tests/test_nlte_solver.py index 48045d3cf09..35b9b572d3f 100644 --- a/tardis/plasma/tests/test_nlte_solver.py +++ b/tardis/plasma/tests/test_nlte_solver.py @@ -14,7 +14,7 @@ calculate_jacobian_matrix, calculate_rate_matrix, ) -from tardis.plasma.standard_plasmas import assemble_plasma +from tardis.plasma.assembly.standard_plasmas import assemble_plasma @pytest.fixture diff --git a/tardis/plasma/tests/test_tardis_model_density_config.py b/tardis/plasma/tests/test_tardis_model_density_config.py index 20c9ec46cda..7b5be056ddc 100644 --- a/tardis/plasma/tests/test_tardis_model_density_config.py +++ b/tardis/plasma/tests/test_tardis_model_density_config.py @@ -4,7 +4,7 @@ from tardis.io.configuration.config_reader import Configuration from tardis.model import SimulationState -from tardis.plasma.standard_plasmas import assemble_plasma +from tardis.plasma.assembly.standard_plasmas import assemble_plasma @pytest.fixture diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 0334bfd9393..b5be5b46b60 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -16,7 +16,7 @@ ) from tardis.io.util import HDFWriterMixin from tardis.plasma.radiation_field import DilutePlanckianRadiationField -from tardis.plasma.standard_plasmas import assemble_plasma +from tardis.plasma.assembly.standard_plasmas import assemble_plasma from tardis.simulation.convergence import ConvergenceSolver from tardis.spectrum.base import SpectrumSolver from tardis.spectrum.formal_integral import FormalIntegrator From 83240744b37de1e2127eaa2d219a3d308bbada7e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 11:51:33 -0400 Subject: [PATCH 061/118] cleanup standard_plasmas.py --- tardis/plasma/assembly/__init__.py | 0 tardis/plasma/assembly/base.py | 379 +++++++++++++++++++++++++++++ 2 files changed, 379 insertions(+) create mode 100644 tardis/plasma/assembly/__init__.py create mode 100644 tardis/plasma/assembly/base.py diff --git a/tardis/plasma/assembly/__init__.py b/tardis/plasma/assembly/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py new file mode 100644 index 00000000000..2a3c6724568 --- /dev/null +++ b/tardis/plasma/assembly/base.py @@ -0,0 +1,379 @@ +import logging + +import numpy as np +import pandas as pd +from astropy import units as u + +from tardis.plasma import BasePlasma +from tardis.plasma.base import PlasmaSolverSettings +from tardis.plasma.exceptions import PlasmaConfigError +from tardis.plasma.properties import ( + HeliumNumericalNLTE, + IonNumberDensity, + IonNumberDensityHeNLTE, + LevelBoltzmannFactorNLTE, + MarkovChainTransProbsCollector, + RadiationFieldCorrection, + StimulatedEmissionFactor, +) +from tardis.plasma.properties.base import TransitionProbabilitiesProperty +from tardis.plasma.properties.level_population import LevelNumberDensity +from tardis.plasma.properties.nlte_rate_equation_solver import ( + NLTEPopulationSolverLU, + NLTEPopulationSolverRoot, +) +from tardis.plasma.properties.property_collections import ( + adiabatic_cooling_properties, + basic_inputs, + basic_properties, + continuum_interaction_inputs, + continuum_interaction_properties, + dilute_lte_excitation_properties, + helium_lte_properties, + helium_nlte_properties, + helium_numerical_nlte_properties, + lte_excitation_properties, + lte_ionization_properties, + macro_atom_properties, + nebular_ionization_properties, + nlte_lu_solver_properties, + nlte_properties, + nlte_root_solver_properties, + non_nlte_properties, + two_photon_properties, +) +from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper +from tardis.plasma.radiation_field import DilutePlanckianRadiationField +from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( + DiluteBlackBodyContinuumPropertiesSolver, +) +from tardis.util.base import species_string_to_tuple + +logger = logging.getLogger(__name__) + + +def assemble_plasma(config, simulation_state, atom_data=None): + """ + Create a BasePlasma instance from a Configuration object + and a SimulationState. + + Parameters + ---------- + config : io.config_reader.Configuration + simulation_state : model.SimulationState + atom_data : atomic.AtomData + If None, an attempt will be made to read the atomic data + from config. + + Returns + ------- + : plasma.BasePlasma + + """ + # Convert the nlte species list to a proper format. + nlte_species = [ + species_string_to_tuple(species) + for species in config.plasma.nlte.species + ] + + # Convert the continuum interaction species list to a proper format. + continuum_interaction_species = [ + species_string_to_tuple(species) + for species in config.plasma.continuum_interaction.species + ] + continuum_interaction_species = pd.MultiIndex.from_tuples( + continuum_interaction_species, names=["atomic_number", "ion_number"] + ) + + atom_data.prepare_atom_data( + simulation_state.abundance.index, + line_interaction_type=config.plasma.line_interaction_type, + continuum_interaction_species=continuum_interaction_species, + nlte_species=nlte_species, + ) + + # Check if continuum interaction species are in selected_atoms + continuum_atoms = continuum_interaction_species.get_level_values( + "atomic_number" + ) + + continuum_atoms_in_selected_atoms = np.all( + continuum_atoms.isin(atom_data.selected_atomic_numbers) + ) + if not continuum_atoms_in_selected_atoms: + raise PlasmaConfigError( + "Not all continuum interaction species " + "belong to atoms that have been specified " + "in the configuration." + ) + + nlte_ionization_species = [ + species_string_to_tuple(species) + for species in config.plasma.nlte_ionization_species + ] + nlte_excitation_species = [ + species_string_to_tuple(species) + for species in config.plasma.nlte_excitation_species + ] + + dilute_planckian_radiation_field = DilutePlanckianRadiationField( + simulation_state.t_radiative, simulation_state.dilution_factor + ) + kwargs = dict( + dilute_planckian_radiation_field=dilute_planckian_radiation_field, + abundance=simulation_state.abundance, + number_density=simulation_state.elemental_number_density, + atomic_data=atom_data, + time_explosion=simulation_state.time_explosion, + link_t_rad_t_electron=config.plasma.link_t_rad_t_electron, + continuum_interaction_species=continuum_interaction_species, + nlte_ionization_species=nlte_ionization_species, + nlte_excitation_species=nlte_excitation_species, + ) + + plasma_modules = basic_inputs + basic_properties + property_kwargs = {} + + ########### SETTING UP CONTINUUM INTERACTIONS + + if len(config.plasma.continuum_interaction.species) > 0: + setup_continuum_interactions( + config, + atom_data, + dilute_planckian_radiation_field, + kwargs, + property_kwargs, + ) + + ##### RADIATIVE RATES SETUP + + plasma_solver_settings = PlasmaSolverSettings( + RADIATIVE_RATES_TYPE=config.plasma.radiative_rates_type + ) + + if (plasma_solver_settings.RADIATIVE_RATES_TYPE == "dilute-blackbody") or ( + plasma_solver_settings.RADIATIVE_RATES_TYPE == "detailed" + ): + kwargs["j_blues"] = pd.DataFrame( + dilute_planckian_radiation_field.calculate_mean_intensity( + atom_data.lines["nu"].values + ), + index=atom_data.lines.index, + ) + + elif plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody": + planckian_rad_field = ( + dilute_planckian_radiation_field.to_planckian_radiation_field() + ) + kwargs["j_blues"] = pd.DataFrame( + planckian_rad_field.calculate_mean_intensity( + atom_data.lines["nu"].values + ), + index=atom_data.lines.index, + ) + + else: + raise ValueError( + f"radiative_rates_type type unknown - {plasma_solver_settings.RADIATIVE_RATES_TYPE}" + ) + + if config.plasma.excitation == "lte": + plasma_modules += lte_excitation_properties + elif config.plasma.excitation == "dilute-lte": + plasma_modules += dilute_lte_excitation_properties + + if config.plasma.ionization == "lte": + plasma_modules += lte_ionization_properties + elif config.plasma.ionization == "nebular": + plasma_modules += nebular_ionization_properties + + if nlte_species: + plasma_modules += nlte_properties + nlte_conf = config.plasma.nlte + plasma_modules.append(LevelBoltzmannFactorNLTE.from_config(nlte_conf)) + property_kwargs[StimulatedEmissionFactor] = dict( + nlte_species=nlte_species + ) + else: + plasma_modules += non_nlte_properties + + if config.plasma.line_interaction_type in ("downbranch", "macroatom"): + if not config.plasma.continuum_interaction.species: + plasma_modules += macro_atom_properties + + if "delta_treatment" in config.plasma: + property_kwargs[RadiationFieldCorrection] = dict( + delta_treatment=config.plasma.delta_treatment + ) + + if ( + config.plasma.helium_treatment == "recomb-nlte" + or config.plasma.helium_treatment == "numerical-nlte" + ) and ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ): + # Prevent the user from using helium NLTE treatment with + # NLTE ionization and excitation treatment. This is because + # the helium_nlte_properties could overwrite the NLTE ionization + # and excitation ion number and electron densities. + # helium_numerical_nlte_properties is also included here because + # it is currently in the same if else block, and thus may block + # the addition of the components from the else block. + raise PlasmaConfigError( + "Helium NLTE treatment is incompatible with the NLTE eonization and excitation treatment." + ) + + # TODO: Disentangle these if else block such that compatible components + # can be added independently. + if config.plasma.helium_treatment == "recomb-nlte": + plasma_modules += helium_nlte_properties + elif config.plasma.helium_treatment == "numerical-nlte": + plasma_modules += helium_numerical_nlte_properties + # TODO: See issue #633 + if config.plasma.heating_rate_data_file in ["none", None]: + raise PlasmaConfigError("Heating rate data file not specified") + else: + property_kwargs[HeliumNumericalNLTE] = dict( + heating_rate_data_file=config.plasma.heating_rate_data_file + ) + else: + # If nlte ionization species are present, we don't want to add the + # IonNumberDensity from helium_lte_properties, since we want + # to use the IonNumberDensity provided by the NLTE solver. + if ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ): + plasma_modules += [LevelNumberDensity] + else: + plasma_modules += helium_lte_properties + + if simulation_state._electron_densities is not None: + electron_densities = pd.Series( + simulation_state._electron_densities.cgs.value + ) + if config.plasma.helium_treatment == "numerical-nlte": + property_kwargs[IonNumberDensityHeNLTE] = dict( + electron_densities=electron_densities + ) + elif ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ) and config.plasma.nlte_solver == "root": + property_kwargs[NLTEPopulationSolverRoot] = dict( + electron_densities=electron_densities + ) + elif ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ) and config.plasma.nlte_solver == "lu": + property_kwargs[NLTEPopulationSolverLU] = dict( + electron_densities=electron_densities + ) + else: + property_kwargs[IonNumberDensity] = dict( + electron_densities=electron_densities + ) + + kwargs["helium_treatment"] = config.plasma.helium_treatment + + plasma = BasePlasma( + plasma_properties=plasma_modules, + property_kwargs=property_kwargs, + plasma_solver_settings=plasma_solver_settings, + **kwargs, + ) + + return plasma + + +def setup_continuum_interactions( + config, + atom_data, + dilute_planckian_radiation_field, + kwargs, + property_kwargs, +): + continuum_plasma_modules = [] + line_interaction_type = config.plasma.line_interaction_type + if line_interaction_type != "macroatom": + raise PlasmaConfigError( + "Continuum interactions require line_interaction_type " + f"macroatom (instead of {line_interaction_type})." + ) + + continuum_plasma_modules += continuum_interaction_properties + continuum_plasma_modules += continuum_interaction_inputs + + if config.plasma.continuum_interaction.enable_adiabatic_cooling: + continuum_plasma_modules += adiabatic_cooling_properties + + if config.plasma.continuum_interaction.enable_two_photon_decay: + continuum_plasma_modules += two_photon_properties + + transition_probabilities_outputs = [ + plasma_property.transition_probabilities_outputs + for plasma_property in continuum_plasma_modules + if issubclass(plasma_property, TransitionProbabilitiesProperty) + ] + transition_probabilities_outputs = [ + item for sublist in transition_probabilities_outputs for item in sublist + ] + + property_kwargs[MarkovChainTransProbsCollector] = { + "inputs": transition_probabilities_outputs + } + if ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ): + if config.plasma.nlte_ionization_species: + nlte_ionization_species = config.plasma.nlte_ionization_species + for species in nlte_ionization_species: + if species not in config.plasma.continuum_interaction.species: + raise PlasmaConfigError( + f"NLTE ionization species {species} not in continuum species." + ) + if config.plasma.nlte_excitation_species: + nlte_excitation_species = config.plasma.nlte_excitation_species + for species in nlte_excitation_species: + if species not in config.plasma.continuum_interaction.species: + raise PlasmaConfigError( + f"NLTE excitation species {species} not in continuum species." + ) + property_kwargs[NLTEIndexHelper] = { + "nlte_ionization_species": config.plasma.nlte_ionization_species, + "nlte_excitation_species": config.plasma.nlte_excitation_species, + } + if config.plasma.nlte_solver == "lu": + continuum_plasma_modules += nlte_lu_solver_properties + logger.warning( + "LU solver will be inaccurate for NLTE excitation, proceed with caution." + ) + elif config.plasma.nlte_solver == "root": + continuum_plasma_modules += nlte_root_solver_properties + else: + raise PlasmaConfigError( + f"NLTE solver type unknown - {config.plasma.nlte_solver}" + ) + + # initializing rates + t_electrons = ( + config.plasma.link_t_rad_t_electron + * dilute_planckian_radiation_field.temperature.to(u.K).value + ) + initial_continuum_solver = DiluteBlackBodyContinuumPropertiesSolver( + atom_data + ) + initial_continuum_properties = initial_continuum_solver.solve( + dilute_planckian_radiation_field, t_electrons + ) + + kwargs.update( + gamma=initial_continuum_properties.photo_ionization_rate_coefficient, + bf_heating_coeff_estimator=None, + stim_recomb_cooling_coeff_estimator=None, + alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, + ) + return continuum_plasma_modules From 60239f8045c51b581dacaf382bd04b6203fc60f1 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 11:59:37 -0400 Subject: [PATCH 062/118] updated tests --- tardis/io/configuration/tests/test_config_reader.py | 2 +- tardis/plasma/tests/test_nlte_solver.py | 2 +- tardis/plasma/tests/test_tardis_model_density_config.py | 2 +- tardis/simulation/base.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tardis/io/configuration/tests/test_config_reader.py b/tardis/io/configuration/tests/test_config_reader.py index 2fe68ea061d..e224af75fe0 100644 --- a/tardis/io/configuration/tests/test_config_reader.py +++ b/tardis/io/configuration/tests/test_config_reader.py @@ -10,7 +10,7 @@ from astropy.units import Quantity from tardis.io.configuration.config_reader import Configuration from tardis.plasma.exceptions import PlasmaConfigError -from tardis.plasma.assembly.standard_plasmas import assemble_plasma +from tardis.plasma.assembly.base import assemble_plasma def test_convergence_section_parser(): diff --git a/tardis/plasma/tests/test_nlte_solver.py b/tardis/plasma/tests/test_nlte_solver.py index 35b9b572d3f..2936a0d7339 100644 --- a/tardis/plasma/tests/test_nlte_solver.py +++ b/tardis/plasma/tests/test_nlte_solver.py @@ -14,7 +14,7 @@ calculate_jacobian_matrix, calculate_rate_matrix, ) -from tardis.plasma.assembly.standard_plasmas import assemble_plasma +from tardis.plasma.assembly.base import assemble_plasma @pytest.fixture diff --git a/tardis/plasma/tests/test_tardis_model_density_config.py b/tardis/plasma/tests/test_tardis_model_density_config.py index 7b5be056ddc..df6edac0c8d 100644 --- a/tardis/plasma/tests/test_tardis_model_density_config.py +++ b/tardis/plasma/tests/test_tardis_model_density_config.py @@ -4,7 +4,7 @@ from tardis.io.configuration.config_reader import Configuration from tardis.model import SimulationState -from tardis.plasma.assembly.standard_plasmas import assemble_plasma +from tardis.plasma.assembly.base import assemble_plasma @pytest.fixture diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index b5be5b46b60..3d62b615cc5 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -16,7 +16,7 @@ ) from tardis.io.util import HDFWriterMixin from tardis.plasma.radiation_field import DilutePlanckianRadiationField -from tardis.plasma.assembly.standard_plasmas import assemble_plasma +from tardis.plasma.assembly.base import assemble_plasma from tardis.simulation.convergence import ConvergenceSolver from tardis.spectrum.base import SpectrumSolver from tardis.spectrum.formal_integral import FormalIntegrator From 5e4902a9199e4db97f66c15795c3d14fb8f415e0 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 13:46:17 -0400 Subject: [PATCH 063/118] some more cleanup --- .../estimators/continuum_radfield_properties.py | 7 +++---- .../estimators/tests/test_continuum_property_solver.py | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py index 3f49a6629b1..9ee55da09ba 100644 --- a/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py +++ b/tardis/transport/montecarlo/estimators/continuum_radfield_properties.py @@ -109,7 +109,7 @@ def solve( photo_ion_rate_coeff = self.calculate_photo_ionization_rate_coefficient( mean_intensity_photo_ion_df ) - stimulated_recomb_rate_coeff = ( + stimulated_recomb_rate_factor = ( self.calculate_stimulated_recomb_rate_factor( mean_intensity_photo_ion_df, photo_ion_boltzmann_factor, @@ -117,7 +117,7 @@ def solve( ) return ContinuumProperties( - stimulated_recomb_rate_coeff, photo_ion_rate_coeff + stimulated_recomb_rate_factor, photo_ion_rate_coeff ) def calculate_photo_ionization_rate_coefficient( @@ -214,14 +214,13 @@ def calculate_mean_intensity_photo_ion_table( self.atom_data.photoionization_data.nu.values ) ) - mean_intensity_df = pd.DataFrame( + return pd.DataFrame( mean_intensity, index=self.atom_data.photoionization_data.index, columns=np.arange( len(dilute_blackbody_radiationfield_state.temperature) ), ) - return mean_intensity_df @dataclass diff --git a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py index 5fb75a0228c..2751861736b 100644 --- a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py +++ b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py @@ -65,10 +65,10 @@ def test_continuum_estimators( ) continuum_plasma.update( - gamma_estimator=transport_state.radfield_mc_estimators.photo_ion_estimator, - alpha_stim_estimator=transport_state.radfield_mc_estimators.stim_recomb_estimator, - bf_heating_coeff_estimator=transport_state.radfield_mc_estimators.bf_heating_estimator, - stim_recomb_cooling_coeff_estimator=transport_state.radfield_mc_estimators.stim_recomb_cooling_estimator, + gamma=continuum_properties_mc.photo_ionization_rate_coefficient, + alpha_stim_factor=continuum_properties_mc.stimulated_recombination_rate_factor, + bf_heating_coeff_estimator=None, + stim_recomb_cooling_coeff_estimator=None, ) pdt.assert_frame_equal( From 9f92256a5e0b39b80b9bcb0f343560e5a634114d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 13:48:03 -0400 Subject: [PATCH 064/118] fix benchmarks --- benchmarks/opacities_opacity.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/benchmarks/opacities_opacity.py b/benchmarks/opacities_opacity.py index e536e5c49a5..de571cc2184 100644 --- a/benchmarks/opacities_opacity.py +++ b/benchmarks/opacities_opacity.py @@ -4,9 +4,9 @@ from asv_runner.benchmarks.mark import parameterize -import tardis.opacities.compton_opacity_calculation import tardis.opacities.opacities as calculate_opacity from benchmarks.benchmark_base import BenchmarkBase +from tardis.opacities.opacities import compton_opacity_calculation class BenchmarkMontecarloMontecarloNumbaOpacities(BenchmarkBase): @@ -29,9 +29,7 @@ class BenchmarkMontecarloMontecarloNumbaOpacities(BenchmarkBase): } ) def time_compton_opacity_calculation(self, electron_number_density, energy): - tardis.opacities.compton_opacity_calculation.compton_opacity_calculation( - energy, electron_number_density - ) + compton_opacity_calculation(energy, electron_number_density) @parameterize( { From 3c7ee67695f60ad5654b5deff0c9e419797e59f9 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 14:10:19 -0400 Subject: [PATCH 065/118] cleanup assembly --- tardis/plasma/assembly/legacy_assembly.py | 379 ++++++++++++++++++++++ 1 file changed, 379 insertions(+) create mode 100644 tardis/plasma/assembly/legacy_assembly.py diff --git a/tardis/plasma/assembly/legacy_assembly.py b/tardis/plasma/assembly/legacy_assembly.py new file mode 100644 index 00000000000..2a3c6724568 --- /dev/null +++ b/tardis/plasma/assembly/legacy_assembly.py @@ -0,0 +1,379 @@ +import logging + +import numpy as np +import pandas as pd +from astropy import units as u + +from tardis.plasma import BasePlasma +from tardis.plasma.base import PlasmaSolverSettings +from tardis.plasma.exceptions import PlasmaConfigError +from tardis.plasma.properties import ( + HeliumNumericalNLTE, + IonNumberDensity, + IonNumberDensityHeNLTE, + LevelBoltzmannFactorNLTE, + MarkovChainTransProbsCollector, + RadiationFieldCorrection, + StimulatedEmissionFactor, +) +from tardis.plasma.properties.base import TransitionProbabilitiesProperty +from tardis.plasma.properties.level_population import LevelNumberDensity +from tardis.plasma.properties.nlte_rate_equation_solver import ( + NLTEPopulationSolverLU, + NLTEPopulationSolverRoot, +) +from tardis.plasma.properties.property_collections import ( + adiabatic_cooling_properties, + basic_inputs, + basic_properties, + continuum_interaction_inputs, + continuum_interaction_properties, + dilute_lte_excitation_properties, + helium_lte_properties, + helium_nlte_properties, + helium_numerical_nlte_properties, + lte_excitation_properties, + lte_ionization_properties, + macro_atom_properties, + nebular_ionization_properties, + nlte_lu_solver_properties, + nlte_properties, + nlte_root_solver_properties, + non_nlte_properties, + two_photon_properties, +) +from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper +from tardis.plasma.radiation_field import DilutePlanckianRadiationField +from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( + DiluteBlackBodyContinuumPropertiesSolver, +) +from tardis.util.base import species_string_to_tuple + +logger = logging.getLogger(__name__) + + +def assemble_plasma(config, simulation_state, atom_data=None): + """ + Create a BasePlasma instance from a Configuration object + and a SimulationState. + + Parameters + ---------- + config : io.config_reader.Configuration + simulation_state : model.SimulationState + atom_data : atomic.AtomData + If None, an attempt will be made to read the atomic data + from config. + + Returns + ------- + : plasma.BasePlasma + + """ + # Convert the nlte species list to a proper format. + nlte_species = [ + species_string_to_tuple(species) + for species in config.plasma.nlte.species + ] + + # Convert the continuum interaction species list to a proper format. + continuum_interaction_species = [ + species_string_to_tuple(species) + for species in config.plasma.continuum_interaction.species + ] + continuum_interaction_species = pd.MultiIndex.from_tuples( + continuum_interaction_species, names=["atomic_number", "ion_number"] + ) + + atom_data.prepare_atom_data( + simulation_state.abundance.index, + line_interaction_type=config.plasma.line_interaction_type, + continuum_interaction_species=continuum_interaction_species, + nlte_species=nlte_species, + ) + + # Check if continuum interaction species are in selected_atoms + continuum_atoms = continuum_interaction_species.get_level_values( + "atomic_number" + ) + + continuum_atoms_in_selected_atoms = np.all( + continuum_atoms.isin(atom_data.selected_atomic_numbers) + ) + if not continuum_atoms_in_selected_atoms: + raise PlasmaConfigError( + "Not all continuum interaction species " + "belong to atoms that have been specified " + "in the configuration." + ) + + nlte_ionization_species = [ + species_string_to_tuple(species) + for species in config.plasma.nlte_ionization_species + ] + nlte_excitation_species = [ + species_string_to_tuple(species) + for species in config.plasma.nlte_excitation_species + ] + + dilute_planckian_radiation_field = DilutePlanckianRadiationField( + simulation_state.t_radiative, simulation_state.dilution_factor + ) + kwargs = dict( + dilute_planckian_radiation_field=dilute_planckian_radiation_field, + abundance=simulation_state.abundance, + number_density=simulation_state.elemental_number_density, + atomic_data=atom_data, + time_explosion=simulation_state.time_explosion, + link_t_rad_t_electron=config.plasma.link_t_rad_t_electron, + continuum_interaction_species=continuum_interaction_species, + nlte_ionization_species=nlte_ionization_species, + nlte_excitation_species=nlte_excitation_species, + ) + + plasma_modules = basic_inputs + basic_properties + property_kwargs = {} + + ########### SETTING UP CONTINUUM INTERACTIONS + + if len(config.plasma.continuum_interaction.species) > 0: + setup_continuum_interactions( + config, + atom_data, + dilute_planckian_radiation_field, + kwargs, + property_kwargs, + ) + + ##### RADIATIVE RATES SETUP + + plasma_solver_settings = PlasmaSolverSettings( + RADIATIVE_RATES_TYPE=config.plasma.radiative_rates_type + ) + + if (plasma_solver_settings.RADIATIVE_RATES_TYPE == "dilute-blackbody") or ( + plasma_solver_settings.RADIATIVE_RATES_TYPE == "detailed" + ): + kwargs["j_blues"] = pd.DataFrame( + dilute_planckian_radiation_field.calculate_mean_intensity( + atom_data.lines["nu"].values + ), + index=atom_data.lines.index, + ) + + elif plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody": + planckian_rad_field = ( + dilute_planckian_radiation_field.to_planckian_radiation_field() + ) + kwargs["j_blues"] = pd.DataFrame( + planckian_rad_field.calculate_mean_intensity( + atom_data.lines["nu"].values + ), + index=atom_data.lines.index, + ) + + else: + raise ValueError( + f"radiative_rates_type type unknown - {plasma_solver_settings.RADIATIVE_RATES_TYPE}" + ) + + if config.plasma.excitation == "lte": + plasma_modules += lte_excitation_properties + elif config.plasma.excitation == "dilute-lte": + plasma_modules += dilute_lte_excitation_properties + + if config.plasma.ionization == "lte": + plasma_modules += lte_ionization_properties + elif config.plasma.ionization == "nebular": + plasma_modules += nebular_ionization_properties + + if nlte_species: + plasma_modules += nlte_properties + nlte_conf = config.plasma.nlte + plasma_modules.append(LevelBoltzmannFactorNLTE.from_config(nlte_conf)) + property_kwargs[StimulatedEmissionFactor] = dict( + nlte_species=nlte_species + ) + else: + plasma_modules += non_nlte_properties + + if config.plasma.line_interaction_type in ("downbranch", "macroatom"): + if not config.plasma.continuum_interaction.species: + plasma_modules += macro_atom_properties + + if "delta_treatment" in config.plasma: + property_kwargs[RadiationFieldCorrection] = dict( + delta_treatment=config.plasma.delta_treatment + ) + + if ( + config.plasma.helium_treatment == "recomb-nlte" + or config.plasma.helium_treatment == "numerical-nlte" + ) and ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ): + # Prevent the user from using helium NLTE treatment with + # NLTE ionization and excitation treatment. This is because + # the helium_nlte_properties could overwrite the NLTE ionization + # and excitation ion number and electron densities. + # helium_numerical_nlte_properties is also included here because + # it is currently in the same if else block, and thus may block + # the addition of the components from the else block. + raise PlasmaConfigError( + "Helium NLTE treatment is incompatible with the NLTE eonization and excitation treatment." + ) + + # TODO: Disentangle these if else block such that compatible components + # can be added independently. + if config.plasma.helium_treatment == "recomb-nlte": + plasma_modules += helium_nlte_properties + elif config.plasma.helium_treatment == "numerical-nlte": + plasma_modules += helium_numerical_nlte_properties + # TODO: See issue #633 + if config.plasma.heating_rate_data_file in ["none", None]: + raise PlasmaConfigError("Heating rate data file not specified") + else: + property_kwargs[HeliumNumericalNLTE] = dict( + heating_rate_data_file=config.plasma.heating_rate_data_file + ) + else: + # If nlte ionization species are present, we don't want to add the + # IonNumberDensity from helium_lte_properties, since we want + # to use the IonNumberDensity provided by the NLTE solver. + if ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ): + plasma_modules += [LevelNumberDensity] + else: + plasma_modules += helium_lte_properties + + if simulation_state._electron_densities is not None: + electron_densities = pd.Series( + simulation_state._electron_densities.cgs.value + ) + if config.plasma.helium_treatment == "numerical-nlte": + property_kwargs[IonNumberDensityHeNLTE] = dict( + electron_densities=electron_densities + ) + elif ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ) and config.plasma.nlte_solver == "root": + property_kwargs[NLTEPopulationSolverRoot] = dict( + electron_densities=electron_densities + ) + elif ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ) and config.plasma.nlte_solver == "lu": + property_kwargs[NLTEPopulationSolverLU] = dict( + electron_densities=electron_densities + ) + else: + property_kwargs[IonNumberDensity] = dict( + electron_densities=electron_densities + ) + + kwargs["helium_treatment"] = config.plasma.helium_treatment + + plasma = BasePlasma( + plasma_properties=plasma_modules, + property_kwargs=property_kwargs, + plasma_solver_settings=plasma_solver_settings, + **kwargs, + ) + + return plasma + + +def setup_continuum_interactions( + config, + atom_data, + dilute_planckian_radiation_field, + kwargs, + property_kwargs, +): + continuum_plasma_modules = [] + line_interaction_type = config.plasma.line_interaction_type + if line_interaction_type != "macroatom": + raise PlasmaConfigError( + "Continuum interactions require line_interaction_type " + f"macroatom (instead of {line_interaction_type})." + ) + + continuum_plasma_modules += continuum_interaction_properties + continuum_plasma_modules += continuum_interaction_inputs + + if config.plasma.continuum_interaction.enable_adiabatic_cooling: + continuum_plasma_modules += adiabatic_cooling_properties + + if config.plasma.continuum_interaction.enable_two_photon_decay: + continuum_plasma_modules += two_photon_properties + + transition_probabilities_outputs = [ + plasma_property.transition_probabilities_outputs + for plasma_property in continuum_plasma_modules + if issubclass(plasma_property, TransitionProbabilitiesProperty) + ] + transition_probabilities_outputs = [ + item for sublist in transition_probabilities_outputs for item in sublist + ] + + property_kwargs[MarkovChainTransProbsCollector] = { + "inputs": transition_probabilities_outputs + } + if ( + config.plasma.nlte_ionization_species + or config.plasma.nlte_excitation_species + ): + if config.plasma.nlte_ionization_species: + nlte_ionization_species = config.plasma.nlte_ionization_species + for species in nlte_ionization_species: + if species not in config.plasma.continuum_interaction.species: + raise PlasmaConfigError( + f"NLTE ionization species {species} not in continuum species." + ) + if config.plasma.nlte_excitation_species: + nlte_excitation_species = config.plasma.nlte_excitation_species + for species in nlte_excitation_species: + if species not in config.plasma.continuum_interaction.species: + raise PlasmaConfigError( + f"NLTE excitation species {species} not in continuum species." + ) + property_kwargs[NLTEIndexHelper] = { + "nlte_ionization_species": config.plasma.nlte_ionization_species, + "nlte_excitation_species": config.plasma.nlte_excitation_species, + } + if config.plasma.nlte_solver == "lu": + continuum_plasma_modules += nlte_lu_solver_properties + logger.warning( + "LU solver will be inaccurate for NLTE excitation, proceed with caution." + ) + elif config.plasma.nlte_solver == "root": + continuum_plasma_modules += nlte_root_solver_properties + else: + raise PlasmaConfigError( + f"NLTE solver type unknown - {config.plasma.nlte_solver}" + ) + + # initializing rates + t_electrons = ( + config.plasma.link_t_rad_t_electron + * dilute_planckian_radiation_field.temperature.to(u.K).value + ) + initial_continuum_solver = DiluteBlackBodyContinuumPropertiesSolver( + atom_data + ) + initial_continuum_properties = initial_continuum_solver.solve( + dilute_planckian_radiation_field, t_electrons + ) + + kwargs.update( + gamma=initial_continuum_properties.photo_ionization_rate_coefficient, + bf_heating_coeff_estimator=None, + stim_recomb_cooling_coeff_estimator=None, + alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, + ) + return continuum_plasma_modules From 0890747ac77b314fe34789beaf526be7e1bdb93b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 14:10:37 -0400 Subject: [PATCH 066/118] cleanup assembly --- .../configuration/tests/test_config_reader.py | 2 +- tardis/plasma/assembly/base.py | 404 ++---------------- tardis/plasma/tests/test_nlte_solver.py | 2 +- .../tests/test_tardis_model_density_config.py | 2 +- tardis/simulation/base.py | 2 +- .../tests/test_continuum_property_solver.py | 3 +- 6 files changed, 40 insertions(+), 375 deletions(-) diff --git a/tardis/io/configuration/tests/test_config_reader.py b/tardis/io/configuration/tests/test_config_reader.py index e224af75fe0..784797a2f03 100644 --- a/tardis/io/configuration/tests/test_config_reader.py +++ b/tardis/io/configuration/tests/test_config_reader.py @@ -10,7 +10,7 @@ from astropy.units import Quantity from tardis.io.configuration.config_reader import Configuration from tardis.plasma.exceptions import PlasmaConfigError -from tardis.plasma.assembly.base import assemble_plasma +from tardis.plasma.assembly.legacy_assembly import assemble_plasma def test_convergence_section_parser(): diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 2a3c6724568..b8b384d6419 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -1,379 +1,45 @@ -import logging - -import numpy as np import pandas as pd -from astropy import units as u - -from tardis.plasma import BasePlasma -from tardis.plasma.base import PlasmaSolverSettings -from tardis.plasma.exceptions import PlasmaConfigError -from tardis.plasma.properties import ( - HeliumNumericalNLTE, - IonNumberDensity, - IonNumberDensityHeNLTE, - LevelBoltzmannFactorNLTE, - MarkovChainTransProbsCollector, - RadiationFieldCorrection, - StimulatedEmissionFactor, -) -from tardis.plasma.properties.base import TransitionProbabilitiesProperty -from tardis.plasma.properties.level_population import LevelNumberDensity -from tardis.plasma.properties.nlte_rate_equation_solver import ( - NLTEPopulationSolverLU, - NLTEPopulationSolverRoot, -) -from tardis.plasma.properties.property_collections import ( - adiabatic_cooling_properties, - basic_inputs, - basic_properties, - continuum_interaction_inputs, - continuum_interaction_properties, - dilute_lte_excitation_properties, - helium_lte_properties, - helium_nlte_properties, - helium_numerical_nlte_properties, - lte_excitation_properties, - lte_ionization_properties, - macro_atom_properties, - nebular_ionization_properties, - nlte_lu_solver_properties, - nlte_properties, - nlte_root_solver_properties, - non_nlte_properties, - two_photon_properties, -) -from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper -from tardis.plasma.radiation_field import DilutePlanckianRadiationField -from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( - DiluteBlackBodyContinuumPropertiesSolver, -) from tardis.util.base import species_string_to_tuple -logger = logging.getLogger(__name__) - - -def assemble_plasma(config, simulation_state, atom_data=None): - """ - Create a BasePlasma instance from a Configuration object - and a SimulationState. - - Parameters - ---------- - config : io.config_reader.Configuration - simulation_state : model.SimulationState - atom_data : atomic.AtomData - If None, an attempt will be made to read the atomic data - from config. - - Returns - ------- - : plasma.BasePlasma - - """ - # Convert the nlte species list to a proper format. - nlte_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte.species - ] - - # Convert the continuum interaction species list to a proper format. - continuum_interaction_species = [ - species_string_to_tuple(species) - for species in config.plasma.continuum_interaction.species - ] - continuum_interaction_species = pd.MultiIndex.from_tuples( - continuum_interaction_species, names=["atomic_number", "ion_number"] - ) - - atom_data.prepare_atom_data( - simulation_state.abundance.index, - line_interaction_type=config.plasma.line_interaction_type, - continuum_interaction_species=continuum_interaction_species, - nlte_species=nlte_species, - ) - - # Check if continuum interaction species are in selected_atoms - continuum_atoms = continuum_interaction_species.get_level_values( - "atomic_number" - ) - - continuum_atoms_in_selected_atoms = np.all( - continuum_atoms.isin(atom_data.selected_atomic_numbers) - ) - if not continuum_atoms_in_selected_atoms: - raise PlasmaConfigError( - "Not all continuum interaction species " - "belong to atoms that have been specified " - "in the configuration." - ) - - nlte_ionization_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte_ionization_species - ] - nlte_excitation_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte_excitation_species - ] - - dilute_planckian_radiation_field = DilutePlanckianRadiationField( - simulation_state.t_radiative, simulation_state.dilution_factor - ) - kwargs = dict( - dilute_planckian_radiation_field=dilute_planckian_radiation_field, - abundance=simulation_state.abundance, - number_density=simulation_state.elemental_number_density, - atomic_data=atom_data, - time_explosion=simulation_state.time_explosion, - link_t_rad_t_electron=config.plasma.link_t_rad_t_electron, - continuum_interaction_species=continuum_interaction_species, - nlte_ionization_species=nlte_ionization_species, - nlte_excitation_species=nlte_excitation_species, - ) - - plasma_modules = basic_inputs + basic_properties - property_kwargs = {} - - ########### SETTING UP CONTINUUM INTERACTIONS - - if len(config.plasma.continuum_interaction.species) > 0: - setup_continuum_interactions( - config, - atom_data, - dilute_planckian_radiation_field, - kwargs, - property_kwargs, - ) - - ##### RADIATIVE RATES SETUP - - plasma_solver_settings = PlasmaSolverSettings( - RADIATIVE_RATES_TYPE=config.plasma.radiative_rates_type - ) - - if (plasma_solver_settings.RADIATIVE_RATES_TYPE == "dilute-blackbody") or ( - plasma_solver_settings.RADIATIVE_RATES_TYPE == "detailed" - ): - kwargs["j_blues"] = pd.DataFrame( - dilute_planckian_radiation_field.calculate_mean_intensity( - atom_data.lines["nu"].values - ), - index=atom_data.lines.index, - ) - - elif plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody": - planckian_rad_field = ( - dilute_planckian_radiation_field.to_planckian_radiation_field() - ) - kwargs["j_blues"] = pd.DataFrame( - planckian_rad_field.calculate_mean_intensity( - atom_data.lines["nu"].values - ), - index=atom_data.lines.index, - ) - - else: - raise ValueError( - f"radiative_rates_type type unknown - {plasma_solver_settings.RADIATIVE_RATES_TYPE}" - ) - if config.plasma.excitation == "lte": - plasma_modules += lte_excitation_properties - elif config.plasma.excitation == "dilute-lte": - plasma_modules += dilute_lte_excitation_properties - - if config.plasma.ionization == "lte": - plasma_modules += lte_ionization_properties - elif config.plasma.ionization == "nebular": - plasma_modules += nebular_ionization_properties - - if nlte_species: - plasma_modules += nlte_properties - nlte_conf = config.plasma.nlte - plasma_modules.append(LevelBoltzmannFactorNLTE.from_config(nlte_conf)) - property_kwargs[StimulatedEmissionFactor] = dict( - nlte_species=nlte_species - ) - else: - plasma_modules += non_nlte_properties - - if config.plasma.line_interaction_type in ("downbranch", "macroatom"): - if not config.plasma.continuum_interaction.species: - plasma_modules += macro_atom_properties - - if "delta_treatment" in config.plasma: - property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=config.plasma.delta_treatment - ) - - if ( - config.plasma.helium_treatment == "recomb-nlte" - or config.plasma.helium_treatment == "numerical-nlte" - ) and ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ): - # Prevent the user from using helium NLTE treatment with - # NLTE ionization and excitation treatment. This is because - # the helium_nlte_properties could overwrite the NLTE ionization - # and excitation ion number and electron densities. - # helium_numerical_nlte_properties is also included here because - # it is currently in the same if else block, and thus may block - # the addition of the components from the else block. - raise PlasmaConfigError( - "Helium NLTE treatment is incompatible with the NLTE eonization and excitation treatment." - ) +class PlasmaSolverFactory: - # TODO: Disentangle these if else block such that compatible components - # can be added independently. - if config.plasma.helium_treatment == "recomb-nlte": - plasma_modules += helium_nlte_properties - elif config.plasma.helium_treatment == "numerical-nlte": - plasma_modules += helium_numerical_nlte_properties - # TODO: See issue #633 - if config.plasma.heating_rate_data_file in ["none", None]: - raise PlasmaConfigError("Heating rate data file not specified") - else: - property_kwargs[HeliumNumericalNLTE] = dict( - heating_rate_data_file=config.plasma.heating_rate_data_file - ) - else: - # If nlte ionization species are present, we don't want to add the - # IonNumberDensity from helium_lte_properties, since we want - # to use the IonNumberDensity provided by the NLTE solver. - if ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ): - plasma_modules += [LevelNumberDensity] - else: - plasma_modules += helium_lte_properties + nlte_species: list + continuum_interaction_species: pd.MultiIndex - if simulation_state._electron_densities is not None: - electron_densities = pd.Series( - simulation_state._electron_densities.cgs.value + def __init__(self, config) -> None: + self.set_nlte_species_from_string(config.plasma.nlte.species) + self.set_continuum_interaction_species_from_string( + config.plasma.continuum_interaction.species ) - if config.plasma.helium_treatment == "numerical-nlte": - property_kwargs[IonNumberDensityHeNLTE] = dict( - electron_densities=electron_densities - ) - elif ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ) and config.plasma.nlte_solver == "root": - property_kwargs[NLTEPopulationSolverRoot] = dict( - electron_densities=electron_densities - ) - elif ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ) and config.plasma.nlte_solver == "lu": - property_kwargs[NLTEPopulationSolverLU] = dict( - electron_densities=electron_densities - ) - else: - property_kwargs[IonNumberDensity] = dict( - electron_densities=electron_densities - ) - kwargs["helium_treatment"] = config.plasma.helium_treatment - - plasma = BasePlasma( - plasma_properties=plasma_modules, - property_kwargs=property_kwargs, - plasma_solver_settings=plasma_solver_settings, - **kwargs, - ) - - return plasma - - -def setup_continuum_interactions( - config, - atom_data, - dilute_planckian_radiation_field, - kwargs, - property_kwargs, -): - continuum_plasma_modules = [] - line_interaction_type = config.plasma.line_interaction_type - if line_interaction_type != "macroatom": - raise PlasmaConfigError( - "Continuum interactions require line_interaction_type " - f"macroatom (instead of {line_interaction_type})." - ) - - continuum_plasma_modules += continuum_interaction_properties - continuum_plasma_modules += continuum_interaction_inputs - - if config.plasma.continuum_interaction.enable_adiabatic_cooling: - continuum_plasma_modules += adiabatic_cooling_properties - - if config.plasma.continuum_interaction.enable_two_photon_decay: - continuum_plasma_modules += two_photon_properties - - transition_probabilities_outputs = [ - plasma_property.transition_probabilities_outputs - for plasma_property in continuum_plasma_modules - if issubclass(plasma_property, TransitionProbabilitiesProperty) - ] - transition_probabilities_outputs = [ - item for sublist in transition_probabilities_outputs for item in sublist - ] + # Convert the continuum interaction species list to a proper format. - property_kwargs[MarkovChainTransProbsCollector] = { - "inputs": transition_probabilities_outputs - } - if ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species + def set_continuum_interaction_species_from_string( + self, continuum_interaction_species ): - if config.plasma.nlte_ionization_species: - nlte_ionization_species = config.plasma.nlte_ionization_species - for species in nlte_ionization_species: - if species not in config.plasma.continuum_interaction.species: - raise PlasmaConfigError( - f"NLTE ionization species {species} not in continuum species." - ) - if config.plasma.nlte_excitation_species: - nlte_excitation_species = config.plasma.nlte_excitation_species - for species in nlte_excitation_species: - if species not in config.plasma.continuum_interaction.species: - raise PlasmaConfigError( - f"NLTE excitation species {species} not in continuum species." - ) - property_kwargs[NLTEIndexHelper] = { - "nlte_ionization_species": config.plasma.nlte_ionization_species, - "nlte_excitation_species": config.plasma.nlte_excitation_species, - } - if config.plasma.nlte_solver == "lu": - continuum_plasma_modules += nlte_lu_solver_properties - logger.warning( - "LU solver will be inaccurate for NLTE excitation, proceed with caution." - ) - elif config.plasma.nlte_solver == "root": - continuum_plasma_modules += nlte_root_solver_properties - else: - raise PlasmaConfigError( - f"NLTE solver type unknown - {config.plasma.nlte_solver}" - ) - - # initializing rates - t_electrons = ( - config.plasma.link_t_rad_t_electron - * dilute_planckian_radiation_field.temperature.to(u.K).value - ) - initial_continuum_solver = DiluteBlackBodyContinuumPropertiesSolver( - atom_data - ) - initial_continuum_properties = initial_continuum_solver.solve( - dilute_planckian_radiation_field, t_electrons - ) - - kwargs.update( - gamma=initial_continuum_properties.photo_ionization_rate_coefficient, - bf_heating_coeff_estimator=None, - stim_recomb_cooling_coeff_estimator=None, - alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, - ) - return continuum_plasma_modules + continuum_interaction_species = [ + species_string_to_tuple(species) + for species in continuum_interaction_species + ] + self.continuum_interaction_species = pd.MultiIndex.from_tuples( + continuum_interaction_species, names=["atomic_number", "ion_number"] + ) + + def set_nlte_species_from_string(self, nlte_species): + """ + Sets the non-LTE species from a string representation. + + Parameters + ---------- + nlte_species : str + A string representation of the non-LTE species. + + Returns + ------- + None + This method does not return anything. + """ + self.nlte_species = [ + species_string_to_tuple(species) for species in nlte_species + ] diff --git a/tardis/plasma/tests/test_nlte_solver.py b/tardis/plasma/tests/test_nlte_solver.py index 2936a0d7339..27d5bafc617 100644 --- a/tardis/plasma/tests/test_nlte_solver.py +++ b/tardis/plasma/tests/test_nlte_solver.py @@ -14,7 +14,7 @@ calculate_jacobian_matrix, calculate_rate_matrix, ) -from tardis.plasma.assembly.base import assemble_plasma +from tardis.plasma.assembly.legacy_assembly import assemble_plasma @pytest.fixture diff --git a/tardis/plasma/tests/test_tardis_model_density_config.py b/tardis/plasma/tests/test_tardis_model_density_config.py index df6edac0c8d..5551e7c4eb4 100644 --- a/tardis/plasma/tests/test_tardis_model_density_config.py +++ b/tardis/plasma/tests/test_tardis_model_density_config.py @@ -4,7 +4,7 @@ from tardis.io.configuration.config_reader import Configuration from tardis.model import SimulationState -from tardis.plasma.assembly.base import assemble_plasma +from tardis.plasma.assembly.legacy_assembly import assemble_plasma @pytest.fixture diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 3d62b615cc5..1626efbc4b4 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -16,7 +16,7 @@ ) from tardis.io.util import HDFWriterMixin from tardis.plasma.radiation_field import DilutePlanckianRadiationField -from tardis.plasma.assembly.base import assemble_plasma +from tardis.plasma.assembly.legacy_assembly import assemble_plasma from tardis.simulation.convergence import ConvergenceSolver from tardis.spectrum.base import SpectrumSolver from tardis.spectrum.formal_integral import FormalIntegrator diff --git a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py index 5fb75a0228c..eb831f26e57 100644 --- a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py +++ b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py @@ -1,14 +1,13 @@ from copy import deepcopy -import numpy.testing as npt import pandas.testing as pdt import pytest +from tardis.simulation import Simulation from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( DiluteBlackBodyContinuumPropertiesSolver, MCContinuumPropertiesSolver, ) -from tardis.simulation import Simulation @pytest.mark.continuum From 7540e55f24b8c5d76924c939eeec36c4b4653630 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Jul 2024 17:30:35 -0400 Subject: [PATCH 067/118] working on the restructure --- tardis/plasma/assembly/base.py | 209 ++++++++++++++++++++- tardis/plasma/assembly/legacy_assembly.py | 2 +- tardis/plasma/base.py | 2 - tardis/plasma/properties/ion_population.py | 4 +- 4 files changed, 207 insertions(+), 10 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index b8b384d6419..d331144b77b 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -1,27 +1,208 @@ +import numpy as np import pandas as pd + +from tardis.plasma.exceptions import PlasmaConfigError +from tardis.plasma.properties.property_collections import ( + basic_inputs, + basic_properties, + dilute_lte_excitation_properties, + lte_excitation_properties, + lte_ionization_properties, + nebular_ionization_properties, + nlte_properties, + non_nlte_properties, +) from tardis.util.base import species_string_to_tuple +from tardis.plasma.properties import ( + HeliumNumericalNLTE, + IonNumberDensity, + IonNumberDensityHeNLTE, + LevelBoltzmannFactorNLTE, + MarkovChainTransProbsCollector, + RadiationFieldCorrection, + StimulatedEmissionFactor, +) + + +def map_species_from_string(species): + return [species_string_to_tuple(spec) for spec in species] + + class PlasmaSolverFactory: - nlte_species: list continuum_interaction_species: pd.MultiIndex + line_interaction_type: str = "scatter" + + legacy_nlte_species: list = [] + nlte_exciation_species: list = [] + nlte_ionization_species: list = [] + plasma_modules: list = [] + kwargs: dict = {} + property_kwargs: dict = {} + + excitation_analytical_approximation: str = "lte" + ionization_analytical_approximation: str = "lte" + + radiative_rates_type: str = "dilute-blackbody" + + nebular_ionization_delta_treatment: tuple # species to use for the delta_treatment in nebular ionization ML93 + + def __init__(self, config, atom_data, atomic_numbers) -> None: - def __init__(self, config) -> None: self.set_nlte_species_from_string(config.plasma.nlte.species) self.set_continuum_interaction_species_from_string( config.plasma.continuum_interaction.species ) + self.line_interaction_type = config.plasma.line_interaction_type - # Convert the continuum interaction species list to a proper format. + self.atom_data = atom_data + self.atom_data.prepare_atom_data( + atomic_numbers, + line_interaction_type=config.plasma.line_interaction_type, + continuum_interaction_species=self.continuum_interaction_species, + nlte_species=self.legacy_nlte_species, + ) + + #### THIS IS VERY BAD BUT FOR NOW IS CHICKEN/EGG + # Check if continuum interaction species are in selected_atoms + continuum_atoms = self.continuum_interaction_species.get_level_values( + "atomic_number" + ) + + continuum_atoms_in_selected_atoms = np.all( + continuum_atoms.isin(atom_data.selected_atomic_numbers) + ) + if not continuum_atoms_in_selected_atoms: + raise PlasmaConfigError( + "Not all continuum interaction species " + "belong to atoms that have been specified " + "in the configuration." + ) + ##### ---------------------------- + + self.plasma_modules = basic_inputs + basic_properties + + self.kwargs = dict( + link_t_rad_t_electron=config.plasma.link_t_rad_t_electron, + continuum_interaction_species=continuum_interaction_species, + nlte_ionization_species=nlte_ionization_species, + nlte_excitation_species=nlte_excitation_species, + ) + + self.setup_analytical_approximations(config) + + self.setup_legacy_nlte(config.plasma.nlte) + if self.line_interaction_type in ("downbranch", "macroatom") and ( + len(self.continuum_interaction_species) == 0 + ): + self.setup_legacy_macro_atom(config) + + def setup_legacy_macro_atom(self, macro_atom_config=None): + self.plasma_modules += macro_atom_properties + + if macro_atom_config is not None: + self.plasma_modules.append( + MarkovChainTransProbsCollector.from_config(macro_atom_config) + ) + + def setup_legacy_nlte(self, nlte_config): + if len(self.legacy_nlte_species) > 0: + self.plasma_modules += nlte_properties + self.plasma_modules.append( + LevelBoltzmannFactorNLTE.from_config(nlte_config) + ) + self.property_kwargs[StimulatedEmissionFactor] = dict( + nlte_species=self.legacy_nlte_species + ) + else: + self.plasma_modules += non_nlte_properties + + def setup_analytical_approximations(self, plasma_config): + """ + Setup the analytical approximations for excitation and ionization. + + Returns + ------- + None + """ + self.excitation_analytical_approximation = plasma_config.excitation + self.ionization_analytical_approximation = plasma_config.ionization + plasma_modules = [] + if self.excitation_analytical_approximation == "lte": + plasma_modules += lte_excitation_properties + elif self.excitation_analytical_approximation == "dilute-lte": + plasma_modules += dilute_lte_excitation_properties + else: + raise PlasmaConfigError( + f'Invalid excitation analytical approximation. Configured as {self.excitation_analytical_approximation} but needs to be either "lte" or "dilute-lte"' + ) + + if self.ionization_analytical_approximation == "lte": + plasma_modules += lte_ionization_properties + elif self.ionization_analytical_approximation == "nebular": + plasma_modules += nebular_ionization_properties + if "delta_treatment" in plasma_config: + self.property_kwargs[RadiationFieldCorrection] = dict( + delta_treatment=plasma_config.delta_treatment + ) + else: + raise PlasmaConfigError( + f'Invalid excitation analytical approximation. Configured as {self.ionization_analytical_approximation} but needs to be either "lte" or "nebular"' + ) + + def setup_radiative_rates(self, radiative_rates_config): + ##### RADIATIVE RATES SETUP + + if (self.radiative_rates_type == "dilute-blackbody") or ( + self.radiative_rates_type == "detailed" + ): + self.kwargs["j_blues"] = pd.DataFrame( + dilute_planckian_radiation_field.calculate_mean_intensity( + atom_data.lines["nu"].values + ), + index=atom_data.lines.index, + ) + + elif plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody": + planckian_rad_field = ( + dilute_planckian_radiation_field.to_planckian_radiation_field() + ) + kwargs["j_blues"] = pd.DataFrame( + planckian_rad_field.calculate_mean_intensity( + atom_data.lines["nu"].values + ), + index=atom_data.lines.index, + ) + + else: + raise ValueError( + f"radiative_rates_type type unknown - {plasma_solver_settings.RADIATIVE_RATES_TYPE}" + ) + + self.radiative_rates_type = radiative_rates_config.type def set_continuum_interaction_species_from_string( self, continuum_interaction_species ): + """ + Set the continuum interaction species from a list of species strings. + + Parameters + ---------- + continuum_interaction_species : list of str + List of species strings representing the continuum interaction species. + + Returns + ------- + None + """ continuum_interaction_species = [ species_string_to_tuple(species) for species in continuum_interaction_species ] + self.continuum_interaction_species = pd.MultiIndex.from_tuples( continuum_interaction_species, names=["atomic_number", "ion_number"] ) @@ -40,6 +221,22 @@ def set_nlte_species_from_string(self, nlte_species): None This method does not return anything. """ - self.nlte_species = [ - species_string_to_tuple(species) for species in nlte_species - ] + self.legacy_nlte_species = map_species_from_string(nlte_species) + + def assemble( + self, dilute_planckian_radiation_field, simulation_state, atom_data + ): + + kwargs = dict( + time_explosion=simulation_state.time_explosion, + dilute_planckian_radiation_field=dilute_planckian_radiation_field, + abundance=simulation_state.abundance, + number_density=simulation_state.elemental_number_density, + atomic_data=atom_data, + ) + + return BasePlasma( + plasma_properties=self.plasma_modules, + property_kwargs=self.property_kwargs, + **kwargs, + ) diff --git a/tardis/plasma/assembly/legacy_assembly.py b/tardis/plasma/assembly/legacy_assembly.py index 2a3c6724568..bd163497ce7 100644 --- a/tardis/plasma/assembly/legacy_assembly.py +++ b/tardis/plasma/assembly/legacy_assembly.py @@ -221,7 +221,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): # it is currently in the same if else block, and thus may block # the addition of the components from the else block. raise PlasmaConfigError( - "Helium NLTE treatment is incompatible with the NLTE eonization and excitation treatment." + "Helium NLTE treatment is incompatible with the NLTE ionization and excitation treatment." ) # TODO: Disentangle these if else block such that compatible components diff --git a/tardis/plasma/base.py b/tardis/plasma/base.py index 8a42c32dfdb..b6b781a691d 100644 --- a/tardis/plasma/base.py +++ b/tardis/plasma/base.py @@ -26,11 +26,9 @@ class BasePlasma(PlasmaWriterMixin): def __init__( self, plasma_properties, - plasma_solver_settings, property_kwargs=None, **kwargs, ): - self.plasma_solver_settings = plasma_solver_settings self.outputs_dict = {} self.input_properties = [] self.plasma_properties = self._init_properties( diff --git a/tardis/plasma/properties/ion_population.py b/tardis/plasma/properties/ion_population.py index 10f440b95c7..1d342163e21 100644 --- a/tardis/plasma/properties/ion_population.py +++ b/tardis/plasma/properties/ion_population.py @@ -221,7 +221,9 @@ def calculate( self._set_chi_0(ionization_data) if self.delta_treatment is None: if self.departure_coefficient is None: - departure_coefficient = 1.0 / w + departure_coefficient = ( + 1.0 / w + ) # see Equation 13 and explanations on page 451 lower right in ML 93 else: departure_coefficient = self.departure_coefficient radiation_field_correction = -np.ones( From e29ae2212817900c4734d923151ef96248b7eec8 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 14:54:25 -0400 Subject: [PATCH 068/118] slowly fixing the assembly module --- tardis/plasma/assembly/base.py | 352 +++++++++++++++++---- tardis/plasma/assembly/legacy_assembly.py | 357 +--------------------- 2 files changed, 302 insertions(+), 407 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index d331144b77b..2b990027c36 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -1,30 +1,53 @@ +import logging + import numpy as np import pandas as pd +from astropy import units as u +from tardis.plasma import BasePlasma from tardis.plasma.exceptions import PlasmaConfigError +from tardis.plasma.properties import ( + HeliumNumericalNLTE, + IonNumberDensity, + IonNumberDensityHeNLTE, + LevelBoltzmannFactorNLTE, + MarkovChainTransProbsCollector, + RadiationFieldCorrection, + StimulatedEmissionFactor, +) +from tardis.plasma.properties.base import TransitionProbabilitiesProperty +from tardis.plasma.properties.level_population import LevelNumberDensity +from tardis.plasma.properties.nlte_rate_equation_solver import ( + NLTEPopulationSolverLU, + NLTEPopulationSolverRoot, +) from tardis.plasma.properties.property_collections import ( + adiabatic_cooling_properties, basic_inputs, basic_properties, + continuum_interaction_inputs, + continuum_interaction_properties, dilute_lte_excitation_properties, + helium_lte_properties, + helium_nlte_properties, + helium_numerical_nlte_properties, lte_excitation_properties, lte_ionization_properties, + macro_atom_properties, nebular_ionization_properties, + nlte_lu_solver_properties, nlte_properties, + nlte_root_solver_properties, non_nlte_properties, + two_photon_properties, ) -from tardis.util.base import species_string_to_tuple - - -from tardis.plasma.properties import ( - HeliumNumericalNLTE, - IonNumberDensity, - IonNumberDensityHeNLTE, - LevelBoltzmannFactorNLTE, - MarkovChainTransProbsCollector, - RadiationFieldCorrection, - StimulatedEmissionFactor, +from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper +from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( + DiluteBlackBodyContinuumPropertiesSolver, ) +from tardis.util.base import species_string_to_tuple +logger = logging.getLogger(__name__) def map_species_from_string(species): return [species_string_to_tuple(spec) for spec in species] @@ -32,22 +55,36 @@ def map_species_from_string(species): class PlasmaSolverFactory: - continuum_interaction_species: pd.MultiIndex - line_interaction_type: str = "scatter" + ## Analytical Approximations + excitation_analytical_approximation: str = "lte" + ionization_analytical_approximation: str = "lte" + nebular_ionization_delta_treatment: tuple # species to use for the delta_treatment in nebular ionization ML93 + link_t_rad_t_electron: float = 1.0 + + radiative_rates_type: str = "dilute-blackbody" + + ## Statistical Balance Solver legacy_nlte_species: list = [] - nlte_exciation_species: list = [] + + nlte_excitation_species: list = [] nlte_ionization_species: list = [] - plasma_modules: list = [] - kwargs: dict = {} - property_kwargs: dict = {} + nlte_solver: str = "lu" - excitation_analytical_approximation: str = "lte" - ionization_analytical_approximation: str = "lte" + ## Helium Treatment options + helium_treatment: str = "none" + heating_rate_data_file: str = "none" - radiative_rates_type: str = "dilute-blackbody" + ## Continuum Interaction + continuum_interaction_species: pd.MultiIndex - nebular_ionization_delta_treatment: tuple # species to use for the delta_treatment in nebular ionization ML93 + ## Opacities + line_interaction_type: str = "scatter" + + ## Assembly properties + plasma_modules: list = [] + kwargs: dict = {} + property_kwargs: dict = {} def __init__(self, config, atom_data, atomic_numbers) -> None: @@ -83,31 +120,105 @@ def __init__(self, config, atom_data, atomic_numbers) -> None: ##### ---------------------------- self.plasma_modules = basic_inputs + basic_properties + self.link_t_rad_t_electron = config.plasma.link_t_rad_t_electron - self.kwargs = dict( - link_t_rad_t_electron=config.plasma.link_t_rad_t_electron, - continuum_interaction_species=continuum_interaction_species, - nlte_ionization_species=nlte_ionization_species, - nlte_excitation_species=nlte_excitation_species, - ) - - self.setup_analytical_approximations(config) + self.setup_analytical_approximations(config.plasma) self.setup_legacy_nlte(config.plasma.nlte) if self.line_interaction_type in ("downbranch", "macroatom") and ( len(self.continuum_interaction_species) == 0 ): - self.setup_legacy_macro_atom(config) + self.setup_legacy_macro_atom() + + self.helium_treatment = config.plasma.helium_treatment + self.heating_rate_data_file = config.plasma.heating_rate_data_file + self.setup_helium_treatment() + if len(config.plasma.continuum_interaction.species) > 0: + self.setup_continuum_interactions( + config.plasma.continuum_interaction + ) - def setup_legacy_macro_atom(self, macro_atom_config=None): - self.plasma_modules += macro_atom_properties + def setup_helium_treatment(self): + """ + Set up the helium treatment for the plasma assembly. - if macro_atom_config is not None: - self.plasma_modules.append( - MarkovChainTransProbsCollector.from_config(macro_atom_config) + Parameters + ---------- + helium_treatment : str + The type of helium treatment to be used. Possible values are: + - "recomb-nlte": Use recombination NLTE treatment for helium. + - "numerical-nlte": Use numerical NLTE treatment for helium. + + heating_rate_data_file : str or None + The path to the heating rate data file. Required when using + "numerical-nlte" helium treatment. + + Raises + ------ + PlasmaConfigError + If the helium NLTE treatment is incompatible with the NLTE ionization + and excitation treatment. + + If the heating rate data file is not specified when using + "numerical-nlte" helium treatment. + """ + if ( + self.helium_treatment == "recomb-nlte" + or self.helium_treatment == "numerical-nlte" + ) and ( + len(self.nlte_ionization_species + self.nlte_excitation_species) > 0 + ): + # Prevent the user from using helium NLTE treatment with + # NLTE ionization and excitation treatment. This is because + # the helium_nlte_properties could overwrite the NLTE ionization + # and excitation ion number and electron densities. + # helium_numerical_nlte_properties is also included here because + # it is currently in the same if else block, and thus may block + # the addition of the components from the else block. + raise PlasmaConfigError( + "Helium NLTE treatment is incompatible with the NLTE ionization and excitation treatment." ) + # TODO: Disentangle these if else block such that compatible components + # can be added independently. + if self.helium_treatment == "recomb-nlte": + self.plasma_modules += helium_nlte_properties + elif self.helium_treatment == "numerical-nlte": + self.plasma_modules += helium_numerical_nlte_properties + if heating_rate_data_file in ["none", None]: + raise PlasmaConfigError("Heating rate data file not specified") + self.property_kwargs[HeliumNumericalNLTE] = dict( + heating_rate_data_file=heating_rate_data_file + ) + else: + # If nlte ionization species are present, we don't want to add the + # IonNumberDensity from helium_lte_properties, since we want + # to use the IonNumberDensity provided by the NLTE solver. + if ( + len(self.nlte_ionization_species + self.nlte_excitation_species) + > 0 + ): + self.plasma_modules.append(LevelNumberDensity) + else: + self.plasma_modules += helium_lte_properties + + def setup_legacy_macro_atom(self): + self.plasma_modules += macro_atom_properties + def setup_legacy_nlte(self, nlte_config): + """ + Set up the non-LTE (NLTE) properties for the legacy species. + + Parameters: + ----------- + nlte_config : dict + A dictionary containing the NLTE configuration. + + Notes: + ------ + This method adds the NLTE properties for the legacy species to the plasma modules. + If there are no legacy NLTE species, it adds the non-NLTE properties instead. + """ if len(self.legacy_nlte_species) > 0: self.plasma_modules += nlte_properties self.plasma_modules.append( @@ -129,20 +240,20 @@ def setup_analytical_approximations(self, plasma_config): """ self.excitation_analytical_approximation = plasma_config.excitation self.ionization_analytical_approximation = plasma_config.ionization - plasma_modules = [] + if self.excitation_analytical_approximation == "lte": - plasma_modules += lte_excitation_properties + self.plasma_modules += lte_excitation_properties elif self.excitation_analytical_approximation == "dilute-lte": - plasma_modules += dilute_lte_excitation_properties + self.plasma_modules += dilute_lte_excitation_properties else: raise PlasmaConfigError( f'Invalid excitation analytical approximation. Configured as {self.excitation_analytical_approximation} but needs to be either "lte" or "dilute-lte"' ) if self.ionization_analytical_approximation == "lte": - plasma_modules += lte_ionization_properties + self.plasma_modules += lte_ionization_properties elif self.ionization_analytical_approximation == "nebular": - plasma_modules += nebular_ionization_properties + self.plasma_modules += nebular_ionization_properties if "delta_treatment" in plasma_config: self.property_kwargs[RadiationFieldCorrection] = dict( delta_treatment=plasma_config.delta_treatment @@ -152,36 +263,34 @@ def setup_analytical_approximations(self, plasma_config): f'Invalid excitation analytical approximation. Configured as {self.ionization_analytical_approximation} but needs to be either "lte" or "nebular"' ) - def setup_radiative_rates(self, radiative_rates_config): - ##### RADIATIVE RATES SETUP - + def initialize_j_blues(self, dilute_planckian_radiation_field, lines_df): if (self.radiative_rates_type == "dilute-blackbody") or ( self.radiative_rates_type == "detailed" ): - self.kwargs["j_blues"] = pd.DataFrame( + j_blues = pd.DataFrame( dilute_planckian_radiation_field.calculate_mean_intensity( - atom_data.lines["nu"].values + lines_df.nu.values ), - index=atom_data.lines.index, + index=lines_df.index, ) - elif plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody": + elif self.radiative_rates_type == "blackbody": planckian_rad_field = ( dilute_planckian_radiation_field.to_planckian_radiation_field() ) - kwargs["j_blues"] = pd.DataFrame( + j_blues = pd.DataFrame( planckian_rad_field.calculate_mean_intensity( - atom_data.lines["nu"].values + lines_df.nu.values ), - index=atom_data.lines.index, + index=lines_df.index, ) else: raise ValueError( - f"radiative_rates_type type unknown - {plasma_solver_settings.RADIATIVE_RATES_TYPE}" + f"radiative_rates_type type unknown - {self.radiative_rates_type}" ) - self.radiative_rates_type = radiative_rates_config.type + return j_blues def set_continuum_interaction_species_from_string( self, continuum_interaction_species @@ -223,18 +332,149 @@ def set_nlte_species_from_string(self, nlte_species): """ self.legacy_nlte_species = map_species_from_string(nlte_species) - def assemble( - self, dilute_planckian_radiation_field, simulation_state, atom_data - ): + def setup_continuum_interactions(self, config_continuum_interaction): + line_interaction_type = self.line_interaction_type + if line_interaction_type != "macroatom": + raise PlasmaConfigError( + "Continuum interactions require line_interaction_type " + f"macroatom (instead of {line_interaction_type})." + ) + + self.plasma_modules += continuum_interaction_properties + self.plasma_modules += continuum_interaction_inputs + + if config_continuum_interaction.enable_adiabatic_cooling: + self.plasma_modules += adiabatic_cooling_properties + + if config_continuum_interaction.enable_two_photon_decay: + self.plasma_modules += two_photon_properties + + transition_probabilities_outputs = [ + plasma_property.transition_probabilities_outputs + for plasma_property in self.plasma_modules + if issubclass(plasma_property, TransitionProbabilitiesProperty) + ] + transition_probabilities_outputs = [ + item + for sublist in transition_probabilities_outputs + for item in sublist + ] + + self.property_kwargs[MarkovChainTransProbsCollector] = { + "inputs": transition_probabilities_outputs + } + if len(self.nlte_ionization_species + self.nlte_excitation_species) > 0: + if len(self.nlte_ionization_species) > 0: + nlte_ionization_species = self.nlte_ionization_species + for species in nlte_ionization_species: + if species not in self.continuum_interaction_species: + raise PlasmaConfigError( + f"NLTE ionization species {species} not in continuum species." + ) + if len(self.nlte_excitation_species) > 0: + nlte_excitation_species = self.nlte_excitation_species + for species in nlte_excitation_species: + if species not in self.continuum_interaction.species: + raise PlasmaConfigError( + f"NLTE excitation species {species} not in continuum species." + ) + self.property_kwargs[NLTEIndexHelper] = { + "nlte_ionization_species": self.nlte_ionization_species, + "nlte_excitation_species": self.nlte_excitation_species, + } + if self.nlte_solver == "lu": + self.plasma_modules += nlte_lu_solver_properties + logger.warning( + "LU solver will be inaccurate for NLTE excitation, proceed with caution." + ) + elif self.nlte_solver == "root": + self.plasma_modules += nlte_root_solver_properties + else: + raise PlasmaConfigError( + f"NLTE solver type unknown - {self.nlte_solver}" + ) + + def setup_electron_densities(self, electron_densities): + if self.helium_treatment == "numerical-nlte": + self.property_kwargs[IonNumberDensityHeNLTE] = dict( + electron_densities=electron_densities + ) + elif ( + len(self.nlte_ionization_species + self.nlte_excitation_species) > 0 + ) and self.nlte_solver == "root": + self.property_kwargs[NLTEPopulationSolverRoot] = dict( + electron_densities=electron_densities + ) + elif ( + len(self.nlte_ionization_species + self.nlte_excitation_species) > 0 + ) and self.nlte_solver == "lu": + self.property_kwargs[NLTEPopulationSolverLU] = dict( + electron_densities=electron_densities + ) + else: + self.property_kwargs[IonNumberDensity] = dict( + electron_densities=electron_densities + ) + + def initialize_continuum_properties(self, dilute_planckian_radiation_field): + """ + Initialize the continuum properties of the plasma. + + Parameters + ---------- + dilute_planckian_radiation_field : DilutePlanckianRadiationField + The dilute Planckian radiation field. + + Returns + ------- + initial_continuum_properties : `~tardis.plasma.properties.ContinuumProperties` + The initial continuum properties of the plasma. + """ + t_electrons = dilute_planckian_radiation_field.temperature.to(u.K).value + + initial_continuum_solver = DiluteBlackBodyContinuumPropertiesSolver( + self.atom_data + ) + initial_continuum_properties = initial_continuum_solver.solve( + dilute_planckian_radiation_field, t_electrons + ) + return initial_continuum_properties + + def assemble(self, dilute_planckian_radiation_field, simulation_state): + j_blues = self.initialize_j_blues( + dilute_planckian_radiation_field, self.atom_data.lines + ) kwargs = dict( time_explosion=simulation_state.time_explosion, dilute_planckian_radiation_field=dilute_planckian_radiation_field, abundance=simulation_state.abundance, number_density=simulation_state.elemental_number_density, - atomic_data=atom_data, + link_t_rad_t_electron=self.link_t_rad_t_electron, + atomic_data=self.atom_data, + j_blues=j_blues, + continuum_interaction_species=self.continuum_interaction_species, + nlte_ionization_species=self.nlte_ionization_species, + nlte_excitation_species=self.nlte_excitation_species, ) + if len(self.continuum_interaction_species) > 0: + initial_continuum_properties = self.initialize_continuum_properties( + dilute_planckian_radiation_field + ) + kwargs.update( + gamma=initial_continuum_properties.photo_ionization_rate_coefficient, + bf_heating_coeff_estimator=None, + stim_recomb_cooling_coeff_estimator=None, + alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, + ) + + if simulation_state._electron_densities is not None: + electron_densities = pd.Series( + simulation_state._electron_densities.cgs.value + ) + self.setup_electron_densities(electron_densities) + kwargs["helium_treatment"] = self.helium_treatment return BasePlasma( plasma_properties=self.plasma_modules, property_kwargs=self.property_kwargs, diff --git a/tardis/plasma/assembly/legacy_assembly.py b/tardis/plasma/assembly/legacy_assembly.py index bd163497ce7..7e45266dffc 100644 --- a/tardis/plasma/assembly/legacy_assembly.py +++ b/tardis/plasma/assembly/legacy_assembly.py @@ -1,55 +1,5 @@ -import logging - -import numpy as np -import pandas as pd -from astropy import units as u - -from tardis.plasma import BasePlasma -from tardis.plasma.base import PlasmaSolverSettings -from tardis.plasma.exceptions import PlasmaConfigError -from tardis.plasma.properties import ( - HeliumNumericalNLTE, - IonNumberDensity, - IonNumberDensityHeNLTE, - LevelBoltzmannFactorNLTE, - MarkovChainTransProbsCollector, - RadiationFieldCorrection, - StimulatedEmissionFactor, -) -from tardis.plasma.properties.base import TransitionProbabilitiesProperty -from tardis.plasma.properties.level_population import LevelNumberDensity -from tardis.plasma.properties.nlte_rate_equation_solver import ( - NLTEPopulationSolverLU, - NLTEPopulationSolverRoot, -) -from tardis.plasma.properties.property_collections import ( - adiabatic_cooling_properties, - basic_inputs, - basic_properties, - continuum_interaction_inputs, - continuum_interaction_properties, - dilute_lte_excitation_properties, - helium_lte_properties, - helium_nlte_properties, - helium_numerical_nlte_properties, - lte_excitation_properties, - lte_ionization_properties, - macro_atom_properties, - nebular_ionization_properties, - nlte_lu_solver_properties, - nlte_properties, - nlte_root_solver_properties, - non_nlte_properties, - two_photon_properties, -) -from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper +from tardis.plasma.assembly.base import PlasmaSolverFactory from tardis.plasma.radiation_field import DilutePlanckianRadiationField -from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( - DiluteBlackBodyContinuumPropertiesSolver, -) -from tardis.util.base import species_string_to_tuple - -logger = logging.getLogger(__name__) def assemble_plasma(config, simulation_state, atom_data=None): @@ -70,310 +20,15 @@ def assemble_plasma(config, simulation_state, atom_data=None): : plasma.BasePlasma """ - # Convert the nlte species list to a proper format. - nlte_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte.species - ] - - # Convert the continuum interaction species list to a proper format. - continuum_interaction_species = [ - species_string_to_tuple(species) - for species in config.plasma.continuum_interaction.species - ] - continuum_interaction_species = pd.MultiIndex.from_tuples( - continuum_interaction_species, names=["atomic_number", "ion_number"] - ) - - atom_data.prepare_atom_data( - simulation_state.abundance.index, - line_interaction_type=config.plasma.line_interaction_type, - continuum_interaction_species=continuum_interaction_species, - nlte_species=nlte_species, + atomic_numbers = simulation_state.abundance.index + plasma_solver_factory = PlasmaSolverFactory( + config, atom_data, atomic_numbers ) - # Check if continuum interaction species are in selected_atoms - continuum_atoms = continuum_interaction_species.get_level_values( - "atomic_number" - ) - - continuum_atoms_in_selected_atoms = np.all( - continuum_atoms.isin(atom_data.selected_atomic_numbers) - ) - if not continuum_atoms_in_selected_atoms: - raise PlasmaConfigError( - "Not all continuum interaction species " - "belong to atoms that have been specified " - "in the configuration." - ) - - nlte_ionization_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte_ionization_species - ] - nlte_excitation_species = [ - species_string_to_tuple(species) - for species in config.plasma.nlte_excitation_species - ] - dilute_planckian_radiation_field = DilutePlanckianRadiationField( simulation_state.t_radiative, simulation_state.dilution_factor ) - kwargs = dict( - dilute_planckian_radiation_field=dilute_planckian_radiation_field, - abundance=simulation_state.abundance, - number_density=simulation_state.elemental_number_density, - atomic_data=atom_data, - time_explosion=simulation_state.time_explosion, - link_t_rad_t_electron=config.plasma.link_t_rad_t_electron, - continuum_interaction_species=continuum_interaction_species, - nlte_ionization_species=nlte_ionization_species, - nlte_excitation_species=nlte_excitation_species, - ) - - plasma_modules = basic_inputs + basic_properties - property_kwargs = {} - - ########### SETTING UP CONTINUUM INTERACTIONS - - if len(config.plasma.continuum_interaction.species) > 0: - setup_continuum_interactions( - config, - atom_data, - dilute_planckian_radiation_field, - kwargs, - property_kwargs, - ) - - ##### RADIATIVE RATES SETUP - - plasma_solver_settings = PlasmaSolverSettings( - RADIATIVE_RATES_TYPE=config.plasma.radiative_rates_type - ) - - if (plasma_solver_settings.RADIATIVE_RATES_TYPE == "dilute-blackbody") or ( - plasma_solver_settings.RADIATIVE_RATES_TYPE == "detailed" - ): - kwargs["j_blues"] = pd.DataFrame( - dilute_planckian_radiation_field.calculate_mean_intensity( - atom_data.lines["nu"].values - ), - index=atom_data.lines.index, - ) - - elif plasma_solver_settings.RADIATIVE_RATES_TYPE == "blackbody": - planckian_rad_field = ( - dilute_planckian_radiation_field.to_planckian_radiation_field() - ) - kwargs["j_blues"] = pd.DataFrame( - planckian_rad_field.calculate_mean_intensity( - atom_data.lines["nu"].values - ), - index=atom_data.lines.index, - ) - - else: - raise ValueError( - f"radiative_rates_type type unknown - {plasma_solver_settings.RADIATIVE_RATES_TYPE}" - ) - - if config.plasma.excitation == "lte": - plasma_modules += lte_excitation_properties - elif config.plasma.excitation == "dilute-lte": - plasma_modules += dilute_lte_excitation_properties - - if config.plasma.ionization == "lte": - plasma_modules += lte_ionization_properties - elif config.plasma.ionization == "nebular": - plasma_modules += nebular_ionization_properties - - if nlte_species: - plasma_modules += nlte_properties - nlte_conf = config.plasma.nlte - plasma_modules.append(LevelBoltzmannFactorNLTE.from_config(nlte_conf)) - property_kwargs[StimulatedEmissionFactor] = dict( - nlte_species=nlte_species - ) - else: - plasma_modules += non_nlte_properties - - if config.plasma.line_interaction_type in ("downbranch", "macroatom"): - if not config.plasma.continuum_interaction.species: - plasma_modules += macro_atom_properties - - if "delta_treatment" in config.plasma: - property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=config.plasma.delta_treatment - ) - - if ( - config.plasma.helium_treatment == "recomb-nlte" - or config.plasma.helium_treatment == "numerical-nlte" - ) and ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ): - # Prevent the user from using helium NLTE treatment with - # NLTE ionization and excitation treatment. This is because - # the helium_nlte_properties could overwrite the NLTE ionization - # and excitation ion number and electron densities. - # helium_numerical_nlte_properties is also included here because - # it is currently in the same if else block, and thus may block - # the addition of the components from the else block. - raise PlasmaConfigError( - "Helium NLTE treatment is incompatible with the NLTE ionization and excitation treatment." - ) - - # TODO: Disentangle these if else block such that compatible components - # can be added independently. - if config.plasma.helium_treatment == "recomb-nlte": - plasma_modules += helium_nlte_properties - elif config.plasma.helium_treatment == "numerical-nlte": - plasma_modules += helium_numerical_nlte_properties - # TODO: See issue #633 - if config.plasma.heating_rate_data_file in ["none", None]: - raise PlasmaConfigError("Heating rate data file not specified") - else: - property_kwargs[HeliumNumericalNLTE] = dict( - heating_rate_data_file=config.plasma.heating_rate_data_file - ) - else: - # If nlte ionization species are present, we don't want to add the - # IonNumberDensity from helium_lte_properties, since we want - # to use the IonNumberDensity provided by the NLTE solver. - if ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ): - plasma_modules += [LevelNumberDensity] - else: - plasma_modules += helium_lte_properties - - if simulation_state._electron_densities is not None: - electron_densities = pd.Series( - simulation_state._electron_densities.cgs.value - ) - if config.plasma.helium_treatment == "numerical-nlte": - property_kwargs[IonNumberDensityHeNLTE] = dict( - electron_densities=electron_densities - ) - elif ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ) and config.plasma.nlte_solver == "root": - property_kwargs[NLTEPopulationSolverRoot] = dict( - electron_densities=electron_densities - ) - elif ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ) and config.plasma.nlte_solver == "lu": - property_kwargs[NLTEPopulationSolverLU] = dict( - electron_densities=electron_densities - ) - else: - property_kwargs[IonNumberDensity] = dict( - electron_densities=electron_densities - ) - - kwargs["helium_treatment"] = config.plasma.helium_treatment - - plasma = BasePlasma( - plasma_properties=plasma_modules, - property_kwargs=property_kwargs, - plasma_solver_settings=plasma_solver_settings, - **kwargs, - ) - - return plasma - - -def setup_continuum_interactions( - config, - atom_data, - dilute_planckian_radiation_field, - kwargs, - property_kwargs, -): - continuum_plasma_modules = [] - line_interaction_type = config.plasma.line_interaction_type - if line_interaction_type != "macroatom": - raise PlasmaConfigError( - "Continuum interactions require line_interaction_type " - f"macroatom (instead of {line_interaction_type})." - ) - - continuum_plasma_modules += continuum_interaction_properties - continuum_plasma_modules += continuum_interaction_inputs - - if config.plasma.continuum_interaction.enable_adiabatic_cooling: - continuum_plasma_modules += adiabatic_cooling_properties - - if config.plasma.continuum_interaction.enable_two_photon_decay: - continuum_plasma_modules += two_photon_properties - - transition_probabilities_outputs = [ - plasma_property.transition_probabilities_outputs - for plasma_property in continuum_plasma_modules - if issubclass(plasma_property, TransitionProbabilitiesProperty) - ] - transition_probabilities_outputs = [ - item for sublist in transition_probabilities_outputs for item in sublist - ] - - property_kwargs[MarkovChainTransProbsCollector] = { - "inputs": transition_probabilities_outputs - } - if ( - config.plasma.nlte_ionization_species - or config.plasma.nlte_excitation_species - ): - if config.plasma.nlte_ionization_species: - nlte_ionization_species = config.plasma.nlte_ionization_species - for species in nlte_ionization_species: - if species not in config.plasma.continuum_interaction.species: - raise PlasmaConfigError( - f"NLTE ionization species {species} not in continuum species." - ) - if config.plasma.nlte_excitation_species: - nlte_excitation_species = config.plasma.nlte_excitation_species - for species in nlte_excitation_species: - if species not in config.plasma.continuum_interaction.species: - raise PlasmaConfigError( - f"NLTE excitation species {species} not in continuum species." - ) - property_kwargs[NLTEIndexHelper] = { - "nlte_ionization_species": config.plasma.nlte_ionization_species, - "nlte_excitation_species": config.plasma.nlte_excitation_species, - } - if config.plasma.nlte_solver == "lu": - continuum_plasma_modules += nlte_lu_solver_properties - logger.warning( - "LU solver will be inaccurate for NLTE excitation, proceed with caution." - ) - elif config.plasma.nlte_solver == "root": - continuum_plasma_modules += nlte_root_solver_properties - else: - raise PlasmaConfigError( - f"NLTE solver type unknown - {config.plasma.nlte_solver}" - ) - - # initializing rates - t_electrons = ( - config.plasma.link_t_rad_t_electron - * dilute_planckian_radiation_field.temperature.to(u.K).value - ) - initial_continuum_solver = DiluteBlackBodyContinuumPropertiesSolver( - atom_data - ) - initial_continuum_properties = initial_continuum_solver.solve( - dilute_planckian_radiation_field, t_electrons - ) - kwargs.update( - gamma=initial_continuum_properties.photo_ionization_rate_coefficient, - bf_heating_coeff_estimator=None, - stim_recomb_cooling_coeff_estimator=None, - alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, + return plasma_solver_factory.assemble( + dilute_planckian_radiation_field, simulation_state ) - return continuum_plasma_modules From 930462fe0284b24c67e89a5014c40b432e6bac68 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 14:55:20 -0400 Subject: [PATCH 069/118] blackify --- .../continuum_processes/collisional_ion_trans_prob.py | 1 + tardis/plasma/properties/continuum_processes/rates.py | 1 + tardis/plasma/properties/plasma_input.py | 1 + tardis/simulation/base.py | 6 +++--- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py b/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py index c3bde599279..6fd362303f1 100644 --- a/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py +++ b/tardis/opacities/macro_atom/continuum_processes/collisional_ion_trans_prob.py @@ -10,6 +10,7 @@ H = const.h.cgs.value + class RawCollIonTransProbs(TransitionProbabilitiesProperty, IndexSetterMixin): """ Attributes diff --git a/tardis/plasma/properties/continuum_processes/rates.py b/tardis/plasma/properties/continuum_processes/rates.py index 4dd697cfd64..f627debcd75 100644 --- a/tardis/plasma/properties/continuum_processes/rates.py +++ b/tardis/plasma/properties/continuum_processes/rates.py @@ -316,6 +316,7 @@ def calculate( ) return gamma_corr + class StimRecombCoolingRateCoeffEstimator(Input): """ Attributes diff --git a/tardis/plasma/properties/plasma_input.py b/tardis/plasma/properties/plasma_input.py index aac02e58308..5ed71b85f49 100644 --- a/tardis/plasma/properties/plasma_input.py +++ b/tardis/plasma/properties/plasma_input.py @@ -127,6 +127,7 @@ class LinkTRadTElectron(Input): class HeliumTreatment(Input): outputs = ("helium_treatment",) + class ContinuumInteractionSpecies(Input): """ Attributes diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index a805bafdf9e..599fe2b0caf 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -456,9 +456,9 @@ def iterate(self, no_of_packets, no_of_virtual_packets=0): # Set up spectrum solver self.spectrum_solver.transport_state = transport_state - self.spectrum_solver._montecarlo_virtual_luminosity.value[:] = ( - v_packets_energy_hist - ) + self.spectrum_solver._montecarlo_virtual_luminosity.value[ + : + ] = v_packets_energy_hist output_energy = ( self.transport.transport_state.packet_collection.output_energies From 9e47b81a79dfc47446ef15889be780b23c4ae02e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 14:58:41 -0400 Subject: [PATCH 070/118] reverse the import pygraphviz --- tardis/plasma/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/plasma/base.py b/tardis/plasma/base.py index 8a42c32dfdb..87af2cbd479 100644 --- a/tardis/plasma/base.py +++ b/tardis/plasma/base.py @@ -293,7 +293,7 @@ def write_to_dot(self, fname, args=None, latex_label=True): edge labels into the file. """ try: - pass + import pygraphviz except: logger.warning( "pygraphviz missing. Plasma graph will not be " "generated." From 8d67db8f8f2bf274751c68235db540107df89515 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 14:59:54 -0400 Subject: [PATCH 071/118] fix docstrings --- tardis/plasma/radiation_field/planck_rad_field.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tardis/plasma/radiation_field/planck_rad_field.py b/tardis/plasma/radiation_field/planck_rad_field.py index 69d656bd0d6..ab3a4b741db 100644 --- a/tardis/plasma/radiation_field/planck_rad_field.py +++ b/tardis/plasma/radiation_field/planck_rad_field.py @@ -8,7 +8,7 @@ class DilutePlanckianRadiationField: """ - Represents the state of a dilute thermal radiation field. + Represents the state of a dilute planckian radiation field. Parameters @@ -79,7 +79,7 @@ def to_planckian_radiation_field(self): class PlanckianRadiationField: """ - Represents the state of a dilute thermal radiation field. + Represents the state of a planckian radiation field. Parameters From f6f3160efc1fa5692a3703073d0be6f492dbee23 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 15:54:29 -0400 Subject: [PATCH 072/118] fixed all plasma --- tardis/plasma/assembly/base.py | 35 ++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 2b990027c36..a7994a8f676 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -64,6 +64,8 @@ class PlasmaSolverFactory: radiative_rates_type: str = "dilute-blackbody" + delta_treatment = None + ## Statistical Balance Solver legacy_nlte_species: list = [] @@ -123,21 +125,34 @@ def __init__(self, config, atom_data, atomic_numbers) -> None: self.link_t_rad_t_electron = config.plasma.link_t_rad_t_electron self.setup_analytical_approximations(config.plasma) + if "delta_treatment" in config.plasma: + self.property_kwargs[RadiationFieldCorrection] = dict( + delta_treatment=config.plasma.delta_treatment + ) self.setup_legacy_nlte(config.plasma.nlte) if self.line_interaction_type in ("downbranch", "macroatom") and ( len(self.continuum_interaction_species) == 0 ): self.setup_legacy_macro_atom() + self.delta_treatment = config.plasma.get("delta_treatment", None) + if self.delta_treatment is not None: + self.property_kwargs[RadiationFieldCorrection] = dict( + delta_treatment=config.plasma.delta_treatment + ) self.helium_treatment = config.plasma.helium_treatment self.heating_rate_data_file = config.plasma.heating_rate_data_file self.setup_helium_treatment() + + self.nlte_solver = config.plasma.nlte_solver + self.nlte_ionization_species = config.plasma.nlte_ionization_species + self.nlte_excitation_species = config.plasma.nlte_excitation_species if len(config.plasma.continuum_interaction.species) > 0: self.setup_continuum_interactions( config.plasma.continuum_interaction ) - + self.radiative_rates_type = config.plasma.radiative_rates_type def setup_helium_treatment(self): """ Set up the helium treatment for the plasma assembly. @@ -254,10 +269,6 @@ def setup_analytical_approximations(self, plasma_config): self.plasma_modules += lte_ionization_properties elif self.ionization_analytical_approximation == "nebular": self.plasma_modules += nebular_ionization_properties - if "delta_treatment" in plasma_config: - self.property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=plasma_config.delta_treatment - ) else: raise PlasmaConfigError( f'Invalid excitation analytical approximation. Configured as {self.ionization_analytical_approximation} but needs to be either "lte" or "nebular"' @@ -333,11 +344,11 @@ def set_nlte_species_from_string(self, nlte_species): self.legacy_nlte_species = map_species_from_string(nlte_species) def setup_continuum_interactions(self, config_continuum_interaction): - line_interaction_type = self.line_interaction_type - if line_interaction_type != "macroatom": + + if self.line_interaction_type != "macroatom": raise PlasmaConfigError( "Continuum interactions require line_interaction_type " - f"macroatom (instead of {line_interaction_type})." + f"macroatom (instead of {self.line_interaction_type})." ) self.plasma_modules += continuum_interaction_properties @@ -364,17 +375,17 @@ def setup_continuum_interactions(self, config_continuum_interaction): "inputs": transition_probabilities_outputs } if len(self.nlte_ionization_species + self.nlte_excitation_species) > 0: - if len(self.nlte_ionization_species) > 0: + if self.nlte_ionization_species: nlte_ionization_species = self.nlte_ionization_species for species in nlte_ionization_species: - if species not in self.continuum_interaction_species: + if species not in config_continuum_interaction.species: raise PlasmaConfigError( f"NLTE ionization species {species} not in continuum species." ) - if len(self.nlte_excitation_species) > 0: + if self.nlte_excitation_species: nlte_excitation_species = self.nlte_excitation_species for species in nlte_excitation_species: - if species not in self.continuum_interaction.species: + if species not in config_continuum_interaction.species: raise PlasmaConfigError( f"NLTE excitation species {species} not in continuum species." ) From 7f1c30107af90f4d048155ac80cc3ae3c1696348 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 16:07:42 -0400 Subject: [PATCH 073/118] slow fixes --- tardis/plasma/assembly/base.py | 13 +++++++++---- tardis/plasma/base.py | 2 ++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index a7994a8f676..b0e20cea9ae 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -5,6 +5,7 @@ from astropy import units as u from tardis.plasma import BasePlasma +from tardis.plasma.base import PlasmaSolverSettings from tardis.plasma.exceptions import PlasmaConfigError from tardis.plasma.properties import ( HeliumNumericalNLTE, @@ -224,13 +225,13 @@ def setup_legacy_nlte(self, nlte_config): """ Set up the non-LTE (NLTE) properties for the legacy species. - Parameters: - ----------- + Parameters + ---------- nlte_config : dict A dictionary containing the NLTE configuration. - Notes: - ------ + Notes + ----- This method adds the NLTE properties for the legacy species to the plasma modules. If there are no legacy NLTE species, it adds the non-NLTE properties instead. """ @@ -455,6 +456,9 @@ def assemble(self, dilute_planckian_radiation_field, simulation_state): j_blues = self.initialize_j_blues( dilute_planckian_radiation_field, self.atom_data.lines ) + plasma_solver_settings = PlasmaSolverSettings( + RADIATIVE_RATES_TYPE=self.radiative_rates_type + ) kwargs = dict( time_explosion=simulation_state.time_explosion, @@ -489,5 +493,6 @@ def assemble(self, dilute_planckian_radiation_field, simulation_state): return BasePlasma( plasma_properties=self.plasma_modules, property_kwargs=self.property_kwargs, + plasma_solver_settings=plasma_solver_settings, **kwargs, ) diff --git a/tardis/plasma/base.py b/tardis/plasma/base.py index b6b781a691d..fefc1ffce24 100644 --- a/tardis/plasma/base.py +++ b/tardis/plasma/base.py @@ -27,6 +27,7 @@ def __init__( self, plasma_properties, property_kwargs=None, + plasma_solver_settings=None, **kwargs, ): self.outputs_dict = {} @@ -34,6 +35,7 @@ def __init__( self.plasma_properties = self._init_properties( plasma_properties, property_kwargs, **kwargs ) + self.plasma_solver_settings = plasma_solver_settings self._build_graph() self.update(**kwargs) From e05aeca41bb55343868370a254c07b7403c61dd4 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 17:02:15 -0400 Subject: [PATCH 074/118] Refactor recomb_rate_coeff.py and test_continuum_property_solver.py --- .../properties/continuum_processes/recomb_rate_coeff.py | 1 - .../estimators/tests/test_continuum_property_solver.py | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py index a6ea2879d0b..86d6e3b68c3 100644 --- a/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py +++ b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py @@ -4,7 +4,6 @@ from tardis.plasma.properties.base import Input, ProcessingPlasmaProperty from tardis.plasma.properties.continuum_processes.rates import C, H from tardis.transport.montecarlo.estimators.util import ( - bound_free_estimator_array2frame, integrate_array_by_blocks, ) diff --git a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py index eb831f26e57..ef561073a21 100644 --- a/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py +++ b/tardis/transport/montecarlo/estimators/tests/test_continuum_property_solver.py @@ -64,10 +64,10 @@ def test_continuum_estimators( ) continuum_plasma.update( - gamma_estimator=transport_state.radfield_mc_estimators.photo_ion_estimator, - alpha_stim_estimator=transport_state.radfield_mc_estimators.stim_recomb_estimator, - bf_heating_coeff_estimator=transport_state.radfield_mc_estimators.bf_heating_estimator, - stim_recomb_cooling_coeff_estimator=transport_state.radfield_mc_estimators.stim_recomb_cooling_estimator, + gamma=continuum_properties_mc.photo_ionization_rate_coefficient, + alpha_stim_factor=continuum_properties_mc.stimulated_recombination_rate_factor, + bf_heating_coeff_estimator=None, + stim_recomb_cooling_coeff_estimator=None, ) pdt.assert_frame_equal( From efdb5b1b6ad073d05cf0fcfe9adc4f27cd0cefca Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 17:40:59 -0400 Subject: [PATCH 075/118] fixing assembly --- tardis/plasma/assembly/base.py | 106 ++++++++++++++++----------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index b0e20cea9ae..7ac60dfcbfd 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -89,71 +89,60 @@ class PlasmaSolverFactory: kwargs: dict = {} property_kwargs: dict = {} - def __init__(self, config, atom_data, atomic_numbers) -> None: - - self.set_nlte_species_from_string(config.plasma.nlte.species) - self.set_continuum_interaction_species_from_string( - config.plasma.continuum_interaction.species - ) - self.line_interaction_type = config.plasma.line_interaction_type - + def __init__(self, config, atom_data, selected_atomic_numbers) -> None: + self.parse_plasma_config(config.plasma) self.atom_data = atom_data self.atom_data.prepare_atom_data( - atomic_numbers, + selected_atomic_numbers, line_interaction_type=config.plasma.line_interaction_type, continuum_interaction_species=self.continuum_interaction_species, nlte_species=self.legacy_nlte_species, ) - - #### THIS IS VERY BAD BUT FOR NOW IS CHICKEN/EGG - # Check if continuum interaction species are in selected_atoms - continuum_atoms = self.continuum_interaction_species.get_level_values( - "atomic_number" - ) - - continuum_atoms_in_selected_atoms = np.all( - continuum_atoms.isin(atom_data.selected_atomic_numbers) - ) - if not continuum_atoms_in_selected_atoms: - raise PlasmaConfigError( - "Not all continuum interaction species " - "belong to atoms that have been specified " - "in the configuration." - ) - ##### ---------------------------- + self.check_continuum_interaction_species() self.plasma_modules = basic_inputs + basic_properties - self.link_t_rad_t_electron = config.plasma.link_t_rad_t_electron - self.setup_analytical_approximations(config.plasma) - if "delta_treatment" in config.plasma: - self.property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=config.plasma.delta_treatment - ) + self.setup_analytical_approximations() + self.property_kwargs[RadiationFieldCorrection] = dict( + delta_treatment=self.delta_treatment + ) self.setup_legacy_nlte(config.plasma.nlte) + if self.line_interaction_type in ("downbranch", "macroatom") and ( len(self.continuum_interaction_species) == 0 ): - self.setup_legacy_macro_atom() - self.delta_treatment = config.plasma.get("delta_treatment", None) - if self.delta_treatment is not None: - self.property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=config.plasma.delta_treatment - ) + self.plasma_modules += macro_atom_properties - self.helium_treatment = config.plasma.helium_treatment - self.heating_rate_data_file = config.plasma.heating_rate_data_file self.setup_helium_treatment() - self.nlte_solver = config.plasma.nlte_solver - self.nlte_ionization_species = config.plasma.nlte_ionization_species - self.nlte_excitation_species = config.plasma.nlte_excitation_species if len(config.plasma.continuum_interaction.species) > 0: self.setup_continuum_interactions( config.plasma.continuum_interaction ) - self.radiative_rates_type = config.plasma.radiative_rates_type + + def parse_plasma_config(self, plasma_config): + self.set_continuum_interaction_species_from_string( + plasma_config.continuum_interaction.species + ) + self.set_nlte_species_from_string(plasma_config.nlte.species) + self.line_interaction_type = plasma_config.line_interaction_type + self.link_t_rad_t_electron = plasma_config.link_t_rad_t_electron + + self.excitation_analytical_approximation = plasma_config.excitation + self.ionization_analytical_approximation = plasma_config.ionization + self.delta_treatment = plasma_config.get("delta_treatment", None) + + self.helium_treatment = plasma_config.helium_treatment + self.heating_rate_data_file = plasma_config.heating_rate_data_file + + self.nlte_ionization_species = plasma_config.nlte_ionization_species + self.nlte_excitation_species = plasma_config.nlte_excitation_species + + self.nlte_solver = plasma_config.nlte_solver + + self.radiative_rates_type = plasma_config.radiative_rates_type + def setup_helium_treatment(self): """ Set up the helium treatment for the plasma assembly. @@ -201,10 +190,10 @@ def setup_helium_treatment(self): self.plasma_modules += helium_nlte_properties elif self.helium_treatment == "numerical-nlte": self.plasma_modules += helium_numerical_nlte_properties - if heating_rate_data_file in ["none", None]: + if self.heating_rate_data_file in ["none", None]: raise PlasmaConfigError("Heating rate data file not specified") self.property_kwargs[HeliumNumericalNLTE] = dict( - heating_rate_data_file=heating_rate_data_file + heating_rate_data_file=self.heating_rate_data_file ) else: # If nlte ionization species are present, we don't want to add the @@ -218,9 +207,6 @@ def setup_helium_treatment(self): else: self.plasma_modules += helium_lte_properties - def setup_legacy_macro_atom(self): - self.plasma_modules += macro_atom_properties - def setup_legacy_nlte(self, nlte_config): """ Set up the non-LTE (NLTE) properties for the legacy species. @@ -246,7 +232,7 @@ def setup_legacy_nlte(self, nlte_config): else: self.plasma_modules += non_nlte_properties - def setup_analytical_approximations(self, plasma_config): + def setup_analytical_approximations(self): """ Setup the analytical approximations for excitation and ionization. @@ -254,9 +240,6 @@ def setup_analytical_approximations(self, plasma_config): ------- None """ - self.excitation_analytical_approximation = plasma_config.excitation - self.ionization_analytical_approximation = plasma_config.ionization - if self.excitation_analytical_approximation == "lte": self.plasma_modules += lte_excitation_properties elif self.excitation_analytical_approximation == "dilute-lte": @@ -328,6 +311,23 @@ def set_continuum_interaction_species_from_string( continuum_interaction_species, names=["atomic_number", "ion_number"] ) + def check_continuum_interaction_species(self): + + continuum_atoms = self.continuum_interaction_species.get_level_values( + "atomic_number" + ) + + continuum_atoms_in_selected_atoms = np.all( + continuum_atoms.isin(self.atom_data.selected_atomic_numbers) + ) + + if not continuum_atoms_in_selected_atoms: + raise PlasmaConfigError( + "Not all continuum interaction species " + "belong to atoms that have been specified " + "in the configuration." + ) + def set_nlte_species_from_string(self, nlte_species): """ Sets the non-LTE species from a string representation. From 90783072088872f151b5ca44e6ba9e64d286ccb8 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 18:00:40 -0400 Subject: [PATCH 076/118] restructure the read in --- .../plasma/construction_simple_plasma.ipynb | 80 ++++++++----------- tardis/plasma/assembly/base.py | 7 +- tardis/plasma/assembly/legacy_assembly.py | 4 +- 3 files changed, 40 insertions(+), 51 deletions(-) diff --git a/docs/physics/plasma/construction_simple_plasma.ipynb b/docs/physics/plasma/construction_simple_plasma.ipynb index 44849be37d3..35ab4bdaec4 100644 --- a/docs/physics/plasma/construction_simple_plasma.ipynb +++ b/docs/physics/plasma/construction_simple_plasma.ipynb @@ -9,56 +9,31 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/wkerzend/python/tardis/tardis/__init__.py:20: UserWarning: Astropy is already imported externally. Astropy should be imported after TARDIS.\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "bbbd27367e48465696aa4e40f25b8496", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Iterations: 0/? [00:00 1\u001b[0m plasma_solver_factory \u001b[38;5;241m=\u001b[39m \u001b[43mPlasmaSolverFactory\u001b[49m\u001b[43m(\u001b[49m\u001b[43matom_data\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselected_atomic_numbers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mTypeError\u001b[0m: PlasmaSolverFactory.__init__() missing 1 required positional argument: 'atom_data'" + ] + } + ], "source": [ - "test = DilutePlanckianRadFieldInput()\n", - "test.set_value(d_radfield)" + "plasma_solver_factory = PlasmaSolverFactory(atom_data, selected_atomic_numbers=[1, 2])" ] }, { @@ -107,7 +93,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 7ac60dfcbfd..d19503ce100 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -89,12 +89,13 @@ class PlasmaSolverFactory: kwargs: dict = {} property_kwargs: dict = {} - def __init__(self, config, atom_data, selected_atomic_numbers) -> None: - self.parse_plasma_config(config.plasma) + def __init__(self, atom_data, selected_atomic_numbers, config=None) -> None: + if config is not None: + self.parse_plasma_config(config.plasma) self.atom_data = atom_data self.atom_data.prepare_atom_data( selected_atomic_numbers, - line_interaction_type=config.plasma.line_interaction_type, + line_interaction_type=self.line_interaction_type, continuum_interaction_species=self.continuum_interaction_species, nlte_species=self.legacy_nlte_species, ) diff --git a/tardis/plasma/assembly/legacy_assembly.py b/tardis/plasma/assembly/legacy_assembly.py index 7e45266dffc..665cd4d6758 100644 --- a/tardis/plasma/assembly/legacy_assembly.py +++ b/tardis/plasma/assembly/legacy_assembly.py @@ -22,7 +22,9 @@ def assemble_plasma(config, simulation_state, atom_data=None): """ atomic_numbers = simulation_state.abundance.index plasma_solver_factory = PlasmaSolverFactory( - config, atom_data, atomic_numbers + atom_data, + atomic_numbers, + config, ) dilute_planckian_radiation_field = DilutePlanckianRadiationField( From 683e8118f022166f9f483b6d3ea8fd329b4d23c1 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 18:21:24 -0400 Subject: [PATCH 077/118] fixup plasma assemble to be clean --- .../plasma/construction_simple_plasma.ipynb | 72 ++++++++++++++----- tardis/plasma/assembly/base.py | 52 ++++++++------ tardis/plasma/assembly/legacy_assembly.py | 4 +- tardis/plasma/properties/general.py | 4 +- tardis/plasma/properties/nlte.py | 4 +- .../plasma/properties/property_collections.py | 1 - 6 files changed, 92 insertions(+), 45 deletions(-) diff --git a/docs/physics/plasma/construction_simple_plasma.ipynb b/docs/physics/plasma/construction_simple_plasma.ipynb index 35ab4bdaec4..00e94706acf 100644 --- a/docs/physics/plasma/construction_simple_plasma.ipynb +++ b/docs/physics/plasma/construction_simple_plasma.ipynb @@ -9,9 +9,46 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/python/tardis/tardis/__init__.py:20: UserWarning: Astropy is already imported externally. Astropy should be imported after TARDIS.\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a4d91ae0803f463c96fe296874d0bacd", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Iterations: 0/? [00:00 1\u001b[0m plasma_solver_factory \u001b[38;5;241m=\u001b[39m \u001b[43mPlasmaSolverFactory\u001b[49m\u001b[43m(\u001b[49m\u001b[43matom_data\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselected_atomic_numbers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[0;31mTypeError\u001b[0m: PlasmaSolverFactory.__init__() missing 1 required positional argument: 'atom_data'" - ] - } - ], + "outputs": [], "source": [ "plasma_solver_factory = PlasmaSolverFactory(atom_data, selected_atomic_numbers=[1, 2])" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plasma_solver_factory.assemble(d_radfield)" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index d19503ce100..39b29e4ceb9 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -79,7 +79,11 @@ class PlasmaSolverFactory: heating_rate_data_file: str = "none" ## Continuum Interaction - continuum_interaction_species: pd.MultiIndex + continuum_interaction_species: pd.MultiIndex = pd.MultiIndex.from_tuples( + [], names=["atomic_number", "ion_number"] + ) + enable_adiabatic_cooling: bool = False + enable_two_photon_decay: bool = False ## Opacities line_interaction_type: str = "scatter" @@ -107,8 +111,8 @@ def __init__(self, atom_data, selected_atomic_numbers, config=None) -> None: self.property_kwargs[RadiationFieldCorrection] = dict( delta_treatment=self.delta_treatment ) - - self.setup_legacy_nlte(config.plasma.nlte) + if config is not None: + self.setup_legacy_nlte(config.plasma.nlte) if self.line_interaction_type in ("downbranch", "macroatom") and ( len(self.continuum_interaction_species) == 0 @@ -117,10 +121,8 @@ def __init__(self, atom_data, selected_atomic_numbers, config=None) -> None: self.setup_helium_treatment() - if len(config.plasma.continuum_interaction.species) > 0: - self.setup_continuum_interactions( - config.plasma.continuum_interaction - ) + if len(self.continuum_interaction_species) > 0: + self.setup_continuum_interactions() def parse_plasma_config(self, plasma_config): self.set_continuum_interaction_species_from_string( @@ -144,6 +146,13 @@ def parse_plasma_config(self, plasma_config): self.radiative_rates_type = plasma_config.radiative_rates_type + self.enable_adiabatic_cooling = ( + plasma_config.continuum_interaction.enable_adiabatic_cooling + ) + self.enable_two_photon_decay = ( + plasma_config.continuum_interaction.enable_two_photon_decay + ) + def setup_helium_treatment(self): """ Set up the helium treatment for the plasma assembly. @@ -345,7 +354,7 @@ def set_nlte_species_from_string(self, nlte_species): """ self.legacy_nlte_species = map_species_from_string(nlte_species) - def setup_continuum_interactions(self, config_continuum_interaction): + def setup_continuum_interactions(self): if self.line_interaction_type != "macroatom": raise PlasmaConfigError( @@ -356,10 +365,10 @@ def setup_continuum_interactions(self, config_continuum_interaction): self.plasma_modules += continuum_interaction_properties self.plasma_modules += continuum_interaction_inputs - if config_continuum_interaction.enable_adiabatic_cooling: + if self.enable_adiabatic_cooling: self.plasma_modules += adiabatic_cooling_properties - if config_continuum_interaction.enable_two_photon_decay: + if self.enable_two_photon_decay: self.plasma_modules += two_photon_properties transition_probabilities_outputs = [ @@ -380,14 +389,14 @@ def setup_continuum_interactions(self, config_continuum_interaction): if self.nlte_ionization_species: nlte_ionization_species = self.nlte_ionization_species for species in nlte_ionization_species: - if species not in config_continuum_interaction.species: + if species not in self.continuum_interaction_species: raise PlasmaConfigError( f"NLTE ionization species {species} not in continuum species." ) if self.nlte_excitation_species: nlte_excitation_species = self.nlte_excitation_species for species in nlte_excitation_species: - if species not in config_continuum_interaction.species: + if species not in self.continuum_interaction_species: raise PlasmaConfigError( f"NLTE excitation species {species} not in continuum species." ) @@ -453,7 +462,13 @@ def initialize_continuum_properties(self, dilute_planckian_radiation_field): ) return initial_continuum_properties - def assemble(self, dilute_planckian_radiation_field, simulation_state): + def assemble( + self, + number_densities, + dilute_planckian_radiation_field, + time_explosion, + electron_densities=None, + ): j_blues = self.initialize_j_blues( dilute_planckian_radiation_field, self.atom_data.lines ) @@ -462,10 +477,9 @@ def assemble(self, dilute_planckian_radiation_field, simulation_state): ) kwargs = dict( - time_explosion=simulation_state.time_explosion, + time_explosion=time_explosion, dilute_planckian_radiation_field=dilute_planckian_radiation_field, - abundance=simulation_state.abundance, - number_density=simulation_state.elemental_number_density, + number_density=number_densities, link_t_rad_t_electron=self.link_t_rad_t_electron, atomic_data=self.atom_data, j_blues=j_blues, @@ -485,10 +499,8 @@ def assemble(self, dilute_planckian_radiation_field, simulation_state): alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, ) - if simulation_state._electron_densities is not None: - electron_densities = pd.Series( - simulation_state._electron_densities.cgs.value - ) + if electron_densities is not None: + electron_densities = pd.Series(electron_densities.cgs.value) self.setup_electron_densities(electron_densities) kwargs["helium_treatment"] = self.helium_treatment return BasePlasma( diff --git a/tardis/plasma/assembly/legacy_assembly.py b/tardis/plasma/assembly/legacy_assembly.py index 665cd4d6758..a87c682586e 100644 --- a/tardis/plasma/assembly/legacy_assembly.py +++ b/tardis/plasma/assembly/legacy_assembly.py @@ -32,5 +32,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): ) return plasma_solver_factory.assemble( - dilute_planckian_radiation_field, simulation_state + simulation_state.elemental_number_density, + dilute_planckian_radiation_field, + simulation_state.time_explosion, ) diff --git a/tardis/plasma/properties/general.py b/tardis/plasma/properties/general.py index cb6e46ef650..7a66d16cc05 100644 --- a/tardis/plasma/properties/general.py +++ b/tardis/plasma/properties/general.py @@ -84,8 +84,8 @@ class SelectedAtoms(ProcessingPlasmaProperty): outputs = ("selected_atoms",) - def calculate(self, abundance): - return abundance.index + def calculate(self, number_density): + return number_density.index class ElectronTemperature(ProcessingPlasmaProperty): diff --git a/tardis/plasma/properties/nlte.py b/tardis/plasma/properties/nlte.py index f5a9a424046..a6e4d7ab230 100644 --- a/tardis/plasma/properties/nlte.py +++ b/tardis/plasma/properties/nlte.py @@ -29,7 +29,7 @@ class PreviousElectronDensities(PreviousIterationProperty): def set_initial_value(self, kwargs): initial_value = pd.Series( 1000000.0, - index=kwargs["abundance"].columns, + index=kwargs["number_density"].columns, ) self._set_initial_value(initial_value) @@ -47,6 +47,6 @@ def set_initial_value(self, kwargs): initial_value = pd.DataFrame( 1.0, index=kwargs["atomic_data"].lines.index, - columns=kwargs["abundance"].columns, + columns=kwargs["number_density"].columns, ) self._set_initial_value(initial_value) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index 4cf62169ddb..aef95cce730 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -18,7 +18,6 @@ class PlasmaPropertyCollection(list): [ DilutePlanckianRadField, DilutePlanckianRadField, - Abundance, NumberDensity, TimeExplosion, AtomicData, From d381f02450ec0aa5214857677bf71d05f7294d0a Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 27 Jul 2024 18:56:21 -0400 Subject: [PATCH 078/118] fix shell info widget --- .../plasma/construction_simple_plasma.ipynb | 122 ++++++++++++------ tardis/visualization/widgets/shell_info.py | 2 +- .../widgets/tests/test_shell_info.py | 8 +- 3 files changed, 87 insertions(+), 45 deletions(-) diff --git a/docs/physics/plasma/construction_simple_plasma.ipynb b/docs/physics/plasma/construction_simple_plasma.ipynb index 00e94706acf..e0315f3f4c7 100644 --- a/docs/physics/plasma/construction_simple_plasma.ipynb +++ b/docs/physics/plasma/construction_simple_plasma.ipynb @@ -9,48 +9,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 9, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/wkerzend/python/tardis/tardis/__init__.py:20: UserWarning: Astropy is already imported externally. Astropy should be imported after TARDIS.\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a4d91ae0803f463c96fe296874d0bacd", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Iterations: 0/? [00:00 1\u001b[0m \u001b[43mplasma_solver_factory\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43massemble\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnumber_densities\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43md_radfield\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mu\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mday\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/python/tardis/tardis/plasma/assembly/base.py:506\u001b[0m, in \u001b[0;36mPlasmaSolverFactory.assemble\u001b[0;34m(self, number_densities, dilute_planckian_radiation_field, time_explosion, electron_densities)\u001b[0m\n\u001b[1;32m 504\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msetup_electron_densities(electron_densities)\n\u001b[1;32m 505\u001b[0m kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhelium_treatment\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhelium_treatment\n\u001b[0;32m--> 506\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mBasePlasma\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 507\u001b[0m \u001b[43m \u001b[49m\u001b[43mplasma_properties\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplasma_modules\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 508\u001b[0m \u001b[43m \u001b[49m\u001b[43mproperty_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperty_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 509\u001b[0m \u001b[43m \u001b[49m\u001b[43mplasma_solver_settings\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mplasma_solver_settings\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 510\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 511\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/python/tardis/tardis/io/util.py:195\u001b[0m, in \u001b[0;36mHDFWriterMixin.__new__\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m 193\u001b[0m instance \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msuper\u001b[39m(HDFWriterMixin, \u001b[38;5;28mcls\u001b[39m)\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__new__\u001b[39m(\u001b[38;5;28mcls\u001b[39m)\n\u001b[1;32m 194\u001b[0m instance\u001b[38;5;241m.\u001b[39moptional_hdf_properties \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 195\u001b[0m \u001b[43minstance\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 196\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m instance\n", + "File \u001b[0;32m~/python/tardis/tardis/plasma/base.py:39\u001b[0m, in \u001b[0;36mBasePlasma.__init__\u001b[0;34m(self, plasma_properties, property_kwargs, plasma_solver_settings, **kwargs)\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mplasma_properties \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_init_properties(\n\u001b[1;32m 36\u001b[0m plasma_properties, property_kwargs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 37\u001b[0m )\n\u001b[1;32m 38\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mplasma_solver_settings \u001b[38;5;241m=\u001b[39m plasma_solver_settings\n\u001b[0;32m---> 39\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_build_graph\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mupdate(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/python/tardis/tardis/plasma/base.py:101\u001b[0m, in \u001b[0;36mBasePlasma._build_graph\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m \u001b[38;5;28minput\u001b[39m \u001b[38;5;129;01min\u001b[39;00m plasma_property\u001b[38;5;241m.\u001b[39minputs:\n\u001b[1;32m 100\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28minput\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moutputs_dict:\n\u001b[0;32m--> 101\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m PlasmaMissingModule(\n\u001b[1;32m 102\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mModule \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mplasma_property\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m requires input \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 103\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28minput\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m which has not been added\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m to this plasma\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 105\u001b[0m )\n\u001b[1;32m 106\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 107\u001b[0m position \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moutputs_dict[\u001b[38;5;28minput\u001b[39m]\u001b[38;5;241m.\u001b[39moutputs\u001b[38;5;241m.\u001b[39mindex(\u001b[38;5;28minput\u001b[39m)\n", + "\u001b[0;31mPlasmaMissingModule\u001b[0m: Module PartitionFunction requires input level_boltzmann_factor which has not been added to this plasma" + ] + } + ], + "source": [ + "plasma_solver_factory.assemble(number_densities, d_radfield, 5 * u.day)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[tardis.plasma.properties.plasma_input.DilutePlanckianRadField,\n", + " tardis.plasma.properties.plasma_input.DilutePlanckianRadField,\n", + " tardis.plasma.properties.plasma_input.NumberDensity,\n", + " tardis.plasma.properties.plasma_input.TimeExplosion,\n", + " tardis.plasma.properties.plasma_input.AtomicData,\n", + " tardis.plasma.properties.plasma_input.JBlues,\n", + " tardis.plasma.properties.plasma_input.LinkTRadTElectron,\n", + " tardis.plasma.properties.plasma_input.HeliumTreatment,\n", + " tardis.plasma.properties.plasma_input.ContinuumInteractionSpecies,\n", + " tardis.plasma.properties.plasma_input.NLTEIonizationSpecies,\n", + " tardis.plasma.properties.plasma_input.NLTEExcitationSpecies,\n", + " tardis.plasma.properties.plasma_input.TRadiative,\n", + " tardis.plasma.properties.plasma_input.DilutionFactor,\n", + " tardis.plasma.properties.general.BetaRadiation,\n", + " tardis.plasma.properties.atomic.Levels,\n", + " tardis.plasma.properties.atomic.Lines,\n", + " tardis.plasma.properties.partition_function.PartitionFunction,\n", + " tardis.plasma.properties.general.GElectron,\n", + " tardis.plasma.properties.atomic.IonizationData,\n", + " tardis.plasma.properties.atomic.LinesLowerLevelIndex,\n", + " tardis.plasma.properties.atomic.LinesUpperLevelIndex,\n", + " tardis.opacities.tau_sobolev.TauSobolev,\n", + " tardis.plasma.properties.radiative_properties.StimulatedEmissionFactor,\n", + " tardis.plasma.properties.general.SelectedAtoms,\n", + " tardis.plasma.properties.general.ElectronTemperature,\n", + " tardis.plasma.properties.partition_function.LevelBoltzmannFactorLTE,\n", + " tardis.plasma.properties.ion_population.PhiSahaLTE,\n", + " tardis.plasma.properties.level_population.LevelNumberDensity,\n", + " tardis.plasma.properties.ion_population.IonNumberDensity]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plasma_solver_factory.plasma_modules" ] }, { diff --git a/tardis/visualization/widgets/shell_info.py b/tardis/visualization/widgets/shell_info.py index 811386be4ae..2cb93c91dd6 100644 --- a/tardis/visualization/widgets/shell_info.py +++ b/tardis/visualization/widgets/shell_info.py @@ -190,7 +190,7 @@ def __init__(self, sim_model): super().__init__( sim_model.simulation_state.t_radiative, sim_model.simulation_state.dilution_factor, - sim_model.plasma.abundance, + sim_model.simulation_state.abundance, sim_model.plasma.number_density, sim_model.plasma.ion_number_density, sim_model.plasma.level_number_density, diff --git a/tardis/visualization/widgets/tests/test_shell_info.py b/tardis/visualization/widgets/tests/test_shell_info.py index 7a99374dbc5..df7f4f168d9 100644 --- a/tardis/visualization/widgets/tests/test_shell_info.py +++ b/tardis/visualization/widgets/tests/test_shell_info.py @@ -16,7 +16,7 @@ def base_shell_info(simulation_verysimple): return BaseShellInfo( simulation_verysimple.simulation_state.t_radiative, simulation_verysimple.simulation_state.dilution_factor, - simulation_verysimple.plasma.abundance, + simulation_verysimple.simulation_state.abundance, simulation_verysimple.plasma.number_density, simulation_verysimple.plasma.ion_number_density, simulation_verysimple.plasma.level_number_density, @@ -58,12 +58,14 @@ def test_element_count_data( ): element_count_data = base_shell_info.element_count(1) assert element_count_data.shape == ( - len(simulation_verysimple.plasma.abundance[shell_num - 1]), + len( + simulation_verysimple.simulation_state.abundance[shell_num - 1] + ), 2, ) assert np.allclose( element_count_data.iloc[:, -1].map(np.float64), - simulation_verysimple.plasma.abundance[shell_num - 1], + simulation_verysimple.simulation_state.abundance[shell_num - 1], ) @pytest.mark.parametrize(("atomic_num", "shell_num"), [(12, 1), (20, 20)]) From fcce9e0aeb70b0819e9e0eeca4fb51f6581ae957 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 28 Jul 2024 00:30:08 -0400 Subject: [PATCH 079/118] fix the widgets --- .../plasma/construction_simple_plasma.ipynb | 228 +++++++++++++----- tardis/model/base.py | 1 + tardis/plasma/assembly/base.py | 70 +++--- tardis/plasma/assembly/legacy_assembly.py | 2 +- .../plasma/properties/radiative_properties.py | 2 + tardis/visualization/widgets/shell_info.py | 2 +- 6 files changed, 208 insertions(+), 97 deletions(-) diff --git a/docs/physics/plasma/construction_simple_plasma.ipynb b/docs/physics/plasma/construction_simple_plasma.ipynb index e0315f3f4c7..58023347add 100644 --- a/docs/physics/plasma/construction_simple_plasma.ipynb +++ b/docs/physics/plasma/construction_simple_plasma.ipynb @@ -9,18 +9,73 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LOADING\n", + "Scalene extension successfully loaded. Note: Scalene currently only\n", + "supports CPU+GPU profiling inside Jupyter notebooks. For full Scalene\n", + "profiling, use the command line version. To profile in line mode, use\n", + "`%scrun [options] statement`. To profile in cell mode, use `%%scalene\n", + "[options]` followed by your code.\n", + "\n", + "NOTE: in Jupyter notebook on MacOS, Scalene cannot profile child\n", + "processes. Do not run to try Scalene with multiprocessing in Jupyter\n", + "Notebook.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/python/tardis/tardis/__init__.py:20: UserWarning: Astropy is already imported externally. Astropy should be imported after TARDIS.\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "72ded6233c124eeba35259b3c035ab59", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Iterations: 0/? [00:00 1\u001b[0m \u001b[43mplasma_solver_factory\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43massemble\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnumber_densities\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43md_radfield\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mu\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mday\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/python/tardis/tardis/plasma/assembly/base.py:506\u001b[0m, in \u001b[0;36mPlasmaSolverFactory.assemble\u001b[0;34m(self, number_densities, dilute_planckian_radiation_field, time_explosion, electron_densities)\u001b[0m\n\u001b[1;32m 504\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msetup_electron_densities(electron_densities)\n\u001b[1;32m 505\u001b[0m kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhelium_treatment\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhelium_treatment\n\u001b[0;32m--> 506\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mBasePlasma\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 507\u001b[0m \u001b[43m \u001b[49m\u001b[43mplasma_properties\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplasma_modules\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 508\u001b[0m \u001b[43m \u001b[49m\u001b[43mproperty_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperty_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 509\u001b[0m \u001b[43m \u001b[49m\u001b[43mplasma_solver_settings\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mplasma_solver_settings\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 510\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 511\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/python/tardis/tardis/io/util.py:195\u001b[0m, in \u001b[0;36mHDFWriterMixin.__new__\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m 193\u001b[0m instance \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msuper\u001b[39m(HDFWriterMixin, \u001b[38;5;28mcls\u001b[39m)\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__new__\u001b[39m(\u001b[38;5;28mcls\u001b[39m)\n\u001b[1;32m 194\u001b[0m instance\u001b[38;5;241m.\u001b[39moptional_hdf_properties \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 195\u001b[0m \u001b[43minstance\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 196\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m instance\n", - "File \u001b[0;32m~/python/tardis/tardis/plasma/base.py:39\u001b[0m, in \u001b[0;36mBasePlasma.__init__\u001b[0;34m(self, plasma_properties, property_kwargs, plasma_solver_settings, **kwargs)\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mplasma_properties \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_init_properties(\n\u001b[1;32m 36\u001b[0m plasma_properties, property_kwargs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 37\u001b[0m )\n\u001b[1;32m 38\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mplasma_solver_settings \u001b[38;5;241m=\u001b[39m plasma_solver_settings\n\u001b[0;32m---> 39\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_build_graph\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mupdate(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", - "File \u001b[0;32m~/python/tardis/tardis/plasma/base.py:101\u001b[0m, in \u001b[0;36mBasePlasma._build_graph\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m \u001b[38;5;28minput\u001b[39m \u001b[38;5;129;01min\u001b[39;00m plasma_property\u001b[38;5;241m.\u001b[39minputs:\n\u001b[1;32m 100\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28minput\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moutputs_dict:\n\u001b[0;32m--> 101\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m PlasmaMissingModule(\n\u001b[1;32m 102\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mModule \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mplasma_property\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m requires input \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 103\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28minput\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m which has not been added\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m to this plasma\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 105\u001b[0m )\n\u001b[1;32m 106\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 107\u001b[0m position \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moutputs_dict[\u001b[38;5;28minput\u001b[39m]\u001b[38;5;241m.\u001b[39moutputs\u001b[38;5;241m.\u001b[39mindex(\u001b[38;5;28minput\u001b[39m)\n", - "\u001b[0;31mPlasmaMissingModule\u001b[0m: Module PartitionFunction requires input level_boltzmann_factor which has not been added to this plasma" + "name": "stdout", + "output_type": "stream", + "text": [ + "SCRUN MAGIC\n" ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plasma_solver_factory.assemble(number_densities, d_radfield, 5 * u.day)" + "%scrun plasma_solver = plasma_solver_factory.assemble(number_densities, d_radfield, 5 * u.day)" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
atomic_numberion_number
102.245918e-04
13.011070e+08
201.405189e-15
12.206015e-03
23.011070e+08
\n", + "
" + ], "text/plain": [ - "[tardis.plasma.properties.plasma_input.DilutePlanckianRadField,\n", - " tardis.plasma.properties.plasma_input.DilutePlanckianRadField,\n", - " tardis.plasma.properties.plasma_input.NumberDensity,\n", - " tardis.plasma.properties.plasma_input.TimeExplosion,\n", - " tardis.plasma.properties.plasma_input.AtomicData,\n", - " tardis.plasma.properties.plasma_input.JBlues,\n", - " tardis.plasma.properties.plasma_input.LinkTRadTElectron,\n", - " tardis.plasma.properties.plasma_input.HeliumTreatment,\n", - " tardis.plasma.properties.plasma_input.ContinuumInteractionSpecies,\n", - " tardis.plasma.properties.plasma_input.NLTEIonizationSpecies,\n", - " tardis.plasma.properties.plasma_input.NLTEExcitationSpecies,\n", - " tardis.plasma.properties.plasma_input.TRadiative,\n", - " tardis.plasma.properties.plasma_input.DilutionFactor,\n", - " tardis.plasma.properties.general.BetaRadiation,\n", - " tardis.plasma.properties.atomic.Levels,\n", - " tardis.plasma.properties.atomic.Lines,\n", - " tardis.plasma.properties.partition_function.PartitionFunction,\n", - " tardis.plasma.properties.general.GElectron,\n", - " tardis.plasma.properties.atomic.IonizationData,\n", - " tardis.plasma.properties.atomic.LinesLowerLevelIndex,\n", - " tardis.plasma.properties.atomic.LinesUpperLevelIndex,\n", - " tardis.opacities.tau_sobolev.TauSobolev,\n", - " tardis.plasma.properties.radiative_properties.StimulatedEmissionFactor,\n", - " tardis.plasma.properties.general.SelectedAtoms,\n", - " tardis.plasma.properties.general.ElectronTemperature,\n", - " tardis.plasma.properties.partition_function.LevelBoltzmannFactorLTE,\n", - " tardis.plasma.properties.ion_population.PhiSahaLTE,\n", - " tardis.plasma.properties.level_population.LevelNumberDensity,\n", - " tardis.plasma.properties.ion_population.IonNumberDensity]" + " 0\n", + "atomic_number ion_number \n", + "1 0 2.245918e-04\n", + " 1 3.011070e+08\n", + "2 0 1.405189e-15\n", + " 1 2.206015e-03\n", + " 2 3.011070e+08" ] }, - "execution_count": 16, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "plasma_solver_factory.plasma_modules" + "plasma_solver.ion_number_density" ] }, { diff --git a/tardis/model/base.py b/tardis/model/base.py index d3e1ce6cee4..27e11d2f20d 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -95,6 +95,7 @@ class SimulationState(HDFWriterMixin): "density", "r_inner", "time_explosion", + "abundance", ] hdf_name = "simulation_state" diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 39b29e4ceb9..90b366f3a4d 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -103,28 +103,21 @@ def __init__(self, atom_data, selected_atomic_numbers, config=None) -> None: continuum_interaction_species=self.continuum_interaction_species, nlte_species=self.legacy_nlte_species, ) - self.check_continuum_interaction_species() - - self.plasma_modules = basic_inputs + basic_properties - - self.setup_analytical_approximations() - self.property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=self.delta_treatment - ) - if config is not None: - self.setup_legacy_nlte(config.plasma.nlte) - if self.line_interaction_type in ("downbranch", "macroatom") and ( - len(self.continuum_interaction_species) == 0 - ): - self.plasma_modules += macro_atom_properties + def parse_plasma_config(self, plasma_config): + """ + Parse the plasma configuration. - self.setup_helium_treatment() + Parameters + ---------- + plasma_config : PlasmaConfig + The plasma configuration object containing the plasma parameters. - if len(self.continuum_interaction_species) > 0: - self.setup_continuum_interactions() + Returns + ------- + None - def parse_plasma_config(self, plasma_config): + """ self.set_continuum_interaction_species_from_string( plasma_config.continuum_interaction.species ) @@ -153,6 +146,30 @@ def parse_plasma_config(self, plasma_config): plasma_config.continuum_interaction.enable_two_photon_decay ) + def setup_factory(self, config=None): + self.check_continuum_interaction_species() + + self.plasma_modules = basic_inputs + basic_properties + + self.setup_analytical_approximations() + self.property_kwargs[RadiationFieldCorrection] = dict( + delta_treatment=self.delta_treatment + ) + if (config is not None) and len(self.legacy_nlte_species) > 0: + self.setup_legacy_nlte(config.plasma.nlte) + else: + self.plasma_modules += non_nlte_properties + + if self.line_interaction_type in ("downbranch", "macroatom") and ( + len(self.continuum_interaction_species) == 0 + ): + self.plasma_modules += macro_atom_properties + + self.setup_helium_treatment() + + if len(self.continuum_interaction_species) > 0: + self.setup_continuum_interactions() + def setup_helium_treatment(self): """ Set up the helium treatment for the plasma assembly. @@ -231,16 +248,13 @@ def setup_legacy_nlte(self, nlte_config): This method adds the NLTE properties for the legacy species to the plasma modules. If there are no legacy NLTE species, it adds the non-NLTE properties instead. """ - if len(self.legacy_nlte_species) > 0: - self.plasma_modules += nlte_properties - self.plasma_modules.append( - LevelBoltzmannFactorNLTE.from_config(nlte_config) - ) - self.property_kwargs[StimulatedEmissionFactor] = dict( - nlte_species=self.legacy_nlte_species - ) - else: - self.plasma_modules += non_nlte_properties + self.plasma_modules += nlte_properties + self.plasma_modules.append( + LevelBoltzmannFactorNLTE.from_config(nlte_config) + ) + self.property_kwargs[StimulatedEmissionFactor] = dict( + nlte_species=self.legacy_nlte_species + ) def setup_analytical_approximations(self): """ diff --git a/tardis/plasma/assembly/legacy_assembly.py b/tardis/plasma/assembly/legacy_assembly.py index a87c682586e..916ebccaab7 100644 --- a/tardis/plasma/assembly/legacy_assembly.py +++ b/tardis/plasma/assembly/legacy_assembly.py @@ -26,7 +26,7 @@ def assemble_plasma(config, simulation_state, atom_data=None): atomic_numbers, config, ) - + plasma_solver_factory.setup_factory(config) dilute_planckian_radiation_field = DilutePlanckianRadiationField( simulation_state.t_radiative, simulation_state.dilution_factor ) diff --git a/tardis/plasma/properties/radiative_properties.py b/tardis/plasma/properties/radiative_properties.py index a1b8d0a5d8e..2490a53683f 100644 --- a/tardis/plasma/properties/radiative_properties.py +++ b/tardis/plasma/properties/radiative_properties.py @@ -5,6 +5,7 @@ from astropy import units as u from numba import jit, prange + from tardis import constants as const from tardis.opacities.macro_atom.base import TransitionProbabilities from tardis.plasma.properties.base import ( @@ -12,6 +13,7 @@ TransitionProbabilitiesProperty, ) + logger = logging.getLogger(__name__) __all__ = [ diff --git a/tardis/visualization/widgets/shell_info.py b/tardis/visualization/widgets/shell_info.py index 2cb93c91dd6..8fb011609d6 100644 --- a/tardis/visualization/widgets/shell_info.py +++ b/tardis/visualization/widgets/shell_info.py @@ -216,7 +216,7 @@ def __init__(self, hdf_fpath): super().__init__( sim_data["/simulation/simulation_state/t_radiative"], sim_data["/simulation/simulation_state/dilution_factor"], - sim_data["/simulation/plasma/abundance"], + sim_data["/simulation/simulation_state/abundance"], sim_data["/simulation/plasma/number_density"], sim_data["/simulation/plasma/ion_number_density"], sim_data["/simulation/plasma/level_number_density"], From ac141ec3085f1734b2aec277fcf02fc8cf0e0aad Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 28 Jul 2024 10:04:22 -0400 Subject: [PATCH 080/118] fixing hopefully last bugs --- tardis/plasma/assembly/base.py | 29 +++++++++++++---------- tardis/plasma/assembly/legacy_assembly.py | 1 + 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 90b366f3a4d..13354ea2f61 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -79,9 +79,7 @@ class PlasmaSolverFactory: heating_rate_data_file: str = "none" ## Continuum Interaction - continuum_interaction_species: pd.MultiIndex = pd.MultiIndex.from_tuples( - [], names=["atomic_number", "ion_number"] - ) + continuum_interaction_species: list = [] enable_adiabatic_cooling: bool = False enable_two_photon_decay: bool = False @@ -100,10 +98,17 @@ def __init__(self, atom_data, selected_atomic_numbers, config=None) -> None: self.atom_data.prepare_atom_data( selected_atomic_numbers, line_interaction_type=self.line_interaction_type, - continuum_interaction_species=self.continuum_interaction_species, + continuum_interaction_species=self.continuum_interaction_species_multi_index, nlte_species=self.legacy_nlte_species, ) + @property + def continuum_interaction_species_multi_index(self): + return pd.MultiIndex.from_tuples( + map_species_from_string(self.continuum_interaction_species), + names=["atomic_number", "ion_number"], + ) + def parse_plasma_config(self, plasma_config): """ Parse the plasma configuration. @@ -118,7 +123,7 @@ def parse_plasma_config(self, plasma_config): None """ - self.set_continuum_interaction_species_from_string( + self.continuum_interaction_species = ( plasma_config.continuum_interaction.species ) self.set_nlte_species_from_string(plasma_config.nlte.species) @@ -326,19 +331,17 @@ def set_continuum_interaction_species_from_string( ------- None """ - continuum_interaction_species = [ + self.continuum_interaction_species = [ species_string_to_tuple(species) for species in continuum_interaction_species ] - self.continuum_interaction_species = pd.MultiIndex.from_tuples( - continuum_interaction_species, names=["atomic_number", "ion_number"] - ) - def check_continuum_interaction_species(self): - continuum_atoms = self.continuum_interaction_species.get_level_values( - "atomic_number" + continuum_atoms = ( + self.continuum_interaction_species_multi_index.get_level_values( + "atomic_number" + ) ) continuum_atoms_in_selected_atoms = np.all( @@ -497,7 +500,7 @@ def assemble( link_t_rad_t_electron=self.link_t_rad_t_electron, atomic_data=self.atom_data, j_blues=j_blues, - continuum_interaction_species=self.continuum_interaction_species, + continuum_interaction_species=self.continuum_interaction_species_multi_index, nlte_ionization_species=self.nlte_ionization_species, nlte_excitation_species=self.nlte_excitation_species, ) diff --git a/tardis/plasma/assembly/legacy_assembly.py b/tardis/plasma/assembly/legacy_assembly.py index 916ebccaab7..6f12fde618b 100644 --- a/tardis/plasma/assembly/legacy_assembly.py +++ b/tardis/plasma/assembly/legacy_assembly.py @@ -35,4 +35,5 @@ def assemble_plasma(config, simulation_state, atom_data=None): simulation_state.elemental_number_density, dilute_planckian_radiation_field, simulation_state.time_explosion, + simulation_state._electron_densities, ) From 01b4df7711cbb752cfe564aed4329f2ec05e0e4f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 28 Jul 2024 10:52:13 -0400 Subject: [PATCH 081/118] slowly fix up assembly --- tardis/plasma/assembly/base.py | 39 +++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 13354ea2f61..7afe3215b9f 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -152,6 +152,25 @@ def parse_plasma_config(self, plasma_config): ) def setup_factory(self, config=None): + """ + Set up the plasma factory. + + Parameters + ---------- + config : object, optional + Configuration object containing plasma settings (default: None). + + Notes + ----- + This method performs the necessary setup steps for the plasma factory. + It checks the continuum interaction species, sets up the plasma modules, + sets up analytical approximations, sets up radiation field correction, + sets up legacy NLTE species if present, sets up macro atom properties if + line interaction type is 'downbranch' or 'macroatom' and there are no + continuum interaction species, and sets up helium treatment. Finally, + it sets up continuum interactions if there are any. + + """ self.check_continuum_interaction_species() self.plasma_modules = basic_inputs + basic_properties @@ -247,11 +266,6 @@ def setup_legacy_nlte(self, nlte_config): ---------- nlte_config : dict A dictionary containing the NLTE configuration. - - Notes - ----- - This method adds the NLTE properties for the legacy species to the plasma modules. - If there are no legacy NLTE species, it adds the non-NLTE properties instead. """ self.plasma_modules += nlte_properties self.plasma_modules.append( @@ -337,7 +351,13 @@ def set_continuum_interaction_species_from_string( ] def check_continuum_interaction_species(self): + """ + Check if all continuum interaction species belong to atoms that have been specified in the configuration. + Raises + ------ + PlasmaConfigError: If not all continuum interaction species belong to specified atoms. + """ continuum_atoms = ( self.continuum_interaction_species_multi_index.get_level_values( "atomic_number" @@ -372,7 +392,16 @@ def set_nlte_species_from_string(self, nlte_species): self.legacy_nlte_species = map_species_from_string(nlte_species) def setup_continuum_interactions(self): + """ + Set up continuum interactions for the plasma assembly. + Raises + ------ + PlasmaConfigError: If the line_interaction_type is not "macroatom". + PlasmaConfigError: If an NLTE ionization species is not in the continuum species. + PlasmaConfigError: If an NLTE excitation species is not in the continuum species. + PlasmaConfigError: If the NLTE solver type is unknown. + """ if self.line_interaction_type != "macroatom": raise PlasmaConfigError( "Continuum interactions require line_interaction_type " From 4ba4afb2bff7058a77285b6f583c9a28e721209d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Jul 2024 13:31:52 -0400 Subject: [PATCH 082/118] working on getting the notebook running --- .../plasma/construction_simple_plasma.ipynb | 39 +++++++------------ tardis/plasma/assembly/base.py | 12 ------ 2 files changed, 13 insertions(+), 38 deletions(-) diff --git a/docs/physics/plasma/construction_simple_plasma.ipynb b/docs/physics/plasma/construction_simple_plasma.ipynb index 58023347add..a8719bb41cc 100644 --- a/docs/physics/plasma/construction_simple_plasma.ipynb +++ b/docs/physics/plasma/construction_simple_plasma.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Constructing a simple plasma" + "# Constructing a simple thermal plasma" ] }, { @@ -12,22 +12,6 @@ "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "LOADING\n", - "Scalene extension successfully loaded. Note: Scalene currently only\n", - "supports CPU+GPU profiling inside Jupyter notebooks. For full Scalene\n", - "profiling, use the command line version. To profile in line mode, use\n", - "`%scrun [options] statement`. To profile in cell mode, use `%%scalene\n", - "[options]` followed by your code.\n", - "\n", - "NOTE: in Jupyter notebook on MacOS, Scalene cannot profile child\n", - "processes. Do not run to try Scalene with multiprocessing in Jupyter\n", - "Notebook.\n" - ] - }, { "name": "stderr", "output_type": "stream", @@ -39,7 +23,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "72ded6233c124eeba35259b3c035ab59", + "model_id": "adc8142e04de4ac4ad9fb6d9eba83286", "version_major": 2, "version_minor": 0 }, @@ -53,7 +37,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "32dafcfb559b481e902613c28442602a", + "model_id": "36b88ed7168e46c8864e17b0107f8f71", "version_major": 2, "version_minor": 0 }, @@ -69,13 +53,18 @@ "import numpy as np\n", "import pandas as pd\n", "from astropy import units as u\n", - "%load_ext scalene\n", + "\n", "from tardis.io.atom_data import AtomData\n", "from tardis.plasma.assembly.base import PlasmaSolverFactory\n", "from tardis.plasma.radiation_field import DilutePlanckianRadiationField\n", - "#from tardis.plasma.properties.plasma_input import T\n", - "\n", - "%load_ext pyinstrument\n" + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the default configuration the plasma solver assumes the conditions for a Local Thermodynamic Equilibrium meaning a planckian radiation field and a maxwellian electron velocity distribution at the same templerature" ] }, { @@ -154,9 +143,7 @@ "output_type": "display_data" } ], - "source": [ - "%scrun plasma_solver = plasma_solver_factory.assemble(number_densities, d_radfield, 5 * u.day)" - ] + "source": [] }, { "cell_type": "code", diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 7afe3215b9f..163193e6b51 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -121,7 +121,6 @@ def parse_plasma_config(self, plasma_config): Returns ------- None - """ self.continuum_interaction_species = ( plasma_config.continuum_interaction.species @@ -159,17 +158,6 @@ def setup_factory(self, config=None): ---------- config : object, optional Configuration object containing plasma settings (default: None). - - Notes - ----- - This method performs the necessary setup steps for the plasma factory. - It checks the continuum interaction species, sets up the plasma modules, - sets up analytical approximations, sets up radiation field correction, - sets up legacy NLTE species if present, sets up macro atom properties if - line interaction type is 'downbranch' or 'macroatom' and there are no - continuum interaction species, and sets up helium treatment. Finally, - it sets up continuum interactions if there are any. - """ self.check_continuum_interaction_species() From 7d8e6e04d8830e6bee8d5cd3b659f9ce9d3bc6b8 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Jul 2024 13:43:35 -0400 Subject: [PATCH 083/118] Refactor code to address comments --- tardis/energy_input/gamma_packet_loop.py | 4 +--- tardis/energy_input/gamma_ray_estimators.py | 4 +--- .../properties/continuum_processes/photo_ion_rate_coeff.py | 1 - .../properties/continuum_processes/recomb_rate_coeff.py | 5 +++-- tardis/plasma/properties/property_collections.py | 1 - tardis/transport/montecarlo/base.py | 2 +- ...lute_blackbody_properties.py => mc_rad_field_solver.py} | 0 tardis/transport/montecarlo/montecarlo_transport_state.py | 7 ------- 8 files changed, 6 insertions(+), 18 deletions(-) rename tardis/transport/montecarlo/estimators/{dilute_blackbody_properties.py => mc_rad_field_solver.py} (100%) diff --git a/tardis/energy_input/gamma_packet_loop.py b/tardis/energy_input/gamma_packet_loop.py index faac2164eef..385febda679 100644 --- a/tardis/energy_input/gamma_packet_loop.py +++ b/tardis/energy_input/gamma_packet_loop.py @@ -19,11 +19,9 @@ doppler_factor_3d, get_index, ) -from tardis.opacities.compton_opacity_calculation import ( - compton_opacity_calculation, -) from tardis.opacities.opacities import ( SIGMA_T, + compton_opacity_calculation, kappa_calculation, pair_creation_opacity_artis, pair_creation_opacity_calculation, diff --git a/tardis/energy_input/gamma_ray_estimators.py b/tardis/energy_input/gamma_ray_estimators.py index 13ebc9e84c1..e28ba5029ff 100644 --- a/tardis/energy_input/gamma_ray_estimators.py +++ b/tardis/energy_input/gamma_ray_estimators.py @@ -7,11 +7,9 @@ angle_aberration_gamma, doppler_factor_3d, ) -from tardis.opacities.compton_opacity_calculation import ( - compton_opacity_calculation, -) from tardis.opacities.opacities import ( SIGMA_T, + compton_opacity_calculation, kappa_calculation, photoabsorption_opacity_calculation, ) diff --git a/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py b/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py index c3bf1fff744..96e7d5096f6 100644 --- a/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py +++ b/tardis/plasma/properties/continuum_processes/photo_ion_rate_coeff.py @@ -1,5 +1,4 @@ from tardis.plasma.properties.base import Input -from tardis.plasma.properties.continuum_processes.rates import H class PhotoIonRateCoeff(Input): diff --git a/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py index a6ea2879d0b..16ddf8a7caf 100644 --- a/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py +++ b/tardis/plasma/properties/continuum_processes/recomb_rate_coeff.py @@ -1,13 +1,14 @@ import numpy as np import pandas as pd +import tardis.constants as const from tardis.plasma.properties.base import Input, ProcessingPlasmaProperty -from tardis.plasma.properties.continuum_processes.rates import C, H from tardis.transport.montecarlo.estimators.util import ( - bound_free_estimator_array2frame, integrate_array_by_blocks, ) +C = const.c.cgs.value + class StimRecombRateFactor(Input): """ diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index 4cf62169ddb..ea4c8ec37fb 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -16,7 +16,6 @@ class PlasmaPropertyCollection(list): basic_inputs = PlasmaPropertyCollection( [ - DilutePlanckianRadField, DilutePlanckianRadField, Abundance, NumberDensity, diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index efb6ced9e9d..242c5d3123b 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -11,7 +11,7 @@ MonteCarloConfiguration, configuration_initialize, ) -from tardis.transport.montecarlo.estimators.dilute_blackbody_properties import ( +from tardis.transport.montecarlo.estimators.mc_rad_field_solver import ( MCRadiationFieldPropertiesSolver, ) from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( diff --git a/tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py b/tardis/transport/montecarlo/estimators/mc_rad_field_solver.py similarity index 100% rename from tardis/transport/montecarlo/estimators/dilute_blackbody_properties.py rename to tardis/transport/montecarlo/estimators/mc_rad_field_solver.py diff --git a/tardis/transport/montecarlo/montecarlo_transport_state.py b/tardis/transport/montecarlo/montecarlo_transport_state.py index 324be096534..cc49707cc13 100644 --- a/tardis/transport/montecarlo/montecarlo_transport_state.py +++ b/tardis/transport/montecarlo/montecarlo_transport_state.py @@ -1,14 +1,8 @@ import warnings -import numpy as np from astropy import units as u from tardis.io.util import HDFWriterMixin -from tardis.transport.montecarlo.estimators.dilute_blackbody_properties import ( - MCRadiationFieldPropertiesSolver, -) -from tardis.spectrum.formal_integral import IntegrationError -from tardis.spectrum.spectrum import TARDISSpectrum class MonteCarloTransportState(HDFWriterMixin): @@ -63,7 +57,6 @@ def __init__( rpacket_tracker=None, vpacket_tracker=None, ): - self.time_explosion = time_explosion self.packet_collection = packet_collection self.radfield_mc_estimators = radfield_mc_estimators self.enable_full_relativity = False From 7cb89bb0b0a3dc1564a566ca995076205880f9ee Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Jul 2024 10:38:34 -0400 Subject: [PATCH 084/118] feat: Add RadiativeRatesSolver class for detailed balance rates calculation --- .../plasma/detailed_balance/rates.ipynb | 295 ++++++++++++++++++ tardis/plasma/detailed_balance/__init__.py | 0 tardis/plasma/detailed_balance/rates.py | 3 + 3 files changed, 298 insertions(+) create mode 100644 docs/physics/plasma/detailed_balance/rates.ipynb create mode 100644 tardis/plasma/detailed_balance/__init__.py create mode 100644 tardis/plasma/detailed_balance/rates.py diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb new file mode 100644 index 00000000000..185db413ced --- /dev/null +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -0,0 +1,295 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exploring rates" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/python/tardis/tardis/__init__.py:20: UserWarning: Astropy is already imported externally. Astropy should be imported after TARDIS.\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d0cd45fbce2e4b6aaacc4535aa747073", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Iterations: 0/? [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nuA_ulB_ulB_luline_id
level_number_lowerlevel_number_upper
0967.342923e+154.416900e+077.565994e+062.269798e+0765821
10963.057509e+153.119717e+067.402309e+064.441385e+0665936
14962.574130e+158.215624e+063.266664e+079.799993e+0765995
23961.299170e+159.788389e+053.027395e+073.027395e+0766231
24961.299153e+152.955972e+069.142703e+075.485622e+0766232
.....................
1411659.719751e+131.641959e+071.212697e+121.374390e+1267281
1659.719751e+131.568058e+031.158116e+081.312532e+0867284
1421659.719751e+131.397533e+051.032172e+101.032172e+1067280
1659.719751e+131.189494e+058.785211e+098.785211e+0967285
1669.719751e+131.648381e+071.217440e+121.360668e+1267283
\n", + "

1248 rows × 5 columns

\n", + "" + ], + "text/plain": [ + " nu A_ul \\\n", + "level_number_lower level_number_upper \n", + "0 96 7.342923e+15 4.416900e+07 \n", + "10 96 3.057509e+15 3.119717e+06 \n", + "14 96 2.574130e+15 8.215624e+06 \n", + "23 96 1.299170e+15 9.788389e+05 \n", + "24 96 1.299153e+15 2.955972e+06 \n", + "... ... ... \n", + "141 165 9.719751e+13 1.641959e+07 \n", + " 165 9.719751e+13 1.568058e+03 \n", + "142 165 9.719751e+13 1.397533e+05 \n", + " 165 9.719751e+13 1.189494e+05 \n", + " 166 9.719751e+13 1.648381e+07 \n", + "\n", + " B_ul B_lu line_id \n", + "level_number_lower level_number_upper \n", + "0 96 7.565994e+06 2.269798e+07 65821 \n", + "10 96 7.402309e+06 4.441385e+06 65936 \n", + "14 96 3.266664e+07 9.799993e+07 65995 \n", + "23 96 3.027395e+07 3.027395e+07 66231 \n", + "24 96 9.142703e+07 5.485622e+07 66232 \n", + "... ... ... ... \n", + "141 165 1.212697e+12 1.374390e+12 67281 \n", + " 165 1.158116e+08 1.312532e+08 67284 \n", + "142 165 1.032172e+10 1.032172e+10 67280 \n", + " 165 8.785211e+09 8.785211e+09 67285 \n", + " 166 1.217440e+12 1.360668e+12 67283 \n", + "\n", + "[1248 rows x 5 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "atom_data.lines.loc[(14, 2), ['nu', 'A_ul', 'B_ul', 'B_lu', 'line_id']]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "tardis-devel", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tardis/plasma/detailed_balance/__init__.py b/tardis/plasma/detailed_balance/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/plasma/detailed_balance/rates.py b/tardis/plasma/detailed_balance/rates.py new file mode 100644 index 00000000000..cf9935f9322 --- /dev/null +++ b/tardis/plasma/detailed_balance/rates.py @@ -0,0 +1,3 @@ +class RadiativeRatesSolver: + def __init__(self, einstein_coefficients): + pass From 3e7d82c1614d1088ce5d383b3181e6b6a64d2c5b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Jul 2024 10:38:45 -0400 Subject: [PATCH 085/118] feat: Add solve method to RadiativeRatesSolver class --- tardis/plasma/detailed_balance/rates.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tardis/plasma/detailed_balance/rates.py b/tardis/plasma/detailed_balance/rates.py index cf9935f9322..cb05e7e2974 100644 --- a/tardis/plasma/detailed_balance/rates.py +++ b/tardis/plasma/detailed_balance/rates.py @@ -1,3 +1,7 @@ class RadiativeRatesSolver: def __init__(self, einstein_coefficients): - pass + self.einstein_coefficients = einstein_coefficients + + def solve(self, mean_intensities_blue): + + From 521c8089443bed3673118544287c7987de8ace43 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Jul 2024 10:39:04 -0400 Subject: [PATCH 086/118] add rates ipynb --- .../plasma/detailed_balance/rates.ipynb | 231 +++++------------- 1 file changed, 58 insertions(+), 173 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index 185db413ced..6d6ad124d55 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -71,196 +71,81 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_36508/3652199509.py:1: PerformanceWarning: indexing past lexsort depth may impact performance.\n", - " atom_data.lines.loc[(14, 2), ['nu', 'A_ul', 'B_ul', 'B_lu', 'line_id']]\n" + "/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_36508/3036610921.py:1: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " test = atom_data.lines.loc[(14, 2), ['nu', 'A_ul', 'B_ul', 'B_lu', 'line_id']].copy()\n" ] - }, + } + ], + "source": [ + "test = atom_data.lines.loc[(14, 2), ['nu', 'A_ul', 'B_ul', 'B_lu', 'line_id']].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.all(test.index.get_level_values(0).values < test.index.get_level_values(1).values)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
nuA_ulB_ulB_luline_id
level_number_lowerlevel_number_upper
0967.342923e+154.416900e+077.565994e+062.269798e+0765821
10963.057509e+153.119717e+067.402309e+064.441385e+0665936
14962.574130e+158.215624e+063.266664e+079.799993e+0765995
23961.299170e+159.788389e+053.027395e+073.027395e+0766231
24961.299153e+152.955972e+069.142703e+075.485622e+0766232
.....................
1411659.719751e+131.641959e+071.212697e+121.374390e+1267281
1659.719751e+131.568058e+031.158116e+081.312532e+0867284
1421659.719751e+131.397533e+051.032172e+101.032172e+1067280
1659.719751e+131.189494e+058.785211e+098.785211e+0967285
1669.719751e+131.648381e+071.217440e+121.360668e+1267283
\n", - "

1248 rows × 5 columns

\n", - "
" - ], "text/plain": [ - " nu A_ul \\\n", - "level_number_lower level_number_upper \n", - "0 96 7.342923e+15 4.416900e+07 \n", - "10 96 3.057509e+15 3.119717e+06 \n", - "14 96 2.574130e+15 8.215624e+06 \n", - "23 96 1.299170e+15 9.788389e+05 \n", - "24 96 1.299153e+15 2.955972e+06 \n", - "... ... ... \n", - "141 165 9.719751e+13 1.641959e+07 \n", - " 165 9.719751e+13 1.568058e+03 \n", - "142 165 9.719751e+13 1.397533e+05 \n", - " 165 9.719751e+13 1.189494e+05 \n", - " 166 9.719751e+13 1.648381e+07 \n", - "\n", - " B_ul B_lu line_id \n", - "level_number_lower level_number_upper \n", - "0 96 7.565994e+06 2.269798e+07 65821 \n", - "10 96 7.402309e+06 4.441385e+06 65936 \n", - "14 96 3.266664e+07 9.799993e+07 65995 \n", - "23 96 3.027395e+07 3.027395e+07 66231 \n", - "24 96 9.142703e+07 5.485622e+07 66232 \n", - "... ... ... ... \n", - "141 165 1.212697e+12 1.374390e+12 67281 \n", - " 165 1.158116e+08 1.312532e+08 67284 \n", - "142 165 1.032172e+10 1.032172e+10 67280 \n", - " 165 8.785211e+09 8.785211e+09 67285 \n", - " 166 1.217440e+12 1.360668e+12 67283 \n", - "\n", - "[1248 rows x 5 columns]" + "MultiIndex([( 0, 96),\n", + " ( 10, 96),\n", + " ( 14, 96),\n", + " ( 23, 96),\n", + " ( 24, 96),\n", + " ( 26, 96),\n", + " ( 31, 96),\n", + " ( 49, 96),\n", + " ( 50, 96),\n", + " ( 52, 96),\n", + " ...\n", + " (141, 164),\n", + " (141, 164),\n", + " (142, 164),\n", + " (140, 164),\n", + " (141, 165),\n", + " (141, 165),\n", + " (141, 165),\n", + " (142, 165),\n", + " (142, 165),\n", + " (142, 166)],\n", + " names=['level_number_lower', 'level_number_upper'], length=1248)" ] }, - "execution_count": 8, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "atom_data.lines.loc[(14, 2), ['nu', 'A_ul', 'B_ul', 'B_lu', 'line_id']]" + "test.index" ] }, { From 9f93d847ed8ee5f57f41a70d2d9f4e10f577be5c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Jul 2024 10:40:43 -0400 Subject: [PATCH 087/118] remove abundance --- tardis/plasma/properties/property_collections.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tardis/plasma/properties/property_collections.py b/tardis/plasma/properties/property_collections.py index ea4c8ec37fb..0a71bb984de 100644 --- a/tardis/plasma/properties/property_collections.py +++ b/tardis/plasma/properties/property_collections.py @@ -17,7 +17,6 @@ class PlasmaPropertyCollection(list): basic_inputs = PlasmaPropertyCollection( [ DilutePlanckianRadField, - Abundance, NumberDensity, TimeExplosion, AtomicData, From f13004635487c9e2a06f1bcfd358c75df650d8b4 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Jul 2024 17:26:38 -0400 Subject: [PATCH 088/118] feat: Refactor code to improve readability and maintainability --- tardis/plasma/detailed_balance/rates.py | 16 ++- tardis/plasma/nlte/__init__.py | 0 tardis/plasma/nlte/nlte_data.py | 123 ---------------------- tardis/plasma/radiation_field/__init__.py | 1 + 4 files changed, 13 insertions(+), 127 deletions(-) delete mode 100644 tardis/plasma/nlte/__init__.py delete mode 100644 tardis/plasma/nlte/nlte_data.py diff --git a/tardis/plasma/detailed_balance/rates.py b/tardis/plasma/detailed_balance/rates.py index cb05e7e2974..8eee5504448 100644 --- a/tardis/plasma/detailed_balance/rates.py +++ b/tardis/plasma/detailed_balance/rates.py @@ -1,7 +1,15 @@ class RadiativeRatesSolver: def __init__(self, einstein_coefficients): - self.einstein_coefficients = einstein_coefficients - - def solve(self, mean_intensities_blue): - + assert einstein_coefficients.index.names == [ + "atomic_number", + "ion_number", + "level_number_lower", + "level_number_upper", + ] + assert {"A_ul", "B_ul", "B_lu", "nu"} - set( + einstein_coefficients.columns + ) == set() + self.einstein_coefficients = einstein_coefficients.sort_index() + def solve(self, mean_intensities): + pass diff --git a/tardis/plasma/nlte/__init__.py b/tardis/plasma/nlte/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tardis/plasma/nlte/nlte_data.py b/tardis/plasma/nlte/nlte_data.py deleted file mode 100644 index b5381100d4a..00000000000 --- a/tardis/plasma/nlte/nlte_data.py +++ /dev/null @@ -1,123 +0,0 @@ -import logging - -import numpy as np -from scipy import interpolate - -logger = logging.getLogger(__name__) - - -class NLTEData: - def __init__(self, atom_data, nlte_species): - self.atom_data = atom_data - self.lines = atom_data.lines.reset_index() - self.nlte_species = nlte_species - - if nlte_species: - logger.info("Preparing the NLTE data") - self._init_indices() - if atom_data.collision_data is not None: - self._create_collision_coefficient_matrix() - - def _init_indices(self): - self.lines_idx = {} - self.lines_level_number_lower = {} - self.lines_level_number_upper = {} - self.A_uls = {} - self.B_uls = {} - self.B_lus = {} - - for species in self.nlte_species: - lines_idx = np.where( - (self.lines.atomic_number == species[0]) - & (self.lines.ion_number == species[1]) - ) - self.lines_idx[species] = lines_idx - self.lines_level_number_lower[ - species - ] = self.lines.level_number_lower.values[lines_idx].astype(int) - self.lines_level_number_upper[ - species - ] = self.lines.level_number_upper.values[lines_idx].astype(int) - - self.A_uls[species] = self.atom_data.lines.A_ul.values[lines_idx] - self.B_uls[species] = self.atom_data.lines.B_ul.values[lines_idx] - self.B_lus[species] = self.atom_data.lines.B_lu.values[lines_idx] - - def _create_collision_coefficient_matrix(self): - self.C_ul_interpolator = {} - self.delta_E_matrices = {} - self.g_ratio_matrices = {} - collision_group = self.atom_data.collision_data.groupby( - level=["atomic_number", "ion_number"] - ) - for species in self.nlte_species: - no_of_levels = self.atom_data.levels.loc[species].energy.count() - C_ul_matrix = np.zeros( - ( - no_of_levels, - no_of_levels, - len(self.atom_data.collision_data_temperatures), - ) - ) - delta_E_matrix = np.zeros((no_of_levels, no_of_levels)) - g_ratio_matrix = np.zeros((no_of_levels, no_of_levels)) - - for ( - ( - atomic_number, - ion_number, - level_number_lower, - level_number_upper, - ), - line, - ) in collision_group.get_group(species).iterrows(): - # line.columns : delta_e, g_ratio, temperatures ... - C_ul_matrix[ - level_number_lower, level_number_upper, : - ] = line.values[2:] - delta_E_matrix[level_number_lower, level_number_upper] = line[ - "delta_e" - ] - # TODO TARDISATOMIC fix change the g_ratio to be the otherway round - I flip them now here. - g_ratio_matrix[level_number_lower, level_number_upper] = ( - 1 / line["g_ratio"] - ) - self.C_ul_interpolator[species] = interpolate.interp1d( - self.atom_data.collision_data_temperatures, C_ul_matrix - ) - self.delta_E_matrices[species] = delta_E_matrix - - self.g_ratio_matrices[species] = g_ratio_matrix - - def get_collision_matrix(self, species, t_electrons): - """ - Creat collision matrix by interpolating the C_ul values for - the desired temperatures. - """ - c_ul_matrix = self.C_ul_interpolator[species](t_electrons) - no_of_levels = c_ul_matrix.shape[0] - c_ul_matrix[np.isnan(c_ul_matrix)] = 0.0 - - # TODO in tardisatomic the g_ratio is the other way round - here I'll flip it in prepare_collision matrix - - c_lu_matrix = ( - c_ul_matrix - * np.exp( - -self.delta_E_matrices[species].reshape( - (no_of_levels, no_of_levels, 1) - ) - / t_electrons.reshape((1, 1, t_electrons.shape[0])) - ) - * self.g_ratio_matrices[species].reshape( - (no_of_levels, no_of_levels, 1) - ) - ) - return c_ul_matrix + c_lu_matrix.transpose(1, 0, 2) - - -class NLTEMatrixFactory: - def __init__(self, nlte_species): - pass - - def generate_indices(self): - pass diff --git a/tardis/plasma/radiation_field/__init__.py b/tardis/plasma/radiation_field/__init__.py index 307ea6046c5..9b5e11f4f47 100644 --- a/tardis/plasma/radiation_field/__init__.py +++ b/tardis/plasma/radiation_field/__init__.py @@ -1,3 +1,4 @@ from tardis.plasma.radiation_field.planck_rad_field import ( DilutePlanckianRadiationField, + PlanckianRadiationField, ) From f9ba8887a506b85907397b9477179ae5549a4674 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Jul 2024 21:18:18 -0400 Subject: [PATCH 089/118] first commit of the rates solver working --- .../plasma/detailed_balance/rates.ipynb | 57 +++++++++++++++---- tardis/plasma/detailed_balance/rates.py | 48 +++++++++++++++- 2 files changed, 91 insertions(+), 14 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index 6d6ad124d55..901989dd965 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -23,7 +23,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d0cd45fbce2e4b6aaacc4535aa747073", + "model_id": "74a48383035b4868ada4aaff3479bc62", "version_major": 2, "version_minor": 0 }, @@ -37,7 +37,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a90468983bdc400aa206685472715bb3", + "model_id": "2805425db52440e39ecd235c4da831aa", "version_major": 2, "version_minor": 0 }, @@ -56,8 +56,8 @@ "\n", "from tardis.io.atom_data import AtomData\n", "from tardis.plasma.assembly.base import PlasmaSolverFactory\n", - "from tardis.plasma.radiation_field import DilutePlanckianRadiationField\n", - "\n" + "from tardis.plasma.radiation_field import DilutePlanckianRadiationField, PlanckianRadiationField\n", + "from tardis.plasma.detailed_balance.rates import RadiativeRatesSolver\n" ] }, { @@ -66,25 +66,58 @@ "metadata": {}, "outputs": [], "source": [ - "atom_data = AtomData.from_hdf('kurucz_cd23_chianti_H_He.h5')" + "atom_data = AtomData.from_hdf('kurucz_cd23_chianti_H_He.h5')\n", + "lines_df = atom_data.lines" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "einstein_coefficients = lines_df.loc[(14, 2, slice(None), slice(None)), :]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "rad_rate_solver = RadiativeRatesSolver(lines_df.loc[(14, 2, slice(None), slice(None)), :])\n", + "rad_field = PlanckianRadiationField(temperature=10000 * u.K)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_36508/3036610921.py:1: PerformanceWarning: indexing past lexsort depth may impact performance.\n", - " test = atom_data.lines.loc[(14, 2), ['nu', 'A_ul', 'B_ul', 'B_lu', 'line_id']].copy()\n" + "ename": "TypeError", + "evalue": "PlanckianRadiationField.calculate_mean_intensity() missing 1 required positional argument: 'nu'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m rates_df \u001b[38;5;241m=\u001b[39m \u001b[43mrad_rate_solver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrad_field\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/python/tardis/tardis/plasma/detailed_balance/rates.py:29\u001b[0m, in \u001b[0;36mRadiativeRatesSolver.solve\u001b[0;34m(self, radiation_field)\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msolve\u001b[39m(\u001b[38;5;28mself\u001b[39m, radiation_field):\n\u001b[1;32m 28\u001b[0m rates_index \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39meinstein_coefficients\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[0;32m---> 29\u001b[0m mean_intensity \u001b[38;5;241m=\u001b[39m \u001b[43mradiation_field\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcalculate_mean_intensity\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 31\u001b[0m \u001b[38;5;66;03m# first half is r_lu - second half is r_lu\u001b[39;00m\n\u001b[1;32m 32\u001b[0m r_lu \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39meinstein_coefficients[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mB_lu\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mvalues \u001b[38;5;241m*\u001b[39m mean_intensity\n", + "\u001b[0;31mTypeError\u001b[0m: PlanckianRadiationField.calculate_mean_intensity() missing 1 required positional argument: 'nu'" ] } ], "source": [ - "test = atom_data.lines.loc[(14, 2), ['nu', 'A_ul', 'B_ul', 'B_lu', 'line_id']].copy()" + "rates_df = rad_rate_solver.solve(rad_field)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "rad_rate_solver.solve(rad_field.calculate_mean_intensity(rad_rate_solver.einstein_coefficients.nu.values))" ] }, { diff --git a/tardis/plasma/detailed_balance/rates.py b/tardis/plasma/detailed_balance/rates.py index 8eee5504448..f6da37d4048 100644 --- a/tardis/plasma/detailed_balance/rates.py +++ b/tardis/plasma/detailed_balance/rates.py @@ -1,5 +1,14 @@ +import numpy as np +import pandas as pd + + class RadiativeRatesSolver: + + einstein_coefficients: pd.DataFrame + def __init__(self, einstein_coefficients): + + # Ensuring the right columns are present assert einstein_coefficients.index.names == [ "atomic_number", "ion_number", @@ -9,7 +18,42 @@ def __init__(self, einstein_coefficients): assert {"A_ul", "B_ul", "B_lu", "nu"} - set( einstein_coefficients.columns ) == set() + + assert np.all( + einstein_coefficients.index.get_level_values("level_number_lower") + < einstein_coefficients.index.get_level_values("level_number_upper") + ) self.einstein_coefficients = einstein_coefficients.sort_index() - def solve(self, mean_intensities): - pass + def solve(self, radiation_field): + mean_intensity = radiation_field.calculate_mean_intensity( + self.einstein_coefficients.nu.values + ) + mean_intensity_df = pd.DataFrame( + data=mean_intensity, index=self.einstein_coefficients.index + ) + + # r_lu = B_lu * J_nu + r_lu = mean_intensity_df.multiply( + self.einstein_coefficients.B_lu, axis=0 + ) + + # r_ul = B_ul * J_nu + A_ul + r_ul = mean_intensity_df.multiply( + self.einstein_coefficients["B_ul"], axis=0 + ) + r_ul = r_ul.add(self.einstein_coefficients["A_ul"], axis=0) + + # swapping as source is upper and destination is lower + r_ul.index = r_ul.index.swaplevel( + "level_number_lower", "level_number_upper" + ) + + rates_df = pd.concat([r_lu, r_ul]) + rates_df.index.names = [ + "atomic_number", + "ion_number", + "level_number_source", + "level_number_destination", + ] + return rates_df From e3933653d28c40c7903506a12ab026b838581392 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 31 Jul 2024 15:49:30 -0400 Subject: [PATCH 090/118] fix up detailed balance foundation --- .../plasma/detailed_balance/rates.ipynb | 416 +++++++++++++++++- 1 file changed, 393 insertions(+), 23 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index 901989dd965..4f5763bd2ab 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -23,7 +23,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "74a48383035b4868ada4aaff3479bc62", + "model_id": "b77c4a495bfa487c86c094769acb8caa", "version_major": 2, "version_minor": 0 }, @@ -37,7 +37,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2805425db52440e39ecd235c4da831aa", + "model_id": "c22543a5b0034a9b91173dfc59dc187c", "version_major": 2, "version_minor": 0 }, @@ -51,13 +51,13 @@ ], "source": [ "import numpy as np\n", - "import pandas as pd\n", "from astropy import units as u\n", "\n", "from tardis.io.atom_data import AtomData\n", - "from tardis.plasma.assembly.base import PlasmaSolverFactory\n", - "from tardis.plasma.radiation_field import DilutePlanckianRadiationField, PlanckianRadiationField\n", - "from tardis.plasma.detailed_balance.rates import RadiativeRatesSolver\n" + "from tardis.plasma.detailed_balance.rates import RadiativeRatesSolver\n", + "from tardis.plasma.radiation_field import (\n", + " PlanckianRadiationField,\n", + ")\n" ] }, { @@ -72,43 +72,392 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ - "einstein_coefficients = lines_df.loc[(14, 2, slice(None), slice(None)), :]" + "einstein_coefficients_he1 = lines_df.loc[(2,0, slice(None), slice(None)), :]" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
line_idwavelengthf_ulf_lunuB_luB_ulA_ulwavelength_cm
atomic_numberion_numberlevel_number_lowerlevel_number_upper
201353317010833.3070.3654000.6090002.767322e+141.107679e+116.646073e+102.076771e+070.000108
453317110833.2170.6080000.6080002.767345e+141.105851e+111.105851e+113.455659e+070.000108
06533166584.3350.0920000.2760005.130489e+152.707737e+099.025791e+081.797241e+090.000006
2653318220586.9370.1256670.3770001.456227e+141.303073e+114.343575e+101.977784e+060.000206
016533167537.0310.0244670.0734005.582405e+156.618064e+082.206021e+085.658722e+080.000005
.................................
264653333640490.0520.0280000.0280007.404102e+131.903452e+101.903452e+101.139209e+050.000405
274653334040490.1670.0005710.0004447.404081e+133.019850e+083.882664e+082.323742e+030.000405
284653334440490.3140.2288570.3204007.404054e+132.178107e+111.555791e+119.311173e+050.000405
274553333940490.2160.4486360.5483337.404072e+133.727608e+113.049861e+111.825309e+060.000405
294753334640490.4291.0468891.3460007.404033e+139.150250e+117.116861e+114.259298e+060.000405
\n", + "

180 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " line_id \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 533170 \n", + " 4 533171 \n", + " 0 6 533166 \n", + " 2 6 533182 \n", + " 0 16 533167 \n", + "... ... \n", + " 26 46 533336 \n", + " 27 46 533340 \n", + " 28 46 533344 \n", + " 27 45 533339 \n", + " 29 47 533346 \n", + "\n", + " wavelength \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 10833.307 \n", + " 4 10833.217 \n", + " 0 6 584.335 \n", + " 2 6 20586.937 \n", + " 0 16 537.031 \n", + "... ... \n", + " 26 46 40490.052 \n", + " 27 46 40490.167 \n", + " 28 46 40490.314 \n", + " 27 45 40490.216 \n", + " 29 47 40490.429 \n", + "\n", + " f_ul \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.365400 \n", + " 4 0.608000 \n", + " 0 6 0.092000 \n", + " 2 6 0.125667 \n", + " 0 16 0.024467 \n", + "... ... \n", + " 26 46 0.028000 \n", + " 27 46 0.000571 \n", + " 28 46 0.228857 \n", + " 27 45 0.448636 \n", + " 29 47 1.046889 \n", + "\n", + " f_lu \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.609000 \n", + " 4 0.608000 \n", + " 0 6 0.276000 \n", + " 2 6 0.377000 \n", + " 0 16 0.073400 \n", + "... ... \n", + " 26 46 0.028000 \n", + " 27 46 0.000444 \n", + " 28 46 0.320400 \n", + " 27 45 0.548333 \n", + " 29 47 1.346000 \n", + "\n", + " nu \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 2.767322e+14 \n", + " 4 2.767345e+14 \n", + " 0 6 5.130489e+15 \n", + " 2 6 1.456227e+14 \n", + " 0 16 5.582405e+15 \n", + "... ... \n", + " 26 46 7.404102e+13 \n", + " 27 46 7.404081e+13 \n", + " 28 46 7.404054e+13 \n", + " 27 45 7.404072e+13 \n", + " 29 47 7.404033e+13 \n", + "\n", + " B_lu \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 1.107679e+11 \n", + " 4 1.105851e+11 \n", + " 0 6 2.707737e+09 \n", + " 2 6 1.303073e+11 \n", + " 0 16 6.618064e+08 \n", + "... ... \n", + " 26 46 1.903452e+10 \n", + " 27 46 3.019850e+08 \n", + " 28 46 2.178107e+11 \n", + " 27 45 3.727608e+11 \n", + " 29 47 9.150250e+11 \n", + "\n", + " B_ul \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 6.646073e+10 \n", + " 4 1.105851e+11 \n", + " 0 6 9.025791e+08 \n", + " 2 6 4.343575e+10 \n", + " 0 16 2.206021e+08 \n", + "... ... \n", + " 26 46 1.903452e+10 \n", + " 27 46 3.882664e+08 \n", + " 28 46 1.555791e+11 \n", + " 27 45 3.049861e+11 \n", + " 29 47 7.116861e+11 \n", + "\n", + " A_ul \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 2.076771e+07 \n", + " 4 3.455659e+07 \n", + " 0 6 1.797241e+09 \n", + " 2 6 1.977784e+06 \n", + " 0 16 5.658722e+08 \n", + "... ... \n", + " 26 46 1.139209e+05 \n", + " 27 46 2.323742e+03 \n", + " 28 46 9.311173e+05 \n", + " 27 45 1.825309e+06 \n", + " 29 47 4.259298e+06 \n", + "\n", + " wavelength_cm \n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.000108 \n", + " 4 0.000108 \n", + " 0 6 0.000006 \n", + " 2 6 0.000206 \n", + " 0 16 0.000005 \n", + "... ... \n", + " 26 46 0.000405 \n", + " 27 46 0.000405 \n", + " 28 46 0.000405 \n", + " 27 45 0.000405 \n", + " 29 47 0.000405 \n", + "\n", + "[180 rows x 9 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "rad_rate_solver = RadiativeRatesSolver(einstein_coefficients_he1)\n", + "rad_field = PlanckianRadiationField(temperature=[10000, 20000] * u.K)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "rad_rate_solver = RadiativeRatesSolver(lines_df.loc[(14, 2, slice(None), slice(None)), :])\n", - "rad_field = PlanckianRadiationField(temperature=10000 * u.K)" + "rates_df = rad_rate_solver.solve(rad_field)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 20, "metadata": {}, "outputs": [ { - "ename": "TypeError", - "evalue": "PlanckianRadiationField.calculate_mean_intensity() missing 1 required positional argument: 'nu'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[5], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m rates_df \u001b[38;5;241m=\u001b[39m \u001b[43mrad_rate_solver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrad_field\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/python/tardis/tardis/plasma/detailed_balance/rates.py:29\u001b[0m, in \u001b[0;36mRadiativeRatesSolver.solve\u001b[0;34m(self, radiation_field)\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msolve\u001b[39m(\u001b[38;5;28mself\u001b[39m, radiation_field):\n\u001b[1;32m 28\u001b[0m rates_index \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39meinstein_coefficients\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[0;32m---> 29\u001b[0m mean_intensity \u001b[38;5;241m=\u001b[39m \u001b[43mradiation_field\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcalculate_mean_intensity\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 31\u001b[0m \u001b[38;5;66;03m# first half is r_lu - second half is r_lu\u001b[39;00m\n\u001b[1;32m 32\u001b[0m r_lu \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39meinstein_coefficients[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mB_lu\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mvalues \u001b[38;5;241m*\u001b[39m mean_intensity\n", - "\u001b[0;31mTypeError\u001b[0m: PlanckianRadiationField.calculate_mean_intensity() missing 1 required positional argument: 'nu'" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "rates_df = rad_rate_solver.solve(rad_field)" + "rad_field" ] }, { @@ -181,6 +530,27 @@ "test.index" ] }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'AtomData' object has no attribute 'keys'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[15], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43matom_data\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkeys\u001b[49m()\n", + "\u001b[0;31mAttributeError\u001b[0m: 'AtomData' object has no attribute 'keys'" + ] + } + ], + "source": [ + "atom_data.keys()" + ] + }, { "cell_type": "code", "execution_count": null, From 3627811f03808cdb3befff4c9d147209f3a7f79e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 6 Aug 2024 08:20:31 +0200 Subject: [PATCH 091/118] further work on including the rates --- .../plasma/detailed_balance/rates.ipynb | 483 ++++-------------- tardis/plasma/detailed_balance/rates.py | 59 --- 2 files changed, 107 insertions(+), 435 deletions(-) delete mode 100644 tardis/plasma/detailed_balance/rates.py diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index 4f5763bd2ab..3edbeaa8279 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -23,7 +23,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b77c4a495bfa487c86c094769acb8caa", + "model_id": "bebd4896a8054029b665bd78c0058b5d", "version_major": 2, "version_minor": 0 }, @@ -37,7 +37,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c22543a5b0034a9b91173dfc59dc187c", + "model_id": "ed9538f0a0b445888ed64fc13eb0f1de", "version_major": 2, "version_minor": 0 }, @@ -54,15 +54,16 @@ "from astropy import units as u\n", "\n", "from tardis.io.atom_data import AtomData\n", - "from tardis.plasma.detailed_balance.rates import RadiativeRatesSolver\n", + "from tardis.plasma.detailed_balance.rates import RadiativeRatesSolver, CollisionCrossSectionRegemorter\n", "from tardis.plasma.radiation_field import (\n", " PlanckianRadiationField,\n", - ")\n" + ")\n", + "from astropy import constants as const" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -72,16 +73,35 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "einstein_coefficients_he1 = lines_df.loc[(2,0, slice(None), slice(None)), :]" + "selected_transitions = lines_df.loc[(2,0, slice(None), slice(None)), :]" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "rad_field = PlanckianRadiationField(temperature=[10000, 20000] * u.K)\n", + "rad_rate_solver = RadiativeRatesSolver(selected_transitions)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "rad_rates_df = rad_rate_solver.solve(rad_field)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -108,28 +128,14 @@ " \n", " \n", " \n", - " line_id\n", - " wavelength\n", - " f_ul\n", - " f_lu\n", - " nu\n", - " B_lu\n", - " B_ul\n", - " A_ul\n", - " wavelength_cm\n", + " 0\n", + " 1\n", " \n", " \n", " atomic_number\n", " ion_number\n", - " level_number_lower\n", - " level_number_upper\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " level_number_source\n", + " level_number_destination\n", " \n", " \n", " \n", @@ -138,417 +144,142 @@ " \n", " 2\n", " 0\n", - " 1\n", - " 3\n", - " 533170\n", - " 10833.307\n", - " 0.365400\n", - " 0.609000\n", - " 2.767322e+14\n", - " 1.107679e+11\n", - " 6.646073e+10\n", - " 2.076771e+07\n", - " 0.000108\n", + " 0\n", + " 6\n", + " 1.092259e-01\n", + " 2.426770e+04\n", " \n", " \n", - " 4\n", - " 533171\n", - " 10833.217\n", - " 0.608000\n", - " 0.608000\n", - " 2.767345e+14\n", - " 1.105851e+11\n", - " 1.105851e+11\n", - " 3.455659e+07\n", - " 0.000108\n", + " 16\n", + " 3.931126e-03\n", + " 2.583324e+03\n", " \n", " \n", - " 0\n", - " 6\n", - " 533166\n", - " 584.335\n", - " 0.092000\n", - " 0.276000\n", - " 5.130489e+15\n", - " 2.707737e+09\n", - " 9.025791e+08\n", - " 1.797241e+09\n", - " 0.000006\n", + " 30\n", + " 7.998261e-04\n", + " 7.686424e+02\n", " \n", " \n", - " 2\n", - " 6\n", - " 533182\n", - " 20586.937\n", - " 0.125667\n", - " 0.377000\n", - " 1.456227e+14\n", - " 1.303073e+11\n", - " 4.343575e+10\n", - " 1.977784e+06\n", - " 0.000206\n", + " 48\n", + " 2.921823e-04\n", + " 3.349007e+02\n", " \n", " \n", - " 0\n", - " 16\n", - " 533167\n", - " 537.031\n", - " 0.024467\n", - " 0.073400\n", - " 5.582405e+15\n", - " 6.618064e+08\n", - " 2.206021e+08\n", - " 5.658722e+08\n", - " 0.000005\n", + " 1\n", + " 3\n", + " 1.247811e+07\n", + " 3.671871e+07\n", " \n", " \n", " ...\n", " ...\n", " ...\n", " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", " \n", " \n", - " 26\n", " 46\n", - " 533336\n", - " 40490.052\n", - " 0.028000\n", - " 0.028000\n", - " 7.404102e+13\n", - " 1.903452e+10\n", - " 1.903452e+10\n", - " 1.139209e+05\n", - " 0.000405\n", + " 28\n", + " 3.113439e+06\n", + " 5.720071e+06\n", " \n", " \n", - " 27\n", - " 46\n", - " 533340\n", - " 40490.167\n", - " 0.000571\n", - " 0.000444\n", - " 7.404081e+13\n", - " 3.019850e+08\n", - " 3.882664e+08\n", - " 2.323742e+03\n", - " 0.000405\n", + " 39\n", + " 29\n", + " 1.741319e+05\n", + " 3.199534e+05\n", " \n", " \n", - " 28\n", - " 46\n", - " 533344\n", - " 40490.314\n", - " 0.228857\n", - " 0.320400\n", - " 7.404054e+13\n", - " 2.178107e+11\n", - " 1.555791e+11\n", - " 9.311173e+05\n", - " 0.000405\n", + " 47\n", + " 29\n", + " 1.424213e+07\n", + " 2.616593e+07\n", " \n", " \n", - " 27\n", - " 45\n", - " 533339\n", - " 40490.216\n", - " 0.448636\n", - " 0.548333\n", - " 7.404072e+13\n", - " 3.727608e+11\n", - " 3.049861e+11\n", - " 1.825309e+06\n", - " 0.000405\n", + " 32\n", + " 30\n", + " 5.589118e+06\n", + " 1.037015e+07\n", " \n", " \n", - " 29\n", - " 47\n", - " 533346\n", - " 40490.429\n", - " 1.046889\n", - " 1.346000\n", - " 7.404033e+13\n", - " 9.150250e+11\n", - " 7.116861e+11\n", - " 4.259298e+06\n", - " 0.000405\n", + " 39\n", + " 30\n", + " 5.195260e+06\n", + " 9.558669e+06\n", " \n", " \n", "\n", - "

180 rows × 9 columns

\n", + "

360 rows × 2 columns

\n", "" ], "text/plain": [ - " line_id \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 533170 \n", - " 4 533171 \n", - " 0 6 533166 \n", - " 2 6 533182 \n", - " 0 16 533167 \n", - "... ... \n", - " 26 46 533336 \n", - " 27 46 533340 \n", - " 28 46 533344 \n", - " 27 45 533339 \n", - " 29 47 533346 \n", - "\n", - " wavelength \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 10833.307 \n", - " 4 10833.217 \n", - " 0 6 584.335 \n", - " 2 6 20586.937 \n", - " 0 16 537.031 \n", - "... ... \n", - " 26 46 40490.052 \n", - " 27 46 40490.167 \n", - " 28 46 40490.314 \n", - " 27 45 40490.216 \n", - " 29 47 40490.429 \n", - "\n", - " f_ul \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 0.365400 \n", - " 4 0.608000 \n", - " 0 6 0.092000 \n", - " 2 6 0.125667 \n", - " 0 16 0.024467 \n", - "... ... \n", - " 26 46 0.028000 \n", - " 27 46 0.000571 \n", - " 28 46 0.228857 \n", - " 27 45 0.448636 \n", - " 29 47 1.046889 \n", - "\n", - " f_lu \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 0.609000 \n", - " 4 0.608000 \n", - " 0 6 0.276000 \n", - " 2 6 0.377000 \n", - " 0 16 0.073400 \n", - "... ... \n", - " 26 46 0.028000 \n", - " 27 46 0.000444 \n", - " 28 46 0.320400 \n", - " 27 45 0.548333 \n", - " 29 47 1.346000 \n", - "\n", - " nu \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 2.767322e+14 \n", - " 4 2.767345e+14 \n", - " 0 6 5.130489e+15 \n", - " 2 6 1.456227e+14 \n", - " 0 16 5.582405e+15 \n", - "... ... \n", - " 26 46 7.404102e+13 \n", - " 27 46 7.404081e+13 \n", - " 28 46 7.404054e+13 \n", - " 27 45 7.404072e+13 \n", - " 29 47 7.404033e+13 \n", - "\n", - " B_lu \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 1.107679e+11 \n", - " 4 1.105851e+11 \n", - " 0 6 2.707737e+09 \n", - " 2 6 1.303073e+11 \n", - " 0 16 6.618064e+08 \n", - "... ... \n", - " 26 46 1.903452e+10 \n", - " 27 46 3.019850e+08 \n", - " 28 46 2.178107e+11 \n", - " 27 45 3.727608e+11 \n", - " 29 47 9.150250e+11 \n", - "\n", - " B_ul \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 6.646073e+10 \n", - " 4 1.105851e+11 \n", - " 0 6 9.025791e+08 \n", - " 2 6 4.343575e+10 \n", - " 0 16 2.206021e+08 \n", - "... ... \n", - " 26 46 1.903452e+10 \n", - " 27 46 3.882664e+08 \n", - " 28 46 1.555791e+11 \n", - " 27 45 3.049861e+11 \n", - " 29 47 7.116861e+11 \n", + " 0 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "2 0 0 6 1.092259e-01 \n", + " 16 3.931126e-03 \n", + " 30 7.998261e-04 \n", + " 48 2.921823e-04 \n", + " 1 3 1.247811e+07 \n", + "... ... \n", + " 46 28 3.113439e+06 \n", + " 39 29 1.741319e+05 \n", + " 47 29 1.424213e+07 \n", + " 32 30 5.589118e+06 \n", + " 39 30 5.195260e+06 \n", "\n", - " A_ul \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 2.076771e+07 \n", - " 4 3.455659e+07 \n", - " 0 6 1.797241e+09 \n", - " 2 6 1.977784e+06 \n", - " 0 16 5.658722e+08 \n", - "... ... \n", - " 26 46 1.139209e+05 \n", - " 27 46 2.323742e+03 \n", - " 28 46 9.311173e+05 \n", - " 27 45 1.825309e+06 \n", - " 29 47 4.259298e+06 \n", + " 1 \n", + "atomic_number ion_number level_number_source level_number_destination \n", + "2 0 0 6 2.426770e+04 \n", + " 16 2.583324e+03 \n", + " 30 7.686424e+02 \n", + " 48 3.349007e+02 \n", + " 1 3 3.671871e+07 \n", + "... ... \n", + " 46 28 5.720071e+06 \n", + " 39 29 3.199534e+05 \n", + " 47 29 2.616593e+07 \n", + " 32 30 1.037015e+07 \n", + " 39 30 9.558669e+06 \n", "\n", - " wavelength_cm \n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 0.000108 \n", - " 4 0.000108 \n", - " 0 6 0.000006 \n", - " 2 6 0.000206 \n", - " 0 16 0.000005 \n", - "... ... \n", - " 26 46 0.000405 \n", - " 27 46 0.000405 \n", - " 28 46 0.000405 \n", - " 27 45 0.000405 \n", - " 29 47 0.000405 \n", - "\n", - "[180 rows x 9 columns]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "rad_rate_solver = RadiativeRatesSolver(einstein_coefficients_he1)\n", - "rad_field = PlanckianRadiationField(temperature=[10000, 20000] * u.K)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "rates_df = rad_rate_solver.solve(rad_field)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rad_field" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "rad_rate_solver.solve(rad_field.calculate_mean_intensity(rad_rate_solver.einstein_coefficients.nu.values))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" + "[360 rows x 2 columns]" ] }, - "execution_count": 32, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "np.all(test.index.get_level_values(0).values < test.index.get_level_values(1).values)" + "rad_rates_df" ] }, { - "cell_type": "code", - "execution_count": 23, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "MultiIndex([( 0, 96),\n", - " ( 10, 96),\n", - " ( 14, 96),\n", - " ( 23, 96),\n", - " ( 24, 96),\n", - " ( 26, 96),\n", - " ( 31, 96),\n", - " ( 49, 96),\n", - " ( 50, 96),\n", - " ( 52, 96),\n", - " ...\n", - " (141, 164),\n", - " (141, 164),\n", - " (142, 164),\n", - " (140, 164),\n", - " (141, 165),\n", - " (141, 165),\n", - " (141, 165),\n", - " (142, 165),\n", - " (142, 165),\n", - " (142, 166)],\n", - " names=['level_number_lower', 'level_number_upper'], length=1248)" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "test.index" + "## Collisional Rates" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 8, "metadata": {}, "outputs": [ { "ename": "AttributeError", - "evalue": "'AtomData' object has no attribute 'keys'", + "evalue": "'DataFrame' object has no attribute 'einstein_coefficients'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[15], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43matom_data\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkeys\u001b[49m()\n", - "\u001b[0;31mAttributeError\u001b[0m: 'AtomData' object has no attribute 'keys'" + "\u001b[0;32m/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_23215/751731715.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcol_rate_reg_solver\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mCollisionCrossSectionRegemorter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mselected_transitions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/python/tardis/tardis/plasma/detailed_balance/rates/collision_rates.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, transition_data)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtransition_data\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 213\u001b[0;31m assert transition_data.einstein_coefficients.index.names == [\n\u001b[0m\u001b[1;32m 214\u001b[0m \u001b[0;34m\"atomic_number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;34m\"ion_number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 216\u001b[0m \u001b[0;34m\"level_number_lower\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/miniconda/envs/tardis-devel/lib/python3.12/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 6295\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_accessors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6296\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6297\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6298\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6299\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'DataFrame' object has no attribute 'einstein_coefficients'" ] } ], "source": [ - "atom_data.keys()" + "col_rate_reg_solver = CollisionCrossSectionRegemorter(selected_transitions)" ] }, { diff --git a/tardis/plasma/detailed_balance/rates.py b/tardis/plasma/detailed_balance/rates.py deleted file mode 100644 index f6da37d4048..00000000000 --- a/tardis/plasma/detailed_balance/rates.py +++ /dev/null @@ -1,59 +0,0 @@ -import numpy as np -import pandas as pd - - -class RadiativeRatesSolver: - - einstein_coefficients: pd.DataFrame - - def __init__(self, einstein_coefficients): - - # Ensuring the right columns are present - assert einstein_coefficients.index.names == [ - "atomic_number", - "ion_number", - "level_number_lower", - "level_number_upper", - ] - assert {"A_ul", "B_ul", "B_lu", "nu"} - set( - einstein_coefficients.columns - ) == set() - - assert np.all( - einstein_coefficients.index.get_level_values("level_number_lower") - < einstein_coefficients.index.get_level_values("level_number_upper") - ) - self.einstein_coefficients = einstein_coefficients.sort_index() - - def solve(self, radiation_field): - mean_intensity = radiation_field.calculate_mean_intensity( - self.einstein_coefficients.nu.values - ) - mean_intensity_df = pd.DataFrame( - data=mean_intensity, index=self.einstein_coefficients.index - ) - - # r_lu = B_lu * J_nu - r_lu = mean_intensity_df.multiply( - self.einstein_coefficients.B_lu, axis=0 - ) - - # r_ul = B_ul * J_nu + A_ul - r_ul = mean_intensity_df.multiply( - self.einstein_coefficients["B_ul"], axis=0 - ) - r_ul = r_ul.add(self.einstein_coefficients["A_ul"], axis=0) - - # swapping as source is upper and destination is lower - r_ul.index = r_ul.index.swaplevel( - "level_number_lower", "level_number_upper" - ) - - rates_df = pd.concat([r_lu, r_ul]) - rates_df.index.names = [ - "atomic_number", - "ion_number", - "level_number_source", - "level_number_destination", - ] - return rates_df From 25973be9ce5f4dd183f1f2daf26bf154fcbf8354 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 6 Aug 2024 08:22:46 +0200 Subject: [PATCH 092/118] including the new rates structure --- .../plasma/detailed_balance/rates/__init__.py | 6 + .../detailed_balance/rates/collision_rates.py | 288 ++++++++++++++++++ .../detailed_balance/rates/radiative_rates.py | 59 ++++ 3 files changed, 353 insertions(+) create mode 100644 tardis/plasma/detailed_balance/rates/__init__.py create mode 100644 tardis/plasma/detailed_balance/rates/collision_rates.py create mode 100644 tardis/plasma/detailed_balance/rates/radiative_rates.py diff --git a/tardis/plasma/detailed_balance/rates/__init__.py b/tardis/plasma/detailed_balance/rates/__init__.py new file mode 100644 index 00000000000..39055dfea8f --- /dev/null +++ b/tardis/plasma/detailed_balance/rates/__init__.py @@ -0,0 +1,6 @@ +from tardis.plasma.detailed_balance.rates.radiative_rates import ( + RadiativeRatesSolver, +) +from tardis.plasma.detailed_balance.rates.collision_rates import ( + CollisionCrossSectionRegemorter, +) diff --git a/tardis/plasma/detailed_balance/rates/collision_rates.py b/tardis/plasma/detailed_balance/rates/collision_rates.py new file mode 100644 index 00000000000..187e84d03ab --- /dev/null +++ b/tardis/plasma/detailed_balance/rates/collision_rates.py @@ -0,0 +1,288 @@ +import numpy as np +import pandas as pd +from astropy import units as u +from scipy.special import exp1 + +from tardis import constants as const + + +def exp1_times_exp(x): + """ + Product of the Exponential integral E1 and an exponential. + + This function calculates the product of the Exponential integral E1 + and an exponential in a way that also works for large values. + + Parameters + ---------- + x : array_like + Input values. + + Returns + ------- + array_like + Output array. + """ + f = exp1(x) * np.exp(x) + # Use Laurent series for large values to avoid infinite exponential + mask = x > 500 + f[mask] = (x**-1 - x**-2 + 2 * x**-3 - 6 * x**-4)[mask] + return f + + +REGEMORTER_CONSTANT = ( # Hubeny, I. and Mihalas, D., "Theory of Stellar Atmospheres". 2014. EQ 9.54 [below it] + const.a0.cgs**2 + * np.pi + * np.sqrt(8 * const.k_B.cgs / (np.pi * const.m_e.cgs)) +) + +HYDROGEN_IONIZATION_ENERGY = ( + 13.598434005136003 * u.eV +).cgs # taken from the classic TARDIS ionization data + + +class CollisionalCrossSections: + def __init__(self, collision_cross_sections): + self.collisional_cross_sections = collision_cross_sections + + def solve_collisional_cross_sections(self, temperature_electron): + pass + + +N_A = const.N_A.cgs.value +K_B = const.k_B.cgs.value +C = const.c.cgs.value +H = const.h.cgs.value +A0 = const.a0.cgs.value +M_E = const.m_e.cgs.value +E = const.e.esu.value +BETA_COLL = (H**4 / (8 * K_B * M_E**3 * np.pi**3)) ** 0.5 +F_K = ( + 16 + / (3.0 * np.sqrt(3)) + * np.sqrt((2 * np.pi) ** 3 * K_B / (H**2 * M_E**3)) + * (E**2 / C) ** 3 +) # See Eq. 19 in Sutherland, R. S. 1998, MNRAS, 300, 321 +FF_OPAC_CONST = ( + (2 * np.pi / (3 * M_E * K_B)) ** 0.5 * 4 * E**6 / (3 * M_E * H * C) +) # See Eq. 6.1.8 in http://personal.psu.edu/rbc3/A534/lec6.pdf + + +class CollisionalCrossSectionYG(CollisionalCrossSections): + """ + Attributes + ---------- + yg_data : pandas.DataFrame + Table of thermally averaged effective collision strengths + (divided by the statistical weight of the lower level) Y_ij / g_i . + Columns are temperatures. + t_yg : numpy.ndarray + Temperatures at which collision strengths are tabulated. + yg_index : Pandas MultiIndex + delta_E_yg : pandas.DataFrame + Energy difference between upper and lower levels coupled by collisions. + yg_idx : pandas.DataFrame + Source_level_idx and destination_level_idx of collision transitions. + Indexed by atomic_number, ion_number, level_number_lower, + level_number_upper. + """ + + def calculate(self, atomic_data, continuum_interaction_species): + yg_data = atomic_data.yg_data + if yg_data is None: + raise ValueError( + "Tardis does not support continuum interactions for atomic data sources that do not contain yg_data" + ) + + mask_selected_species = yg_data.index.droplevel( + ["level_number_lower", "level_number_upper"] + ).isin(continuum_interaction_species) + yg_data = yg_data[mask_selected_species] + + t_yg = atomic_data.collision_data_temperatures + yg_data.columns = t_yg + approximate_yg_data = self.calculate_yg_van_regemorter( + atomic_data, t_yg, continuum_interaction_species + ) + + yg_data = yg_data.combine_first(approximate_yg_data) + + energies = atomic_data.levels.energy + index = yg_data.index + lu_index = index.droplevel("level_number_lower") + ll_index = index.droplevel("level_number_upper") + delta_E = energies.loc[lu_index].values - energies.loc[ll_index].values + delta_E = pd.Series(delta_E, index=index) + + source_idx = atomic_data.macro_atom_references.loc[ + ll_index + ].references_idx + destination_idx = atomic_data.macro_atom_references.loc[ + lu_index + ].references_idx + yg_idx = pd.DataFrame( + { + "source_level_idx": source_idx.values, + "destination_level_idx": destination_idx.values, + }, + index=index, + ) + return yg_data, t_yg, index, delta_E, yg_idx + + @classmethod + def calculate_yg_van_regemorter( + cls, atomic_data, t_electrons, continuum_interaction_species + ): + """ + Calculate collision strengths in the van Regemorter approximation. + + This function calculates thermally averaged effective collision + strengths (divided by the statistical weight of the lower level) + Y_ij / g_i using the van Regemorter approximation. + + Parameters + ---------- + atomic_data : tardis.io.atom_data.AtomData + t_electrons : numpy.ndarray + continuum_interaction_species : pandas.MultiIndex + + Returns + ------- + pandas.DataFrame + Thermally averaged effective collision strengths + (divided by the statistical weight of the lower level) Y_ij / g_i + + Notes + ----- + See Eq. 9.58 in [2]. + + References + ---------- + .. [1] van Regemorter, H., “Rate of Collisional Excitation in Stellar + Atmospheres.”, The Astrophysical Journal, vol. 136, p. 906, 1962. + doi:10.1086/147445. + .. [2] Hubeny, I. and Mihalas, D., "Theory of Stellar Atmospheres". 2014. + """ + HYDROGEN_IONIZATION_ENERGY = atomic_data.ionization_data.loc[(1, 1)] + + mask_selected_species = atomic_data.lines.index.droplevel( + ["level_number_lower", "level_number_upper"] + ).isin(continuum_interaction_species) + lines_filtered = atomic_data.lines[mask_selected_species] + f_lu = lines_filtered.f_lu.values + nu_lines = lines_filtered.nu.values + + coll_const = A0**2 * np.pi * np.sqrt(8 * K_B / (np.pi * M_E)) + yg = 14.5 * coll_const * t_electrons * yg[:, np.newaxis] + + u0 = nu_lines[np.newaxis].T / t_electrons * (H / K_B) + gamma = 0.276 * cls.exp1_times_exp(u0) + gamma[gamma < 0.2] = 0.2 + yg *= u0 * gamma / BETA_COLL + yg = pd.DataFrame(yg, index=lines_filtered.index, columns=t_electrons) + + return yg + + @staticmethod + def exp1_times_exp(x): + """ + Product of the Exponential integral E1 and an exponential. + + This function calculates the product of the Exponential integral E1 + and an exponential in a way that also works for large values. + + Parameters + ---------- + x : array_like + Input values. + + Returns + ------- + array_like + Output array. + """ + f = exp1(x) * np.exp(x) + # Use Laurent series for large values to avoid infinite exponential + mask = x > 500 + f[mask] = (x**-1 - x**-2 + 2 * x**-3 - 6 * x**-4)[mask] + return f + + +class CollisionCrossSectionRegemorter: + def __init__(self, transition_data) -> None: + assert transition_data.index.names == [ + "atomic_number", + "ion_number", + "level_number_lower", + "level_number_upper", + ] + assert {"f_lu", "nu"} - set(transition_data.columns) == set() + + assert np.all( + transition_data.index.get_level_values("level_number_lower") + < transition_data.index.get_level_values("level_number_upper") + ) + self.transition_data = transition_data.sort_index() + + def solve(self, t_electrons): + """ + Calculate collision strengths in the van Regemorter approximation. + + This function calculates thermally averaged effective collision + strengths (divided by the statistical weight of the lower level) + Y_ij / g_i using the van Regemorter approximation. + + Parameters + ---------- + atomic_data : tardis.io.atom_data.AtomData + t_electrons : numpy.ndarray + continuum_interaction_species : pandas.MultiIndex + + Returns + ------- + pandas.DataFrame + Thermally averaged effective collision strengths + (divided by the statistical weight of the lower level) Y_ij / g_i + + Notes + ----- + See Eq. 9.58 in [2]. + + References + ---------- + .. [1] van Regemorter, H., “Rate of Collisional Excitation in Stellar + Atmospheres.”, The Astrophysical Journal, vol. 136, p. 906, 1962. + doi:10.1086/147445. + .. [2] Hubeny, I. and Mihalas, D., "Theory of Stellar Atmospheres". 2014. + """ + collision_cross_section = ( + self.transition_data.f_lu.values + * ( + HYDROGEN_IONIZATION_ENERGY + / (const.h * self.transition_data.nu.values * u.Hz) + ) + ** 2 + ) + + collision_cross_section = ( + 14.5 + * REGEMORTER_CONSTANT + * t_electrons + * collision_cross_section[:, np.newaxis] + ) + + u0 = ( + self.transition_data.nu[np.newaxis].T + / t_electrons + * (const.h / const.k_B) + ) + gamma = 0.276 * exp1_times_exp(u0) + gamma[gamma < 0.2] = 0.2 + collision_cross_section *= u0 * gamma / BETA_COLL + collision_cross_section = pd.DataFrame( + collision_cross_section, + index=self.transition_data.index, + columns=t_electrons, + ) + + return collision_cross_section diff --git a/tardis/plasma/detailed_balance/rates/radiative_rates.py b/tardis/plasma/detailed_balance/rates/radiative_rates.py new file mode 100644 index 00000000000..f6da37d4048 --- /dev/null +++ b/tardis/plasma/detailed_balance/rates/radiative_rates.py @@ -0,0 +1,59 @@ +import numpy as np +import pandas as pd + + +class RadiativeRatesSolver: + + einstein_coefficients: pd.DataFrame + + def __init__(self, einstein_coefficients): + + # Ensuring the right columns are present + assert einstein_coefficients.index.names == [ + "atomic_number", + "ion_number", + "level_number_lower", + "level_number_upper", + ] + assert {"A_ul", "B_ul", "B_lu", "nu"} - set( + einstein_coefficients.columns + ) == set() + + assert np.all( + einstein_coefficients.index.get_level_values("level_number_lower") + < einstein_coefficients.index.get_level_values("level_number_upper") + ) + self.einstein_coefficients = einstein_coefficients.sort_index() + + def solve(self, radiation_field): + mean_intensity = radiation_field.calculate_mean_intensity( + self.einstein_coefficients.nu.values + ) + mean_intensity_df = pd.DataFrame( + data=mean_intensity, index=self.einstein_coefficients.index + ) + + # r_lu = B_lu * J_nu + r_lu = mean_intensity_df.multiply( + self.einstein_coefficients.B_lu, axis=0 + ) + + # r_ul = B_ul * J_nu + A_ul + r_ul = mean_intensity_df.multiply( + self.einstein_coefficients["B_ul"], axis=0 + ) + r_ul = r_ul.add(self.einstein_coefficients["A_ul"], axis=0) + + # swapping as source is upper and destination is lower + r_ul.index = r_ul.index.swaplevel( + "level_number_lower", "level_number_upper" + ) + + rates_df = pd.concat([r_lu, r_ul]) + rates_df.index.names = [ + "atomic_number", + "ion_number", + "level_number_source", + "level_number_destination", + ] + return rates_df From c6eeff1c6d7b7917c61df3f54d9597cc63274bd5 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 6 Aug 2024 19:19:42 -0400 Subject: [PATCH 093/118] getting the rates ready --- .../plasma/detailed_balance/rates.ipynb | 200 ++++++++++++++++-- .../detailed_balance/rates/collision_rates.py | 199 +++++++---------- 2 files changed, 259 insertions(+), 140 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index 3edbeaa8279..c985e54197f 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -23,7 +23,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bebd4896a8054029b665bd78c0058b5d", + "model_id": "c626f94aacb24beead4c9be4d9690d3e", "version_major": 2, "version_minor": 0 }, @@ -37,7 +37,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ed9538f0a0b445888ed64fc13eb0f1de", + "model_id": "8941a2bf7dfe422585ff3f52204f863f", "version_major": 2, "version_minor": 0 }, @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -82,17 +82,20 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "rad_field = PlanckianRadiationField(temperature=[10000, 20000] * u.K)\n", - "rad_rate_solver = RadiativeRatesSolver(selected_transitions)\n" + "temperature = [10000, 20000] * u.K\n", + "rad_field = PlanckianRadiationField(temperature=temperature)\n", + "\n", + "rad_rate_solver = RadiativeRatesSolver(selected_transitions)\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -101,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -243,7 +246,7 @@ "[360 rows x 2 columns]" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -259,29 +262,182 @@ "## Collisional Rates" ] }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "col_rate_reg_solver = CollisionCrossSectionRegemorter(selected_transitions)" + ] + }, { "cell_type": "code", "execution_count": 8, "metadata": {}, + "outputs": [], + "source": [ + "x = col_rate_reg_solver.solve(temperature)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "'DataFrame' object has no attribute 'einstein_coefficients'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_23215/751731715.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcol_rate_reg_solver\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mCollisionCrossSectionRegemorter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mselected_transitions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/python/tardis/tardis/plasma/detailed_balance/rates/collision_rates.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, transition_data)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtransition_data\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 213\u001b[0;31m assert transition_data.einstein_coefficients.index.names == [\n\u001b[0m\u001b[1;32m 214\u001b[0m \u001b[0;34m\"atomic_number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;34m\"ion_number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 216\u001b[0m \u001b[0;34m\"level_number_lower\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/miniconda/envs/tardis-devel/lib/python3.12/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 6295\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_accessors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6296\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6297\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6298\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6299\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m: 'DataFrame' object has no attribute 'einstein_coefficients'" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
10000.020000.0
atomic_numberion_numberlevel_number_lowerlevel_number_upper
20060.5126960.512696
160.1253100.125310
300.0501350.050135
480.0250790.025079
1320.97332122.514689
............
284663.62304989.779029
29391.8221592.570976
47267.281517377.163149
303238.46843853.712390
39132.704403186.980810
\n", + "

180 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " 10000.0 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 0 6 0.512696 \n", + " 16 0.125310 \n", + " 30 0.050135 \n", + " 48 0.025079 \n", + " 1 3 20.973321 \n", + "... ... \n", + " 28 46 63.623049 \n", + " 29 39 1.822159 \n", + " 47 267.281517 \n", + " 30 32 38.468438 \n", + " 39 132.704403 \n", + "\n", + " 20000.0 \n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 0 6 0.512696 \n", + " 16 0.125310 \n", + " 30 0.050135 \n", + " 48 0.025079 \n", + " 1 3 22.514689 \n", + "... ... \n", + " 28 46 89.779029 \n", + " 29 39 2.570976 \n", + " 47 377.163149 \n", + " 30 32 53.712390 \n", + " 39 186.980810 \n", + "\n", + "[180 rows x 2 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "col_rate_reg_solver = CollisionCrossSectionRegemorter(selected_transitions)" + "x" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, diff --git a/tardis/plasma/detailed_balance/rates/collision_rates.py b/tardis/plasma/detailed_balance/rates/collision_rates.py index 187e84d03ab..6f5400d891c 100644 --- a/tardis/plasma/detailed_balance/rates/collision_rates.py +++ b/tardis/plasma/detailed_balance/rates/collision_rates.py @@ -2,6 +2,7 @@ import pandas as pd from astropy import units as u from scipy.special import exp1 +from scipy.interpolate import PchipInterpolator from tardis import constants as const @@ -56,7 +57,9 @@ def solve_collisional_cross_sections(self, temperature_electron): A0 = const.a0.cgs.value M_E = const.m_e.cgs.value E = const.e.esu.value -BETA_COLL = (H**4 / (8 * K_B * M_E**3 * np.pi**3)) ** 0.5 +BETA_COLL = ( + (const.h**4 / (8 * const.k_B * const.m_e**3 * np.pi**3)) ** 0.5 +).cgs F_K = ( 16 / (3.0 * np.sqrt(3)) @@ -68,7 +71,7 @@ def solve_collisional_cross_sections(self, temperature_electron): ) # See Eq. 6.1.8 in http://personal.psu.edu/rbc3/A534/lec6.pdf -class CollisionalCrossSectionYG(CollisionalCrossSections): +class YGSolver(CollisionalCrossSections): """ Attributes ---------- @@ -87,39 +90,11 @@ class CollisionalCrossSectionYG(CollisionalCrossSections): level_number_upper. """ - def calculate(self, atomic_data, continuum_interaction_species): - yg_data = atomic_data.yg_data - if yg_data is None: - raise ValueError( - "Tardis does not support continuum interactions for atomic data sources that do not contain yg_data" - ) - - mask_selected_species = yg_data.index.droplevel( - ["level_number_lower", "level_number_upper"] - ).isin(continuum_interaction_species) - yg_data = yg_data[mask_selected_species] + def __init__(self, yg_data, yg_temperature_data, delta_energies): + yg_data.columns = yg_temperature_data + self.yg_data = yg_data + self.delta_energies = delta_energies - t_yg = atomic_data.collision_data_temperatures - yg_data.columns = t_yg - approximate_yg_data = self.calculate_yg_van_regemorter( - atomic_data, t_yg, continuum_interaction_species - ) - - yg_data = yg_data.combine_first(approximate_yg_data) - - energies = atomic_data.levels.energy - index = yg_data.index - lu_index = index.droplevel("level_number_lower") - ll_index = index.droplevel("level_number_upper") - delta_E = energies.loc[lu_index].values - energies.loc[ll_index].values - delta_E = pd.Series(delta_E, index=index) - - source_idx = atomic_data.macro_atom_references.loc[ - ll_index - ].references_idx - destination_idx = atomic_data.macro_atom_references.loc[ - lu_index - ].references_idx yg_idx = pd.DataFrame( { "source_level_idx": source_idx.values, @@ -127,88 +102,25 @@ def calculate(self, atomic_data, continuum_interaction_species): }, index=index, ) - return yg_data, t_yg, index, delta_E, yg_idx - - @classmethod - def calculate_yg_van_regemorter( - cls, atomic_data, t_electrons, continuum_interaction_species - ): - """ - Calculate collision strengths in the van Regemorter approximation. - - This function calculates thermally averaged effective collision - strengths (divided by the statistical weight of the lower level) - Y_ij / g_i using the van Regemorter approximation. - - Parameters - ---------- - atomic_data : tardis.io.atom_data.AtomData - t_electrons : numpy.ndarray - continuum_interaction_species : pandas.MultiIndex - - Returns - ------- - pandas.DataFrame - Thermally averaged effective collision strengths - (divided by the statistical weight of the lower level) Y_ij / g_i - - Notes - ----- - See Eq. 9.58 in [2]. - - References - ---------- - .. [1] van Regemorter, H., “Rate of Collisional Excitation in Stellar - Atmospheres.”, The Astrophysical Journal, vol. 136, p. 906, 1962. - doi:10.1086/147445. - .. [2] Hubeny, I. and Mihalas, D., "Theory of Stellar Atmospheres". 2014. - """ - HYDROGEN_IONIZATION_ENERGY = atomic_data.ionization_data.loc[(1, 1)] - - mask_selected_species = atomic_data.lines.index.droplevel( - ["level_number_lower", "level_number_upper"] - ).isin(continuum_interaction_species) - lines_filtered = atomic_data.lines[mask_selected_species] - f_lu = lines_filtered.f_lu.values - nu_lines = lines_filtered.nu.values - - coll_const = A0**2 * np.pi * np.sqrt(8 * K_B / (np.pi * M_E)) - yg = 14.5 * coll_const * t_electrons * yg[:, np.newaxis] - - u0 = nu_lines[np.newaxis].T / t_electrons * (H / K_B) - gamma = 0.276 * cls.exp1_times_exp(u0) - gamma[gamma < 0.2] = 0.2 - yg *= u0 * gamma / BETA_COLL - yg = pd.DataFrame(yg, index=lines_filtered.index, columns=t_electrons) - - return yg - - @staticmethod - def exp1_times_exp(x): - """ - Product of the Exponential integral E1 and an exponential. + self.yg_interpolator = PchipInterpolator( + self.yg_data.columns, self.yg_data.values, axis=1, extrapolate=True + ) - This function calculates the product of the Exponential integral E1 - and an exponential in a way that also works for large values. + def solve(self, t_electrons): + yg = self.yg_interpolator(t_electrons) - Parameters - ---------- - x : array_like - Input values. + boltzmann_factor = np.exp( + -self.delta_energies.values[np.newaxis].T + / (t_electrons * const.k_B).value + ) - Returns - ------- - array_like - Output array. - """ - f = exp1(x) * np.exp(x) - # Use Laurent series for large values to avoid infinite exponential - mask = x > 500 - f[mask] = (x**-1 - x**-2 + 2 * x**-3 - 6 * x**-4)[mask] - return f + q_ij = ( + BETA_COLL / np.sqrt(t_electrons) * yg * boltzmann_factor + ) # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 + return pd.DataFrame(q_ij, index=self.delta_energies) -class CollisionCrossSectionRegemorter: +class YGRegemorterSolver: def __init__(self, transition_data) -> None: assert transition_data.index.names == [ "atomic_number", @@ -267,22 +179,73 @@ def solve(self, t_electrons): collision_cross_section = ( 14.5 * REGEMORTER_CONSTANT - * t_electrons + * t_electrons.value * collision_cross_section[:, np.newaxis] ) u0 = ( - self.transition_data.nu[np.newaxis].T - / t_electrons - * (const.h / const.k_B) - ) + const.h.cgs.value * self.transition_data.nu.values[np.newaxis].T + ) / (t_electrons.value * const.k_B.cgs.value) gamma = 0.276 * exp1_times_exp(u0) gamma[gamma < 0.2] = 0.2 collision_cross_section *= u0 * gamma / BETA_COLL collision_cross_section = pd.DataFrame( - collision_cross_section, + collision_cross_section.cgs.value, index=self.transition_data.index, - columns=t_electrons, + columns=t_electrons.value, ) return collision_cross_section + + +class CollisionalRatesSolver: + def __init__(self, transition_data): + pass + + +class CollExcRateCoeff(ProcessingPlasmaProperty): + """ + Attributes + ---------- + coll_exc_coeff : pandas.DataFrame, dtype float + Rate coefficient for collisional excitation. + """ + + outputs = ("coll_exc_coeff",) + latex_name = ("c_{lu}",) + + def calculate(self, yg_interp, yg_index, t_electrons, delta_E_yg): + yg = yg_interp(t_electrons) + boltzmann_factor = np.exp( + -delta_E_yg.values[np.newaxis].T / (t_electrons * K_B) + ) + q_ij = ( + BETA_COLL.value / np.sqrt(t_electrons) * yg * boltzmann_factor + ) # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 + return pd.DataFrame(q_ij, index=yg_index) + + +class CollDeexcRateCoeff: + """ + Attributes + ---------- + coll_deexc_coeff : pandas.DataFrame, dtype float + Rate coefficient for collisional deexcitation. + """ + + outputs = ("coll_deexc_coeff",) + latex_name = ("c_{ul}",) + + def calculate(self, thermal_lte_level_boltzmann_factor, coll_exc_coeff): + level_lower_index = coll_exc_coeff.index.droplevel("level_number_upper") + level_upper_index = coll_exc_coeff.index.droplevel("level_number_lower") + + n_lower_prop = thermal_lte_level_boltzmann_factor.loc[ + level_lower_index + ].values + n_upper_prop = thermal_lte_level_boltzmann_factor.loc[ + level_upper_index + ].values + + coll_deexc_coeff = coll_exc_coeff * n_lower_prop / n_upper_prop + return coll_deexc_coeff From 37930ce74d3e05f6f278e29942a52a7c026b47b5 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 6 Aug 2024 20:55:11 -0400 Subject: [PATCH 094/118] feat: Refactor collision_rates module to improve code organization and readability --- .../plasma/detailed_balance/rates.ipynb | 352 +++++++++++++++++- .../detailed_balance/rates/collision_rates.py | 2 +- 2 files changed, 349 insertions(+), 5 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index c985e54197f..37294438ac2 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -73,11 +73,355 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "selected_transitions = lines_df.loc[(2,0, slice(None), slice(None)), :]" + "radiative_transitions = lines_df.loc[(2,0, slice(None), slice(None)), :]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
line_idwavelengthf_ulf_lunuB_luB_ulA_ulwavelength_cm
atomic_numberion_numberlevel_number_lowerlevel_number_upper
201353317010833.3070.3654000.6090002.767322e+141.107679e+116.646073e+102.076771e+070.000108
453317110833.2170.6080000.6080002.767345e+141.105851e+111.105851e+113.455659e+070.000108
06533166584.3350.0920000.2760005.130489e+152.707737e+099.025791e+081.797241e+090.000006
2653318220586.9370.1256670.3770001.456227e+141.303073e+114.343575e+101.977784e+060.000206
016533167537.0310.0244670.0734005.582405e+156.618064e+082.206021e+085.658722e+080.000005
.................................
264653333640490.0520.0280000.0280007.404102e+131.903452e+101.903452e+101.139209e+050.000405
274653334040490.1670.0005710.0004447.404081e+133.019850e+083.882664e+082.323742e+030.000405
284653334440490.3140.2288570.3204007.404054e+132.178107e+111.555791e+119.311173e+050.000405
274553333940490.2160.4486360.5483337.404072e+133.727608e+113.049861e+111.825309e+060.000405
294753334640490.4291.0468891.3460007.404033e+139.150250e+117.116861e+114.259298e+060.000405
\n", + "

180 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " line_id \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 533170 \n", + " 4 533171 \n", + " 0 6 533166 \n", + " 2 6 533182 \n", + " 0 16 533167 \n", + "... ... \n", + " 26 46 533336 \n", + " 27 46 533340 \n", + " 28 46 533344 \n", + " 27 45 533339 \n", + " 29 47 533346 \n", + "\n", + " wavelength \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 10833.307 \n", + " 4 10833.217 \n", + " 0 6 584.335 \n", + " 2 6 20586.937 \n", + " 0 16 537.031 \n", + "... ... \n", + " 26 46 40490.052 \n", + " 27 46 40490.167 \n", + " 28 46 40490.314 \n", + " 27 45 40490.216 \n", + " 29 47 40490.429 \n", + "\n", + " f_ul \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.365400 \n", + " 4 0.608000 \n", + " 0 6 0.092000 \n", + " 2 6 0.125667 \n", + " 0 16 0.024467 \n", + "... ... \n", + " 26 46 0.028000 \n", + " 27 46 0.000571 \n", + " 28 46 0.228857 \n", + " 27 45 0.448636 \n", + " 29 47 1.046889 \n", + "\n", + " f_lu \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.609000 \n", + " 4 0.608000 \n", + " 0 6 0.276000 \n", + " 2 6 0.377000 \n", + " 0 16 0.073400 \n", + "... ... \n", + " 26 46 0.028000 \n", + " 27 46 0.000444 \n", + " 28 46 0.320400 \n", + " 27 45 0.548333 \n", + " 29 47 1.346000 \n", + "\n", + " nu \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 2.767322e+14 \n", + " 4 2.767345e+14 \n", + " 0 6 5.130489e+15 \n", + " 2 6 1.456227e+14 \n", + " 0 16 5.582405e+15 \n", + "... ... \n", + " 26 46 7.404102e+13 \n", + " 27 46 7.404081e+13 \n", + " 28 46 7.404054e+13 \n", + " 27 45 7.404072e+13 \n", + " 29 47 7.404033e+13 \n", + "\n", + " B_lu \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 1.107679e+11 \n", + " 4 1.105851e+11 \n", + " 0 6 2.707737e+09 \n", + " 2 6 1.303073e+11 \n", + " 0 16 6.618064e+08 \n", + "... ... \n", + " 26 46 1.903452e+10 \n", + " 27 46 3.019850e+08 \n", + " 28 46 2.178107e+11 \n", + " 27 45 3.727608e+11 \n", + " 29 47 9.150250e+11 \n", + "\n", + " B_ul \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 6.646073e+10 \n", + " 4 1.105851e+11 \n", + " 0 6 9.025791e+08 \n", + " 2 6 4.343575e+10 \n", + " 0 16 2.206021e+08 \n", + "... ... \n", + " 26 46 1.903452e+10 \n", + " 27 46 3.882664e+08 \n", + " 28 46 1.555791e+11 \n", + " 27 45 3.049861e+11 \n", + " 29 47 7.116861e+11 \n", + "\n", + " A_ul \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 2.076771e+07 \n", + " 4 3.455659e+07 \n", + " 0 6 1.797241e+09 \n", + " 2 6 1.977784e+06 \n", + " 0 16 5.658722e+08 \n", + "... ... \n", + " 26 46 1.139209e+05 \n", + " 27 46 2.323742e+03 \n", + " 28 46 9.311173e+05 \n", + " 27 45 1.825309e+06 \n", + " 29 47 4.259298e+06 \n", + "\n", + " wavelength_cm \n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.000108 \n", + " 4 0.000108 \n", + " 0 6 0.000006 \n", + " 2 6 0.000206 \n", + " 0 16 0.000005 \n", + "... ... \n", + " 26 46 0.000405 \n", + " 27 46 0.000405 \n", + " 28 46 0.000405 \n", + " 27 45 0.000405 \n", + " 29 47 0.000405 \n", + "\n", + "[180 rows x 9 columns]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "radiative_transitions" ] }, { @@ -89,7 +433,7 @@ "temperature = [10000, 20000] * u.K\n", "rad_field = PlanckianRadiationField(temperature=temperature)\n", "\n", - "rad_rate_solver = RadiativeRatesSolver(selected_transitions)\n", + "rad_rate_solver = RadiativeRatesSolver(radiative_transitions)\n", "\n" ] }, @@ -268,7 +612,7 @@ "metadata": {}, "outputs": [], "source": [ - "col_rate_reg_solver = CollisionCrossSectionRegemorter(selected_transitions)" + "col_rate_reg_solver = CollisionCrossSectionRegemorter(radiative_transitions)" ] }, { diff --git a/tardis/plasma/detailed_balance/rates/collision_rates.py b/tardis/plasma/detailed_balance/rates/collision_rates.py index 6f5400d891c..d5582ec834d 100644 --- a/tardis/plasma/detailed_balance/rates/collision_rates.py +++ b/tardis/plasma/detailed_balance/rates/collision_rates.py @@ -71,7 +71,7 @@ def solve_collisional_cross_sections(self, temperature_electron): ) # See Eq. 6.1.8 in http://personal.psu.edu/rbc3/A534/lec6.pdf -class YGSolver(CollisionalCrossSections): +class YGSolver: """ Attributes ---------- From f2ebb6552393cb17f67dede31d962d1fd280bd71 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 7 Aug 2024 15:24:18 -0400 Subject: [PATCH 095/118] further work on collisional strengths --- .../plasma/detailed_balance/rates.ipynb | 65 +---- .../plasma/detailed_balance/rates/__init__.py | 5 +- .../detailed_balance/rates/collision_rates.py | 251 ------------------ 3 files changed, 17 insertions(+), 304 deletions(-) delete mode 100644 tardis/plasma/detailed_balance/rates/collision_rates.py diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index 37294438ac2..4def86c5b6c 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -9,52 +9,15 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/wkerzend/python/tardis/tardis/__init__.py:20: UserWarning: Astropy is already imported externally. Astropy should be imported after TARDIS.\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c626f94aacb24beead4c9be4d9690d3e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Iterations: 0/? [00:00 500 - f[mask] = (x**-1 - x**-2 + 2 * x**-3 - 6 * x**-4)[mask] - return f - - -REGEMORTER_CONSTANT = ( # Hubeny, I. and Mihalas, D., "Theory of Stellar Atmospheres". 2014. EQ 9.54 [below it] - const.a0.cgs**2 - * np.pi - * np.sqrt(8 * const.k_B.cgs / (np.pi * const.m_e.cgs)) -) - -HYDROGEN_IONIZATION_ENERGY = ( - 13.598434005136003 * u.eV -).cgs # taken from the classic TARDIS ionization data - - -class CollisionalCrossSections: - def __init__(self, collision_cross_sections): - self.collisional_cross_sections = collision_cross_sections - - def solve_collisional_cross_sections(self, temperature_electron): - pass - - -N_A = const.N_A.cgs.value -K_B = const.k_B.cgs.value -C = const.c.cgs.value -H = const.h.cgs.value -A0 = const.a0.cgs.value -M_E = const.m_e.cgs.value -E = const.e.esu.value -BETA_COLL = ( - (const.h**4 / (8 * const.k_B * const.m_e**3 * np.pi**3)) ** 0.5 -).cgs -F_K = ( - 16 - / (3.0 * np.sqrt(3)) - * np.sqrt((2 * np.pi) ** 3 * K_B / (H**2 * M_E**3)) - * (E**2 / C) ** 3 -) # See Eq. 19 in Sutherland, R. S. 1998, MNRAS, 300, 321 -FF_OPAC_CONST = ( - (2 * np.pi / (3 * M_E * K_B)) ** 0.5 * 4 * E**6 / (3 * M_E * H * C) -) # See Eq. 6.1.8 in http://personal.psu.edu/rbc3/A534/lec6.pdf - - -class YGSolver: - """ - Attributes - ---------- - yg_data : pandas.DataFrame - Table of thermally averaged effective collision strengths - (divided by the statistical weight of the lower level) Y_ij / g_i . - Columns are temperatures. - t_yg : numpy.ndarray - Temperatures at which collision strengths are tabulated. - yg_index : Pandas MultiIndex - delta_E_yg : pandas.DataFrame - Energy difference between upper and lower levels coupled by collisions. - yg_idx : pandas.DataFrame - Source_level_idx and destination_level_idx of collision transitions. - Indexed by atomic_number, ion_number, level_number_lower, - level_number_upper. - """ - - def __init__(self, yg_data, yg_temperature_data, delta_energies): - yg_data.columns = yg_temperature_data - self.yg_data = yg_data - self.delta_energies = delta_energies - - yg_idx = pd.DataFrame( - { - "source_level_idx": source_idx.values, - "destination_level_idx": destination_idx.values, - }, - index=index, - ) - self.yg_interpolator = PchipInterpolator( - self.yg_data.columns, self.yg_data.values, axis=1, extrapolate=True - ) - - def solve(self, t_electrons): - yg = self.yg_interpolator(t_electrons) - - boltzmann_factor = np.exp( - -self.delta_energies.values[np.newaxis].T - / (t_electrons * const.k_B).value - ) - - q_ij = ( - BETA_COLL / np.sqrt(t_electrons) * yg * boltzmann_factor - ) # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 - return pd.DataFrame(q_ij, index=self.delta_energies) - - -class YGRegemorterSolver: - def __init__(self, transition_data) -> None: - assert transition_data.index.names == [ - "atomic_number", - "ion_number", - "level_number_lower", - "level_number_upper", - ] - assert {"f_lu", "nu"} - set(transition_data.columns) == set() - - assert np.all( - transition_data.index.get_level_values("level_number_lower") - < transition_data.index.get_level_values("level_number_upper") - ) - self.transition_data = transition_data.sort_index() - - def solve(self, t_electrons): - """ - Calculate collision strengths in the van Regemorter approximation. - - This function calculates thermally averaged effective collision - strengths (divided by the statistical weight of the lower level) - Y_ij / g_i using the van Regemorter approximation. - - Parameters - ---------- - atomic_data : tardis.io.atom_data.AtomData - t_electrons : numpy.ndarray - continuum_interaction_species : pandas.MultiIndex - - Returns - ------- - pandas.DataFrame - Thermally averaged effective collision strengths - (divided by the statistical weight of the lower level) Y_ij / g_i - - Notes - ----- - See Eq. 9.58 in [2]. - - References - ---------- - .. [1] van Regemorter, H., “Rate of Collisional Excitation in Stellar - Atmospheres.”, The Astrophysical Journal, vol. 136, p. 906, 1962. - doi:10.1086/147445. - .. [2] Hubeny, I. and Mihalas, D., "Theory of Stellar Atmospheres". 2014. - """ - collision_cross_section = ( - self.transition_data.f_lu.values - * ( - HYDROGEN_IONIZATION_ENERGY - / (const.h * self.transition_data.nu.values * u.Hz) - ) - ** 2 - ) - - collision_cross_section = ( - 14.5 - * REGEMORTER_CONSTANT - * t_electrons.value - * collision_cross_section[:, np.newaxis] - ) - - u0 = ( - const.h.cgs.value * self.transition_data.nu.values[np.newaxis].T - ) / (t_electrons.value * const.k_B.cgs.value) - gamma = 0.276 * exp1_times_exp(u0) - gamma[gamma < 0.2] = 0.2 - collision_cross_section *= u0 * gamma / BETA_COLL - collision_cross_section = pd.DataFrame( - collision_cross_section.cgs.value, - index=self.transition_data.index, - columns=t_electrons.value, - ) - - return collision_cross_section - - -class CollisionalRatesSolver: - def __init__(self, transition_data): - pass - - -class CollExcRateCoeff(ProcessingPlasmaProperty): - """ - Attributes - ---------- - coll_exc_coeff : pandas.DataFrame, dtype float - Rate coefficient for collisional excitation. - """ - - outputs = ("coll_exc_coeff",) - latex_name = ("c_{lu}",) - - def calculate(self, yg_interp, yg_index, t_electrons, delta_E_yg): - yg = yg_interp(t_electrons) - boltzmann_factor = np.exp( - -delta_E_yg.values[np.newaxis].T / (t_electrons * K_B) - ) - q_ij = ( - BETA_COLL.value / np.sqrt(t_electrons) * yg * boltzmann_factor - ) # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 - return pd.DataFrame(q_ij, index=yg_index) - - -class CollDeexcRateCoeff: - """ - Attributes - ---------- - coll_deexc_coeff : pandas.DataFrame, dtype float - Rate coefficient for collisional deexcitation. - """ - - outputs = ("coll_deexc_coeff",) - latex_name = ("c_{ul}",) - - def calculate(self, thermal_lte_level_boltzmann_factor, coll_exc_coeff): - level_lower_index = coll_exc_coeff.index.droplevel("level_number_upper") - level_upper_index = coll_exc_coeff.index.droplevel("level_number_lower") - - n_lower_prop = thermal_lte_level_boltzmann_factor.loc[ - level_lower_index - ].values - n_upper_prop = thermal_lte_level_boltzmann_factor.loc[ - level_upper_index - ].values - - coll_deexc_coeff = coll_exc_coeff * n_lower_prop / n_upper_prop - return coll_deexc_coeff From 3206dbe2f3ccd2b129a7f5bfc5293ffc1151d3a9 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 8 Aug 2024 10:39:41 -0400 Subject: [PATCH 096/118] further work on the collisional cross sections --- .../plasma/detailed_balance/rates.ipynb | 1715 +++++++++++++++-- 1 file changed, 1560 insertions(+), 155 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index 4def86c5b6c..b11bf5ac550 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -11,13 +11,50 @@ "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/python/tardis/tardis/__init__.py:20: UserWarning: Astropy is already imported externally. Astropy should be imported after TARDIS.\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9fd88dff6ab34219bc55c34bc5d13252", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Iterations: 0/? [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
g_ratiodelta_et002000t004000t006000t008000t010000t012000t014000t016000...t030000t032000t034000t036000t038000t040000t042000t044000t046000t048000
atomic_numberion_numberlevel_number_lowerlevel_number_upper
10021.000000118352.2906452.042640e-081.444381e-081.179346e-081.021356e-089.135388e-098.339527e-097.720992e-097.222411e-09...5.274934e-095.107492e-094.955053e-094.815502e-094.687121e-094.568493e-094.458445e-094.355989e-094.260291e-094.170639e-09
11.000000118352.2402881.092234e-087.723319e-096.306113e-095.461296e-094.884770e-094.459199e-094.128449e-093.861840e-09...2.820443e-092.730903e-092.649386e-092.574760e-092.506107e-092.442670e-092.383821e-092.329031e-092.277855e-092.229912e-09
30.500000118352.7668801.092716e-087.726731e-096.308898e-095.463709e-094.886928e-094.461169e-094.130272e-093.863546e-09...2.821689e-092.732110e-092.650556e-092.575898e-092.507214e-092.443749e-092.384874e-092.330060e-092.278861e-092.230897e-09
51.000000140269.5656695.782447e-094.088822e-093.338521e-092.891255e-092.586026e-092.360716e-092.185607e-092.044455e-09...1.493097e-091.445690e-091.402530e-091.363019e-091.326670e-091.293083e-091.261924e-091.232915e-091.205819e-091.180435e-09
41.000000140269.5498423.035472e-092.146412e-091.752545e-091.517755e-091.357527e-091.239252e-091.147329e-091.073232e-09...7.838003e-107.589145e-107.362582e-107.155173e-106.964362e-106.788048e-106.624483e-106.472203e-106.329965e-106.196713e-10
...........................................................................
212200.333333132616.9901414.721393e-093.338525e-092.725891e-092.360688e-092.111462e-091.927490e-091.784507e-091.669251e-09...1.219039e-091.180328e-091.145086e-091.112822e-091.083140e-091.055713e-091.030269e-091.006581e-099.844543e-109.637256e-10
210.333333132616.9901412.491599e-091.761826e-091.438525e-091.245799e-091.114277e-091.017191e-099.417354e-108.809128e-10...6.433275e-106.228991e-106.043009e-105.872749e-105.716113e-105.571378e-105.437108e-105.312100e-105.195336e-105.085948e-10
220.250000132617.0793462.486935e-091.758529e-091.435832e-091.243467e-091.112191e-091.015287e-099.399728e-108.792640e-10...6.421233e-106.217332e-106.031698e-105.861756e-105.705414e-105.560950e-105.426931e-105.302157e-105.185611e-105.076428e-10
230.250000132617.0793461.192327e-098.431006e-106.883872e-105.961594e-105.332200e-104.867599e-104.506511e-104.215445e-10...3.078476e-102.980715e-102.891711e-102.810232e-102.735273e-102.666008e-102.601751e-102.541927e-102.486048e-102.433699e-10
240.200000132617.1325801.194305e-098.444993e-106.895292e-105.971484e-105.341045e-104.875674e-104.513986e-104.222438e-10...3.083583e-102.985659e-102.896508e-102.814894e-102.739810e-102.670430e-102.606067e-102.546144e-102.490172e-102.437736e-10
\n", + "

358 rows × 26 columns

\n", + "" + ], + "text/plain": [ + " g_ratio \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 1.000000 \n", + " 1 1.000000 \n", + " 3 0.500000 \n", + " 5 1.000000 \n", + " 4 1.000000 \n", + "... ... \n", + "2 1 2 20 0.333333 \n", + " 21 0.333333 \n", + " 22 0.250000 \n", + " 23 0.250000 \n", + " 24 0.200000 \n", + "\n", + " delta_e \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 118352.290645 \n", + " 1 118352.240288 \n", + " 3 118352.766880 \n", + " 5 140269.565669 \n", + " 4 140269.549842 \n", + "... ... \n", + "2 1 2 20 132616.990141 \n", + " 21 132616.990141 \n", + " 22 132617.079346 \n", + " 23 132617.079346 \n", + " 24 132617.132580 \n", + "\n", + " t002000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 2.042640e-08 \n", + " 1 1.092234e-08 \n", + " 3 1.092716e-08 \n", + " 5 5.782447e-09 \n", + " 4 3.035472e-09 \n", + "... ... \n", + "2 1 2 20 4.721393e-09 \n", + " 21 2.491599e-09 \n", + " 22 2.486935e-09 \n", + " 23 1.192327e-09 \n", + " 24 1.194305e-09 \n", + "\n", + " t004000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 1.444381e-08 \n", + " 1 7.723319e-09 \n", + " 3 7.726731e-09 \n", + " 5 4.088822e-09 \n", + " 4 2.146412e-09 \n", + "... ... \n", + "2 1 2 20 3.338525e-09 \n", + " 21 1.761826e-09 \n", + " 22 1.758529e-09 \n", + " 23 8.431006e-10 \n", + " 24 8.444993e-10 \n", + "\n", + " t006000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 1.179346e-08 \n", + " 1 6.306113e-09 \n", + " 3 6.308898e-09 \n", + " 5 3.338521e-09 \n", + " 4 1.752545e-09 \n", + "... ... \n", + "2 1 2 20 2.725891e-09 \n", + " 21 1.438525e-09 \n", + " 22 1.435832e-09 \n", + " 23 6.883872e-10 \n", + " 24 6.895292e-10 \n", + "\n", + " t008000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 1.021356e-08 \n", + " 1 5.461296e-09 \n", + " 3 5.463709e-09 \n", + " 5 2.891255e-09 \n", + " 4 1.517755e-09 \n", + "... ... \n", + "2 1 2 20 2.360688e-09 \n", + " 21 1.245799e-09 \n", + " 22 1.243467e-09 \n", + " 23 5.961594e-10 \n", + " 24 5.971484e-10 \n", + "\n", + " t010000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 9.135388e-09 \n", + " 1 4.884770e-09 \n", + " 3 4.886928e-09 \n", + " 5 2.586026e-09 \n", + " 4 1.357527e-09 \n", + "... ... \n", + "2 1 2 20 2.111462e-09 \n", + " 21 1.114277e-09 \n", + " 22 1.112191e-09 \n", + " 23 5.332200e-10 \n", + " 24 5.341045e-10 \n", + "\n", + " t012000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 8.339527e-09 \n", + " 1 4.459199e-09 \n", + " 3 4.461169e-09 \n", + " 5 2.360716e-09 \n", + " 4 1.239252e-09 \n", + "... ... \n", + "2 1 2 20 1.927490e-09 \n", + " 21 1.017191e-09 \n", + " 22 1.015287e-09 \n", + " 23 4.867599e-10 \n", + " 24 4.875674e-10 \n", + "\n", + " t014000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 7.720992e-09 \n", + " 1 4.128449e-09 \n", + " 3 4.130272e-09 \n", + " 5 2.185607e-09 \n", + " 4 1.147329e-09 \n", + "... ... \n", + "2 1 2 20 1.784507e-09 \n", + " 21 9.417354e-10 \n", + " 22 9.399728e-10 \n", + " 23 4.506511e-10 \n", + " 24 4.513986e-10 \n", + "\n", + " t016000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 7.222411e-09 \n", + " 1 3.861840e-09 \n", + " 3 3.863546e-09 \n", + " 5 2.044455e-09 \n", + " 4 1.073232e-09 \n", + "... ... \n", + "2 1 2 20 1.669251e-09 \n", + " 21 8.809128e-10 \n", + " 22 8.792640e-10 \n", + " 23 4.215445e-10 \n", + " 24 4.222438e-10 \n", + "\n", + " ... \\\n", + "atomic_number ion_number level_number_lower level_number_upper ... \n", + "1 0 0 2 ... \n", + " 1 ... \n", + " 3 ... \n", + " 5 ... \n", + " 4 ... \n", + "... ... \n", + "2 1 2 20 ... \n", + " 21 ... \n", + " 22 ... \n", + " 23 ... \n", + " 24 ... \n", + "\n", + " t030000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 5.274934e-09 \n", + " 1 2.820443e-09 \n", + " 3 2.821689e-09 \n", + " 5 1.493097e-09 \n", + " 4 7.838003e-10 \n", + "... ... \n", + "2 1 2 20 1.219039e-09 \n", + " 21 6.433275e-10 \n", + " 22 6.421233e-10 \n", + " 23 3.078476e-10 \n", + " 24 3.083583e-10 \n", + "\n", + " t032000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 5.107492e-09 \n", + " 1 2.730903e-09 \n", + " 3 2.732110e-09 \n", + " 5 1.445690e-09 \n", + " 4 7.589145e-10 \n", + "... ... \n", + "2 1 2 20 1.180328e-09 \n", + " 21 6.228991e-10 \n", + " 22 6.217332e-10 \n", + " 23 2.980715e-10 \n", + " 24 2.985659e-10 \n", + "\n", + " t034000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.955053e-09 \n", + " 1 2.649386e-09 \n", + " 3 2.650556e-09 \n", + " 5 1.402530e-09 \n", + " 4 7.362582e-10 \n", + "... ... \n", + "2 1 2 20 1.145086e-09 \n", + " 21 6.043009e-10 \n", + " 22 6.031698e-10 \n", + " 23 2.891711e-10 \n", + " 24 2.896508e-10 \n", + "\n", + " t036000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.815502e-09 \n", + " 1 2.574760e-09 \n", + " 3 2.575898e-09 \n", + " 5 1.363019e-09 \n", + " 4 7.155173e-10 \n", + "... ... \n", + "2 1 2 20 1.112822e-09 \n", + " 21 5.872749e-10 \n", + " 22 5.861756e-10 \n", + " 23 2.810232e-10 \n", + " 24 2.814894e-10 \n", + "\n", + " t038000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.687121e-09 \n", + " 1 2.506107e-09 \n", + " 3 2.507214e-09 \n", + " 5 1.326670e-09 \n", + " 4 6.964362e-10 \n", + "... ... \n", + "2 1 2 20 1.083140e-09 \n", + " 21 5.716113e-10 \n", + " 22 5.705414e-10 \n", + " 23 2.735273e-10 \n", + " 24 2.739810e-10 \n", + "\n", + " t040000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.568493e-09 \n", + " 1 2.442670e-09 \n", + " 3 2.443749e-09 \n", + " 5 1.293083e-09 \n", + " 4 6.788048e-10 \n", + "... ... \n", + "2 1 2 20 1.055713e-09 \n", + " 21 5.571378e-10 \n", + " 22 5.560950e-10 \n", + " 23 2.666008e-10 \n", + " 24 2.670430e-10 \n", + "\n", + " t042000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.458445e-09 \n", + " 1 2.383821e-09 \n", + " 3 2.384874e-09 \n", + " 5 1.261924e-09 \n", + " 4 6.624483e-10 \n", + "... ... \n", + "2 1 2 20 1.030269e-09 \n", + " 21 5.437108e-10 \n", + " 22 5.426931e-10 \n", + " 23 2.601751e-10 \n", + " 24 2.606067e-10 \n", + "\n", + " t044000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.355989e-09 \n", + " 1 2.329031e-09 \n", + " 3 2.330060e-09 \n", + " 5 1.232915e-09 \n", + " 4 6.472203e-10 \n", + "... ... \n", + "2 1 2 20 1.006581e-09 \n", + " 21 5.312100e-10 \n", + " 22 5.302157e-10 \n", + " 23 2.541927e-10 \n", + " 24 2.546144e-10 \n", + "\n", + " t046000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.260291e-09 \n", + " 1 2.277855e-09 \n", + " 3 2.278861e-09 \n", + " 5 1.205819e-09 \n", + " 4 6.329965e-10 \n", + "... ... \n", + "2 1 2 20 9.844543e-10 \n", + " 21 5.195336e-10 \n", + " 22 5.185611e-10 \n", + " 23 2.486048e-10 \n", + " 24 2.490172e-10 \n", + "\n", + " t048000 \n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.170639e-09 \n", + " 1 2.229912e-09 \n", + " 3 2.230897e-09 \n", + " 5 1.180435e-09 \n", + " 4 6.196713e-10 \n", + "... ... \n", + "2 1 2 20 9.637256e-10 \n", + " 21 5.085948e-10 \n", + " 22 5.076428e-10 \n", + " 23 2.433699e-10 \n", + " 24 2.437736e-10 \n", + "\n", + "[358 rows x 26 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "atom_data.collision_data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "radiative_transitions = lines_df.loc[(2,0, slice(None), slice(None)), :]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
g_ratiodelta_et002000t004000t006000t008000t010000t012000t014000t016000...t030000t032000t034000t036000t038000t040000t042000t044000t046000t048000
atomic_numberion_numberlevel_number_lowerlevel_number_upper
10021.000000118352.2906452.042640e-081.444381e-081.179346e-081.021356e-089.135388e-098.339527e-097.720992e-097.222411e-09...5.274934e-095.107492e-094.955053e-094.815502e-094.687121e-094.568493e-094.458445e-094.355989e-094.260291e-094.170639e-09
11.000000118352.2402881.092234e-087.723319e-096.306113e-095.461296e-094.884770e-094.459199e-094.128449e-093.861840e-09...2.820443e-092.730903e-092.649386e-092.574760e-092.506107e-092.442670e-092.383821e-092.329031e-092.277855e-092.229912e-09
30.500000118352.7668801.092716e-087.726731e-096.308898e-095.463709e-094.886928e-094.461169e-094.130272e-093.863546e-09...2.821689e-092.732110e-092.650556e-092.575898e-092.507214e-092.443749e-092.384874e-092.330060e-092.278861e-092.230897e-09
51.000000140269.5656695.782447e-094.088822e-093.338521e-092.891255e-092.586026e-092.360716e-092.185607e-092.044455e-09...1.493097e-091.445690e-091.402530e-091.363019e-091.326670e-091.293083e-091.261924e-091.232915e-091.205819e-091.180435e-09
41.000000140269.5498423.035472e-092.146412e-091.752545e-091.517755e-091.357527e-091.239252e-091.147329e-091.073232e-09...7.838003e-107.589145e-107.362582e-107.155173e-106.964362e-106.788048e-106.624483e-106.472203e-106.329965e-106.196713e-10
...........................................................................
212200.333333132616.9901414.721393e-093.338525e-092.725891e-092.360688e-092.111462e-091.927490e-091.784507e-091.669251e-09...1.219039e-091.180328e-091.145086e-091.112822e-091.083140e-091.055713e-091.030269e-091.006581e-099.844543e-109.637256e-10
210.333333132616.9901412.491599e-091.761826e-091.438525e-091.245799e-091.114277e-091.017191e-099.417354e-108.809128e-10...6.433275e-106.228991e-106.043009e-105.872749e-105.716113e-105.571378e-105.437108e-105.312100e-105.195336e-105.085948e-10
220.250000132617.0793462.486935e-091.758529e-091.435832e-091.243467e-091.112191e-091.015287e-099.399728e-108.792640e-10...6.421233e-106.217332e-106.031698e-105.861756e-105.705414e-105.560950e-105.426931e-105.302157e-105.185611e-105.076428e-10
230.250000132617.0793461.192327e-098.431006e-106.883872e-105.961594e-105.332200e-104.867599e-104.506511e-104.215445e-10...3.078476e-102.980715e-102.891711e-102.810232e-102.735273e-102.666008e-102.601751e-102.541927e-102.486048e-102.433699e-10
240.200000132617.1325801.194305e-098.444993e-106.895292e-105.971484e-105.341045e-104.875674e-104.513986e-104.222438e-10...3.083583e-102.985659e-102.896508e-102.814894e-102.739810e-102.670430e-102.606067e-102.546144e-102.490172e-102.437736e-10
\n", + "

358 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " g_ratio \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 1.000000 \n", + " 1 1.000000 \n", + " 3 0.500000 \n", + " 5 1.000000 \n", + " 4 1.000000 \n", + "... ... \n", + "2 1 2 20 0.333333 \n", + " 21 0.333333 \n", + " 22 0.250000 \n", + " 23 0.250000 \n", + " 24 0.200000 \n", + "\n", + " delta_e \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 118352.290645 \n", + " 1 118352.240288 \n", + " 3 118352.766880 \n", + " 5 140269.565669 \n", + " 4 140269.549842 \n", + "... ... \n", + "2 1 2 20 132616.990141 \n", + " 21 132616.990141 \n", + " 22 132617.079346 \n", + " 23 132617.079346 \n", + " 24 132617.132580 \n", + "\n", + " t002000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 2.042640e-08 \n", + " 1 1.092234e-08 \n", + " 3 1.092716e-08 \n", + " 5 5.782447e-09 \n", + " 4 3.035472e-09 \n", + "... ... \n", + "2 1 2 20 4.721393e-09 \n", + " 21 2.491599e-09 \n", + " 22 2.486935e-09 \n", + " 23 1.192327e-09 \n", + " 24 1.194305e-09 \n", + "\n", + " t004000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 1.444381e-08 \n", + " 1 7.723319e-09 \n", + " 3 7.726731e-09 \n", + " 5 4.088822e-09 \n", + " 4 2.146412e-09 \n", + "... ... \n", + "2 1 2 20 3.338525e-09 \n", + " 21 1.761826e-09 \n", + " 22 1.758529e-09 \n", + " 23 8.431006e-10 \n", + " 24 8.444993e-10 \n", + "\n", + " t006000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 1.179346e-08 \n", + " 1 6.306113e-09 \n", + " 3 6.308898e-09 \n", + " 5 3.338521e-09 \n", + " 4 1.752545e-09 \n", + "... ... \n", + "2 1 2 20 2.725891e-09 \n", + " 21 1.438525e-09 \n", + " 22 1.435832e-09 \n", + " 23 6.883872e-10 \n", + " 24 6.895292e-10 \n", + "\n", + " t008000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 1.021356e-08 \n", + " 1 5.461296e-09 \n", + " 3 5.463709e-09 \n", + " 5 2.891255e-09 \n", + " 4 1.517755e-09 \n", + "... ... \n", + "2 1 2 20 2.360688e-09 \n", + " 21 1.245799e-09 \n", + " 22 1.243467e-09 \n", + " 23 5.961594e-10 \n", + " 24 5.971484e-10 \n", + "\n", + " t010000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 9.135388e-09 \n", + " 1 4.884770e-09 \n", + " 3 4.886928e-09 \n", + " 5 2.586026e-09 \n", + " 4 1.357527e-09 \n", + "... ... \n", + "2 1 2 20 2.111462e-09 \n", + " 21 1.114277e-09 \n", + " 22 1.112191e-09 \n", + " 23 5.332200e-10 \n", + " 24 5.341045e-10 \n", + "\n", + " t012000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 8.339527e-09 \n", + " 1 4.459199e-09 \n", + " 3 4.461169e-09 \n", + " 5 2.360716e-09 \n", + " 4 1.239252e-09 \n", + "... ... \n", + "2 1 2 20 1.927490e-09 \n", + " 21 1.017191e-09 \n", + " 22 1.015287e-09 \n", + " 23 4.867599e-10 \n", + " 24 4.875674e-10 \n", + "\n", + " t014000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 7.720992e-09 \n", + " 1 4.128449e-09 \n", + " 3 4.130272e-09 \n", + " 5 2.185607e-09 \n", + " 4 1.147329e-09 \n", + "... ... \n", + "2 1 2 20 1.784507e-09 \n", + " 21 9.417354e-10 \n", + " 22 9.399728e-10 \n", + " 23 4.506511e-10 \n", + " 24 4.513986e-10 \n", + "\n", + " t016000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 7.222411e-09 \n", + " 1 3.861840e-09 \n", + " 3 3.863546e-09 \n", + " 5 2.044455e-09 \n", + " 4 1.073232e-09 \n", + "... ... \n", + "2 1 2 20 1.669251e-09 \n", + " 21 8.809128e-10 \n", + " 22 8.792640e-10 \n", + " 23 4.215445e-10 \n", + " 24 4.222438e-10 \n", + "\n", + " ... \\\n", + "atomic_number ion_number level_number_lower level_number_upper ... \n", + "1 0 0 2 ... \n", + " 1 ... \n", + " 3 ... \n", + " 5 ... \n", + " 4 ... \n", + "... ... \n", + "2 1 2 20 ... \n", + " 21 ... \n", + " 22 ... \n", + " 23 ... \n", + " 24 ... \n", + "\n", + " t030000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 5.274934e-09 \n", + " 1 2.820443e-09 \n", + " 3 2.821689e-09 \n", + " 5 1.493097e-09 \n", + " 4 7.838003e-10 \n", + "... ... \n", + "2 1 2 20 1.219039e-09 \n", + " 21 6.433275e-10 \n", + " 22 6.421233e-10 \n", + " 23 3.078476e-10 \n", + " 24 3.083583e-10 \n", + "\n", + " t032000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 5.107492e-09 \n", + " 1 2.730903e-09 \n", + " 3 2.732110e-09 \n", + " 5 1.445690e-09 \n", + " 4 7.589145e-10 \n", + "... ... \n", + "2 1 2 20 1.180328e-09 \n", + " 21 6.228991e-10 \n", + " 22 6.217332e-10 \n", + " 23 2.980715e-10 \n", + " 24 2.985659e-10 \n", + "\n", + " t034000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.955053e-09 \n", + " 1 2.649386e-09 \n", + " 3 2.650556e-09 \n", + " 5 1.402530e-09 \n", + " 4 7.362582e-10 \n", + "... ... \n", + "2 1 2 20 1.145086e-09 \n", + " 21 6.043009e-10 \n", + " 22 6.031698e-10 \n", + " 23 2.891711e-10 \n", + " 24 2.896508e-10 \n", + "\n", + " t036000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.815502e-09 \n", + " 1 2.574760e-09 \n", + " 3 2.575898e-09 \n", + " 5 1.363019e-09 \n", + " 4 7.155173e-10 \n", + "... ... \n", + "2 1 2 20 1.112822e-09 \n", + " 21 5.872749e-10 \n", + " 22 5.861756e-10 \n", + " 23 2.810232e-10 \n", + " 24 2.814894e-10 \n", + "\n", + " t038000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.687121e-09 \n", + " 1 2.506107e-09 \n", + " 3 2.507214e-09 \n", + " 5 1.326670e-09 \n", + " 4 6.964362e-10 \n", + "... ... \n", + "2 1 2 20 1.083140e-09 \n", + " 21 5.716113e-10 \n", + " 22 5.705414e-10 \n", + " 23 2.735273e-10 \n", + " 24 2.739810e-10 \n", + "\n", + " t040000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.568493e-09 \n", + " 1 2.442670e-09 \n", + " 3 2.443749e-09 \n", + " 5 1.293083e-09 \n", + " 4 6.788048e-10 \n", + "... ... \n", + "2 1 2 20 1.055713e-09 \n", + " 21 5.571378e-10 \n", + " 22 5.560950e-10 \n", + " 23 2.666008e-10 \n", + " 24 2.670430e-10 \n", + "\n", + " t042000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.458445e-09 \n", + " 1 2.383821e-09 \n", + " 3 2.384874e-09 \n", + " 5 1.261924e-09 \n", + " 4 6.624483e-10 \n", + "... ... \n", + "2 1 2 20 1.030269e-09 \n", + " 21 5.437108e-10 \n", + " 22 5.426931e-10 \n", + " 23 2.601751e-10 \n", + " 24 2.606067e-10 \n", + "\n", + " t044000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.355989e-09 \n", + " 1 2.329031e-09 \n", + " 3 2.330060e-09 \n", + " 5 1.232915e-09 \n", + " 4 6.472203e-10 \n", + "... ... \n", + "2 1 2 20 1.006581e-09 \n", + " 21 5.312100e-10 \n", + " 22 5.302157e-10 \n", + " 23 2.541927e-10 \n", + " 24 2.546144e-10 \n", + "\n", + " t046000 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.260291e-09 \n", + " 1 2.277855e-09 \n", + " 3 2.278861e-09 \n", + " 5 1.205819e-09 \n", + " 4 6.329965e-10 \n", + "... ... \n", + "2 1 2 20 9.844543e-10 \n", + " 21 5.195336e-10 \n", + " 22 5.185611e-10 \n", + " 23 2.486048e-10 \n", + " 24 2.490172e-10 \n", + "\n", + " t048000 \n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "1 0 0 2 4.170639e-09 \n", + " 1 2.229912e-09 \n", + " 3 2.230897e-09 \n", + " 5 1.180435e-09 \n", + " 4 6.196713e-10 \n", + "... ... \n", + "2 1 2 20 9.637256e-10 \n", + " 21 5.085948e-10 \n", + " 22 5.076428e-10 \n", + " 23 2.433699e-10 \n", + " 24 2.437736e-10 \n", + "\n", + "[358 rows x 26 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "atom_data.collision_data.loc[(2,0, slice(None), slice(None)], :)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [], - "source": [ - "radiative_transitions = lines_df.loc[(2,0, slice(None), slice(None)), :]" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, "outputs": [ { "data": { @@ -378,7 +1745,7 @@ "[180 rows x 9 columns]" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -389,7 +1756,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -402,7 +1769,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -411,7 +1778,28 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'radiative_transitions' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[6], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mradiative_transitions\u001b[49m\n", + "\u001b[0;31mNameError\u001b[0m: name 'radiative_transitions' is not defined" + ] + } + ], + "source": [ + "radiative_transitions" + ] + }, + { + "cell_type": "code", + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -553,7 +1941,7 @@ "[360 rows x 2 columns]" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -571,11 +1959,11 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "col_rate_reg_solver = CollisionRateRegemorterSolver(radiative_transitions)" + "col_strength_solver = UpsilonRegemorterSolver(radiative_transitions)\n" ] }, { @@ -584,160 +1972,177 @@ "metadata": {}, "outputs": [], "source": [ - "x = col_rate_reg_solver.solve(temperature)" + "ups = col_strength_solver.solve(temperature)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 25, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_571/3900330882.py:1: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " (atom_data.lines.loc[1, 0, 0, 3].nu.values * u.Hz * const.h).to(u.eV)\n" + ] + }, { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
10000.020000.0
atomic_numberion_numberlevel_number_lowerlevel_number_upper
20060.5126960.512696
160.1253100.125310
300.0501350.050135
480.0250790.025079
1320.97332122.514689
............
284663.62304989.779029
29391.8221592.570976
47267.281517377.163149
303238.46843853.712390
39132.704403186.980810
\n", - "

180 rows × 2 columns

\n", - "
" + "text/latex": [ + "$[10.198837] \\; \\mathrm{eV}$" ], "text/plain": [ - " 10000.0 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 0 6 0.512696 \n", - " 16 0.125310 \n", - " 30 0.050135 \n", - " 48 0.025079 \n", - " 1 3 20.973321 \n", - "... ... \n", - " 28 46 63.623049 \n", - " 29 39 1.822159 \n", - " 47 267.281517 \n", - " 30 32 38.468438 \n", - " 39 132.704403 \n", - "\n", - " 20000.0 \n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 0 6 0.512696 \n", - " 16 0.125310 \n", - " 30 0.050135 \n", - " 48 0.025079 \n", - " 1 3 22.514689 \n", - "... ... \n", - " 28 46 89.779029 \n", - " 29 39 2.570976 \n", - " 47 377.163149 \n", - " 30 32 53.712390 \n", - " 39 186.980810 \n", - "\n", - "[180 rows x 2 columns]" + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(atom_data.lines.loc[1, 0, 0, 3].nu.values * u.Hz * const.h).to(u.eV)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "energy 0.0\n", + "g 2\n", + "metastable True\n", + "Name: (1, 0, 0), dtype: object" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "atom_data.levels.loc[1,0, 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "atomic_number ion_number level_number_lower level_number_upper\n", + "1 0 0 2 1.634030e-18\n", + " 1 1.634029e-18\n", + " 3 1.634036e-18\n", + " 5 1.936630e-18\n", + " 4 1.936630e-18\n", + " ... \n", + "2 1 2 20 1.830975e-18\n", + " 21 1.830975e-18\n", + " 22 1.830976e-18\n", + " 23 1.830976e-18\n", + " 24 1.830977e-18\n", + "Name: delta_e, Length: 358, dtype: float64" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "atom_data.collision_data.delta_e * const.k_B" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_571/2191378405.py:1: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " (atom_data.lines.loc[1,0, 0, 3].nu.values[0] * u.Hz * const.h).to(u.J)\n" + ] + }, + { + "data": { + "text/latex": [ + "$1.6340338 \\times 10^{-18} \\; \\mathrm{J}$" + ], + "text/plain": [ + "" ] }, - "execution_count": 9, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "x" + "(atom_data.lines.loc[1,0, 0, 3].nu.values[0] * u.Hz * const.h).to(u.J)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'atom_data' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43matom_data\u001b[49m\u001b[38;5;241m.\u001b[39mlines\n", + "\u001b[0;31mNameError\u001b[0m: name 'atom_data' is not defined" + ] + } + ], + "source": [ + "atom_data.lines" ] }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "atomic_number ion_number level_number_lower level_number_upper\n", + "1 0 0 2 1.634030e-18\n", + " 1 1.634029e-18\n", + " 3 1.634036e-18\n", + " 5 1.936630e-18\n", + " 4 1.936630e-18\n", + " ... \n", + "2 1 2 20 1.830975e-18\n", + " 21 1.830975e-18\n", + " 22 1.830976e-18\n", + " 23 1.830976e-18\n", + " 24 1.830977e-18\n", + "Name: delta_e, Length: 358, dtype: float64" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, { "cell_type": "code", "execution_count": null, From 4a4aa47d1d9226d6f8bbeeca936f61ed3ef2f47e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 8 Aug 2024 16:29:58 -0400 Subject: [PATCH 097/118] further work o nthe collisional rates --- .../plasma/detailed_balance/rates.ipynb | 2352 ++++++----------- .../plasma/detailed_balance/rates/__init__.py | 6 +- 2 files changed, 798 insertions(+), 1560 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index b11bf5ac550..d9c6b6ff080 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -23,7 +23,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9fd88dff6ab34219bc55c34bc5d13252", + "model_id": "5852f5c0d8924d139d2fadeea2380ec8", "version_major": 2, "version_minor": 0 }, @@ -37,7 +37,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac83e4c608dc4bb2b437252ea98b3f3f", + "model_id": "3917b35549794ffbbb39318df015eac1", "version_major": 2, "version_minor": 0 }, @@ -54,7 +54,7 @@ "from astropy import units as u\n", "\n", "from tardis.io.atom_data import AtomData\n", - "from tardis.plasma.detailed_balance.rates import RadiativeRatesSolver, UpsilonRegemorterSolver\n", + "from tardis.plasma.detailed_balance.rates import RadiativeRatesSolver, UpsilonRegemorterSolver, ThermalCollisionalRateSolver\n", "from tardis.plasma.radiation_field import (\n", " PlanckianRadiationField,\n", ")\n", @@ -63,671 +63,48 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "atom_data = AtomData.from_hdf('kurucz_cd23_chianti_H_He.h5')\n", + "#atom_data = AtomData.from_hdf('kurucz_cd23_chianti_H_He.h5')\n", + "atom_data = AtomData.from_hdf('/Users/wkerzend/python/tardis-refdata/nlte_atom_data/TestNLTE_He_Ti.h5')\n", "lines_df = atom_data.lines" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
g_ratiodelta_et002000t004000t006000t008000t010000t012000t014000t016000...t030000t032000t034000t036000t038000t040000t042000t044000t046000t048000
atomic_numberion_numberlevel_number_lowerlevel_number_upper
10021.000000118352.2906452.042640e-081.444381e-081.179346e-081.021356e-089.135388e-098.339527e-097.720992e-097.222411e-09...5.274934e-095.107492e-094.955053e-094.815502e-094.687121e-094.568493e-094.458445e-094.355989e-094.260291e-094.170639e-09
11.000000118352.2402881.092234e-087.723319e-096.306113e-095.461296e-094.884770e-094.459199e-094.128449e-093.861840e-09...2.820443e-092.730903e-092.649386e-092.574760e-092.506107e-092.442670e-092.383821e-092.329031e-092.277855e-092.229912e-09
30.500000118352.7668801.092716e-087.726731e-096.308898e-095.463709e-094.886928e-094.461169e-094.130272e-093.863546e-09...2.821689e-092.732110e-092.650556e-092.575898e-092.507214e-092.443749e-092.384874e-092.330060e-092.278861e-092.230897e-09
51.000000140269.5656695.782447e-094.088822e-093.338521e-092.891255e-092.586026e-092.360716e-092.185607e-092.044455e-09...1.493097e-091.445690e-091.402530e-091.363019e-091.326670e-091.293083e-091.261924e-091.232915e-091.205819e-091.180435e-09
41.000000140269.5498423.035472e-092.146412e-091.752545e-091.517755e-091.357527e-091.239252e-091.147329e-091.073232e-09...7.838003e-107.589145e-107.362582e-107.155173e-106.964362e-106.788048e-106.624483e-106.472203e-106.329965e-106.196713e-10
...........................................................................
212200.333333132616.9901414.721393e-093.338525e-092.725891e-092.360688e-092.111462e-091.927490e-091.784507e-091.669251e-09...1.219039e-091.180328e-091.145086e-091.112822e-091.083140e-091.055713e-091.030269e-091.006581e-099.844543e-109.637256e-10
210.333333132616.9901412.491599e-091.761826e-091.438525e-091.245799e-091.114277e-091.017191e-099.417354e-108.809128e-10...6.433275e-106.228991e-106.043009e-105.872749e-105.716113e-105.571378e-105.437108e-105.312100e-105.195336e-105.085948e-10
220.250000132617.0793462.486935e-091.758529e-091.435832e-091.243467e-091.112191e-091.015287e-099.399728e-108.792640e-10...6.421233e-106.217332e-106.031698e-105.861756e-105.705414e-105.560950e-105.426931e-105.302157e-105.185611e-105.076428e-10
230.250000132617.0793461.192327e-098.431006e-106.883872e-105.961594e-105.332200e-104.867599e-104.506511e-104.215445e-10...3.078476e-102.980715e-102.891711e-102.810232e-102.735273e-102.666008e-102.601751e-102.541927e-102.486048e-102.433699e-10
240.200000132617.1325801.194305e-098.444993e-106.895292e-105.971484e-105.341045e-104.875674e-104.513986e-104.222438e-10...3.083583e-102.985659e-102.896508e-102.814894e-102.739810e-102.670430e-102.606067e-102.546144e-102.490172e-102.437736e-10
\n", - "

358 rows × 26 columns

\n", - "
" - ], "text/plain": [ - " g_ratio \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 1.000000 \n", - " 1 1.000000 \n", - " 3 0.500000 \n", - " 5 1.000000 \n", - " 4 1.000000 \n", - "... ... \n", - "2 1 2 20 0.333333 \n", - " 21 0.333333 \n", - " 22 0.250000 \n", - " 23 0.250000 \n", - " 24 0.200000 \n", - "\n", - " delta_e \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 118352.290645 \n", - " 1 118352.240288 \n", - " 3 118352.766880 \n", - " 5 140269.565669 \n", - " 4 140269.549842 \n", - "... ... \n", - "2 1 2 20 132616.990141 \n", - " 21 132616.990141 \n", - " 22 132617.079346 \n", - " 23 132617.079346 \n", - " 24 132617.132580 \n", - "\n", - " t002000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 2.042640e-08 \n", - " 1 1.092234e-08 \n", - " 3 1.092716e-08 \n", - " 5 5.782447e-09 \n", - " 4 3.035472e-09 \n", - "... ... \n", - "2 1 2 20 4.721393e-09 \n", - " 21 2.491599e-09 \n", - " 22 2.486935e-09 \n", - " 23 1.192327e-09 \n", - " 24 1.194305e-09 \n", - "\n", - " t004000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 1.444381e-08 \n", - " 1 7.723319e-09 \n", - " 3 7.726731e-09 \n", - " 5 4.088822e-09 \n", - " 4 2.146412e-09 \n", - "... ... \n", - "2 1 2 20 3.338525e-09 \n", - " 21 1.761826e-09 \n", - " 22 1.758529e-09 \n", - " 23 8.431006e-10 \n", - " 24 8.444993e-10 \n", - "\n", - " t006000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 1.179346e-08 \n", - " 1 6.306113e-09 \n", - " 3 6.308898e-09 \n", - " 5 3.338521e-09 \n", - " 4 1.752545e-09 \n", - "... ... \n", - "2 1 2 20 2.725891e-09 \n", - " 21 1.438525e-09 \n", - " 22 1.435832e-09 \n", - " 23 6.883872e-10 \n", - " 24 6.895292e-10 \n", - "\n", - " t008000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 1.021356e-08 \n", - " 1 5.461296e-09 \n", - " 3 5.463709e-09 \n", - " 5 2.891255e-09 \n", - " 4 1.517755e-09 \n", - "... ... \n", - "2 1 2 20 2.360688e-09 \n", - " 21 1.245799e-09 \n", - " 22 1.243467e-09 \n", - " 23 5.961594e-10 \n", - " 24 5.971484e-10 \n", - "\n", - " t010000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 9.135388e-09 \n", - " 1 4.884770e-09 \n", - " 3 4.886928e-09 \n", - " 5 2.586026e-09 \n", - " 4 1.357527e-09 \n", - "... ... \n", - "2 1 2 20 2.111462e-09 \n", - " 21 1.114277e-09 \n", - " 22 1.112191e-09 \n", - " 23 5.332200e-10 \n", - " 24 5.341045e-10 \n", - "\n", - " t012000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 8.339527e-09 \n", - " 1 4.459199e-09 \n", - " 3 4.461169e-09 \n", - " 5 2.360716e-09 \n", - " 4 1.239252e-09 \n", - "... ... \n", - "2 1 2 20 1.927490e-09 \n", - " 21 1.017191e-09 \n", - " 22 1.015287e-09 \n", - " 23 4.867599e-10 \n", - " 24 4.875674e-10 \n", - "\n", - " t014000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 7.720992e-09 \n", - " 1 4.128449e-09 \n", - " 3 4.130272e-09 \n", - " 5 2.185607e-09 \n", - " 4 1.147329e-09 \n", - "... ... \n", - "2 1 2 20 1.784507e-09 \n", - " 21 9.417354e-10 \n", - " 22 9.399728e-10 \n", - " 23 4.506511e-10 \n", - " 24 4.513986e-10 \n", - "\n", - " t016000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 7.222411e-09 \n", - " 1 3.861840e-09 \n", - " 3 3.863546e-09 \n", - " 5 2.044455e-09 \n", - " 4 1.073232e-09 \n", - "... ... \n", - "2 1 2 20 1.669251e-09 \n", - " 21 8.809128e-10 \n", - " 22 8.792640e-10 \n", - " 23 4.215445e-10 \n", - " 24 4.222438e-10 \n", - "\n", - " ... \\\n", - "atomic_number ion_number level_number_lower level_number_upper ... \n", - "1 0 0 2 ... \n", - " 1 ... \n", - " 3 ... \n", - " 5 ... \n", - " 4 ... \n", - "... ... \n", - "2 1 2 20 ... \n", - " 21 ... \n", - " 22 ... \n", - " 23 ... \n", - " 24 ... \n", - "\n", - " t030000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 5.274934e-09 \n", - " 1 2.820443e-09 \n", - " 3 2.821689e-09 \n", - " 5 1.493097e-09 \n", - " 4 7.838003e-10 \n", - "... ... \n", - "2 1 2 20 1.219039e-09 \n", - " 21 6.433275e-10 \n", - " 22 6.421233e-10 \n", - " 23 3.078476e-10 \n", - " 24 3.083583e-10 \n", - "\n", - " t032000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 5.107492e-09 \n", - " 1 2.730903e-09 \n", - " 3 2.732110e-09 \n", - " 5 1.445690e-09 \n", - " 4 7.589145e-10 \n", - "... ... \n", - "2 1 2 20 1.180328e-09 \n", - " 21 6.228991e-10 \n", - " 22 6.217332e-10 \n", - " 23 2.980715e-10 \n", - " 24 2.985659e-10 \n", - "\n", - " t034000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.955053e-09 \n", - " 1 2.649386e-09 \n", - " 3 2.650556e-09 \n", - " 5 1.402530e-09 \n", - " 4 7.362582e-10 \n", - "... ... \n", - "2 1 2 20 1.145086e-09 \n", - " 21 6.043009e-10 \n", - " 22 6.031698e-10 \n", - " 23 2.891711e-10 \n", - " 24 2.896508e-10 \n", - "\n", - " t036000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.815502e-09 \n", - " 1 2.574760e-09 \n", - " 3 2.575898e-09 \n", - " 5 1.363019e-09 \n", - " 4 7.155173e-10 \n", - "... ... \n", - "2 1 2 20 1.112822e-09 \n", - " 21 5.872749e-10 \n", - " 22 5.861756e-10 \n", - " 23 2.810232e-10 \n", - " 24 2.814894e-10 \n", - "\n", - " t038000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.687121e-09 \n", - " 1 2.506107e-09 \n", - " 3 2.507214e-09 \n", - " 5 1.326670e-09 \n", - " 4 6.964362e-10 \n", - "... ... \n", - "2 1 2 20 1.083140e-09 \n", - " 21 5.716113e-10 \n", - " 22 5.705414e-10 \n", - " 23 2.735273e-10 \n", - " 24 2.739810e-10 \n", - "\n", - " t040000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.568493e-09 \n", - " 1 2.442670e-09 \n", - " 3 2.443749e-09 \n", - " 5 1.293083e-09 \n", - " 4 6.788048e-10 \n", - "... ... \n", - "2 1 2 20 1.055713e-09 \n", - " 21 5.571378e-10 \n", - " 22 5.560950e-10 \n", - " 23 2.666008e-10 \n", - " 24 2.670430e-10 \n", - "\n", - " t042000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.458445e-09 \n", - " 1 2.383821e-09 \n", - " 3 2.384874e-09 \n", - " 5 1.261924e-09 \n", - " 4 6.624483e-10 \n", - "... ... \n", - "2 1 2 20 1.030269e-09 \n", - " 21 5.437108e-10 \n", - " 22 5.426931e-10 \n", - " 23 2.601751e-10 \n", - " 24 2.606067e-10 \n", - "\n", - " t044000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.355989e-09 \n", - " 1 2.329031e-09 \n", - " 3 2.330060e-09 \n", - " 5 1.232915e-09 \n", - " 4 6.472203e-10 \n", - "... ... \n", - "2 1 2 20 1.006581e-09 \n", - " 21 5.312100e-10 \n", - " 22 5.302157e-10 \n", - " 23 2.541927e-10 \n", - " 24 2.546144e-10 \n", - "\n", - " t046000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.260291e-09 \n", - " 1 2.277855e-09 \n", - " 3 2.278861e-09 \n", - " 5 1.205819e-09 \n", - " 4 6.329965e-10 \n", - "... ... \n", - "2 1 2 20 9.844543e-10 \n", - " 21 5.195336e-10 \n", - " 22 5.185611e-10 \n", - " 23 2.486048e-10 \n", - " 24 2.490172e-10 \n", - "\n", - " t048000 \n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.170639e-09 \n", - " 1 2.229912e-09 \n", - " 3 2.230897e-09 \n", - " 5 1.180435e-09 \n", - " 4 6.196713e-10 \n", - "... ... \n", - "2 1 2 20 9.637256e-10 \n", - " 21 5.085948e-10 \n", - " 22 5.076428e-10 \n", - " 23 2.433699e-10 \n", - " 24 2.437736e-10 \n", - "\n", - "[358 rows x 26 columns]" + "array([ 2000, 5000, 10000, 20000, 50000, 100000, 200000,\n", + " 500000, 1000000])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "atom_data.collision_data_temperatures" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'dummy value'" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -738,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -747,7 +124,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -774,27 +151,15 @@ " \n", " \n", " \n", - " g_ratio\n", - " delta_e\n", - " t002000\n", - " t004000\n", - " t006000\n", - " t008000\n", - " t010000\n", - " t012000\n", - " t014000\n", - " t016000\n", - " ...\n", - " t030000\n", - " t032000\n", - " t034000\n", - " t036000\n", - " t038000\n", - " t040000\n", - " t042000\n", - " t044000\n", - " t046000\n", - " t048000\n", + " line_id\n", + " wavelength\n", + " f_ul\n", + " f_lu\n", + " nu\n", + " B_lu\n", + " B_ul\n", + " A_ul\n", + " wavelength_cm\n", " \n", " \n", " atomic_number\n", @@ -810,161 +175,79 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", " \n", - " 1\n", - " 0\n", - " 0\n", - " 2\n", - " 1.000000\n", - " 118352.290645\n", - " 2.042640e-08\n", - " 1.444381e-08\n", - " 1.179346e-08\n", - " 1.021356e-08\n", - " 9.135388e-09\n", - " 8.339527e-09\n", - " 7.720992e-09\n", - " 7.222411e-09\n", - " ...\n", - " 5.274934e-09\n", - " 5.107492e-09\n", - " 4.955053e-09\n", - " 4.815502e-09\n", - " 4.687121e-09\n", - " 4.568493e-09\n", - " 4.458445e-09\n", - " 4.355989e-09\n", - " 4.260291e-09\n", - " 4.170639e-09\n", - " \n", - " \n", + " 2\n", + " 0\n", " 1\n", - " 1.000000\n", - " 118352.240288\n", - " 1.092234e-08\n", - " 7.723319e-09\n", - " 6.306113e-09\n", - " 5.461296e-09\n", - " 4.884770e-09\n", - " 4.459199e-09\n", - " 4.128449e-09\n", - " 3.861840e-09\n", - " ...\n", - " 2.820443e-09\n", - " 2.730903e-09\n", - " 2.649386e-09\n", - " 2.574760e-09\n", - " 2.506107e-09\n", - " 2.442670e-09\n", - " 2.383821e-09\n", - " 2.329031e-09\n", - " 2.277855e-09\n", - " 2.229912e-09\n", + " 3\n", + " 533584\n", + " 1.083017e+04\n", + " 0.179800\n", + " 0.53940\n", + " 2.768123e+14\n", + " 9.808029e+10\n", + " 3.269343e+10\n", + " 1.022495e+07\n", + " 0.000108\n", " \n", " \n", - " 3\n", - " 0.500000\n", - " 118352.766880\n", - " 1.092716e-08\n", - " 7.726731e-09\n", - " 6.308898e-09\n", - " 5.463709e-09\n", - " 4.886928e-09\n", - " 4.461169e-09\n", - " 4.130272e-09\n", - " 3.863546e-09\n", - " ...\n", - " 2.821689e-09\n", - " 2.732110e-09\n", - " 2.650556e-09\n", - " 2.575898e-09\n", - " 2.507214e-09\n", - " 2.443749e-09\n", - " 2.384874e-09\n", - " 2.330060e-09\n", - " 2.278861e-09\n", - " 2.230897e-09\n", + " 0\n", + " 4\n", + " 533561\n", + " 5.843340e+02\n", + " 0.092100\n", + " 0.27630\n", + " 5.130498e+15\n", + " 2.710676e+09\n", + " 9.035585e+08\n", + " 1.799200e+09\n", + " 0.000006\n", " \n", " \n", - " 5\n", - " 1.000000\n", - " 140269.565669\n", - " 5.782447e-09\n", - " 4.088822e-09\n", - " 3.338521e-09\n", - " 2.891255e-09\n", - " 2.586026e-09\n", - " 2.360716e-09\n", - " 2.185607e-09\n", - " 2.044455e-09\n", - " ...\n", - " 1.493097e-09\n", - " 1.445690e-09\n", - " 1.402530e-09\n", - " 1.363019e-09\n", - " 1.326670e-09\n", - " 1.293083e-09\n", - " 1.261924e-09\n", - " 1.232915e-09\n", - " 1.205819e-09\n", - " 1.180435e-09\n", + " 2\n", + " 4\n", + " 533604\n", + " 2.058129e+04\n", + " 0.125500\n", + " 0.37650\n", + " 1.456626e+14\n", + " 1.300987e+11\n", + " 4.336624e+10\n", + " 1.976246e+06\n", + " 0.000206\n", " \n", " \n", " 4\n", - " 1.000000\n", - " 140269.549842\n", - " 3.035472e-09\n", - " 2.146412e-09\n", - " 1.752545e-09\n", - " 1.517755e-09\n", - " 1.357527e-09\n", - " 1.239252e-09\n", - " 1.147329e-09\n", - " 1.073232e-09\n", - " ...\n", - " 7.838003e-10\n", - " 7.589145e-10\n", - " 7.362582e-10\n", - " 7.155173e-10\n", - " 6.964362e-10\n", - " 6.788048e-10\n", - " 6.624483e-10\n", - " 6.472203e-10\n", - " 6.329965e-10\n", - " 6.196713e-10\n", + " 9\n", + " 533664\n", + " 6.678152e+03\n", + " 0.426120\n", + " 0.71020\n", + " 4.489153e+14\n", + " 7.962922e+10\n", + " 4.777753e+10\n", + " 6.373259e+07\n", + " 0.000067\n", + " \n", + " \n", + " 0\n", + " 10\n", + " 533563\n", + " 5.370300e+02\n", + " 0.024487\n", + " 0.07346\n", + " 5.582415e+15\n", + " 6.623461e+08\n", + " 2.207820e+08\n", + " 5.663368e+08\n", + " 0.000005\n", " \n", " \n", " ...\n", " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", " ...\n", " ...\n", " ...\n", @@ -976,443 +259,239 @@ " ...\n", " \n", " \n", - " 2\n", - " 1\n", - " 2\n", - " 20\n", - " 0.333333\n", - " 132616.990141\n", - " 4.721393e-09\n", - " 3.338525e-09\n", - " 2.725891e-09\n", - " 2.360688e-09\n", - " 2.111462e-09\n", - " 1.927490e-09\n", - " 1.784507e-09\n", - " 1.669251e-09\n", - " ...\n", - " 1.219039e-09\n", - " 1.180328e-09\n", - " 1.145086e-09\n", - " 1.112822e-09\n", - " 1.083140e-09\n", - " 1.055713e-09\n", - " 1.030269e-09\n", - " 1.006581e-09\n", - " 9.844543e-10\n", - " 9.637256e-10\n", - " \n", - " \n", - " 21\n", - " 0.333333\n", - " 132616.990141\n", - " 2.491599e-09\n", - " 1.761826e-09\n", - " 1.438525e-09\n", - " 1.245799e-09\n", - " 1.114277e-09\n", - " 1.017191e-09\n", - " 9.417354e-10\n", - " 8.809128e-10\n", - " ...\n", - " 6.433275e-10\n", - " 6.228991e-10\n", - " 6.043009e-10\n", - " 5.872749e-10\n", - " 5.716113e-10\n", - " 5.571378e-10\n", - " 5.437108e-10\n", - " 5.312100e-10\n", - " 5.195336e-10\n", - " 5.085948e-10\n", + " 205\n", + " 234\n", + " 537353\n", + " 1.554000e+06\n", + " 0.012279\n", + " 0.40633\n", + " 1.929166e+12\n", + " 1.060145e+13\n", + " 3.203736e+11\n", + " 3.391645e+01\n", + " 0.015540\n", " \n", " \n", - " 22\n", - " 0.250000\n", - " 132617.079346\n", - " 2.486935e-09\n", - " 1.758529e-09\n", - " 1.435832e-09\n", - " 1.243467e-09\n", - " 1.112191e-09\n", - " 1.015287e-09\n", - " 9.399728e-10\n", - " 8.792640e-10\n", - " ...\n", - " 6.421233e-10\n", - " 6.217332e-10\n", - " 6.031698e-10\n", - " 5.861756e-10\n", - " 5.705414e-10\n", - " 5.560950e-10\n", - " 5.426931e-10\n", - " 5.302157e-10\n", - " 5.185611e-10\n", - " 5.076428e-10\n", + " 206\n", + " 234\n", + " 537357\n", + " 1.554000e+06\n", + " 0.447982\n", + " 0.56620\n", + " 1.929166e+12\n", + " 1.477258e+13\n", + " 1.168820e+13\n", + " 1.237375e+03\n", + " 0.015540\n", " \n", " \n", - " 23\n", - " 0.250000\n", - " 132617.079346\n", - " 1.192327e-09\n", - " 8.431006e-10\n", - " 6.883872e-10\n", - " 5.961594e-10\n", - " 5.332200e-10\n", - " 4.867599e-10\n", - " 4.506511e-10\n", - " 4.215445e-10\n", - " ...\n", - " 3.078476e-10\n", - " 2.980715e-10\n", - " 2.891711e-10\n", - " 2.810232e-10\n", - " 2.735273e-10\n", - " 2.666008e-10\n", - " 2.601751e-10\n", - " 2.541927e-10\n", - " 2.486048e-10\n", - " 2.433699e-10\n", + " 219\n", + " 234\n", + " 537397\n", + " 3.373000e+06\n", + " 0.048841\n", + " 1.61620\n", + " 8.888006e+11\n", + " 9.152652e+13\n", + " 2.765911e+12\n", + " 2.863492e+01\n", + " 0.033730\n", " \n", " \n", - " 24\n", - " 0.200000\n", - " 132617.132580\n", - " 1.194305e-09\n", - " 8.444993e-10\n", - " 6.895292e-10\n", - " 5.971484e-10\n", - " 5.341045e-10\n", - " 4.875674e-10\n", - " 4.513986e-10\n", - " 4.222438e-10\n", - " ...\n", - " 3.083583e-10\n", - " 2.985659e-10\n", - " 2.896508e-10\n", - " 2.814894e-10\n", - " 2.739810e-10\n", - " 2.670430e-10\n", - " 2.606067e-10\n", - " 2.546144e-10\n", - " 2.490172e-10\n", - " 2.437736e-10\n", + " 220\n", + " 234\n", + " 537399\n", + " 3.374000e+06\n", + " 3.693125\n", + " 4.13630\n", + " 8.885372e+11\n", + " 2.343110e+14\n", + " 2.092062e+14\n", + " 2.163944e+03\n", + " 0.033740\n", " \n", - " \n", - "\n", - "

358 rows × 26 columns

\n", - "" - ], - "text/plain": [ - " g_ratio \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 1.000000 \n", - " 1 1.000000 \n", - " 3 0.500000 \n", - " 5 1.000000 \n", - " 4 1.000000 \n", - "... ... \n", - "2 1 2 20 0.333333 \n", - " 21 0.333333 \n", - " 22 0.250000 \n", - " 23 0.250000 \n", - " 24 0.200000 \n", - "\n", - " delta_e \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 118352.290645 \n", - " 1 118352.240288 \n", - " 3 118352.766880 \n", - " 5 140269.565669 \n", - " 4 140269.549842 \n", - "... ... \n", - "2 1 2 20 132616.990141 \n", - " 21 132616.990141 \n", - " 22 132617.079346 \n", - " 23 132617.079346 \n", - " 24 132617.132580 \n", - "\n", - " t002000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 2.042640e-08 \n", - " 1 1.092234e-08 \n", - " 3 1.092716e-08 \n", - " 5 5.782447e-09 \n", - " 4 3.035472e-09 \n", - "... ... \n", - "2 1 2 20 4.721393e-09 \n", - " 21 2.491599e-09 \n", - " 22 2.486935e-09 \n", - " 23 1.192327e-09 \n", - " 24 1.194305e-09 \n", - "\n", - " t004000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 1.444381e-08 \n", - " 1 7.723319e-09 \n", - " 3 7.726731e-09 \n", - " 5 4.088822e-09 \n", - " 4 2.146412e-09 \n", - "... ... \n", - "2 1 2 20 3.338525e-09 \n", - " 21 1.761826e-09 \n", - " 22 1.758529e-09 \n", - " 23 8.431006e-10 \n", - " 24 8.444993e-10 \n", - "\n", - " t006000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 1.179346e-08 \n", - " 1 6.306113e-09 \n", - " 3 6.308898e-09 \n", - " 5 3.338521e-09 \n", - " 4 1.752545e-09 \n", - "... ... \n", - "2 1 2 20 2.725891e-09 \n", - " 21 1.438525e-09 \n", - " 22 1.435832e-09 \n", - " 23 6.883872e-10 \n", - " 24 6.895292e-10 \n", - "\n", - " t008000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 1.021356e-08 \n", - " 1 5.461296e-09 \n", - " 3 5.463709e-09 \n", - " 5 2.891255e-09 \n", - " 4 1.517755e-09 \n", - "... ... \n", - "2 1 2 20 2.360688e-09 \n", - " 21 1.245799e-09 \n", - " 22 1.243467e-09 \n", - " 23 5.961594e-10 \n", - " 24 5.971484e-10 \n", - "\n", - " t010000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 9.135388e-09 \n", - " 1 4.884770e-09 \n", - " 3 4.886928e-09 \n", - " 5 2.586026e-09 \n", - " 4 1.357527e-09 \n", - "... ... \n", - "2 1 2 20 2.111462e-09 \n", - " 21 1.114277e-09 \n", - " 22 1.112191e-09 \n", - " 23 5.332200e-10 \n", - " 24 5.341045e-10 \n", - "\n", - " t012000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 8.339527e-09 \n", - " 1 4.459199e-09 \n", - " 3 4.461169e-09 \n", - " 5 2.360716e-09 \n", - " 4 1.239252e-09 \n", - "... ... \n", - "2 1 2 20 1.927490e-09 \n", - " 21 1.017191e-09 \n", - " 22 1.015287e-09 \n", - " 23 4.867599e-10 \n", - " 24 4.875674e-10 \n", - "\n", - " t014000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 7.720992e-09 \n", - " 1 4.128449e-09 \n", - " 3 4.130272e-09 \n", - " 5 2.185607e-09 \n", - " 4 1.147329e-09 \n", - "... ... \n", - "2 1 2 20 1.784507e-09 \n", - " 21 9.417354e-10 \n", - " 22 9.399728e-10 \n", - " 23 4.506511e-10 \n", - " 24 4.513986e-10 \n", - "\n", - " t016000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 7.222411e-09 \n", - " 1 3.861840e-09 \n", - " 3 3.863546e-09 \n", - " 5 2.044455e-09 \n", - " 4 1.073232e-09 \n", - "... ... \n", - "2 1 2 20 1.669251e-09 \n", - " 21 8.809128e-10 \n", - " 22 8.792640e-10 \n", - " 23 4.215445e-10 \n", - " 24 4.222438e-10 \n", - "\n", - " ... \\\n", - "atomic_number ion_number level_number_lower level_number_upper ... \n", - "1 0 0 2 ... \n", - " 1 ... \n", - " 3 ... \n", - " 5 ... \n", - " 4 ... \n", - "... ... \n", - "2 1 2 20 ... \n", - " 21 ... \n", - " 22 ... \n", - " 23 ... \n", - " 24 ... \n", - "\n", - " t030000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 5.274934e-09 \n", - " 1 2.820443e-09 \n", - " 3 2.821689e-09 \n", - " 5 1.493097e-09 \n", - " 4 7.838003e-10 \n", - "... ... \n", - "2 1 2 20 1.219039e-09 \n", - " 21 6.433275e-10 \n", - " 22 6.421233e-10 \n", - " 23 3.078476e-10 \n", - " 24 3.083583e-10 \n", + " \n", + " 233\n", + " 234\n", + " 537415\n", + " 7.975000e+10\n", + " 0.000027\n", + " 0.00088\n", + " 3.759153e+07\n", + " 1.178629e+15\n", + " 3.561791e+13\n", + " 2.789865e-11\n", + " 797.500000\n", + " \n", + " \n", + "\n", + "

3549 rows × 9 columns

\n", + "" + ], + "text/plain": [ + " line_id \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 533584 \n", + " 0 4 533561 \n", + " 2 4 533604 \n", + " 4 9 533664 \n", + " 0 10 533563 \n", + "... ... \n", + " 205 234 537353 \n", + " 206 234 537357 \n", + " 219 234 537397 \n", + " 220 234 537399 \n", + " 233 234 537415 \n", "\n", - " t032000 \\\n", + " wavelength \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 5.107492e-09 \n", - " 1 2.730903e-09 \n", - " 3 2.732110e-09 \n", - " 5 1.445690e-09 \n", - " 4 7.589145e-10 \n", + "2 0 1 3 1.083017e+04 \n", + " 0 4 5.843340e+02 \n", + " 2 4 2.058129e+04 \n", + " 4 9 6.678152e+03 \n", + " 0 10 5.370300e+02 \n", "... ... \n", - "2 1 2 20 1.180328e-09 \n", - " 21 6.228991e-10 \n", - " 22 6.217332e-10 \n", - " 23 2.980715e-10 \n", - " 24 2.985659e-10 \n", + " 205 234 1.554000e+06 \n", + " 206 234 1.554000e+06 \n", + " 219 234 3.373000e+06 \n", + " 220 234 3.374000e+06 \n", + " 233 234 7.975000e+10 \n", "\n", - " t034000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.955053e-09 \n", - " 1 2.649386e-09 \n", - " 3 2.650556e-09 \n", - " 5 1.402530e-09 \n", - " 4 7.362582e-10 \n", - "... ... \n", - "2 1 2 20 1.145086e-09 \n", - " 21 6.043009e-10 \n", - " 22 6.031698e-10 \n", - " 23 2.891711e-10 \n", - " 24 2.896508e-10 \n", + " f_ul \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.179800 \n", + " 0 4 0.092100 \n", + " 2 4 0.125500 \n", + " 4 9 0.426120 \n", + " 0 10 0.024487 \n", + "... ... \n", + " 205 234 0.012279 \n", + " 206 234 0.447982 \n", + " 219 234 0.048841 \n", + " 220 234 3.693125 \n", + " 233 234 0.000027 \n", "\n", - " t036000 \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.815502e-09 \n", - " 1 2.574760e-09 \n", - " 3 2.575898e-09 \n", - " 5 1.363019e-09 \n", - " 4 7.155173e-10 \n", - "... ... \n", - "2 1 2 20 1.112822e-09 \n", - " 21 5.872749e-10 \n", - " 22 5.861756e-10 \n", - " 23 2.810232e-10 \n", - " 24 2.814894e-10 \n", + " f_lu \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.53940 \n", + " 0 4 0.27630 \n", + " 2 4 0.37650 \n", + " 4 9 0.71020 \n", + " 0 10 0.07346 \n", + "... ... \n", + " 205 234 0.40633 \n", + " 206 234 0.56620 \n", + " 219 234 1.61620 \n", + " 220 234 4.13630 \n", + " 233 234 0.00088 \n", "\n", - " t038000 \\\n", + " nu \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.687121e-09 \n", - " 1 2.506107e-09 \n", - " 3 2.507214e-09 \n", - " 5 1.326670e-09 \n", - " 4 6.964362e-10 \n", + "2 0 1 3 2.768123e+14 \n", + " 0 4 5.130498e+15 \n", + " 2 4 1.456626e+14 \n", + " 4 9 4.489153e+14 \n", + " 0 10 5.582415e+15 \n", "... ... \n", - "2 1 2 20 1.083140e-09 \n", - " 21 5.716113e-10 \n", - " 22 5.705414e-10 \n", - " 23 2.735273e-10 \n", - " 24 2.739810e-10 \n", + " 205 234 1.929166e+12 \n", + " 206 234 1.929166e+12 \n", + " 219 234 8.888006e+11 \n", + " 220 234 8.885372e+11 \n", + " 233 234 3.759153e+07 \n", "\n", - " t040000 \\\n", + " B_lu \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.568493e-09 \n", - " 1 2.442670e-09 \n", - " 3 2.443749e-09 \n", - " 5 1.293083e-09 \n", - " 4 6.788048e-10 \n", + "2 0 1 3 9.808029e+10 \n", + " 0 4 2.710676e+09 \n", + " 2 4 1.300987e+11 \n", + " 4 9 7.962922e+10 \n", + " 0 10 6.623461e+08 \n", "... ... \n", - "2 1 2 20 1.055713e-09 \n", - " 21 5.571378e-10 \n", - " 22 5.560950e-10 \n", - " 23 2.666008e-10 \n", - " 24 2.670430e-10 \n", + " 205 234 1.060145e+13 \n", + " 206 234 1.477258e+13 \n", + " 219 234 9.152652e+13 \n", + " 220 234 2.343110e+14 \n", + " 233 234 1.178629e+15 \n", "\n", - " t042000 \\\n", + " B_ul \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.458445e-09 \n", - " 1 2.383821e-09 \n", - " 3 2.384874e-09 \n", - " 5 1.261924e-09 \n", - " 4 6.624483e-10 \n", + "2 0 1 3 3.269343e+10 \n", + " 0 4 9.035585e+08 \n", + " 2 4 4.336624e+10 \n", + " 4 9 4.777753e+10 \n", + " 0 10 2.207820e+08 \n", "... ... \n", - "2 1 2 20 1.030269e-09 \n", - " 21 5.437108e-10 \n", - " 22 5.426931e-10 \n", - " 23 2.601751e-10 \n", - " 24 2.606067e-10 \n", + " 205 234 3.203736e+11 \n", + " 206 234 1.168820e+13 \n", + " 219 234 2.765911e+12 \n", + " 220 234 2.092062e+14 \n", + " 233 234 3.561791e+13 \n", "\n", - " t044000 \\\n", + " A_ul \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.355989e-09 \n", - " 1 2.329031e-09 \n", - " 3 2.330060e-09 \n", - " 5 1.232915e-09 \n", - " 4 6.472203e-10 \n", + "2 0 1 3 1.022495e+07 \n", + " 0 4 1.799200e+09 \n", + " 2 4 1.976246e+06 \n", + " 4 9 6.373259e+07 \n", + " 0 10 5.663368e+08 \n", "... ... \n", - "2 1 2 20 1.006581e-09 \n", - " 21 5.312100e-10 \n", - " 22 5.302157e-10 \n", - " 23 2.541927e-10 \n", - " 24 2.546144e-10 \n", + " 205 234 3.391645e+01 \n", + " 206 234 1.237375e+03 \n", + " 219 234 2.863492e+01 \n", + " 220 234 2.163944e+03 \n", + " 233 234 2.789865e-11 \n", "\n", - " t046000 \\\n", + " wavelength_cm \n", "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.260291e-09 \n", - " 1 2.277855e-09 \n", - " 3 2.278861e-09 \n", - " 5 1.205819e-09 \n", - " 4 6.329965e-10 \n", - "... ... \n", - "2 1 2 20 9.844543e-10 \n", - " 21 5.195336e-10 \n", - " 22 5.185611e-10 \n", - " 23 2.486048e-10 \n", - " 24 2.490172e-10 \n", - "\n", - " t048000 \n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "1 0 0 2 4.170639e-09 \n", - " 1 2.229912e-09 \n", - " 3 2.230897e-09 \n", - " 5 1.180435e-09 \n", - " 4 6.196713e-10 \n", - "... ... \n", - "2 1 2 20 9.637256e-10 \n", - " 21 5.085948e-10 \n", - " 22 5.076428e-10 \n", - " 23 2.433699e-10 \n", - " 24 2.437736e-10 \n", + "2 0 1 3 0.000108 \n", + " 0 4 0.000006 \n", + " 2 4 0.000206 \n", + " 4 9 0.000067 \n", + " 0 10 0.000005 \n", + "... ... \n", + " 205 234 0.015540 \n", + " 206 234 0.015540 \n", + " 219 234 0.033730 \n", + " 220 234 0.033740 \n", + " 233 234 797.500000 \n", "\n", - "[358 rows x 26 columns]" + "[3549 rows x 9 columns]" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "atom_data.collision_data.loc[(2,0, slice(None), slice(None)], :)" + "radiative_transitions" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "temperature = [10000, 20000] * u.K\n", + "rad_field = PlanckianRadiationField(temperature=temperature)\n", + "\n", + "rad_rate_solver = RadiativeRatesSolver(radiative_transitions)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "rad_rates_df = rad_rate_solver.solve(rad_field)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -1469,67 +548,68 @@ " \n", " 2\n", " 0\n", - " 1\n", + " 1\n", " 3\n", - " 533170\n", - " 10833.307\n", - " 0.365400\n", - " 0.609000\n", - " 2.767322e+14\n", - " 1.107679e+11\n", - " 6.646073e+10\n", - " 2.076771e+07\n", - " 0.000108\n", - " \n", - " \n", - " 4\n", - " 533171\n", - " 10833.217\n", - " 0.608000\n", - " 0.608000\n", - " 2.767345e+14\n", - " 1.105851e+11\n", - " 1.105851e+11\n", - " 3.455659e+07\n", + " 533584\n", + " 1.083017e+04\n", + " 0.179800\n", + " 0.53940\n", + " 2.768123e+14\n", + " 9.808029e+10\n", + " 3.269343e+10\n", + " 1.022495e+07\n", " 0.000108\n", " \n", " \n", " 0\n", - " 6\n", - " 533166\n", - " 584.335\n", - " 0.092000\n", - " 0.276000\n", - " 5.130489e+15\n", - " 2.707737e+09\n", - " 9.025791e+08\n", - " 1.797241e+09\n", + " 4\n", + " 533561\n", + " 5.843340e+02\n", + " 0.092100\n", + " 0.27630\n", + " 5.130498e+15\n", + " 2.710676e+09\n", + " 9.035585e+08\n", + " 1.799200e+09\n", " 0.000006\n", " \n", " \n", " 2\n", - " 6\n", - " 533182\n", - " 20586.937\n", - " 0.125667\n", - " 0.377000\n", - " 1.456227e+14\n", - " 1.303073e+11\n", - " 4.343575e+10\n", - " 1.977784e+06\n", + " 4\n", + " 533604\n", + " 2.058129e+04\n", + " 0.125500\n", + " 0.37650\n", + " 1.456626e+14\n", + " 1.300987e+11\n", + " 4.336624e+10\n", + " 1.976246e+06\n", " 0.000206\n", " \n", " \n", + " 4\n", + " 9\n", + " 533664\n", + " 6.678152e+03\n", + " 0.426120\n", + " 0.71020\n", + " 4.489153e+14\n", + " 7.962922e+10\n", + " 4.777753e+10\n", + " 6.373259e+07\n", + " 0.000067\n", + " \n", + " \n", " 0\n", - " 16\n", - " 533167\n", - " 537.031\n", - " 0.024467\n", - " 0.073400\n", - " 5.582405e+15\n", - " 6.618064e+08\n", - " 2.206021e+08\n", - " 5.658722e+08\n", + " 10\n", + " 533563\n", + " 5.370300e+02\n", + " 0.024487\n", + " 0.07346\n", + " 5.582415e+15\n", + " 6.623461e+08\n", + " 2.207820e+08\n", + " 5.663368e+08\n", " 0.000005\n", " \n", " \n", @@ -1546,206 +626,206 @@ " ...\n", " \n", " \n", - " 26\n", - " 46\n", - " 533336\n", - " 40490.052\n", - " 0.028000\n", - " 0.028000\n", - " 7.404102e+13\n", - " 1.903452e+10\n", - " 1.903452e+10\n", - " 1.139209e+05\n", - " 0.000405\n", + " 205\n", + " 234\n", + " 537353\n", + " 1.554000e+06\n", + " 0.012279\n", + " 0.40633\n", + " 1.929166e+12\n", + " 1.060145e+13\n", + " 3.203736e+11\n", + " 3.391645e+01\n", + " 0.015540\n", " \n", " \n", - " 27\n", - " 46\n", - " 533340\n", - " 40490.167\n", - " 0.000571\n", - " 0.000444\n", - " 7.404081e+13\n", - " 3.019850e+08\n", - " 3.882664e+08\n", - " 2.323742e+03\n", - " 0.000405\n", + " 206\n", + " 234\n", + " 537357\n", + " 1.554000e+06\n", + " 0.447982\n", + " 0.56620\n", + " 1.929166e+12\n", + " 1.477258e+13\n", + " 1.168820e+13\n", + " 1.237375e+03\n", + " 0.015540\n", " \n", " \n", - " 28\n", - " 46\n", - " 533344\n", - " 40490.314\n", - " 0.228857\n", - " 0.320400\n", - " 7.404054e+13\n", - " 2.178107e+11\n", - " 1.555791e+11\n", - " 9.311173e+05\n", - " 0.000405\n", + " 219\n", + " 234\n", + " 537397\n", + " 3.373000e+06\n", + " 0.048841\n", + " 1.61620\n", + " 8.888006e+11\n", + " 9.152652e+13\n", + " 2.765911e+12\n", + " 2.863492e+01\n", + " 0.033730\n", " \n", " \n", - " 27\n", - " 45\n", - " 533339\n", - " 40490.216\n", - " 0.448636\n", - " 0.548333\n", - " 7.404072e+13\n", - " 3.727608e+11\n", - " 3.049861e+11\n", - " 1.825309e+06\n", - " 0.000405\n", + " 220\n", + " 234\n", + " 537399\n", + " 3.374000e+06\n", + " 3.693125\n", + " 4.13630\n", + " 8.885372e+11\n", + " 2.343110e+14\n", + " 2.092062e+14\n", + " 2.163944e+03\n", + " 0.033740\n", " \n", " \n", - " 29\n", - " 47\n", - " 533346\n", - " 40490.429\n", - " 1.046889\n", - " 1.346000\n", - " 7.404033e+13\n", - " 9.150250e+11\n", - " 7.116861e+11\n", - " 4.259298e+06\n", - " 0.000405\n", + " 233\n", + " 234\n", + " 537415\n", + " 7.975000e+10\n", + " 0.000027\n", + " 0.00088\n", + " 3.759153e+07\n", + " 1.178629e+15\n", + " 3.561791e+13\n", + " 2.789865e-11\n", + " 797.500000\n", " \n", " \n", "\n", - "

180 rows × 9 columns

\n", + "

3549 rows × 9 columns

\n", "" ], "text/plain": [ " line_id \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 533170 \n", - " 4 533171 \n", - " 0 6 533166 \n", - " 2 6 533182 \n", - " 0 16 533167 \n", + "2 0 1 3 533584 \n", + " 0 4 533561 \n", + " 2 4 533604 \n", + " 4 9 533664 \n", + " 0 10 533563 \n", "... ... \n", - " 26 46 533336 \n", - " 27 46 533340 \n", - " 28 46 533344 \n", - " 27 45 533339 \n", - " 29 47 533346 \n", + " 205 234 537353 \n", + " 206 234 537357 \n", + " 219 234 537397 \n", + " 220 234 537399 \n", + " 233 234 537415 \n", "\n", - " wavelength \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 10833.307 \n", - " 4 10833.217 \n", - " 0 6 584.335 \n", - " 2 6 20586.937 \n", - " 0 16 537.031 \n", - "... ... \n", - " 26 46 40490.052 \n", - " 27 46 40490.167 \n", - " 28 46 40490.314 \n", - " 27 45 40490.216 \n", - " 29 47 40490.429 \n", + " wavelength \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 1.083017e+04 \n", + " 0 4 5.843340e+02 \n", + " 2 4 2.058129e+04 \n", + " 4 9 6.678152e+03 \n", + " 0 10 5.370300e+02 \n", + "... ... \n", + " 205 234 1.554000e+06 \n", + " 206 234 1.554000e+06 \n", + " 219 234 3.373000e+06 \n", + " 220 234 3.374000e+06 \n", + " 233 234 7.975000e+10 \n", "\n", " f_ul \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 0.365400 \n", - " 4 0.608000 \n", - " 0 6 0.092000 \n", - " 2 6 0.125667 \n", - " 0 16 0.024467 \n", + "2 0 1 3 0.179800 \n", + " 0 4 0.092100 \n", + " 2 4 0.125500 \n", + " 4 9 0.426120 \n", + " 0 10 0.024487 \n", "... ... \n", - " 26 46 0.028000 \n", - " 27 46 0.000571 \n", - " 28 46 0.228857 \n", - " 27 45 0.448636 \n", - " 29 47 1.046889 \n", + " 205 234 0.012279 \n", + " 206 234 0.447982 \n", + " 219 234 0.048841 \n", + " 220 234 3.693125 \n", + " 233 234 0.000027 \n", "\n", - " f_lu \\\n", - "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 0.609000 \n", - " 4 0.608000 \n", - " 0 6 0.276000 \n", - " 2 6 0.377000 \n", - " 0 16 0.073400 \n", - "... ... \n", - " 26 46 0.028000 \n", - " 27 46 0.000444 \n", - " 28 46 0.320400 \n", - " 27 45 0.548333 \n", - " 29 47 1.346000 \n", + " f_lu \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 1 3 0.53940 \n", + " 0 4 0.27630 \n", + " 2 4 0.37650 \n", + " 4 9 0.71020 \n", + " 0 10 0.07346 \n", + "... ... \n", + " 205 234 0.40633 \n", + " 206 234 0.56620 \n", + " 219 234 1.61620 \n", + " 220 234 4.13630 \n", + " 233 234 0.00088 \n", "\n", " nu \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 2.767322e+14 \n", - " 4 2.767345e+14 \n", - " 0 6 5.130489e+15 \n", - " 2 6 1.456227e+14 \n", - " 0 16 5.582405e+15 \n", + "2 0 1 3 2.768123e+14 \n", + " 0 4 5.130498e+15 \n", + " 2 4 1.456626e+14 \n", + " 4 9 4.489153e+14 \n", + " 0 10 5.582415e+15 \n", "... ... \n", - " 26 46 7.404102e+13 \n", - " 27 46 7.404081e+13 \n", - " 28 46 7.404054e+13 \n", - " 27 45 7.404072e+13 \n", - " 29 47 7.404033e+13 \n", + " 205 234 1.929166e+12 \n", + " 206 234 1.929166e+12 \n", + " 219 234 8.888006e+11 \n", + " 220 234 8.885372e+11 \n", + " 233 234 3.759153e+07 \n", "\n", " B_lu \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 1.107679e+11 \n", - " 4 1.105851e+11 \n", - " 0 6 2.707737e+09 \n", - " 2 6 1.303073e+11 \n", - " 0 16 6.618064e+08 \n", + "2 0 1 3 9.808029e+10 \n", + " 0 4 2.710676e+09 \n", + " 2 4 1.300987e+11 \n", + " 4 9 7.962922e+10 \n", + " 0 10 6.623461e+08 \n", "... ... \n", - " 26 46 1.903452e+10 \n", - " 27 46 3.019850e+08 \n", - " 28 46 2.178107e+11 \n", - " 27 45 3.727608e+11 \n", - " 29 47 9.150250e+11 \n", + " 205 234 1.060145e+13 \n", + " 206 234 1.477258e+13 \n", + " 219 234 9.152652e+13 \n", + " 220 234 2.343110e+14 \n", + " 233 234 1.178629e+15 \n", "\n", " B_ul \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 6.646073e+10 \n", - " 4 1.105851e+11 \n", - " 0 6 9.025791e+08 \n", - " 2 6 4.343575e+10 \n", - " 0 16 2.206021e+08 \n", + "2 0 1 3 3.269343e+10 \n", + " 0 4 9.035585e+08 \n", + " 2 4 4.336624e+10 \n", + " 4 9 4.777753e+10 \n", + " 0 10 2.207820e+08 \n", "... ... \n", - " 26 46 1.903452e+10 \n", - " 27 46 3.882664e+08 \n", - " 28 46 1.555791e+11 \n", - " 27 45 3.049861e+11 \n", - " 29 47 7.116861e+11 \n", + " 205 234 3.203736e+11 \n", + " 206 234 1.168820e+13 \n", + " 219 234 2.765911e+12 \n", + " 220 234 2.092062e+14 \n", + " 233 234 3.561791e+13 \n", "\n", " A_ul \\\n", "atomic_number ion_number level_number_lower level_number_upper \n", - "2 0 1 3 2.076771e+07 \n", - " 4 3.455659e+07 \n", - " 0 6 1.797241e+09 \n", - " 2 6 1.977784e+06 \n", - " 0 16 5.658722e+08 \n", + "2 0 1 3 1.022495e+07 \n", + " 0 4 1.799200e+09 \n", + " 2 4 1.976246e+06 \n", + " 4 9 6.373259e+07 \n", + " 0 10 5.663368e+08 \n", "... ... \n", - " 26 46 1.139209e+05 \n", - " 27 46 2.323742e+03 \n", - " 28 46 9.311173e+05 \n", - " 27 45 1.825309e+06 \n", - " 29 47 4.259298e+06 \n", + " 205 234 3.391645e+01 \n", + " 206 234 1.237375e+03 \n", + " 219 234 2.863492e+01 \n", + " 220 234 2.163944e+03 \n", + " 233 234 2.789865e-11 \n", "\n", " wavelength_cm \n", "atomic_number ion_number level_number_lower level_number_upper \n", "2 0 1 3 0.000108 \n", - " 4 0.000108 \n", - " 0 6 0.000006 \n", - " 2 6 0.000206 \n", - " 0 16 0.000005 \n", + " 0 4 0.000006 \n", + " 2 4 0.000206 \n", + " 4 9 0.000067 \n", + " 0 10 0.000005 \n", "... ... \n", - " 26 46 0.000405 \n", - " 27 46 0.000405 \n", - " 28 46 0.000405 \n", - " 27 45 0.000405 \n", - " 29 47 0.000405 \n", + " 205 234 0.015540 \n", + " 206 234 0.015540 \n", + " 219 234 0.033730 \n", + " 220 234 0.033740 \n", + " 233 234 797.500000 \n", "\n", - "[180 rows x 9 columns]" + "[3549 rows x 9 columns]" ] }, - "execution_count": 4, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -1756,50 +836,7 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "temperature = [10000, 20000] * u.K\n", - "rad_field = PlanckianRadiationField(temperature=temperature)\n", - "\n", - "rad_rate_solver = RadiativeRatesSolver(radiative_transitions)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "rad_rates_df = rad_rate_solver.solve(rad_field)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'radiative_transitions' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[6], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mradiative_transitions\u001b[49m\n", - "\u001b[0;31mNameError\u001b[0m: name 'radiative_transitions' is not defined" - ] - } - ], - "source": [ - "radiative_transitions" - ] - }, - { - "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -1842,31 +879,30 @@ " \n", " 2\n", " 0\n", - " 0\n", - " 6\n", - " 1.092259e-01\n", - " 2.426770e+04\n", + " 0\n", + " 4\n", + " 0.109340\n", + " 24293.644329\n", " \n", " \n", - " 16\n", - " 3.931126e-03\n", - " 2.583324e+03\n", + " 10\n", + " 0.003934\n", + " 2585.380931\n", " \n", " \n", - " 30\n", - " 7.998261e-04\n", - " 7.686424e+02\n", + " 18\n", + " 0.000791\n", + " 760.480592\n", " \n", " \n", - " 48\n", - " 2.921823e-04\n", - " 3.349007e+02\n", + " 28\n", + " 0.000287\n", + " 329.201923\n", " \n", " \n", - " 1\n", - " 3\n", - " 1.247811e+07\n", - " 3.671871e+07\n", + " 40\n", + " 0.000138\n", + " 173.998738\n", " \n", " \n", " ...\n", @@ -1875,73 +911,73 @@ " ...\n", " \n", " \n", - " 46\n", - " 28\n", - " 3.113439e+06\n", - " 5.720071e+06\n", + " 231\n", + " 229\n", + " 0.025427\n", + " 0.050853\n", " \n", " \n", - " 39\n", - " 29\n", - " 1.741319e+05\n", - " 3.199534e+05\n", + " 232\n", + " 230\n", + " 0.009131\n", + " 0.018262\n", " \n", " \n", - " 47\n", - " 29\n", - " 1.424213e+07\n", - " 2.616593e+07\n", + " 233\n", + " 231\n", + " 0.009009\n", + " 0.018018\n", " \n", " \n", - " 32\n", - " 30\n", - " 5.589118e+06\n", - " 1.037015e+07\n", + " 235\n", + " 232\n", + " 0.000167\n", + " 0.000334\n", " \n", " \n", - " 39\n", - " 30\n", - " 5.195260e+06\n", - " 9.558669e+06\n", + " 234\n", + " 233\n", + " 0.000155\n", + " 0.000309\n", " \n", " \n", "\n", - "

360 rows × 2 columns

\n", + "

7098 rows × 2 columns

\n", "" ], "text/plain": [ - " 0 \\\n", - "atomic_number ion_number level_number_source level_number_destination \n", - "2 0 0 6 1.092259e-01 \n", - " 16 3.931126e-03 \n", - " 30 7.998261e-04 \n", - " 48 2.921823e-04 \n", - " 1 3 1.247811e+07 \n", - "... ... \n", - " 46 28 3.113439e+06 \n", - " 39 29 1.741319e+05 \n", - " 47 29 1.424213e+07 \n", - " 32 30 5.589118e+06 \n", - " 39 30 5.195260e+06 \n", + " 0 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "2 0 0 4 0.109340 \n", + " 10 0.003934 \n", + " 18 0.000791 \n", + " 28 0.000287 \n", + " 40 0.000138 \n", + "... ... \n", + " 231 229 0.025427 \n", + " 232 230 0.009131 \n", + " 233 231 0.009009 \n", + " 235 232 0.000167 \n", + " 234 233 0.000155 \n", "\n", " 1 \n", "atomic_number ion_number level_number_source level_number_destination \n", - "2 0 0 6 2.426770e+04 \n", - " 16 2.583324e+03 \n", - " 30 7.686424e+02 \n", - " 48 3.349007e+02 \n", - " 1 3 3.671871e+07 \n", + "2 0 0 4 24293.644329 \n", + " 10 2585.380931 \n", + " 18 760.480592 \n", + " 28 329.201923 \n", + " 40 173.998738 \n", "... ... \n", - " 46 28 5.720071e+06 \n", - " 39 29 3.199534e+05 \n", - " 47 29 2.616593e+07 \n", - " 32 30 1.037015e+07 \n", - " 39 30 9.558669e+06 \n", + " 231 229 0.050853 \n", + " 232 230 0.018262 \n", + " 233 231 0.018018 \n", + " 235 232 0.000334 \n", + " 234 233 0.000309 \n", "\n", - "[360 rows x 2 columns]" + "[7098 rows x 2 columns]" ] }, - "execution_count": 7, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -1959,7 +995,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -1968,7 +1004,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -1977,56 +1013,165 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 13, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/fg/nwmb1mss6kq3hwhj10dt0qh00000gn/T/ipykernel_571/3900330882.py:1: PerformanceWarning: indexing past lexsort depth may impact performance.\n", - " (atom_data.lines.loc[1, 0, 0, 3].nu.values * u.Hz * const.h).to(u.eV)\n" - ] - }, - { - "data": { - "text/latex": [ - "$[10.198837] \\; \\mathrm{eV}$" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(atom_data.lines.loc[1, 0, 0, 3].nu.values * u.Hz * const.h).to(u.eV)" + "col_strength_temperatures = atom_data.collision_data_temperatures\n", + "col_strengths = atom_data.yg_data.loc[(2,0, slice(None), slice(None)), :]\n", + "collisional_rate_solver = ThermalCollisionalRateSolver(radiative_transitions, col_strength_temperatures, col_strengths, 'cmfgen')" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
01
atomic_numberion_numberlevel_number_lowerlevel_number_upper
20017.270000e-027.220000e-02
23.830000e-024.320000e-02
32.420000e-023.400000e-02
41.630000e-022.630000e-02
51.830000e-022.000000e-02
............
2292315.706217e+056.009353e+05
2302323.624163e+063.797912e+06
2312333.626137e+063.799899e+06
2322354.592647e+064.806122e+06
2332344.604415e+064.817884e+06
\n", + "

3681 rows × 2 columns

\n", + "
" + ], "text/plain": [ - "energy 0.0\n", - "g 2\n", - "metastable True\n", - "Name: (1, 0, 0), dtype: object" + " 0 \\\n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 0 1 7.270000e-02 \n", + " 2 3.830000e-02 \n", + " 3 2.420000e-02 \n", + " 4 1.630000e-02 \n", + " 5 1.830000e-02 \n", + "... ... \n", + " 229 231 5.706217e+05 \n", + " 230 232 3.624163e+06 \n", + " 231 233 3.626137e+06 \n", + " 232 235 4.592647e+06 \n", + " 233 234 4.604415e+06 \n", + "\n", + " 1 \n", + "atomic_number ion_number level_number_lower level_number_upper \n", + "2 0 0 1 7.220000e-02 \n", + " 2 4.320000e-02 \n", + " 3 3.400000e-02 \n", + " 4 2.630000e-02 \n", + " 5 2.000000e-02 \n", + "... ... \n", + " 229 231 6.009353e+05 \n", + " 230 232 3.797912e+06 \n", + " 231 233 3.799899e+06 \n", + " 232 235 4.806122e+06 \n", + " 233 234 4.817884e+06 \n", + "\n", + "[3681 rows x 2 columns]" ] }, - "execution_count": 28, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "atom_data.levels.loc[1,0, 0]" + "collisional_rate_solver.solve(temperature)" ] }, { @@ -2145,10 +1290,99 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "collisional_transitions = atom_data.collision_data.loc[(2,0, slice(None), slice(None)), :]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MultiIndex([(2, 0, 0, 1),\n", + " (2, 0, 0, 2),\n", + " (2, 0, 0, 3),\n", + " (2, 0, 0, 4),\n", + " (2, 0, 0, 5),\n", + " (2, 0, 0, 7),\n", + " (2, 0, 0, 8),\n", + " (2, 0, 0, 9),\n", + " (2, 0, 0, 10),\n", + " (2, 0, 0, 11),\n", + " ...\n", + " (2, 0, 5, 39),\n", + " (2, 0, 5, 40),\n", + " (2, 0, 5, 41),\n", + " (2, 0, 5, 42),\n", + " (2, 0, 5, 43),\n", + " (2, 0, 5, 44),\n", + " (2, 0, 5, 45),\n", + " (2, 0, 5, 46),\n", + " (2, 0, 5, 47),\n", + " (2, 0, 5, 48)],\n", + " names=['atomic_number', 'ion_number', 'level_number_lower', 'level_number_upper'], length=221)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "collisional_transitions.index.difference(radiative_transitions.index)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "g_ratio 3.333333e-01\n", + "delta_e 2.299972e+05\n", + "t002000 1.596743e-09\n", + "t004000 1.129220e-09\n", + "t006000 9.221284e-10\n", + "t008000 7.986942e-10\n", + "t010000 7.144701e-10\n", + "t012000 6.523069e-10\n", + "t014000 6.040002e-10\n", + "t016000 5.650665e-10\n", + "t018000 5.328216e-10\n", + "t020000 5.055470e-10\n", + "t022000 4.820850e-10\n", + "t024000 4.616234e-10\n", + "t026000 4.435730e-10\n", + "t028000 4.274952e-10\n", + "t030000 4.130551e-10\n", + "t032000 3.999927e-10\n", + "t034000 3.881021e-10\n", + "t036000 3.772181e-10\n", + "t038000 3.672065e-10\n", + "t040000 3.579567e-10\n", + "t042000 3.493769e-10\n", + "t044000 3.413900e-10\n", + "t046000 3.339308e-10\n", + "t048000 3.269438e-10\n", + "Name: (2, 0, 0, 1), dtype: float64" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "collisional_transitions.loc[2,0, 0, 1]" + ] }, { "cell_type": "code", diff --git a/tardis/plasma/detailed_balance/rates/__init__.py b/tardis/plasma/detailed_balance/rates/__init__.py index 8884aa11ae0..2a9040877a9 100644 --- a/tardis/plasma/detailed_balance/rates/__init__.py +++ b/tardis/plasma/detailed_balance/rates/__init__.py @@ -1,7 +1,11 @@ from tardis.plasma.detailed_balance.rates.radiative_rates import ( RadiativeRatesSolver, ) -from tardis.plasma.detailed_balance.rates.collisional_strengths import ( +from tardis.plasma.detailed_balance.rates.collision_strengths import ( UpsilonRegemorterSolver, UpsilonCMFGENSolver, ) + +from tardis.plasma.detailed_balance.rates.collisional_rates import ( + ThermalCollisionalRateSolver, +) From feaeb9a57b549c29fea497728e911467b499d638 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 8 Aug 2024 16:31:51 -0400 Subject: [PATCH 098/118] feat: Add ThermalCollisionalRateSolver class for calculating thermal collisional rates --- .../rates/collision_strengths.py | 250 ++++++++++++++++++ .../rates/collisional_rates.py | 56 ++++ .../plasma/detailed_balance/tests/__init__.py | 0 .../tests/test_collisional_transitions.py | 0 4 files changed, 306 insertions(+) create mode 100644 tardis/plasma/detailed_balance/rates/collision_strengths.py create mode 100644 tardis/plasma/detailed_balance/rates/collisional_rates.py create mode 100644 tardis/plasma/detailed_balance/tests/__init__.py create mode 100644 tardis/plasma/detailed_balance/tests/test_collisional_transitions.py diff --git a/tardis/plasma/detailed_balance/rates/collision_strengths.py b/tardis/plasma/detailed_balance/rates/collision_strengths.py new file mode 100644 index 00000000000..65180b1e276 --- /dev/null +++ b/tardis/plasma/detailed_balance/rates/collision_strengths.py @@ -0,0 +1,250 @@ +import numpy as np +import pandas as pd +from astropy import units as u +from scipy.special import exp1 +from scipy.interpolate import PchipInterpolator + +from tardis import constants as const + + +def exp1_times_exp(x): + """ + Product of the Exponential integral E1 and an exponential. + + This function calculates the product of the Exponential integral E1 + and an exponential in a way that also works for large values. + + Parameters + ---------- + x : array_like + Input values. + + Returns + ------- + array_like + Output array. + """ + f = exp1(x) * np.exp(x) + # Use Laurent series for large values to avoid infinite exponential + mask = x > 500 + f[mask] = (x**-1 - x**-2 + 2 * x**-3 - 6 * x**-4)[mask] + return f + + +REGEMORTER_CONSTANT = ( # Hubeny, I. and Mihalas, D., "Theory of Stellar Atmospheres". 2014. EQ 9.54 [below it] + const.a0.cgs**2 + * np.pi + * np.sqrt(8 * const.k_B.cgs / (np.pi * const.m_e.cgs)) +) + +HYDROGEN_IONIZATION_ENERGY = ( + 13.598434005136003 * u.eV +).cgs # taken from the classic TARDIS ionization data + + +class CollisionalCrossSections: + def __init__(self, collision_cross_sections): + self.collisional_cross_sections = collision_cross_sections + + def solve_collisional_cross_sections(self, temperature_electron): + pass + + +N_A = const.N_A.cgs.value +K_B = const.k_B.cgs.value +C = const.c.cgs.value +H = const.h.cgs.value +A0 = const.a0.cgs.value +M_E = const.m_e.cgs.value +E = const.e.esu.value +BETA_COLL = ( + (const.h**4 / (8 * const.k_B * const.m_e**3 * np.pi**3)) ** 0.5 +).cgs +F_K = ( + 16 + / (3.0 * np.sqrt(3)) + * np.sqrt((2 * np.pi) ** 3 * K_B / (H**2 * M_E**3)) + * (E**2 / C) ** 3 +) # See Eq. 19 in Sutherland, R. S. 1998, MNRAS, 300, 321 +FF_OPAC_CONST = ( + (2 * np.pi / (3 * M_E * K_B)) ** 0.5 * 4 * E**6 / (3 * M_E * H * C) +) # See Eq. 6.1.8 in http://personal.psu.edu/rbc3/A534/lec6.pdf + + +def calculate_upsilon_g_2_collisional_rates(yg, t_electrons, delta_energies): + boltzmann_factor = np.exp( + -delta_energies.values[np.newaxis].T / (t_electrons * const.k_B).value + ) + + q_lu = ( + BETA_COLL.value / np.sqrt(t_electrons) * yg * boltzmann_factor + ) # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 + return pd.DataFrame(q_lu, index=delta_energies.index) + + +class UpsilonCMFGENSolver: + """ + Attributes + ---------- + yg_data : pandas.DataFrame + Table of thermally averaged effective collision strengths + (divided by the statistical weight of the lower level) Y_ij / g_i . + Columns are temperatures. + t_yg : numpy.ndarray + Temperatures at which collision strengths are tabulated. + yg_index : Pandas MultiIndex + delta_E_yg : pandas.DataFrame + Energy difference between upper and lower levels coupled by collisions. + yg_idx : pandas.DataFrame + Source_level_idx and destination_level_idx of collision transitions. + Indexed by atomic_number, ion_number, level_number_lower, + level_number_upper. + """ + + def __init__( + self, + upsilon_temperatures, + upsilon_g_data, + ): + # upsilon_g_data.columns = upsilon_temperatures + self.upsilon_lu_data = upsilon_g_data + self.upsilon_g_lu_interpolator = PchipInterpolator( + upsilon_temperatures, + self.upsilon_lu_data.values, + axis=1, + extrapolate=True, + ) + + def solve(self, t_electrons): + return pd.DataFrame( + self.upsilon_g_lu_interpolator(t_electrons), + index=self.upsilon_lu_data.index, + ) + + +class UpsilonRegemorterSolver: + def __init__(self, transition_data, g_bar=0.2) -> None: + assert transition_data.index.names == [ + "atomic_number", + "ion_number", + "level_number_lower", + "level_number_upper", + ] + assert {"f_lu", "nu"} - set(transition_data.columns) == set() + + assert np.all( + transition_data.index.get_level_values("level_number_lower") + < transition_data.index.get_level_values("level_number_upper") + ) + self.transition_data = transition_data.sort_index() + self.g_bar = g_bar + + def solve(self, t_electrons): + """ + Calculate collision strengths in the van Regemorter approximation. + + This function calculates thermally averaged effective collision + strengths (divided by the statistical weight of the lower level) + Y_ij / g_i using the van Regemorter approximation. A very good description can be found in + Mihalas Chapter on collisional rates + + Parameters + ---------- + atomic_data : tardis.io.atom_data.AtomData + t_electrons : numpy.ndarray + continuum_interaction_species : pandas.MultiIndex + + Returns + ------- + pandas.DataFrame + Thermally averaged effective collision strengths + (divided by the statistical weight of the lower level) Y_ij / g_i + + Notes + ----- + See Eq. 9.58 in [2]. + + References + ---------- + .. [1] van Regemorter, H., “Rate of Collisional Excitation in Stellar + Atmospheres.”, The Astrophysical Journal, vol. 136, p. 906, 1962. + doi:10.1086/147445. + .. [2] Hubeny, I. and Mihalas, D., "Theory of Stellar Atmospheres". 2014. + """ + upsilon_g_lu = ( + self.transition_data.f_lu.values + * ( + HYDROGEN_IONIZATION_ENERGY + / (const.h * self.transition_data.nu.values * u.Hz) + ) + ** 2 + ) + + upsilon_g_lu = ( + 14.5 + * REGEMORTER_CONSTANT + * t_electrons.value + * upsilon_g_lu[:, np.newaxis] + ) + + u0 = ( + const.h.cgs.value * self.transition_data.nu.values[np.newaxis].T + ) / (t_electrons.value * const.k_B.cgs.value) + gamma_component = 0.276 * exp1_times_exp(u0) # Eq 9.59 in Mihalas + # choice of transitions between principal quantum numbers g_bar = 0.2, otherwise gbar = 0.7 + # NOTE currently we assume all transitions have changes in principal quantum numbers which is wrong + gamma = np.maximum(self.g_bar, gamma_component) + upsilon_g_lu *= u0 * gamma / BETA_COLL + upsilon_g_lu = pd.DataFrame( + upsilon_g_lu.cgs.value, + index=self.transition_data.index, + ) + return upsilon_g_lu + + +class CollExcRateCoeff: + """ + Attributes + ---------- + coll_exc_coeff : pandas.DataFrame, dtype float + Rate coefficient for collisional excitation. + """ + + outputs = ("coll_exc_coeff",) + latex_name = ("c_{lu}",) + + def calculate(self, yg_interp, yg_index, t_electrons, delta_E_yg): + yg = yg_interp(t_electrons) + boltzmann_factor = np.exp( + -delta_E_yg.values[np.newaxis].T / (t_electrons * K_B) + ) + q_ij = ( + BETA_COLL.value / np.sqrt(t_electrons) * yg * boltzmann_factor + ) # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 + return pd.DataFrame(q_ij, index=yg_index) + + +class CollDeexcRateCoeff: + """ + Attributes + ---------- + coll_deexc_coeff : pandas.DataFrame, dtype float + Rate coefficient for collisional deexcitation. + """ + + outputs = ("coll_deexc_coeff",) + latex_name = ("c_{ul}",) + + def calculate(self, thermal_lte_level_boltzmann_factor, coll_exc_coeff): + level_lower_index = coll_exc_coeff.index.droplevel("level_number_upper") + level_upper_index = coll_exc_coeff.index.droplevel("level_number_lower") + + n_lower_prop = thermal_lte_level_boltzmann_factor.loc[ + level_lower_index + ].values + n_upper_prop = thermal_lte_level_boltzmann_factor.loc[ + level_upper_index + ].values + + coll_deexc_coeff = coll_exc_coeff * n_lower_prop / n_upper_prop + return coll_deexc_coeff diff --git a/tardis/plasma/detailed_balance/rates/collisional_rates.py b/tardis/plasma/detailed_balance/rates/collisional_rates.py new file mode 100644 index 00000000000..10d5e5c16f6 --- /dev/null +++ b/tardis/plasma/detailed_balance/rates/collisional_rates.py @@ -0,0 +1,56 @@ +import pandas as pd + +from tardis.plasma.detailed_balance.rates.collision_strengths import ( + UpsilonCMFGENSolver, + UpsilonRegemorterSolver, +) + + +class ThermalCollisionalRateSolver: + def __init__( + self, + radiative_transitions, + thermal_collisional_strength_temperatures, + thermal_collisional_strengths, + collision_strength_type, + collisional_strength_approximation="regemorter", + ): + + if collision_strength_type == "cmfgen": + self.thermal_collision_strength_solver = UpsilonCMFGENSolver( + thermal_collisional_strength_temperatures, + thermal_collisional_strengths, + ) + + # find the transitions that have radiative rate data but no collisional data + approximate_collisional_strength_index = ( + radiative_transitions.index.difference( + thermal_collisional_strengths.index + ) + ) + + if collisional_strength_approximation == "regemorter": + self.thermal_collision_strength_approximator = ( + UpsilonRegemorterSolver( + radiative_transitions.loc[ + approximate_collisional_strength_index + ] + ) + ) + + def solve(self, temperatures_electron): + thermal_collision_strengths = ( + self.thermal_collision_strength_solver.solve(temperatures_electron) + ) + thermal_collision_strength_approximated = ( + self.thermal_collision_strength_approximator.solve( + temperatures_electron + ) + ) + + return pd.concat( + [ + thermal_collision_strengths, + thermal_collision_strength_approximated, + ] + ).sort_index() diff --git a/tardis/plasma/detailed_balance/tests/__init__.py b/tardis/plasma/detailed_balance/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py new file mode 100644 index 00000000000..e69de29bb2d From ab2cf5c776c5bf5e92b835f12624b8e3813f00f3 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 12 Aug 2024 09:10:43 -0400 Subject: [PATCH 099/118] further fixes --- tardis/plasma/assembly/base.py | 44 ++++++---- tardis/plasma/assembly/legacy_assembly.py | 3 +- .../tests/test_collisional_transitions.py | 85 +++++++++++++++++++ 3 files changed, 114 insertions(+), 18 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 163193e6b51..4ddfab4286f 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -54,6 +54,13 @@ def map_species_from_string(species): return [species_string_to_tuple(spec) for spec in species] +def convert_species_to_multi_index(species_strs): + return pd.MultiIndex.from_tuples( + map_species_from_string(species_strs), + names=["atomic_number", "ion_number"], + ) + + class PlasmaSolverFactory: ## Analytical Approximations @@ -91,22 +98,19 @@ class PlasmaSolverFactory: kwargs: dict = {} property_kwargs: dict = {} - def __init__(self, atom_data, selected_atomic_numbers, config=None) -> None: + def __init__( + self, + atom_data, + config=None, + ) -> None: if config is not None: self.parse_plasma_config(config.plasma) self.atom_data = atom_data - self.atom_data.prepare_atom_data( - selected_atomic_numbers, - line_interaction_type=self.line_interaction_type, - continuum_interaction_species=self.continuum_interaction_species_multi_index, - nlte_species=self.legacy_nlte_species, - ) @property def continuum_interaction_species_multi_index(self): - return pd.MultiIndex.from_tuples( - map_species_from_string(self.continuum_interaction_species), - names=["atomic_number", "ion_number"], + return convert_species_to_multi_index( + self.continuum_interaction_species ) def parse_plasma_config(self, plasma_config): @@ -150,7 +154,7 @@ def parse_plasma_config(self, plasma_config): plasma_config.continuum_interaction.enable_two_photon_decay ) - def setup_factory(self, config=None): + def prepare_factory(self, selected_atomic_numbers, config=None): """ Set up the plasma factory. @@ -159,6 +163,13 @@ def setup_factory(self, config=None): config : object, optional Configuration object containing plasma settings (default: None). """ + self.atom_data.prepare_atom_data( + selected_atomic_numbers, + line_interaction_type=self.line_interaction_type, + continuum_interaction_species=self.continuum_interaction_species_multi_index, + nlte_species=self.legacy_nlte_species, + ) + self.check_continuum_interaction_species() self.plasma_modules = basic_inputs + basic_properties @@ -502,6 +513,7 @@ def assemble( dilute_planckian_radiation_field, time_explosion, electron_densities=None, + **kwargs, ): j_blues = self.initialize_j_blues( dilute_planckian_radiation_field, self.atom_data.lines @@ -510,7 +522,7 @@ def assemble( RADIATIVE_RATES_TYPE=self.radiative_rates_type ) - kwargs = dict( + plasma_assemble_kwargs = dict( time_explosion=time_explosion, dilute_planckian_radiation_field=dilute_planckian_radiation_field, number_density=number_densities, @@ -521,12 +533,11 @@ def assemble( nlte_ionization_species=self.nlte_ionization_species, nlte_excitation_species=self.nlte_excitation_species, ) - if len(self.continuum_interaction_species) > 0: initial_continuum_properties = self.initialize_continuum_properties( dilute_planckian_radiation_field ) - kwargs.update( + plasma_assemble_kwargs.update( gamma=initial_continuum_properties.photo_ionization_rate_coefficient, bf_heating_coeff_estimator=None, stim_recomb_cooling_coeff_estimator=None, @@ -536,10 +547,11 @@ def assemble( if electron_densities is not None: electron_densities = pd.Series(electron_densities.cgs.value) self.setup_electron_densities(electron_densities) - kwargs["helium_treatment"] = self.helium_treatment + plasma_assemble_kwargs["helium_treatment"] = self.helium_treatment + plasma_assemble_kwargs.update(kwargs) return BasePlasma( plasma_properties=self.plasma_modules, property_kwargs=self.property_kwargs, plasma_solver_settings=plasma_solver_settings, - **kwargs, + **plasma_assemble_kwargs, ) diff --git a/tardis/plasma/assembly/legacy_assembly.py b/tardis/plasma/assembly/legacy_assembly.py index 6f12fde618b..b250f1cbeda 100644 --- a/tardis/plasma/assembly/legacy_assembly.py +++ b/tardis/plasma/assembly/legacy_assembly.py @@ -23,10 +23,9 @@ def assemble_plasma(config, simulation_state, atom_data=None): atomic_numbers = simulation_state.abundance.index plasma_solver_factory = PlasmaSolverFactory( atom_data, - atomic_numbers, config, ) - plasma_solver_factory.setup_factory(config) + plasma_solver_factory.prepare_factory(atomic_numbers, config) dilute_planckian_radiation_field = DilutePlanckianRadiationField( simulation_state.t_radiative, simulation_state.dilution_factor ) diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py index e69de29bb2d..1380dde1cbb 100644 --- a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py +++ b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py @@ -0,0 +1,85 @@ +import pytest +import pandas as pd +import numpy as np +from astropy import units as u + +import numpy.testing as npt +import copy + +from tardis.plasma.assembly.base import ( + PlasmaSolverFactory, + convert_species_to_multi_index, +) +from tardis.plasma.radiation_field import planck_rad_field +from tardis.plasma.properties.atomic import YgData +from tardis.plasma.properties.plasma_input import ContinuumInteractionSpecies +from tardis.plasma.detailed_balance.rates import ( + RadiativeRatesSolver, + UpsilonRegemorterSolver, + UpsilonCMFGENSolver, + ThermalCollisionalRateSolver, +) + + +@pytest.fixture +def all_legacy_cmfgen_yg_data( + nlte_atomic_dataset, +): # using christian's old implementation + atom_data = copy.deepcopy(nlte_atomic_dataset) + + # almost all settings are irrelevant for collisional strength data + number_densities = pd.DataFrame({2: [1]}).T + temperatures = [10000] * u.K + dilution_factor = np.array([1]) + time_explosion = 5 * u.day + dilute_planck_rad_field = planck_rad_field.DilutePlanckianRadiationField( + temperatures, dilution_factor + ) + plasma_solver_factory = PlasmaSolverFactory(atom_data) + species_mindex = convert_species_to_multi_index(["He I"]) + # plasma_solver_factory.continuum_interaction_species = ["He I"] + plasma_solver_factory.line_interaction_type = "macroatom" + plasma_solver_factory.prepare_factory([2]) + plasma_solver_factory.plasma_modules += [ + YgData, + ContinuumInteractionSpecies, + ] + plasma_solver = plasma_solver_factory.assemble( + number_densities, + dilute_planck_rad_field, + time_explosion, + continuum_interaction_species=species_mindex, + ) + available_yg_data = plasma_solver.yg_data.loc[ + atom_data.yg_data.loc[(2, 0, slice(None), slice(None)), :].index + ] + approximated_yg_data = plasma_solver.yg_data.loc[ + ~plasma_solver.yg_data.index.isin(atom_data.yg_data.index) + ] + return available_yg_data, approximated_yg_data + + +def test_legacy_cmfgen_collisional_strengths( + all_legacy_cmfgen_yg_data, nlte_atomic_dataset, regression_data +): + legacy_cmfgen_yg_data, approximated_cmfgen_yg_data = ( + all_legacy_cmfgen_yg_data + ) + + # This is testing againt the old setup + radiative_transitions = nlte_atomic_dataset.lines.loc[ + (2, 0, slice(None), slice(None)), : + ] + + collision_strengths_regemorter_solver = UpsilonRegemorterSolver( + radiative_transitions.loc[approximated_cmfgen_yg_data.index] + ) + collision_strengths_cmfgen_solver = UpsilonCMFGENSolver + new_regemorter_collision_strengths = ( + collision_strengths_regemorter_solver.solve( + t_electrons=legacy_cmfgen_yg_data.columns.values * u.K + ) + ) + npt.assert_allclose( + new_regemorter_collision_strengths.values, approximated_cmfgen_yg_data + ) # residuals are ~1e-8 not sure if that is good enough From 9d593dc2c36a8d8a293b493b80f9660ffc98d9d2 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 12 Aug 2024 14:59:58 -0400 Subject: [PATCH 100/118] further testing --- .../tests/test_collisional_transitions.py | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py index 1380dde1cbb..375cb8153c0 100644 --- a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py +++ b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py @@ -74,12 +74,29 @@ def test_legacy_cmfgen_collisional_strengths( collision_strengths_regemorter_solver = UpsilonRegemorterSolver( radiative_transitions.loc[approximated_cmfgen_yg_data.index] ) - collision_strengths_cmfgen_solver = UpsilonCMFGENSolver + new_regemorter_collision_strengths = ( collision_strengths_regemorter_solver.solve( t_electrons=legacy_cmfgen_yg_data.columns.values * u.K ) ) + + collision_strengths_cmfgen_solver = UpsilonCMFGENSolver( + nlte_atomic_dataset.yg_data.columns, nlte_atomic_dataset.yg_data + ) + new_cmfgen_collision_strengths = collision_strengths_cmfgen_solver.solve( + legacy_cmfgen_yg_data.columns.values * u.K + ) + + npt.assert_allclose( + new_regemorter_collision_strengths.values, + approximated_cmfgen_yg_data, + rtol=1e-7, + atol=1e-5, + ) # residuals are ~1e-8 not sure if that is good enough npt.assert_allclose( - new_regemorter_collision_strengths.values, approximated_cmfgen_yg_data + new_cmfgen_collision_strengths.values, + legacy_cmfgen_yg_data.values, + rtol=1e-7, + atol=1e-5, ) # residuals are ~1e-8 not sure if that is good enough From 95e4cefd0888b8e0283f6a20f1ce279faef27370 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 13 Aug 2024 12:12:14 -0400 Subject: [PATCH 101/118] refactor: Refactor collisional rates calculation in ThermalCollisionalRateSolver --- tardis/plasma/assembly/base.py | 3 + .../rates/collisional_rates.py | 59 ++++++++-- .../tests/test_collisional_transitions.py | 108 ++++++++++-------- 3 files changed, 112 insertions(+), 58 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 99674cabb14..05820476fbe 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -615,6 +615,9 @@ def assemble( ValueError If an error occurs during assembly. """ + assert len(dilute_lte_excitation_properties.temperature) == len( + number_densities.columns + ) j_blues = self.initialize_j_blues( dilute_planckian_radiation_field, self.atom_data.lines ) diff --git a/tardis/plasma/detailed_balance/rates/collisional_rates.py b/tardis/plasma/detailed_balance/rates/collisional_rates.py index 10d5e5c16f6..61e42275447 100644 --- a/tardis/plasma/detailed_balance/rates/collisional_rates.py +++ b/tardis/plasma/detailed_balance/rates/collisional_rates.py @@ -1,40 +1,63 @@ +import numpy as np import pandas as pd +from astropy import units as u +from tardis import constants as const from tardis.plasma.detailed_balance.rates.collision_strengths import ( UpsilonCMFGENSolver, UpsilonRegemorterSolver, ) +BETA_COLL = ( + (const.h**4 / (8 * const.k_B * const.m_e**3 * np.pi**3)) ** 0.5 +).cgs + class ThermalCollisionalRateSolver: + def __init__( self, + levels, radiative_transitions, - thermal_collisional_strength_temperatures, + thermal_collisional_strengths_temperatures, thermal_collisional_strengths, - collision_strength_type, + collision_strengths_type, collisional_strength_approximation="regemorter", ): - - if collision_strength_type == "cmfgen": + self.levels = levels + if collision_strengths_type == "cmfgen": self.thermal_collision_strength_solver = UpsilonCMFGENSolver( - thermal_collisional_strength_temperatures, + thermal_collisional_strengths_temperatures, thermal_collisional_strengths, ) - + self.radiative_transitions = radiative_transitions # find the transitions that have radiative rate data but no collisional data - approximate_collisional_strength_index = ( + missing_collision_strengths_index = ( radiative_transitions.index.difference( thermal_collisional_strengths.index ) ) - + self.all_collisional_strengths_index = ( + missing_collision_strengths_index.append( + thermal_collisional_strengths.index + ).sort_values() + ) + self.delta_energies = ( + self.levels.loc[ + self.all_collisional_strengths_index.droplevel( + "level_number_upper" + ) + ].energy.values + - self.levels.loc[ + self.all_collisional_strengths_index.droplevel( + "level_number_lower" + ) + ].energy.values + ) * u.erg if collisional_strength_approximation == "regemorter": self.thermal_collision_strength_approximator = ( UpsilonRegemorterSolver( - radiative_transitions.loc[ - approximate_collisional_strength_index - ] + radiative_transitions.loc[missing_collision_strengths_index] ) ) @@ -48,9 +71,21 @@ def solve(self, temperatures_electron): ) ) - return pd.concat( + thermal_all_collision_strengths = pd.concat( [ thermal_collision_strengths, thermal_collision_strength_approximated, ] ).sort_index() + + boltzmann_factor = np.exp( + self.delta_energies[np.newaxis].T + / (temperatures_electron * const.k_B), + ).value + q_ij = ( + BETA_COLL / np.sqrt(temperatures_electron) * boltzmann_factor + ).to( + "cm3 / s" + ).value * thermal_all_collision_strengths # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 + + return q_ij diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py index 375cb8153c0..9f9e1e4e29a 100644 --- a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py +++ b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py @@ -1,70 +1,73 @@ -import pytest -import pandas as pd -import numpy as np -from astropy import units as u +import copy +import numpy as np import numpy.testing as npt -import copy +import pandas as pd +import pandas.testing as pdt +import pytest +from astropy import units as u from tardis.plasma.assembly.base import ( PlasmaSolverFactory, convert_species_to_multi_index, ) -from tardis.plasma.radiation_field import planck_rad_field -from tardis.plasma.properties.atomic import YgData -from tardis.plasma.properties.plasma_input import ContinuumInteractionSpecies from tardis.plasma.detailed_balance.rates import ( - RadiativeRatesSolver, - UpsilonRegemorterSolver, - UpsilonCMFGENSolver, + # UpsilonCMFGENSolver, ThermalCollisionalRateSolver, + # RadiativeRatesSolver, + UpsilonRegemorterSolver, ) +from tardis.plasma.properties.atomic import YgData, YgInterpolator +from tardis.plasma.properties.continuum_processes import CollExcRateCoeff +from tardis.plasma.properties.plasma_input import ContinuumInteractionSpecies +from tardis.plasma.radiation_field import planck_rad_field @pytest.fixture -def all_legacy_cmfgen_yg_data( - nlte_atomic_dataset, -): # using christian's old implementation +def legacy_cmfgen_collision_rate_plasma_solver(nlte_atomic_dataset): atom_data = copy.deepcopy(nlte_atomic_dataset) - # almost all settings are irrelevant for collisional strength data - number_densities = pd.DataFrame({2: [1]}).T - temperatures = [10000] * u.K - dilution_factor = np.array([1]) + number_densities = pd.DataFrame({2: [1, 1]}).T + temperatures = [10000, 20000] * u.K + dilution_factor = np.array([1, 1]) time_explosion = 5 * u.day dilute_planck_rad_field = planck_rad_field.DilutePlanckianRadiationField( temperatures, dilution_factor ) plasma_solver_factory = PlasmaSolverFactory(atom_data) - species_mindex = convert_species_to_multi_index(["He I"]) + # plasma_solver_factory.continuum_interaction_species = ["He I"] plasma_solver_factory.line_interaction_type = "macroatom" plasma_solver_factory.prepare_factory([2]) plasma_solver_factory.plasma_modules += [ YgData, ContinuumInteractionSpecies, + CollExcRateCoeff, + YgInterpolator, ] - plasma_solver = plasma_solver_factory.assemble( + species_mindex = convert_species_to_multi_index(["He I"]) + return plasma_solver_factory.assemble( number_densities, dilute_planck_rad_field, time_explosion, continuum_interaction_species=species_mindex, ) - available_yg_data = plasma_solver.yg_data.loc[ - atom_data.yg_data.loc[(2, 0, slice(None), slice(None)), :].index - ] - approximated_yg_data = plasma_solver.yg_data.loc[ - ~plasma_solver.yg_data.index.isin(atom_data.yg_data.index) - ] - return available_yg_data, approximated_yg_data def test_legacy_cmfgen_collisional_strengths( - all_legacy_cmfgen_yg_data, nlte_atomic_dataset, regression_data + legacy_cmfgen_collision_rate_plasma_solver, + nlte_atomic_dataset, + regression_data, ): - legacy_cmfgen_yg_data, approximated_cmfgen_yg_data = ( - all_legacy_cmfgen_yg_data - ) + # using christian's old implementation + plasma_solver = legacy_cmfgen_collision_rate_plasma_solver + atom_data = copy.deepcopy(nlte_atomic_dataset) + legacy_cmfgen_yg_data = plasma_solver.yg_data.loc[ + atom_data.yg_data.loc[(2, 0, slice(None), slice(None)), :].index + ] + approximated_cmfgen_yg_data = plasma_solver.yg_data.loc[ + ~plasma_solver.yg_data.index.isin(atom_data.yg_data.index) + ] # This is testing againt the old setup radiative_transitions = nlte_atomic_dataset.lines.loc[ @@ -80,23 +83,36 @@ def test_legacy_cmfgen_collisional_strengths( t_electrons=legacy_cmfgen_yg_data.columns.values * u.K ) ) - - collision_strengths_cmfgen_solver = UpsilonCMFGENSolver( - nlte_atomic_dataset.yg_data.columns, nlte_atomic_dataset.yg_data - ) - new_cmfgen_collision_strengths = collision_strengths_cmfgen_solver.solve( - legacy_cmfgen_yg_data.columns.values * u.K - ) - npt.assert_allclose( new_regemorter_collision_strengths.values, approximated_cmfgen_yg_data, rtol=1e-7, - atol=1e-5, - ) # residuals are ~1e-8 not sure if that is good enough - npt.assert_allclose( - new_cmfgen_collision_strengths.values, - legacy_cmfgen_yg_data.values, - rtol=1e-7, - atol=1e-5, + atol=0, ) # residuals are ~1e-8 not sure if that is good enough + # Not comparing to the yg_data as they are saved differently + + +def test_thermal_collision_rates( + legacy_cmfgen_collision_rate_plasma_solver, + nlte_atomic_dataset, + regression_data, +): + radiative_transitions = nlte_atomic_dataset.lines.loc[ + (2, 0, slice(None), slice(None)), : + ] + + collision_strengths = nlte_atomic_dataset.yg_data.loc[ + (2, 0, slice(None), slice(None)), : + ] + collision_strengths_temperatures = collision_strengths.columns.values * u.K + + therm_coll_rate_solver = ThermalCollisionalRateSolver( + nlte_atomic_dataset.levels.loc[(2, 0, slice(None)), :], + radiative_transitions, + collision_strengths_temperatures, + collision_strengths, + collision_strengths_type="cmfgen", + collisional_strength_approximation="regemorter", + ) + coll_rates = therm_coll_rate_solver.solve([10000, 20000] * u.K) + print("hello") From 16327b31a115c944e899a2f45ed7b4a1cbd2e1d4 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 13 Aug 2024 19:20:03 -0400 Subject: [PATCH 102/118] finished collisional_rates --- .../rates/collisional_rates.py | 78 +++++++++++++++---- .../tests/test_collisional_transitions.py | 23 +++++- 2 files changed, 85 insertions(+), 16 deletions(-) diff --git a/tardis/plasma/detailed_balance/rates/collisional_rates.py b/tardis/plasma/detailed_balance/rates/collisional_rates.py index 61e42275447..c0b5b7358b0 100644 --- a/tardis/plasma/detailed_balance/rates/collisional_rates.py +++ b/tardis/plasma/detailed_balance/rates/collisional_rates.py @@ -30,6 +30,10 @@ def __init__( thermal_collisional_strengths_temperatures, thermal_collisional_strengths, ) + else: + raise ValueError( + f"collision_strengths_type {collision_strengths_type} not supported" + ) self.radiative_transitions = radiative_transitions # find the transitions that have radiative rate data but no collisional data missing_collision_strengths_index = ( @@ -54,6 +58,15 @@ def __init__( ) ].energy.values ) * u.erg + + self.g_l = self.levels.loc[ + self.all_collisional_strengths_index.droplevel("level_number_lower") + ].energy.values + + self.g_u = self.levels.loc[ + self.all_collisional_strengths_index.droplevel("level_number_upper") + ].energy.values + if collisional_strength_approximation == "regemorter": self.thermal_collision_strength_approximator = ( UpsilonRegemorterSolver( @@ -62,6 +75,57 @@ def __init__( ) def solve(self, temperatures_electron): + thermal_all_collision_strengths = self.calculate_collision_strengths( + temperatures_electron + ) + + boltzmann_factor = np.exp( + self.delta_energies[np.newaxis].T + / (temperatures_electron * const.k_B), + ).value + collision_rates_coeff_lu = ( + BETA_COLL / np.sqrt(temperatures_electron) * boltzmann_factor + ).to( + "cm3 / s" + ).value * thermal_all_collision_strengths # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 + + collision_rates_coeff_ul = ( + (self.g_u / self.g_l)[np.newaxis].T + * boltzmann_factor + * collision_rates_coeff_lu + ) + + collision_rates_coeff_ul.index = ( + collision_rates_coeff_lu.index.swaplevel( + "level_number_lower", "level_number_upper" + ) + ) + + collision_rates_coeff_df = pd.concat( + [collision_rates_coeff_lu, collision_rates_coeff_ul] + ) + collision_rates_coeff_df.index.names = [ + "atomic_number", + "ion_number", + "level_number_source", + "level_number_destination", + ] + return collision_rates_coeff_df + + def calculate_collision_strengths(self, temperatures_electron): + """ + Calculate collision strengths based on the provided electron temperatures. + + Parameters + ---------- + temperatures_electron : array-like + Array-like of electron temperatures. + + Returns + ------- + pandas.DataFrame + DataFrame containing the calculated collision strengths. + """ thermal_collision_strengths = ( self.thermal_collision_strength_solver.solve(temperatures_electron) ) @@ -71,21 +135,9 @@ def solve(self, temperatures_electron): ) ) - thermal_all_collision_strengths = pd.concat( + return pd.concat( [ thermal_collision_strengths, thermal_collision_strength_approximated, ] ).sort_index() - - boltzmann_factor = np.exp( - self.delta_energies[np.newaxis].T - / (temperatures_electron * const.k_B), - ).value - q_ij = ( - BETA_COLL / np.sqrt(temperatures_electron) * boltzmann_factor - ).to( - "cm3 / s" - ).value * thermal_all_collision_strengths # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 - - return q_ij diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py index 9f9e1e4e29a..2199026e472 100644 --- a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py +++ b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py @@ -18,7 +18,14 @@ UpsilonRegemorterSolver, ) from tardis.plasma.properties.atomic import YgData, YgInterpolator -from tardis.plasma.properties.continuum_processes import CollExcRateCoeff +from tardis.plasma.properties.continuum_processes import ( + CollDeexcRateCoeff, + CollExcRateCoeff, +) +from tardis.plasma.properties.general import BetaElectron +from tardis.plasma.properties.partition_function import ( + ThermalLevelBoltzmannFactorLTE, +) from tardis.plasma.properties.plasma_input import ContinuumInteractionSpecies from tardis.plasma.radiation_field import planck_rad_field @@ -43,7 +50,10 @@ def legacy_cmfgen_collision_rate_plasma_solver(nlte_atomic_dataset): YgData, ContinuumInteractionSpecies, CollExcRateCoeff, + CollDeexcRateCoeff, YgInterpolator, + ThermalLevelBoltzmannFactorLTE, + BetaElectron, ] species_mindex = convert_species_to_multi_index(["He I"]) return plasma_solver_factory.assemble( @@ -114,5 +124,12 @@ def test_thermal_collision_rates( collision_strengths_type="cmfgen", collisional_strength_approximation="regemorter", ) - coll_rates = therm_coll_rate_solver.solve([10000, 20000] * u.K) - print("hello") + coll_rates_coeff = therm_coll_rate_solver.solve([10000, 20000] * u.K) + pdt.assert_frame_equal( + coll_rates_coeff.iloc[:3681], + legacy_cmfgen_collision_rate_plasma_solver.coll_exc_rate_coeff, + ) + pdt.assert_frame_equal( + coll_rates_coeff.iloc[3681:], + legacy_cmfgen_collision_rate_plasma_solver.coll_deexc_coeff, + ) From c2aee796dd4d05b13cbb593cfe5213f2167b845e Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Tue, 24 Sep 2024 13:59:42 -0400 Subject: [PATCH 103/118] Fixes collisional rates test so it can run (still fails) --- .../detailed_balance/tests/test_collisional_transitions.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py index 2199026e472..664325bc95e 100644 --- a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py +++ b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py @@ -127,9 +127,11 @@ def test_thermal_collision_rates( coll_rates_coeff = therm_coll_rate_solver.solve([10000, 20000] * u.K) pdt.assert_frame_equal( coll_rates_coeff.iloc[:3681], - legacy_cmfgen_collision_rate_plasma_solver.coll_exc_rate_coeff, + legacy_cmfgen_collision_rate_plasma_solver.coll_exc_coeff, + check_names=False, ) pdt.assert_frame_equal( coll_rates_coeff.iloc[3681:], legacy_cmfgen_collision_rate_plasma_solver.coll_deexc_coeff, + check_names=False, ) From cbcd0898a689bce364daadc5bf92485bc51ada8f Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Tue, 24 Sep 2024 15:26:35 -0400 Subject: [PATCH 104/118] Correct de-excitation rate calculation --- tardis/plasma/detailed_balance/rates/collisional_rates.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tardis/plasma/detailed_balance/rates/collisional_rates.py b/tardis/plasma/detailed_balance/rates/collisional_rates.py index c0b5b7358b0..e06a927d6e2 100644 --- a/tardis/plasma/detailed_balance/rates/collisional_rates.py +++ b/tardis/plasma/detailed_balance/rates/collisional_rates.py @@ -61,11 +61,11 @@ def __init__( self.g_l = self.levels.loc[ self.all_collisional_strengths_index.droplevel("level_number_lower") - ].energy.values + ].g.values self.g_u = self.levels.loc[ self.all_collisional_strengths_index.droplevel("level_number_upper") - ].energy.values + ].g.values if collisional_strength_approximation == "regemorter": self.thermal_collision_strength_approximator = ( @@ -91,7 +91,7 @@ def solve(self, temperatures_electron): collision_rates_coeff_ul = ( (self.g_u / self.g_l)[np.newaxis].T - * boltzmann_factor + / boltzmann_factor * collision_rates_coeff_lu ) From 0121ba8f3226a98707118f4d4e60ae6cb38518e2 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Mon, 30 Sep 2024 17:07:00 -0400 Subject: [PATCH 105/118] Add Chianti upsilon solver --- .../rates/collision_strengths.py | 66 ++++++++++++++++++- .../rates/collisional_rates.py | 9 ++- 2 files changed, 71 insertions(+), 4 deletions(-) diff --git a/tardis/plasma/detailed_balance/rates/collision_strengths.py b/tardis/plasma/detailed_balance/rates/collision_strengths.py index 65180b1e276..99474435f37 100644 --- a/tardis/plasma/detailed_balance/rates/collision_strengths.py +++ b/tardis/plasma/detailed_balance/rates/collision_strengths.py @@ -2,7 +2,7 @@ import pandas as pd from astropy import units as u from scipy.special import exp1 -from scipy.interpolate import PchipInterpolator +from scipy.interpolate import PchipInterpolator, splrep, splev from tardis import constants as const @@ -52,6 +52,7 @@ def solve_collisional_cross_sections(self, temperature_electron): N_A = const.N_A.cgs.value K_B = const.k_B.cgs.value +K_B_EV = const.k_B.cgs.to("eV / K").value C = const.c.cgs.value H = const.h.cgs.value A0 = const.a0.cgs.value @@ -106,8 +107,9 @@ def __init__( upsilon_temperatures, upsilon_g_data, ): - # upsilon_g_data.columns = upsilon_temperatures self.upsilon_lu_data = upsilon_g_data + + # can produce upsilon/g or not, depending on how easy it is self.upsilon_g_lu_interpolator = PchipInterpolator( upsilon_temperatures, self.upsilon_lu_data.values, @@ -122,6 +124,66 @@ def solve(self, t_electrons): ) +class UpsilonChiantiSolver: + def __init__( + self, + upsilon_data, + ): + self.upsilon_lu_data = upsilon_data + + def upsilon_scaling(self, row, t_electrons): + c = row["cups"] + x_knots = np.linspace(0, 1, len(row["btemp"])) + y_knots = row["bscups"] + delta_e = row["delta_e"] + g_l = row["g_l"] + + ttype = row["ttype"] + if ttype > 5: + ttype -= 5 + + kt = K_B_EV * t_electrons + + spline_tck = splrep(x_knots, y_knots) + + if ttype == 1: + x = 1 - np.log(c) / np.log(kt / delta_e + c) + y_func = splev(x, spline_tck) + upsilon = y_func * np.log(kt / delta_e + np.exp(1)) + + elif ttype == 2: + x = (kt / delta_e) / (kt / delta_e + c) + y_func = splev(x, spline_tck) + upsilon = y_func + + elif ttype == 3: + x = (kt / delta_e) / (kt / delta_e + c) + y_func = splev(x, spline_tck) + upsilon = y_func / (kt / delta_e + 1) + + elif ttype == 4: + x = 1 - np.log(c) / np.log(kt / delta_e + c) + y_func = splev(x, spline_tck) + upsilon = y_func * np.log(kt / delta_e + c) + + elif ttype == 5: + raise ValueError("Not sure what to do with ttype=5") + + upsilon_g_lu = upsilon / g_l + return pd.Series(data=upsilon_g_lu, name="upsilon_g") + + def solve(self, t_electrons): + upsilon_g_lu = self.upsilon_lu_data.apply( + self.upsilon_scaling, + axis=1, + args=(t_electrons.value,), + ) + return pd.DataFrame( + upsilon_g_lu, + index=self.upsilon_lu_data.index, + ) + + class UpsilonRegemorterSolver: def __init__(self, transition_data, g_bar=0.2) -> None: assert transition_data.index.names == [ diff --git a/tardis/plasma/detailed_balance/rates/collisional_rates.py b/tardis/plasma/detailed_balance/rates/collisional_rates.py index e06a927d6e2..c5fc5c1638c 100644 --- a/tardis/plasma/detailed_balance/rates/collisional_rates.py +++ b/tardis/plasma/detailed_balance/rates/collisional_rates.py @@ -5,6 +5,7 @@ from tardis import constants as const from tardis.plasma.detailed_balance.rates.collision_strengths import ( UpsilonCMFGENSolver, + UpsilonChiantiSolver, UpsilonRegemorterSolver, ) @@ -14,7 +15,6 @@ class ThermalCollisionalRateSolver: - def __init__( self, levels, @@ -25,11 +25,16 @@ def __init__( collisional_strength_approximation="regemorter", ): self.levels = levels - if collision_strengths_type == "cmfgen": + self.collision_strengths_type = collision_strengths_type + if self.collision_strengths_type == "cmfgen": self.thermal_collision_strength_solver = UpsilonCMFGENSolver( thermal_collisional_strengths_temperatures, thermal_collisional_strengths, ) + elif self.collision_strengths_type == "chianti": + self.thermal_collision_strength_solver = UpsilonChiantiSolver( + thermal_collisional_strengths, + ) else: raise ValueError( f"collision_strengths_type {collision_strengths_type} not supported" From fd5d6127118003aa90f93c39ed173aa5c4286582 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Mon, 30 Sep 2024 17:14:54 -0400 Subject: [PATCH 106/118] Docstrings and better variable names --- .../rates/collision_strengths.py | 80 ++++++++++++++----- 1 file changed, 60 insertions(+), 20 deletions(-) diff --git a/tardis/plasma/detailed_balance/rates/collision_strengths.py b/tardis/plasma/detailed_balance/rates/collision_strengths.py index 99474435f37..bc6617c9c35 100644 --- a/tardis/plasma/detailed_balance/rates/collision_strengths.py +++ b/tardis/plasma/detailed_balance/rates/collision_strengths.py @@ -125,6 +125,8 @@ def solve(self, t_electrons): class UpsilonChiantiSolver: + """Solver for Upsilon / g_i for Chianti data.""" + def __init__( self, upsilon_data, @@ -132,47 +134,85 @@ def __init__( self.upsilon_lu_data = upsilon_data def upsilon_scaling(self, row, t_electrons): - c = row["cups"] + """Scales Upsilon from Chianti data using equations + 23-38 from Burgess & Tully 1992 - A&A 254, 436B. + + Parameters + ---------- + row : pd.Series + DataFrame row of Chianti collisional data + t_electrons : np.ndarray + 1D array of electron temperatures to interpolate over + + Returns + ------- + pd.Series + Scaled Upsilon / g_lower + + Raises + ------ + ValueError + Incorrect scaling type provided + """ + scaling_constant = row["cups"] x_knots = np.linspace(0, 1, len(row["btemp"])) y_knots = row["bscups"] - delta_e = row["delta_e"] - g_l = row["g_l"] + delta_energy = row["delta_energy"] + g_lower = row["g_l"] - ttype = row["ttype"] - if ttype > 5: - ttype -= 5 + scaling_type = row["ttype"] + if scaling_type > 5: + scaling_type -= 5 kt = K_B_EV * t_electrons spline_tck = splrep(x_knots, y_knots) - if ttype == 1: - x = 1 - np.log(c) / np.log(kt / delta_e + c) + if scaling_type == 1: + x = 1 - np.log(scaling_constant) / np.log( + kt / delta_energy + scaling_constant + ) y_func = splev(x, spline_tck) - upsilon = y_func * np.log(kt / delta_e + np.exp(1)) + upsilon = y_func * np.log(kt / delta_energy + np.exp(1)) - elif ttype == 2: - x = (kt / delta_e) / (kt / delta_e + c) + elif scaling_type == 2: + x = (kt / delta_energy) / (kt / delta_energy + scaling_constant) y_func = splev(x, spline_tck) upsilon = y_func - elif ttype == 3: - x = (kt / delta_e) / (kt / delta_e + c) + elif scaling_type == 3: + x = (kt / delta_energy) / (kt / delta_energy + scaling_constant) y_func = splev(x, spline_tck) - upsilon = y_func / (kt / delta_e + 1) + upsilon = y_func / (kt / delta_energy + 1) - elif ttype == 4: - x = 1 - np.log(c) / np.log(kt / delta_e + c) + elif scaling_type == 4: + x = 1 - np.log(scaling_constant) / np.log( + kt / delta_energy + scaling_constant + ) y_func = splev(x, spline_tck) - upsilon = y_func * np.log(kt / delta_e + c) + upsilon = y_func * np.log(kt / delta_energy + scaling_constant) - elif ttype == 5: - raise ValueError("Not sure what to do with ttype=5") + elif scaling_type > 4: + raise ValueError( + "Not sure what to do with scaling type greater than 4" + ) - upsilon_g_lu = upsilon / g_l + upsilon_g_lu = upsilon / g_lower return pd.Series(data=upsilon_g_lu, name="upsilon_g") def solve(self, t_electrons): + """Solve the Upsilon / g_lower collisional values for arbitrary temperatures. + + Parameters + ---------- + t_electrons : np.ndarray + 1D array of electron temperatures to interpolate over + + Returns + ------- + pd.DataFrame + DataFrame with columns of Upsilon / g_lower per transition and temperature. + """ upsilon_g_lu = self.upsilon_lu_data.apply( self.upsilon_scaling, axis=1, From 45a5d6334b68210c71d267a35cc90f6ce7cad137 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Tue, 1 Oct 2024 11:04:20 -0400 Subject: [PATCH 107/118] Fix rename error --- tardis/plasma/detailed_balance/rates/collision_strengths.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/plasma/detailed_balance/rates/collision_strengths.py b/tardis/plasma/detailed_balance/rates/collision_strengths.py index bc6617c9c35..d34b58661c9 100644 --- a/tardis/plasma/detailed_balance/rates/collision_strengths.py +++ b/tardis/plasma/detailed_balance/rates/collision_strengths.py @@ -157,7 +157,7 @@ def upsilon_scaling(self, row, t_electrons): scaling_constant = row["cups"] x_knots = np.linspace(0, 1, len(row["btemp"])) y_knots = row["bscups"] - delta_energy = row["delta_energy"] + delta_energy = row["delta_e"] g_lower = row["g_l"] scaling_type = row["ttype"] From 9f53bfadf9c3038e32335ca61c84e77e568768f5 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Tue, 1 Oct 2024 11:25:35 -0400 Subject: [PATCH 108/118] Comparison notebook between Chianti, CMFGEN et al. --- .../plasma/detailed_balance/comparison.ipynb | 534 ++++++++++++++++++ 1 file changed, 534 insertions(+) create mode 100644 docs/physics/plasma/detailed_balance/comparison.ipynb diff --git a/docs/physics/plasma/detailed_balance/comparison.ipynb b/docs/physics/plasma/detailed_balance/comparison.ipynb new file mode 100644 index 00000000000..c1625eed84f --- /dev/null +++ b/docs/physics/plasma/detailed_balance/comparison.ipynb @@ -0,0 +1,534 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tardis.io.atom_data import AtomData\n", + "from tardis.plasma.detailed_balance.rates import (\n", + " RadiativeRatesSolver,\n", + " ThermalCollisionalRateSolver,\n", + " UpsilonRegemorterSolver,\n", + ")\n", + "from tardis.plasma.radiation_field import (\n", + " PlanckianRadiationField,\n", + ")\n", + "\n", + "from astropy import units as u" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tardis.model.base import SimulationState\n", + "from tardis.io.configuration.config_reader import Configuration\n", + "\n", + "config = Configuration.from_yaml(\"/home/afullard/tardis/test_continuum_template_wkerzen_rate_coeffs.yml\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def get_radiative_rates(rad_field, radiative_transitions):\n", + " rad_rate_solver = RadiativeRatesSolver(radiative_transitions)\n", + " return rad_rate_solver.solve(rad_field)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def get_estimated_upsilon_rates(temperature, radiative_transitions):\n", + " col_strength_solver = UpsilonRegemorterSolver(radiative_transitions)\n", + " return col_strength_solver.solve(temperature)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def get_cmfgen_collisional_rates(atom_data, temperature, radiative_transitions,):\n", + " col_strength_temperatures = atom_data.collision_data_temperatures\n", + " col_strengths = atom_data.yg_data.loc[(1,0, slice(None), slice(None)), :]\n", + " collisional_rate_solver = ThermalCollisionalRateSolver(atom_data.levels, radiative_transitions, col_strength_temperatures, col_strengths, 'cmfgen')\n", + " return collisional_rate_solver.solve(temperature)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def get_chianti_collisional_rates(atom_data, temperature, radiative_transitions,):\n", + " col_strength_temperatures = atom_data.collision_data_temperatures\n", + " col_strengths = atom_data.collision_data.loc[(1,0, slice(None), slice(None)), :]\n", + " collisional_rate_solver = ThermalCollisionalRateSolver(atom_data.levels, radiative_transitions, col_strength_temperatures, col_strengths, 'chianti')\n", + " return collisional_rate_solver.solve(temperature)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Chianti rates" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_atom_data = AtomData.from_hdf('~/carsus/docs/kurucz_cd23_chianti_H_He.h5')\n", + "chianti_radiative_transitions = chianti_atom_data.lines.loc[(1,0, slice(None), slice(None)), :]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "chianti_sim_state = SimulationState.from_config(config, atom_data=chianti_atom_data)\n", + "\n", + "christian_coeff = pd.HDFStore(\"~/tardis/collisional_rate_coefficients.hdf\")\n", + "christian_rate_coeff_df = pd.concat([christian_coeff[\"coll_exc_coeff\"], christian_coeff[\"coll_deexc_coeff\"].reorder_levels([0,1,3,2])])\n", + "\n", + "temperature = christian_coeff[\"t_electrons\"].values * u.K\n", + "rad_field = PlanckianRadiationField(temperature=temperature)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Chianti data comes from Carsus as `g_ratio = g_lower / g_upper`, `delta_E = energy_upper - energy_lower`, and a table of `beta_coll * upsilon / (g_upper * sqrt(T))`. See eq 9.57 Hubeny and Mihelas. Multiply by the boltzmann factor `exp(-delta_E / k * T)` to get the excitation rate. De-excitation rate should be `Excitation rate * (g_upper / g_lower) / boltzmann_factor` which for the Chianti data is `Excitation rate * (1 / g_ratio) / boltzmann_factor`" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_radiative_rates = get_radiative_rates(rad_field, chianti_radiative_transitions)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_upsilon_rates = get_estimated_upsilon_rates(temperature, chianti_radiative_transitions)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates = get_chianti_collisional_rates(chianti_atom_data, temperature, chianti_radiative_transitions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Raw Chianti upsilon/g values currently differ from CMFGEN by factor of ~10^-7. Delta energies are the same (within data error). Chianti level data is very different. `g` values are basically the same ballpark though. Conversion of Chianti rate data into upsilon/g seems correct, but there may be an extra Boltzmann factor in the Chianti data. Changed to divide by lower level `g` to match CMFGEN." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates.loc[1,0,0,1].plot(logy=True,label=\"TARDIS exc\",legend=True)\n", + "chianti_collisional_rates.loc[1,0,1,0].plot(logy=True,label=\"TARDIS deexc\",legend=True)\n", + "christian_coeff[\"coll_exc_coeff\"].loc[1,0,0,1].plot(logy=True,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,0,1].plot(logy=True,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates.loc[1,0,0,2].plot(logy=True,label=\"TARDIS exc\",legend=True)\n", + "chianti_collisional_rates.loc[1,0,2,0].plot(logy=True,label=\"TARDIS deexc\",legend=True)\n", + "christian_coeff[\"coll_exc_coeff\"].loc[1,0,0,2].plot(logy=True,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,0,2].plot(logy=True,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates.loc[1,0,0,3].plot(logy=True,label=\"TARDIS exc\",legend=True)\n", + "chianti_collisional_rates.loc[1,0,3,0].plot(logy=True,label=\"TARDIS deexc\",legend=True)\n", + "christian_coeff[\"coll_exc_coeff\"].loc[1,0,0,3].plot(logy=True,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,0,3].plot(logy=True,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## CMFGEN collisional rates" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_atom_data = AtomData.from_hdf('~/tardis-refdata/nlte_atom_data/TestNLTE_He_Ti.h5')\n", + "cmfgen_radiative_transitions = cmfgen_atom_data.lines.loc[(1,0, slice(None), slice(None)), :]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_sim_state = SimulationState.from_config(config, atom_data=cmfgen_atom_data)\n", + "\n", + "temperature = christian_coeff[\"t_electrons\"].values * u.K\n", + "rad_field = PlanckianRadiationField(temperature=temperature)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_radiative_rates = get_radiative_rates(rad_field, cmfgen_radiative_transitions)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_upsilon_rates = get_estimated_upsilon_rates(temperature, cmfgen_radiative_transitions)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_collisional_rates = get_cmfgen_collisional_rates(cmfgen_atom_data, temperature, cmfgen_radiative_transitions)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_collisional_rates" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "assert cmfgen_collisional_rates.shape == christian_rate_coeff_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "pd.testing.assert_frame_equal(cmfgen_collisional_rates.sort_index() * (1-0.000015),christian_rate_coeff_df.sort_index(),check_names=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "christian_rate_coeff_df = christian_rate_coeff_df.sort_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "christian_rate_coeff_df.index.names=cmfgen_collisional_rates.sort_index().index.names" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(cmfgen_collisional_rates - christian_rate_coeff_df) / christian_rate_coeff_df" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "from tardis import constants as const\n", + "import numpy as np\n", + "beta_coll = (\n", + " (const.h**4 / (8 * const.k_B * const.m_e**3 * np.pi**3)) ** 0.5\n", + ").cgs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "abs(8.63e-6 - beta_coll.value) / min(8.63e-6, beta_coll.value)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_collisional_rates.loc[1,0,1,2].plot(logy=False,label=\"TARDIS exc\",legend=True)\n", + "cmfgen_collisional_rates.loc[1,0,2,1].plot(logy=False,label=\"TARDIS deexc\",legend=True)\n", + "#plasma.coll_exc_coeff.loc[1,0,1,2].plot(logy=True,label=\"TARDIS old exc\",legend=True)\n", + "#plasma.coll_deexc_coeff.loc[1,0,1,2].plot(logy=True,label=\"TARDIS old deexc\",legend=True)\n", + "christian_coeff[\"coll_exc_coeff\"].loc[1,0,1,2].plot(logy=False,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,1,2].plot(logy=False,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_collisional_rates.loc[1,0,0,1].plot(logy=False,label=\"TARDIS exc\",legend=True)\n", + "cmfgen_collisional_rates.loc[1,0,1,0].plot(logy=False,label=\"TARDIS deexc\",legend=True)\n", + "#plasma.coll_exc_coeff.loc[1,0,1,2].plot(logy=True,label=\"TARDIS old exc\",legend=True)\n", + "#plasma.coll_deexc_coeff.loc[1,0,1,2].plot(logy=True,label=\"TARDIS old deexc\",legend=True)\n", + "christian_coeff[\"coll_exc_coeff\"].loc[1,0,0,1].plot(logy=False,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,0,1].plot(logy=False,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_collisional_rates.loc[1,0,1,29].plot(logy=False,label=\"TARDIS exc\",legend=True)\n", + "cmfgen_collisional_rates.loc[1,0,29,1].plot(logy=False,label=\"TARDIS deexc\",legend=True)\n", + "christian_coeff[\"coll_exc_coeff\"].loc[1,0,1,29].plot(logy=False,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,1,29].plot(logy=False,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_collisional_rates.sort_index().plot(logy=True,label=\"TARDIS\",legend=True)\n", + "christian_coeff[\"coll_deexc_coeff\"].sort_index().plot(logy=True,label=\"Christian\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_collisional_rates[0].sort_index().plot(logy=True,label=\"CMFGEN\",legend=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates[0].sort_index().plot(logy=True,label=\"Chianti\",legend=True, ylabel=\"Coeff\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_collisional_rates_full = chianti_collisional_rates.reindex(cmfgen_collisional_rates.index)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_collisional_rates[0].sort_index().plot(logy=True,label=\"CMFGEN\",legend=True)\n", + "chianti_collisional_rates_full[0].sort_index().plot(logy=True,label=\"Chianti\",legend=True, ylabel=\"Coeff\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_atom_data_old = AtomData.from_hdf('/home/afullard/tardis-refdata/atom_data/kurucz_atom_chianti_many.h5')\n", + "chianti_atom_data_old.prepare_atom_data([1],'macroatom',[(1, 0)],[])\n", + "coll_matrix = chianti_atom_data_old.nlte_data.get_collision_matrix((1,0), temperature.value)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.imshow(coll_matrix[:,:,0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.plot(coll_matrix[0,1,:],label=\"Old TARDIS scheme\")\n", + "plt.plot(chianti_collisional_rates.loc[1,0,1,0],label=\"New TARDIS scheme\")\n", + "plt.xlabel(\"Shell\")\n", + "plt.ylabel(\"Coeff\")\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(coll_matrix[0,1,:] - chianti_collisional_rates.loc[1,0,1,0]) / chianti_collisional_rates.loc[1,0,1,0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "coll_matrix[1,0,:] / chianti_collisional_rates.loc[1,0,0,1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.plot(coll_matrix[1,0,:],label=\"Old TARDIS scheme\")\n", + "plt.plot(chianti_collisional_rates.loc[1,0,0,1],label=\"New TARDIS scheme\")\n", + "plt.xlabel(\"Shell\")\n", + "plt.ylabel(\"Coeff\")\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "tardis", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 948247b78298fc23629ec2559bd49d388cccb3ca Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Tue, 1 Oct 2024 11:35:44 -0400 Subject: [PATCH 109/118] Add reference data and config, save notebook with plots --- .../collisional_rate_coefficients.hdf | Bin 0 -> 139472 bytes .../plasma/detailed_balance/comparison.ipynb | 1615 ++++++++++++++++- ...continuum_template_wkerzen_rate_coeffs.yml | 64 + 3 files changed, 1589 insertions(+), 90 deletions(-) create mode 100644 docs/physics/plasma/detailed_balance/collisional_rate_coefficients.hdf create mode 100644 docs/physics/plasma/detailed_balance/test_continuum_template_wkerzen_rate_coeffs.yml diff --git a/docs/physics/plasma/detailed_balance/collisional_rate_coefficients.hdf b/docs/physics/plasma/detailed_balance/collisional_rate_coefficients.hdf new file mode 100644 index 0000000000000000000000000000000000000000..338b62012ca01779db161929f1b476b92d39dab5 GIT binary patch literal 139472 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%0D0{C9zRxUfVN#46Q`6lM0xyU-O7cA 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 literal 0 HcmV?d00001 diff --git a/docs/physics/plasma/detailed_balance/comparison.ipynb b/docs/physics/plasma/detailed_balance/comparison.ipynb index c1625eed84f..6ef5011ddc4 100644 --- a/docs/physics/plasma/detailed_balance/comparison.ipynb +++ b/docs/physics/plasma/detailed_balance/comparison.ipynb @@ -2,9 +2,38 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f28dcb342f514ab889cd610faa37e88d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Iterations: 0/? [00:00" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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yx864SqftBVOrtWd2Kt730PranyfltL+H25TTZ3Vva+m0KASEmraVk3ragszdVxHTY4BSdOc/T8gfFPdTubVhgg8OqgQPTFJDSekBye4ak481a6v7iRVh/dXe3LTrv69NdZWw75r3HY1tam0ldS8ba0a6nuswFHNtqsLFo8MANV93eo+RQpRa8CApGmKMoD0G+quQpVECyonRYUTgtI6SFT/YNfUVnl9tft5uM0jTqAP6q3vNqBcp/JxPObJvE7rnmQ7dWwDidIJuL4fPJkSUcvHgKRpuowHPJ6uw0m7lhMiUMeTp+Sh7dbWlidDIiJqXRiQNI2lR9UHERERqY2WugsgIiIi0jQMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGRklYRkEaNGgULCwu8+OKLKuv27t2L9u3bo127dvj+++/VUB0RERFpmlYRkGbMmIGffvpJZXlFRQVmzZqFY8eO4eLFi1ixYgWysrLUUCERERFpklYRkAICAmBqaqqy/Ny5c/Dx8YGTkxNMTU0xbNgwHDx4UA0VEhERkSZRe0A6deoUhg8fDkdHR0gkEuzevVulzfr16+Hh4QEDAwP4+/vj9OnTDbLvpKQkODk5yV87OzsjMTGxQbZNREREzZfaA1JhYSE6d+6MtWvXVrt++/btmDlzJubPn49Lly6hf//+CA4ORkJCgryNv78/fH19VT6SkpJq3bcQQmWZRCJ5sgMiIiKiZk9H3QUEBwcjODi4xvWrVq3Cm2++ibfeegsAsHr1ahw8eBChoaEICQkBAISHh9dr305OTgo9Rvfu3UOvXr2qbVtaWorS0lL567y8vHrtk4iIiDSf2nuQalNWVobw8HAEBgYqLA8MDMSZM2eeePs9e/bEtWvXkJiYiPz8fOzfvx9BQUHVtg0JCYFUKpV/uLi4PPH+iYiISDNpdEDKyMhAZWUl7OzsFJbb2dkhJSWlztsJCgrCmDFjsH//fjg7O+P8+fMAAB0dHfzrX/9CQEAAunbtijlz5sDKyqrabcybNw+5ubnyj7t379b/wIiIiEijqf0SW10ojwsSQjzWWKHa7kx7/vnn8fzzzz9yG/r6+tDX16/zPomIiKj50ugeJGtra2hra6v0FqWlpan0KhERERE1FI0OSHp6evD398fhw4cVlh8+fBh9+/ZVU1VERETU0qn9EltBQQFu374tfx0bG4uIiAhYWlrC1dUVs2bNwoQJE9C9e3f06dMHGzZsQEJCAiZPnqzGqomIiKglU3tAunDhAgICAuSvZ82aBQCYOHEiNm/ejHHjxiEzMxNLly5FcnIyfH19sX//fri5uamrZCIiImrhJKK62RLpkfLy8iCVSpGbmwszMzN1l0NERER1UNfzt0aPQSIiIiJSBwYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIR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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "chianti_collisional_rates.loc[1,0,0,1].plot(logy=True,label=\"TARDIS exc\",legend=True)\n", "chianti_collisional_rates.loc[1,0,1,0].plot(logy=True,label=\"TARDIS deexc\",legend=True)\n", - "christian_coeff[\"coll_exc_coeff\"].loc[1,0,0,1].plot(logy=True,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", - "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,0,1].plot(logy=True,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + "reference_coeff[\"coll_exc_coeff\"].loc[1,0,0,1].plot(logy=True,label=\"reference exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "reference_coeff[\"coll_deexc_coeff\"].loc[1,0,0,1].plot(logy=True,label=\"reference deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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+SeY+vu36rZlMhmsrKzue/7ukF0mVVVVSEhIwFtvvaWyPCwsDH///XeTt5OXlwcHBwdcuXIFp06dwn//+98G265ZswYrVqxocc2N6Szpv7McB9B5jkXX/iJrKR6HbjF0cNA44Zr4+bX6iayt8TioMR0yIOXn50Mul8PR0VFluaOjI3Jycpq8nQkTJqCoqAhmZmbYunVro0NsixcvRlRUlPL5vR6k1tBZfml2luMAOs+xdJZfnDwOoq7FwN4ednPmaPV3bYcMSPeIRCKV54IgaCxrTHN6m4yNjWFsbNzk9s3RWX5pdpbjADrXsRC1JV04kbUGHoduMXRw0HovfYcMSHZ2dtDX19foLcrLy9PoVSKiWp3lFyePQ7fowomsNfA4SJ3Ofsy/MUZGRggODkZcXJzK8ri4OAwZMkRLVbWOzvJLs7McB9B5juXeL86ONllTHY+DiNqDzvYglZSUIC0tTfk8PT0diYmJsLGxgbu7O6KiojBt2jSEhIRg8ODB2Lx5MzIzMzFz5kwtVv3gOkv67yzHAXSuYyEioqbR2YB05swZhIaGKp/fmyD9wgsvICYmBpGRkSgoKMDKlSuRnZ2NgIAA7NmzBx4eHtoqmYiIiDqJDnEdJF3U1OsoEBERke5o6vm7Q85BIiIiImpLDEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNR0iYA0ceJEdOvWDU8//XSz1hEREVHX1CUC0vz58/H11183ex0RERF1TV0iIIWGhsLCwqLZ64iIiKhr0npAOnz4MMaPHw8XFxeIRCLs3LlTo82mTZvg5eUFExMTBAcH48iRI+1fKBEREXUZWg9IpaWlCAoKwmeffVbv+tjYWLz++utYsmQJzp07h+HDhyMiIgKZmZnKNsHBwQgICNB4ZGVltddhEBERUSdioO0CIiIiEBER0eD69evX46WXXsLLL78MAPj444+xb98+REdHY82aNQCAhISENq+zsrISlZWVyucymazN90lERETaofUepMZUVVUhISEBYWFhKsvDwsLw999/t2sta9asgZWVlfLh5ubWrvsnIiKi9qPTASk/Px9yuRyOjo4qyx0dHZGTk9Pk7YSHh+OZZ57Bnj174OrqitOnTzdpXV2LFy+GVCpVPm7evNmygyIiIiKdp/UhtqYQiUQqzwVB0FjWmH379rVoXV3GxsYwNjZu8j6JiIio49LpHiQ7Ozvo6+tr9Bbl5eVp9CoRERERtRadDkhGRkYIDg5GXFycyvK4uDgMGTJES1URERFRZ6f1IbaSkhKkpaUpn6enpyMxMRE2NjZwd3dHVFQUpk2bhpCQEAwePBibN29GZmYmZs6cqcWqiYiIqDPTekA6c+YMQkNDlc+joqIAAC+88AJiYmIQGRmJgoICrFy5EtnZ2QgICMCePXvg4eGhrZKJiIiokxMJgiBou4iOSCaTwcrKClKpFJaWltouh4iIiJqgqedvnZ6DRERERKQNDEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpaXJAsrGxQX5+PgBgxowZKC4ubrOiiIiIiLSpyQGpqqoKMpkMALBt2zZUVFS0WVFERERE2mTQ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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "chianti_collisional_rates.loc[1,0,0,2].plot(logy=True,label=\"TARDIS exc\",legend=True)\n", "chianti_collisional_rates.loc[1,0,2,0].plot(logy=True,label=\"TARDIS deexc\",legend=True)\n", - "christian_coeff[\"coll_exc_coeff\"].loc[1,0,0,2].plot(logy=True,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", - "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,0,2].plot(logy=True,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + "reference_coeff[\"coll_exc_coeff\"].loc[1,0,0,2].plot(logy=True,label=\"reference exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "reference_coeff[\"coll_deexc_coeff\"].loc[1,0,0,2].plot(logy=True,label=\"reference deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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Bvd/9NFHmD59Ol588UUAwJo1a7B//35ERUVhxYoVAID4+Pg2r3PFihVYunRpm5+HiIiIdE/nQ2yNqaioQHx8PEJCQtS2h4SE4OjRo+1ay8KFC6FQKFSPtLS0dj0/ERERtR+d9yA1JicnB9XV1XB0dFTb7ujoiMzMzCYfJzQ0FCdPnkRxcTFcXV2xc+dODBo06J776jI1NYWpqWnLLoiIiIg6BL0OSHdIJBK150IIrW2N2b9/f7P2ERERUdek10NsdnZ2MDQ01OotysrK0upVIiIiImoteh2QTExMEBgYiOjoaLXt0dHRGDZsmI6qIiIios5O50NsRUVFuHz5sup5SkoKEhISYGNjA3d3dyxYsACTJ09GUFAQhg4dio0bNyI1NRUzZszQYdVERETUmek8IJ04cQLBwcGq5wsWLAAATJkyBVu2bEFERARyc3Px3nvvISMjAwEBAdi7dy88PDx0VTIRERF1chIhhNB1ER1RQUEB5HI5FAoFrKysdF0OERERNUFT37/1eg4SERERkS4wIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKShSwSkMWPGoFu3bhg3bpza9sLCQgwaNAj9+/dHnz598Omnn+qoQiIiItInEiGE0HURbe3QoUMoKirC1q1b8f3336u2V1dXo7y8HFKpFCUlJQgICMBff/0FW1vbex6zoKAAcrkcCoUCVlZWbVk+ERERtZKmvn93iR6k4OBgyGQyre2GhoaQSqUAgLKyMlRXV6ML5EUiIiK6B50HpMOHD2P06NFwcXGBRCLBrl27tNpERkbCy8sLZmZmCAwMRGxsbKudPz8/H/369YOrqyveeOMN2NnZtdqxiYiIqGPSeUAqLi5Gv3798Mknn9S7f/v27Zg/fz4WLVqEU6dOYcSIEQgLC0NqaqqqTWBgIAICArQe6enp9zy/tbU1Tp8+jZSUFGzbtg23bt2qt115eTkKCgrUHkRERNQ5Gem6gLCwMISFhTW4/6OPPsL06dPx4osvAgDWrFmD/fv3IyoqCitWrAAAxMfHt7gOR0dH9O3bF4cPH8Zzzz2ntX/FihVYunRpi89DRERE+k/nPUiNqaioQHx8PEJCQtS2h4SE4OjRoy0+/q1bt1Q9QQUFBTh8+DB69uxZb9uFCxdCoVCoHmlpaS0+PxEREeknnfcgNSYnJwfV1dVwdHRU2+7o6IjMzMwmHyc0NBQnT55EcXExXF1dsXPnTgwaNAg3btzA9OnTIYSAEAJz5sxB37596z2GqakpTE1NW3Q9RERE1DHodUC6QyKRqD0XQmhta8z+/fvr3R4YGIiEhISWlEZERESdkF4PsdnZ2cHQ0FCrtygrK0urV4mIiIioteh1QDIxMUFgYCCio6PVtkdHR2PYsGE6qoqIiIg6O50PsRUVFeHy5cuq5ykpKUhISICNjQ3c3d2xYMECTJ48GUFBQRg6dCg2btyI1NRUzJgxQ4dVExERUWem84B04sQJBAcHq54vWLAAADBlyhRs2bIFERERyM3NxXvvvYeMjAwEBARg79698PDw0FXJRERE1Ml1iXuxtQXei42IiKjj4b3YiIiIiJpJ50NspO5U6m1cyS6Gu40U7jZSOMhMYWDQ9CUNiIiIqOUYkPTM7tPp2Hzkmuq5iZEBXLuZw61bTWByszGHu40Urt2kcLeVwsrMWHfFEhERdVIMSHrGy84Cw31skZpXgvT8MlRUKXE1uxhXs4vrbS83N1YFJ7faXqc7YcrF2hwmRhxFJSIiul+cpN1M7TFJu6paiQxFGdLySpCaV4K02yVIzStFWl4J0vJKkFtc0ejrDSSAs9wcrt3Ma0OUVC1M2Vua3teK5ERERB1dU9+/mxyQbGxskJycDDs7O0ybNg1r166FTCZrtYI7Gn34FFtxeVVNaMotQdrtu8HpTpgqq1Q2+nozYwO4dasbnKRw62YOd9uaXigLU3YwEhFR59LqAcnS0hJnzpyBt7e36vYf9vb2rVZwR6MPAakxQghkF5UjLU89OKXmleDG7VKkK0pxr5+8rYUJXFXDduq9UM5yMxgZcviOiIg6lqa+fze5i2Do0KEIDw9HYGAghBCYN28ezM3N6237+eef33/F1KokEgkcZGZwkJkh0KOb1v6KKiXS80vrDN2V4EZeqSpEKUorkVtcgdziCpxOy9d6vaGBBC7WZqo5T251h/C6mcPGwoTDd0RE1GE1OSB99dVXWL16Na5cuQIAUCgUKCsra7PCqG2ZGBnA084CnnYW9e5XlFYiLa8EN2rDU1re3TB1I68UFdXK2t6pUgC5Wq+3MDGEm40UHrZSeNpZwMvWAh62FvCys4CjFec+ERGRfmvWJG0vLy+cOHECtra2bVFTh6DvQ2xtSakUyCosrw1OJap/7/RE3Soob/T1ZsYG8LS1qHnYWcDzToiys4CDjOGJiIjaTqsPsdWdpB0cHAwTE5NWKZQ6HgMDCZzkZnCSm2Gwl43W/rLKatyonTR+LbcY13KKkZJbguu5xbhxuxRllUpcyCzEhcxCrdeaGxvCw1YKL7s64am258me4YmIiNoJJ2k3U1fuQWqJiiolbtwuwfXcEqTkFNcEqNwSXMspxo3bJVA28tsoNTGsHaaTqvdA2XHJAiIiahpO0ia9ZGJkAG97S3jbWyJYY9+d8HQttxgpOTU9TndC1M3bpSipqEZSRgGSMgq0jmuhCk8Wd+c92dWEKDtLThgnIqL706xJ2hKJhJO0qdXVDU+aKqqUSLtd09N0p8eppvepJjwVV1QjMaMAifWEJ0tTI1Voqjtk58HwREREDeAk7WbiEJv+KK+qRlpeqVqP07Wcmp6om/mNr/dkaWoETztpTe9T7ZCdV+1zWy5VQETU6bT6QpENKSsrg5mZWUsO0SExIHUMNeGpRBWYUnKKVfOf7rVYpszUCJ61Q3YP2FviAQdLPGBvAW87S5ibGLbfRRARUatp04CkVCqxbNky/Pe//8WtW7eQnJwMb29vvPPOO/D09MT06dNbVHxHwIDU8dV82q4EKTnqQ3bXckoaDU8SCdDd2rwmNNlbwqc2OD3gYMleJyIiPdfqk7Tr+uCDD7B161asWrUKL730kmp7nz59sHr16i4RkKjjMzM2hI+DDD4O2vcULKus6Xm6M2R3NbsYl7OKcDm7CPkllbhxuxQ3bpfi9+RstddZS41rg5NFnfBkCddu5rw1CxFRB9KsHiQfHx9s2LABjz32GGQyGU6fPg1vb29cuHABQ4cOxe3bt9uiVr3CHqSuK6+4ApezinAluwhXav+9nF2EG7cb7nUyMTSAl50FHnCwUOt58rKz4E2BiYjaUZv2IN28eRM+Pj5a25VKJSorK5tzSKIOw8bCBIO9bLQWySyrrEZKTvHd8JRdjCtZRbiaU4SySiUu3irExVvai2O6yM1q5zfdnefk42DJtZ2IiHSoWQHJ398fsbGx8PDwUNv+3XffYcCAAa1SGFFHY2ZsiN7OVujtrP5/JEqlwM380pqepqza4JRdhKvZRcgpqkC6ogzpijLEXspRe53MzKjeeU4eNlIO1xERtbFmBaTFixdj8uTJuHnzJpRKJX744QdcvHgRX3zxBfbs2dPaNRJ1aAYGErjZSOFmI8XIng5q+24XV+BqThGuZBXjcp0hu9S8EhSWVSEhLR8JaflqrzE2lMDD1kLV03QnRHnbW0BmZtyOV0ZE1Hk1+2P++/fvx/LlyxEfHw+lUomBAwfi3XffRUhISGvXqJc4B4naUlllNa7nlqjmOV3OvjPnqRilldUNvs7Jykw1z6lueHK04nAdERHQjusgdVUMSKQLSqVARkGZqqep7rBddmF5g6+zNDWq7XGSoZeTDL5ONf868AbARNTFtEtAio+PR1JSEiQSCfz8/LrU/CMGJNI3itLKOp+sK1Z9fT2vBNUN3AVYbm6Mno4y9KwTmnwdZZCbc6iOiDqnNg1IWVlZmDBhAmJiYmBtbQ0hBBQKBYKDg/HNN9/A3t6+RcV3BAxI1FFUVCmRmlfz6bqLmUVIvlWIC5kFuJbbcHBylpvB1/FuYOrpJIOPgyXMjLmCOBF1bG0akCIiInDlyhV8+eWX6N27NwAgMTERU6ZMgY+PD/73v/81v/IOggGJOrqyympcyb4TmAqRnFmIi5mFSFfUfxNqAwngaWeBno6yu+HJSQZPWwsYGnCYjog6hjYNSHK5HL/++isGDRqktj0uLg4hISHIz8+/74I7GgYk6qwKyipxqU5oupBZs35Tfkn9a5yZGhnAx8ESPZ1kquG6nk4yOFmZcX4TEemdNl0oUqlUwthYe46CsbExlEplcw5JRHrCyswYgR42CPS4uxCmEALZheU1i13W9jRdvFWI5FuFKKtU4nx6Ac6nF2gcx6hmblOdobpeTlaQSzm/iYj0X7N6kJ555hnk5+fjf//7H1xcXADUrK49adIkdOvWDTt37mz1QvUNe5CIaj5Vl5pXcjc41f6bklPc4PwmRytT9HSyQk9Hy9p/ZejhyPlNRNQ+2nSILS0tDc888wzOnTsHNzc3SCQSpKamok+fPvjxxx/h6uraouI7AgYkooaVV1XjanaxWmi6mFmIm/ml9baXSABPWwv41glNPZ1k8LTlquFE1Lra5WP+0dHRuHDhAoQQ8PPzw+OPP97cQ3U4DEhE96+wrBLJt4pwMbNQ9Wm6i5mFuN3A/CYTIwP42Fuq5jX1dKyZGO4i5/wmImqeNglIBw8exJw5c3D8+HGtgyoUCgwbNgz//e9/MWLEiOZX3kEwIBG1DiEEsovKkZxZVNvbVICLt4qQnFnY4KrhcnNj+DlbIaC7Ffxd5PB3sYK3vSU/TUdE99QmAelvf/sbgoOD8c9//rPe/evWrcOhQ4c4B4mIWkypFLhxuxQXMgvuLkVwqxBXs4tRVc/8JjNjA/R2toK/S01oCnCRw9fJEqZGnNtERHe1SUDy8PDAvn37VGsfabpw4QJCQkKQmpp6/xV3MAxIRLpRXlWNS7eKkJhegHPpCpxPL0BSRgFKKrR7m4wMJPBxsKwJTLW9Tb2dZbypL1EX1iYf879161a9H+9XHczICNnZ2fdzSCKi+2JqZIiA7nIEdJdjPNwAANVKgZScYpxPVyCxdsmBc+kK5JdU4kLtWk47Tt49hqetFP7d5areJn8XK9hZmuroiohIH91XQOrevTvOnj0LHx+fevefOXMGzs7OrVIYEVFTGdb2FPk4WOKZ/t0B1MxtSleU4fxNBc6lFyCxtrcpQ1GGa7kluJZbgp/PZKiO4WRlVhuYrFThqbu1OSeDE3VR9zXENnfuXMTExOCvv/6CmZmZ2r7S0lIMHjwYwcHBWLduXasXqm84xEbUMeUWlasWtjxfG5pScorrbWstNVbrZfJ3sYKXHSeDE3VkbTIH6datWxg4cCAMDQ0xZ84c9OzZExKJBElJSVi/fj2qq6tx8uRJODo6tspF6DMGJKLOo6i8CkkZBarepvPpBbh0q7DeyeDmxobo7SxTm9fUw5GTwYk6ijZbB+n69euYOXMm9u/fjzsvlUgkCA0NRWRkJDw9PVtUeEfBgETUud2ZDH7upkLV25SUUf/SA8aGEvg4yBBQZ4iut7MVLE2bdTcnImpDbb5Q5O3bt3H58mUIIdCjRw9069at2cV2RAxIRF1PzWTwItUQ3Z3wpCjVXuhSIgG8bC3gd2fZgdreJhsLEx1UTkR3tMtK2l0ZAxIRATWTwW/ml+LczbsTwc+nFyCzoKze9s5yM9W8pj7d5ejvbs1P0BG1IwakNsaARESNyVFNBq8NTTcVuJZbUm9b127m6O9mjf5u1hjgbg1/Fzlv3kvURhiQ6hgzZgxiYmLw2GOP4fvvv1fbZ2RkhICAAABAUFAQPvvssyYdkwGJiO5XYVklkjIKVUNzZ27k43J2ETT/ChsZSNDLWVYbmrqhv5s1vO0sYMBPzxG1GANSHYcOHUJRURG2bt2qFZDs7OyQk5Nz38dkQCKi1lBQVomzNxRISMvHqdR8JKTlI6eoXKudlZkR+tX2Mt152HJojui+tclK2h1VcHAwYmJidF0GEZEWKzNjDPexw3AfOwB35zQlpOUjoTYwnb2pQEFZFWIv5SD20t3/oXOzMVf1MPV3s4a/ixWH5ohaic4D0uHDh/Hvf/8b8fHxyMjIwM6dOxEeHq7WJjIyEv/+97+RkZEBf39/rFmzBiNGjGiV8xcUFCAwMBDm5uZYtmwZHnnkkVY5LhFRc0gkErh2k8K1mxRP93UBAFRWK3ExsxCnVKHpNq5kFyMtrxRpeaX46XQ6gJqhud7OVnd7mdyt4WXLoTmi5tB5QCouLka/fv3wwgsvYOzYsVr7t2/fjvnz5yMyMhLDhw/Hhg0bEBYWhsTERLi7uwMAAgMDUV6u3SV94MABuLi4NHr+a9euwcXFBefOncNTTz2Fs2fP1tvlVl5ernaOgoKC+71UIqJmMTY0UN1/bvKDHgBqhubOpCmQkHa7prcpLR85RRU4e1OBszcV+PL4dQB3h+YG1Aam/m7duNQAURPo1RwkiUSi1YM0ZMgQDBw4EFFRUaptvXv3Rnh4OFasWNHkY8fExOCTTz7RmoNUV1hYGN5//30EBQVp7VuyZAmWLl2qtZ1zkIhIHwghcON2qSosJaTl49xNBcqrlFpt3W2kar1Mfs4cmqOuo1PMQaqoqEB8fDzeeustte0hISE4evRoi49/+/ZtSKVSmJqa4saNG0hMTIS3t3e9bRcuXIgFCxaonhcUFMDNza3FNRARtQaJRAI3GyncbKQY3e/u0NyFjEIkpN2uGZ5Ly8fV7GKk5pUgNa8Eu2uH5owNJfC7MzRX28vkaSvljXqpS9PrgJSTk4Pq6mqte7s5OjoiMzOzyccJDQ3FyZMnUVxcDFdXV+zcuRODBg1CUlIS/vGPf8DAwAASiQRr166FjY1NvccwNTWFqSk/MUJEHYexoQH6uMrRx1WOyUNrtilKKnHm5t0J4Alp+cgtrsDpGwqcvqHA1mM1Q3Nyc2PVp+YG1P7bjUNz1IXodUC6Q/P/YoQQ9/V/Nvv37693+7Bhw3D27NkW1UZE1JHIpcYY0cMeI3rYA7g7NFd3Avi52tunHE7OxuHkbNVrPWylassM+LlY8Sa91GnpdUCys7ODoaGhVm9RVlaWVq8SERHdv7pDc3+rHZqrqFLiQmaB2lIDV3OKcT23BNdzS/BjQs3QnImhAXq7WGGguzUGe9pgkJcNb5tCnYZeByQTExMEBgYiOjoaY8aMUW2Pjo7GM888o8PKiIg6LxMjA/R1tUZfV2v8vc7QXMKNfJyuMwk8r7gCp9Nqtm0+cg0A4G1vgSFeNhjkaYPBXjZw7SbV3YUQtYDOA1JRUREuX76sep6SkoKEhATY2NjA3d0dCxYswOTJkxEUFIShQ4di48aNSE1NxYwZM3RYNRFR1yKXGuMRX3s84nt3aC4trxSn0m4j/vptxKXk4UJmIa5mF+NqdjH+F5cGAOhubY5Bnt0w2MsWg7264QF7S07+pg5B5x/zj4mJQXBwsNb2KVOmYMuWLQBqFopctWoVMjIyEBAQgNWrV+Phhx9u50rV8VYjRETq8ksqcOLabcRdy0NcSh7O3VSgSqn+FmNrYYKg2sA0xMsGvZ2tYMiFLKkd8V5sbYwBiYiocSUVVTiVmo8/U/IQl5KLU6n5WusyWZoaIdCjGwZ71QzJ9XWVc+I3tSkGpDbGgEREdH8qqpQ4ezMfcSm3EZeSixPXb6OwrEqtjYmRAfq7WavmMQ306AZLU53PBqFOhAGpjTEgERG1TLVS4EJmAeJS8vBX7bBcTlGFWhtDAwn8XawwuHbS9yBPG67HRC3CgNTGGJCIiFqXEAIpOcWIS6kJS3HX8nDjdqlWO19HS9Wn5AZ72cBZbq6DaqmjYkBqYwxIRERtLz2/FH9dy6udx5SHy1lFWm3cbMwx2LPmU3KDvWx5mxRqFANSG2NAIiJqf7lF5fjr2m3VkNz5dAU0PigHO0tTDPG6OyTXy0kGA35SjmoxILUxBiQiIt0rLKvEydR8xKXk4q+U20hIy0dFtfon5azMjBBUZw5Tn+5ymBgZ6Khi0jUGpDbGgEREpH/KKqtxOi1fNSx38vptFFdUq7UxMzbAQPduGORpgyFeNhjg3g3mJlxaoKtgQGpjDEhERPqvqlqJxIwC1cTvv67l4XZJpVobIwMJ+rjKMcTLFg/52CHIsxvMjBmYOisGpDbWVgEpuyQb3yV/h+d8n4O91L7VjktERIBSKXAluwh/1llaIENRptbG1MgAQ7xtMcLHDiN87dDTUcZJ350IA1Iba6uAlJibiIg9Edj+9Hb42fq12nGJiEibEAI3bpfiz5Q8HLuSi9hL2cgqLFdrYy8zxQgfOzzUo+bhIDPTUbXUGpr6/s3lSYmIqMuSSCRws5HCzUaKcYGuEELgUlYRDidnI/ZSDv5MyUV2YTl+OHUTP5y6CQDo5STDiB52eKiHPQZ72nD+UifFgKQHskuykV2aDQBIyk1S+xcA7M3tOdxGRNQOJBIJfB1l8HWU4cUR3iivqkb8tduIvZyD2EvZOHezABcyC3EhsxCfxqbAxMgAgzy7YUQPezzkYwc/ZysuKdBJcIitmVpziC0yIRJRp6Ma3D+z30zM6j+rRecgIqKWyy0qx5ErufjjUk0Pk+b8JVsLk5qhOB87jOhhDyc5h+P0DecgtbHWDEiaPUhLji3BkqFL0Nu2NwD2IBER6SMhBK5kFyO2Niwdv5qLEo0lBXo4WGJED3uM6GGHId42kJpw4EbXOAepA7GXageg3ra9OUmbiEiPSSQS+DhYwsfBEi8M90JFlRInU2/jj0s1w3FnbipwKasIl7KK8PmRFBgbShDo0U0VmAJc5ByO02MMSERERK3AxMgAD3rb4kFvW7wW2hO3iytw9Eou/ricjcPJObiZX4rjV/Nw/Goe/r3/IrpJjTHcx0414bu7NW+6q084xNZMXAfp3jrTtRARtYQQAtdySxB7qSYsHb+ai6LyKrU23vYWeLh2sveDD9jC0pR9GG2Bc5DaGFfSvjeu6UREVL/KaiUS0vIRWzscdzotX+2mu0YGEgx071bbu2SHvq7WMORwXKvgHCQiIiI9ZWxogEGeNTfPXTDKF4rSShy7klMbmHKQmleCuGt5iLuWh/9EJ0NuboxhD9iq5i+52Uh1fQmdHgMStSqu6UREdP/k5sZ4IsAZTwQ4AwCu5xarepeOXsmForQSv5zLxC/nMgEAnrbSmrWXethh6AO2sDIz1mX5nRKH2JqJQ2z145pOREStq6paidM3FKpPx51Ky0d1nfE4QwMJ+rtZY0SPmgnf/VytYWRooMOK9RvnILUxBqT6cU0nIqK2VVBWieNXcvHH5ZrhuJScYrX9MjMjBPd0wCg/R4zsaQ8Ze5fUcA4S6QTXdCIialtWZsYI8XdCiL8TACAtr6Q2LGXjyOWa4bjdp9Ox+3Q6jA0leNDbFiH+ThjV25Ere98HBiQiIqIOzM1GiomD3TFxsDuqlQKnUm8jOvEWohNv4WpOsWri9zu7zqGvqxyjejtilL8jejrKIJHwk3EN4RBbM3GI7d64DhIRkW5dziqqDUuZOJWWj7rv+G425hjV2wmj/BwxyLNbl5m3xDlIbYwBiYiIOpKswjL8lpSF6MRb+ONyDiqqlKp91lJjPNrLASF+jhjRwx4WnXiRSgakNsaA1HWwJ4yIOpvi8irEXsrGgcRbOHghC/kllap9JkYGeMjHDqP8HPFYbwc4yDrXvCUGpDbGgNR1cEVwIurMqqqVOHH97ryl1LwS1T6JBOjvZo1Rfo4I8XOCj4OlDittHfwUGxEREd2TkeHdm+y+/VRvJN8qQnRiJg4k3sKZGwqcSs3HqdR8rNp3Ed52Fhjl54hRfo4Y4N6tU9/+hAGJqB5cEZyIuiKJRIKeTjL0dJJhzqM9kKkoQ3RSTc/SsSs5uJpTjA2Hr2LD4auwtTDBY70dMMrPCSN62MHM2FDX5bcqDrE1E4fYOjeuCE5EpK6wrBK/J2cjunbeUmFZlWqfmbEBHu5hXztvyRE2FiY6rLRxnIPUxhiQOjeuCE5E1LDKaiXiUvIQnXgLB85nIl1RptpnIAGCPGxUQ3GedhY6rFQbA1IbY0DqOjhJm4ioYUIInE8vUE3yTswoUNvfw8GyZpK3vxP6dpfDQMfzljhJm4iIiNqcRCJBQHc5ArrL8c9RvrhxuwS/Jt5CdNIt/Hk1D5eyinApqwiRMVfgIDPF47U9S8MesIWpkf7OW2IPUjOxB6nr4DpIRETNoyipRExyFg4k3kLMhSwUV1Sr9lmYGOKRnjXzlh7t6Qi5tH1uqsshtjbGgERERNR05VXVOHYlF9GJt/Br0i3cKihX7TM0kGCwpw1C/Gt6l1y7SdusDgakNsaARB0Ne8KISF8olQJnbypU85Yu3ipU29/b2Qqj/Bwxuq8zejjKWvXcnINERGqyS7MRdToKI91GMiARkU4ZGEjQz80a/dys8VpoT1zPLVaFpb+u5SEpowBJGQUwMZS0ekBqKgYkIiIi0ikPWwu8OMIbL47wxu3iChy8kIUDiZkI9XfSWU0MSESdGFcEJ6KOppuFCcYGumJsoKtO62BAIurEvkv+TmtF8CXHlqi+5orgRET1Y0Ai6sSe830OI91GAmh4RXAiItLGgETUidlLtYfQetv25orgRET3YKDrAoiIiIj0TZcISGPGjEG3bt0wbtw4te0XL15E//79VQ9zc3Ps2rVLN0UStTF7c3vM7DeTw2pERE3QJRaKPHToEIqKirB161Z8//339bYpKiqCp6cnrl+/DguLe995mAtFEhERdTxNff/uEj1IwcHBkMkaX2hq9+7deOyxx5oUjoiIiKhz03lAOnz4MEaPHg0XFxdIJJJ6h7giIyPh5eUFMzMzBAYGIjY2ttXr+PbbbxEREdHqxyUiIqKOR+cBqbi4GP369cMnn3xS7/7t27dj/vz5WLRoEU6dOoURI0YgLCwMqampqjaBgYEICAjQeqSnpzephoKCAhw5cgRPPvlkg23Ky8tRUFCg9iCi9pddko3IhEhkl2TruhQi6sR0/jH/sLAwhIWFNbj/o48+wvTp0/Hiiy8CANasWYP9+/cjKioKK1asAADEx8e3qIYff/wRoaGhMDMza7DNihUrsHTp0hadh4hajveUI6L2oPMepMZUVFQgPj4eISEhattDQkJw9OjRVjtPU4bXFi5cCIVCoXqkpaW12vmJiIhIv+i8B6kxOTk5qK6uhqOjo9p2R0dHZGZmNvk4oaGhOHnyJIqLi+Hq6oqdO3di0KBBAACFQoG4uDjs2LGj0WOYmprC1NT0/i+CiFqM95Qjovam1wHpDolEovZcCKG1rTH79+9vcJ9cLsetW7eaXRsRtT3eU46I2pteByQ7OzsYGhpq9RZlZWVp9Srpq+rqalRWVuq6DOrkTExMYGCg1yPmLcJ7yhFRe9PrgGRiYoLAwEBER0djzJgxqu3R0dF45plndFjZvQkhkJmZifz8fF2XQl2AgYEBvLy8YGJioutS2gTvKUdE7U3nAamoqAiXL19WPU9JSUFCQgJsbGzg7u6OBQsWYPLkyQgKCsLQoUOxceNGpKamYsaMGTqs+t7uhCMHBwdIpdL7GhIkuh9KpRLp6enIyMiAu7s7f9eIiFqBzgPSiRMnEBwcrHq+YMECAMCUKVOwZcsWREREIDc3F++99x4yMjIQEBCAvXv3wsPDQ1cl31N1dbUqHNna2uq6HOoC7O3tkZ6ejqqqKhgbG+u6nDbFe8oRUXvoEvdiawuN3culrKwMKSkp8PT0hLm5uY4qpK6ktLQU165dU604T0RE9eO92PQAhzqovfB3jYiodTEgEREREWlgQCIiIiLSwIBEAGqGaBp7TJ06VdU2JCQEhoaGOH78uNZxpk6dqnqNkZER3N3dMXPmTNy+fVutnaenp6qdubk5PD09MX78eBw8eFCt3bVr1yCRSJCQkKDatmPHDgwZMgRyuRwymQz+/v549dVXW/X7QdTWeNNdIv3GgEQAgIyMDNVjzZo1sLKyUtu2du1aAEBqaiqOHTuGOXPmYNOmTfUe64knnkBGRgauXbuGzz77DD/99BNmzdJe5fjOJxMvXryIL774AtbW1nj88cexbNmyBuv89ddfMWHCBIwbNw5xcXGIj4/HsmXLUFFR0TrfCKJ2cuemu3duoUJE+oUBiQAATk5OqodcLodEItHaBgCbN2/G008/jZkzZ2L79u0oLi7WOpapqSmcnJzg6uqKkJAQRERE4MCBA1rtZDIZnJyc4O7ujocffhgbN27EO++8g3fffRcXL16st849e/bgoYcewuuvv46ePXvC19cX4eHh+Pjjjxu9vps3byIiIgLdunWDra0tnnnmGVy7dg0AcOHCBUilUmzbtk3V/ocffoCZmRnOnj0LACgvL8cbb7wBNzc3mJqaokePHg0GRCIi6vgYkNqBEAIlFVU6ebTmKg5CCGzevBnPP/88evXqBV9fX3z77beNvubq1avYt29fk9fmeeWVVyCEwI8//ljvficnJ5w/fx7nzp1rct0lJSUIDg6GpaUlDh8+jD/++AOWlpZ44oknUFFRgV69euHDDz/ErFmzcP36daSnp+Oll17C//3f/6FPnz4AgL///e/45ptvsG7dOiQlJeG///0vLC0tm1wDEVAzrJaYm4jE3ES1m+7e2cbhNiL9ofOFIruC0spq+L3b8A1z21Lie6GQmrTOj/nXX39FSUkJQkNDAQDPP/88Nm3ahBdeeEGt3Z49e2BpaYnq6mqUlZUBAD766KMmncPGxgYODg6q3h1Nc+fORWxsLPr06QMPDw88+OCDCAkJwaRJk2Bqalrva7755hsYGBjgs88+U30cfvPmzbC2tkZMTAxCQkIwa9Ys7N27F5MnT1bd4uaVV14BACQnJ+Pbb79FdHQ0Hn/8cQCAt7d3k66HqC7edJeo42BAoibbtGkTIiIiYGRU82szceJEvP7667h48SJ69uypahccHIyoqCiUlJTgs88+Q3JyMubOndvk8wghGlzXx8LCAj///DOuXLmCQ4cO4fjx43j11Vexdu1aHDt2DFKpVOs18fHxuHz5MmQymdr2srIyXLlyRfX8888/h6+vLwwMDHDu3DlVDQkJCTA0NMQjjzzS5Gsgqg9vukvUcTAgtQNzY0Mkvheqs3O3hry8POzatQuVlZWIirr7f8DV1dX4/PPPsXLlStU2CwsL+Pj4AADWrVuH4OBgLF26FO+///49z5Obm4vs7Gx4eXk12u6BBx7AAw88gBdffBGLFi2Cr68vtm/frtWbBdTcqywwMBBff/211j57+7tvSKdPn0ZxcTEMDAyQmZkJFxcXAOBq6NRqeNNdoo6DAakdSCSSVhvm0pWvv/4arq6u2LVrl9r23377DStWrMCyZctUPUuaFi9ejLCwMMycOVMVOhqydu1aGBgYIDw8vMm1eXp6QiqV1jthHAAGDhyI7du3w8HBocFl5fPy8jB16lQsWrQImZmZmDRpEk6ePAlzc3P06dMHSqUSv//+u2qIjYiIOjdO0qYm2bRpE8aNG4eAgAC1x7Rp05Cfn4+ff/65wdeOHDkS/v7+WL58udr2wsJCZGZmIi0tDYcPH8bLL7+MDz74AMuWLVP1QGlasmQJ3njjDcTExCAlJQWnTp3CtGnTUFlZiVGjRtX7mkmTJsHOzg7PPPMMYmNjkZKSgt9//x2vvPIKbty4AQCYMWMG3Nzc8Pbbb+Ojjz6CEAKvvfYagJoANmXKFEybNg27du1CSkoKYmJi7jlBnagxvOkukX5jQKJ7io+Px+nTpzF27FitfTKZDCEhIff8yPuCBQvw6aefIi0tTbXt3XffhbOzM3x8fDB58mQoFAr89ttvePPNNxs8ziOPPIKrV6/i73//O3r16oWwsDBkZmbiwIEDavOg6pJKpTh8+DDc3d3x7LPPonfv3pg2bRpKS0thZWWFL774Anv37sWXX34JIyMjSKVSfP311/jss8+wd+9eAEBUVBTGjRuHWbNmoVevXnjppZca7LEiagp7qT1m9Z+lNeRGRPpBIlrzc+BdSGN3Ay4rK0NKSgrvrE7thr9zRERN09j7d13sQSIiIiLSwIBEREREpIEBiYiIiEgDAxIRETVbdkk2IhMieZsU6nQYkIiIqNmyS7MRdToK2aUMSNS5MCARERERaejYyzsTEVG7yy7JVvUYJeUmqf0L1CyCyfWdqKNjQCIiovvyXfJ3iDodpbZtybElqq9n9puJWf1ntXNVRK2LAYmIiO7Lc77PYaTbSAA1PUdLji3BkqFL0Nu2NwDw9inUKTAgUZd07do1eHl54dSpU+jfv7+uyyHqUOyl2kNovW17w8/WT0cVEbU+TtImAIBEImn0MXXqVFXbkJAQGBoa4vjx41rHmTp1quo1RkZGcHd3x8yZM3H79m21dp6enqp25ubm8PT0xPjx43Hw4EG1dteuXYNEIkFCQoJq244dOzBkyBDI5XLIZDL4+/vj1VdfbdXvBxERdW0MSAQAyMjIUD3WrFkDKysrtW1r164FAKSmpuLYsWOYM2dOgzeofeKJJ5CRkYFr167hs88+w08//YRZs7TnI7z33nvIyMjAxYsX8cUXX8Da2hqPP/44li1b1mCdv/76KyZMmIBx48YhLi4O8fHxWLZsGSoqKlrnG0FE98Xe3B4z+83ksBp1OgxI7UEIoKJYN48m3ovYyclJ9ZDL5ZBIJFrbAGDz5s14+umnMXPmTGzfvr3eO9qbmprCyckJrq6uCAkJQUREBA4cOKDVTiaTwcnJCe7u7nj44YexceNGvPPOO3j33Xdx8eLFeuvcs2cPHnroIbz++uvo2bMnfH19ER4ejo8//rjR64uLi8OAAQNgZmaGoKAgnDp1SqtNYmIinnzySVhaWsLR0RGTJ09GTk6Oar8QAqtWrYK3tzfMzc3Rr18/fP/996p9jz/+OJ544gncuf9zfn4+3N3dsWjRItUxdu/ejaCgIJiZmcHOzg7PPvtso3UT6Tt7qT1m9Z/FT61Rp8M5SO2hsgRY7qKbc/8rHTCxaJVDCSGwefNmrF+/Hr169YKvry++/fZbvPDCCw2+5urVq9i3bx+MjY2bdI5XXnkF77//Pn788Ue88cYbWvudnJywbds2nDt3DgEBAU06ZnFxMZ5++mk8+uij+Oqrr5CSkoJXXnlFrU1GRgYeeeQRvPTSS/joo49QWlqKN998U23Y7+2338YPP/yAqKgo9OjRA4cPH8bzzz8Pe3t7PPLII9i6dSv69OmDdevW4ZVXXsGMGTPg6OiIJUuWAAB+/vlnPPvss1i0aBG+/PJLVFRU4Oeff27SNRARUftiQKIm+/XXX1FSUoLQ0FAAwPPPP49NmzZpBaQ9e/bA0tIS1dXVKCsrAwB89NFHTTqHjY0NHBwccO3atXr3z507F7GxsejTpw88PDzw4IMPIiQkBJMmTYKpqWm9r/n6669RXV2Nzz//HFKpFP7+/rhx4wZmzpypahMVFYWBAwdi+fLlqm2ff/453NzckJycjO7du+Ojjz7CwYMHMXToUACAt7c3/vjjD2zYsAGPPPIIunfvjg0bNmDy5Mm4desWfvrpJ5w6dUoVDpctW4YJEyZg6dKlqnP069evSd8XIiJqXwxI7cFYWtOTo6tzt5JNmzYhIiICRkY1vzYTJ07E66+/josXL6Jnz56qdsHBwYiKikJJSQk+++wzJCcnY+7cuU0+jxACEomk3n0WFhb4+eefceXKFRw6dAjHjx/Hq6++irVr1+LYsWOQSrWvNykpCf369VPbdyfk3BEfH49Dhw7B0tJS6/VXrlyBQqFAWVkZRo0apbavoqICAwYMUD1/7rnnsHPnTqxYsQJRUVHw9fVV7UtISMBLL73UtG8CERHpFANSe5BIWm2YS1fy8vKwa9cuVFZWIirq7gJxd3pmVq5cqdpmYWEBHx8fAMC6desQHByMpUuX4v3337/neXJzc5GdnQ0vL69G2z3wwAN44IEH8OKLL2LRokXw9fXF9u3b6x3uE02Yh6VUKjF69Gi167jD2dkZ586dA1AzTNa9e3e1/XV7rkpKShAfHw9DQ0NcunRJrZ25ufk96yAiIv3ASdrUJF9//TVcXV1x+vRpJCQkqB5r1qzB1q1bUVVV1eBrFy9ejA8//BDp6ffuRVu7di0MDAwQHh7e5No8PT0hlUrrnTAOAH5+fjh9+jRKS0tV2zSXKBg4cCDOnz8PT09P+Pj4qD0sLCzg5+cHU1NTpKamau13c3NTHefVV1+FgYEBfvnlF6xbt05t2YK+ffvit99+a/J1ERGR7jAgUZNs2rQJ48aNQ0BAgNpj2rRpyM/Pb3Sy8ciRI+Hv7682vwcACgsLkZmZibS0NBw+fBgvv/wyPvjgAyxbtkzVA6VpyZIleOONNxATE4OUlBScOnUK06ZNQ2Vlpdbw1x3/7//9PxgYGGD69OlITEzE3r178eGHH6q1mT17NvLy8jBx4kTExcXh6tWrOHDgAKZNm4bq6mrIZDK89tpr+Oc//4mtW7fiypUrOHXqFNavX4+tW7cCqOld+vzzz/H1119j1KhReOuttzBlyhTVGlCLFy/G//73PyxevBhJSUk4e/YsVq1a1eSfARG1neySbEQmRCK7JFvXpZC+ENQsCoVCABAKhUJrX2lpqUhMTBSlpaU6qKzlNm/eLORyuer5iRMnBAARFxdXb/vRo0eL0aNHCyGEmDJlinjmmWe02nz99dfCxMREpKamCiGE8PDwEAAEAGFiYiLc3d3F+PHjxcGDB9Vel5KSIgCIU6dOCSGEOHjwoBg7dqxwc3MTJiYmwtHRUTzxxBMiNja20Ws6duyY6NevnzAxMRH9+/cXO3bsUDuuEEIkJyeLMWPGCGtra2Fubi569eol5s+fL5RKpRBCCKVSKdauXSt69uwpjI2Nhb29vQgNDRW///67yMrKEo6OjmL58uWq41VWVorBgweL8ePHq7bt2LFD9O/fX5iYmAg7Ozvx7LPPNlp3U3X03zkiXTufc14EbAkQ53PO67oUamONvX/XJRGiiQvlkJqCggLI5XIoFApYWVmp7SsrK0NKSgq8vLxgZmamowqpK+HvHFHLJOYmImJPBLY/vZ23TOnkGnv/rouTtImIqEvKLslGdmnNkFpSbpLav0DNKuFcALPrYkAiIqIu6bvk7xB1Okpt25JjS1Rfz+w3E7P6a98miboGBiQiIuqSnvN9DiPdRgKo6TlacmwJlgxdgt62vQGA95fr4hiQiIioS7KXag+h9bbtzTlIBIAf8yciIiLSwoBERERdnr25PWb2m8lhNVLhEBsREXV59lJ7TsgmNexBIiIiItLQJQLSmDFj0K1bN4wbN05r34cffgh/f38EBATgq6++0kF1REREpG+6RECaN28evvjiC63tZ8+exbZt2xAfH48TJ04gKioK+fn57V9gByORSLBr1677ft2SJUvQv39/nZybiIjofnSJgBQcHAyZTKa1PSkpCcOGDYOZmRnMzMzQv39/7Nu3TwcVNqy9b6CYmZmJuXPnwtvbG6ampnBzc8Po0aNb5S70r732WpOP01CYysjIQFhYWItrISIiaozOA9Lhw4cxevRouLi4NNg7EBkZqbrHVGBgIGJjY1vl3AEBATh06BDy8/ORn5+PgwcP4ubNm61y7NaSXZqNqNNRquXw29K1a9cQGBiIgwcPYtWqVTh79iz27duH4OBgzJ49u9nHFUKgqqoKlpaWsLW1bVGNTk5OMDU1bdExiIiI7kXnAam4uBj9+vXDJ598Uu/+7du3Y/78+Vi0aBFOnTqFESNGICwsDKmpqao2gYGBCAgI0Hqkp6c3em4/Pz/MmzcPjz76KMaMGYNBgwbByKj+D/aVl5ejoKBA7dHZzJo1CxKJBHFxcRg3bhx8fX3h7++PBQsW4Pjx42ptc3JyMGbMGEilUvTo0QO7d+9W7YuJiYFEIsH+/fsRFBQEU1NTxMbGavUKxcTEYPDgwbCwsIC1tTWGDx+O69evY8uWLVi6dClOnz4NiUQCiUSCLVu2ANAeYnvzzTfh6+sLqVQKb29vvPPOO6isrFTtv3POL7/8Ep6enpDL5ZgwYQIKCwsb/V4cPXoUDz/8MMzNzeHm5oZ58+ahuLgYAPDFF1/A0tISly5dUrWfO3cufH19VW1u3LiBCRMmwMbGBhYWFggKCsKff/55Xz8PIiLSIaFHAIidO3eqbRs8eLCYMWOG2rZevXqJt956676OfejQITF27NhG20yfPl3s2bOn3n2LFy8WALQeCoVCq21paalITEwUpaWl91XjHVnFWeJ8znlxPue8+P7i9yJgS4D4/uL3qm1ZxVnNOm5jcnNzhUQiEcuXL79nWwDC1dVVbNu2TVy6dEnMmzdPWFpaitzcXCFEzfcagOjbt684cOCAuHz5ssjJyRGLFy8W/fr1E0IIUVlZKeRyuXjttdfE5cuXRWJiotiyZYu4fv26KCkpEa+++qrw9/cXGRkZIiMjQ5SUlKjOXfd35P333xdHjhwRKSkpYvfu3cLR0VGsXLlStX/x4sXC0tJSPPvss+Ls2bPi8OHDwsnJSfzrX/9q8PrOnDkjLC0txerVq0VycrI4cuSIGDBggJg6daqqzXPPPScGDRokKisrxS+//CKMjY1FXFycEEKIwsJC4e3tLUaMGCFiY2PFpUuXxPbt28XRo0eb/PO4Xy39nSMi6ioUCkWD79916XVAKi8vF4aGhuKHH35Qazdv3jzx8MMP39exGwpIt27dEkIIceHCBdGnTx9RWVlZ7+vLysqEQqFQPdLS0tosIK0/tV4EbAlo8LH+1PpmHbcxf/75pwCg9b2uDwDx9ttvq54XFRUJiUQifvnlFyHE3YC0a9cutdfVDUi5ubkCgIiJian3HHXbap5bM0TXtWrVKhEYGKh2HKlUKgoKClTbXn/9dTFkyJAGjzF58mTx8ssvq22LjY0VBgYGqp9pXl6ecHV1FTNnzhSOjo7igw8+ULXdsGGDkMlkqsDYHhiQiIiapqkBSa8XiszJyUF1dTUcHR3Vtjs6OiIzM7PJxwkNDcXJkydRXFwMV1dX7Ny5E4MGDQIAhIeHIz8/HxYWFti8eXODQ2ympqbtNvdFFzdQFEIAqBnCaoq+ffuqvrawsIBMJkNWVpZam6CgoAZfb2Njg6lTpyI0NBSjRo3C448/jvHjx8PZ2fm+6v7++++xZs0aXL58GUVFRaiqqoKVlZVaG09PT7VJ+s7Ozlq11hUfH4/Lly/j66+/Vm0TQkCpVCIlJQW9e/dGt27dsGnTJoSGhmLYsGF46623VG0TEhIwYMAA2NjY3Ne1EBG1VHZJNr5L/g7P+T6ndZ85uj96HZDu0HzTFkI0+Y0cAPbv39/gvqNHjza7rraiixso9ujRAxKJBElJSQgPD79ne2NjY7XnEokESqVSbZuFhUWjx9i8eTPmzZuHffv2Yfv27Xj77bcRHR2NBx98sEk1Hz9+HBMmTMDSpUsRGhoKuVyOb775Bv/5z3/uu9a6lEol/vGPf2DevHla+9zd3VVfHz58GIaGhkhPT0dxcbEqmJmbmzepfiKi1nbngz0j3UYyILWQzidpN8bOzg6GhoZavUVZWVlavUrUMjY2NggNDcX69etVE43raqv1oQYMGICFCxfi6NGjCAgIwLZt2wAAJiYmqK6ubvS1R44cgYeHBxYtWoSgoCD06NED169fb3FNAwcOxPnz5+Hj46P1MDExAVATrFetWoWffvoJVlZWmDt3rur1ffv2RUJCAvLy8lpcCxER6YZeByQTExMEBgYiOjpabXt0dDSGDRumo6raV3veQDEyMhLV1dUYPHgwduzYgUuXLiEpKQnr1q3D0KFDW/VcKSkpWLhwIY4dO4br16/jwIEDSE5ORu/eNcOInp6eSElJQUJCAnJyclBeXq51DB8fH6SmpuKbb77BlStXsG7dOuzcubPFtb355ps4duwYZs+ejYSEBFy6dAm7d+9WhaDCwkJMnjwZc+fORVhYGLZt24Zvv/0W3333HQBg4sSJcHJyQnh4OI4cOYKrV69ix44dOHbsWItrIyLSlF2SjcTcRCTmJiIpNwlAzfSMO9vaax29zkbnQ2xFRUW4fPmy6vmdN0UbGxu4u7tjwYIFmDx5MoKCgjB06FBs3LgRqampmDFjhg6rbj/teQNFLy8vnDx5EsuWLcOrr76KjIwM2NvbIzAwEFFRUa16LqlUigsXLmDr1q3Izc2Fs7Mz5syZg3/84x8AgLFjx+KHH35AcHAw8vPzsXnzZkydOlXtGM888wz++c9/Ys6cOSgvL8dTTz2Fd955B0uWLGlRbX379sXvv/+ORYsWYcSIERBC4IEHHkBERAQA4JVXXoGFhQWWL18OAPD398fKlSsxY8YMDBs2DN27d8eBAwfw6quv4sknn0RVVRX8/Pywfv36FtVFRFSf75K/Q9Rp9b/RS44tUX09s99M3oi3GSTizuxcHYmJiUFwcLDW9ilTpqjWvomMjMSqVauQkZGBgIAArF69Gg8//HA7V6quoKAAcrkcCoVCa1JwWVkZUlJSVItbErU1/s4RdV3ZJdmqxYQb+mAP5yPd1dj7d10670EaOXIk7pXRZs2ahVmzmH6JiIg06eKDPV2BXs9BIiIiItIFBiQiIqJOoj0/2NPZ6XyIjYiIiFpHe36wp7NjDxIRERGRBgYkIiIiIg0MSEREREQaGJCIiIiINDAgEREREWlgQKL7JpFIsGvXrvt+3ZIlS9C/f3+dnLultmzZAmtr63Y/LxER6QYDkp6rzMpC9sefoDIrq13Ol5mZiblz58Lb2xumpqZwc3PD6NGj8dtvv7X42K+99lqTj9NQmMrIyEBYWFiLayEiImoM10HSc1XZ2chZvx6WjwbD2MGhTc917do1DB8+HNbW1li1ahX69u2LyspK7N+/H7Nnz8aFCxeadVwhBKqrq2FpaQlLS8sW1ejk5NSi1xMRETUFe5BIZdasWZBIJIiLi8O4cePg6+sLf39/LFiwAMePH1drm5OTgzFjxkAqlaJHjx7YvXu3al9MTAwkEgn279+PoKAgmJqaIjY2VqtXKCYmBoMHD4aFhQWsra0xfPhwXL9+HVu2bMHSpUtx+vRpSCQSSCQS1Y2LNYfY3nzzTfj6+kIqlcLb2xvvvPMOKisrVfvvnPPLL7+Ep6cn5HI5JkyYgMLCwka/F1u2bIG7uzukUinGjBmD3NxcrTY//fQTAgMDYWZmBm9vbyxduhRVVVWq/QqFAi+//DIcHBxgZWWFRx99FKdPnwYAZGdnw8nJCcuXL1e1//PPP2FiYoIDBw4AAJRKJVauXAkfHx+YmprC3d0dy5Yta7RuIiJqHQxIeqgyKwul58+j9Px5lCUmAgDKEhNV29piuC0vLw/79u3D7NmzYWFhobVfc/7N0qVLMX78eJw5cwZPPvkkJk2ahLy8PLU2b7zxBlasWIGkpCT07dtXbV9VVRXCw8PxyCOP4MyZMzh27BhefvllSCQSRERE4NVXX4W/vz8yMjKQkZGBiIiIeuuWyWTYsmULEhMTsXbtWnz66adYvXq1WpsrV65g165d2LNnD/bs2YPff/8d//d//9fg9+LPP//EtGnTMGvWLCQkJCA4OBgffPCBWpv9+/fj+eefx7x585CYmIgNGzZgy5YtqgAjhMBTTz2FzMxM7N27F/Hx8Rg4cCAee+wx5OXlwd7eHp9//jmWLFmCEydOoKioCM8//zxmzZqFkJAQAMDChQuxcuVKvPPOO0hMTMS2bdvg6OjYYN1ERNSKBDWLQqEQAIRCodDaV1paKhITE0VpaWmzjp217mOR2LNXg4+sdR+3tHwtf/75pwAgfvjhh3u2BSDefvtt1fOioiIhkUjEL7/8IoQQ4tChQwKA2LVrl9rrFi9eLPr16yeEECI3N1cAEDExMfWeo25bzXPv3LmzwdpWrVolAgMD1Y4jlUpFQUGBatvrr78uhgwZ0uAxJk6cKJ544gm1bREREUIul6uejxgxQixfvlytzZdffimcnZ2FEEL89ttvwsrKSpSVlam1eeCBB8SGDRtUz2fNmiV8fX3FpEmTREBAgOp3pqCgQJiamopPP/20wTrraunvHBGRPskqzhLrT60XWcVZrX7sxt6/6+IcJD1kHTEelo8GA6jpOcp85104vf8ezPz8AABG9q1/E0IhBICaIaymqNsjZGFhAZlMhiyNnq2goKAGX29jY4OpU6ciNDQUo0aNwuOPP47x48fD2dn5vur+/vvvsWbNGly+fBlFRUWoqqqClZWVWhtPT0/IZDLVc2dnZ61a60pKSsKYMWPUtg0dOhT79u1TPY+Pj8dff/2lNuRVXV2NsrIylJSUID4+HkVFRbC1tVU7TmlpKa5cuaJ6/uGHHyIgIADffvstTpw4ATMzM1UN5eXleOyxx+7ju0FE1Dlkl2Yj6nQURrqNhL1UNzfeZUDSQ8YODloTss38/GDu799m5+zRowckEgmSkpIQHh5+z/bGxsZqzyUSCZRKpdq2+obq6tq8eTPmzZuHffv2Yfv27Xj77bcRHR2NBx98sEk1Hz9+HBMmTMDSpUsRGhoKuVyOb775Bv/5z3/uu9a67oTFxiiVSixduhTPPvus1j4zMzMolUo4OzsjJiZGa3/d4cqrV68iPT0dSqUS169fVwVPc3Pze9ZARERthwGJANT06ISGhmL9+vWYN2+eVrjJz89vk3WABgwYgAEDBmDhwoUYOnQotm3bhgcffBAmJiaorq5u9LVHjhyBh4cHFi1apNp2/fr1Ftfk5+enNSld8/nAgQNx8eJF+Pj41HuMgQMHIjMzE0ZGRvD09Ky3TUVFBSZNmoSIiAj06tUL06dPx9mzZ+Ho6IgePXrA3Nwcv/32G1588cUWXxMRkb7LLslGdmk2ACApN0ntXwCwN7dv194kBiQ9Z2RvD7vZs9tkWE1TZGQkhg0bhsGDB+O9995D3759UVVVhejoaERFRSEpKeneB2milJQUbNy4EX/729/g4uKCixcvIjk5GX//+98B1AyLpaSkICEhAa6urpDJZDA1NVU7ho+PD1JTU/HNN99g0KBB+Pnnn7Fz584W1zZv3jwMGzYMq1atQnh4OA4cOKA2vAYA7777Lp5++mm4ubnhueeeg4GBAc6cOYOzZ8/igw8+wOOPP46hQ4ciPDwcK1euRM+ePZGeno69e/ciPDwcQUFBWLRoERQKBdatWwdLS0v88ssvmD59Ovbs2QMzMzO8+eabeOONN2BiYoLhw4cjOzsb58+fx/Tp01t8jURE+ua75O8QdTpKbduSY0tUX8/sNxOz+s9qv4JaffZTF9GWk7R1KT09XcyePVt4eHgIExMT0b17d/G3v/1NHDp0SNUG9UyUlsvlYvPmzUKIu5O0b9++rdam7sTrzMxMER4eLpydnYWJiYnw8PAQ7777rqiurhZCCFFWVibGjh0rrK2tBQDVsTXP/frrrwtbW1thaWkpIiIixOrVq9UmU9c32Xv16tXCw8Oj0e/Dpk2bhKurqzA3NxejR48WH374odpxhRBi3759YtiwYcLc3FxYWVmJwYMHi40bN6r2FxQUiLlz5woXFxdhbGws3NzcxKRJk0Rqaqo4dOiQMDIyErGxsar2169fF3K5XERGRgohhKiurhYffPCB8PDwEMbGxsLd3V1rYvgdHfl3johIiJqJ2edzzovzOefF9xe/FwFbAsT3F79XbWutCdtNnaQtEaIJEy5IS0FBAeRyORQKhdak4LKyMqSkpMDLy0s16ZaoLfF3jog6k8TcRETsicD2p7fDz9avVY/d2Pt3XVwHiYiIiEgDAxIRERHpFXtze8zsNxP25rr5iD/ASdpERESkZ+yl9u07Ibse7EEiIiIi0sCA1IY4/53aC3/XiIhaFwNSG7izcnNJSYmOK6GuoqKiAgBgaGio40qIiDoHzkFqA4aGhrC2tlbd70sqlTb5HmdE90upVCI7OxtSqRRGRvxPmoioNfCvaRtxcnICgEZvikrUWgwMDODu7s4gTkTUShiQ2ohEIoGzszMcHBxQWVmp63KokzMxMYGBAUfMiYhaCwNSGzM0NOS8ECIiog6G/8tJREREpIEBiYiIiEgDAxIRERGRBs5BaqY7C/MVFBTouBIiIiJqqjvv2/daYJcBqZkKCwsBAG5ubjquhIiIiO5XYWEh5HJ5g/slgvcoaBalUon09HTIZLJWXXumoKAAbm5uSEtLg5WVVasdl5qPPxP9wp+HfuHPQ7/w53FvQggUFhbCxcWl0eVR2IPUTAYGBnB1dW2z41tZWfGXW8/wZ6Jf+PPQL/x56Bf+PBrXWM/RHZykTURERKSBAYmIiIhIAwOSnjE1NcXixYthamqq61KoFn8m+oU/D/3Cn4d+4c+j9XCSNhEREZEG9iARERERaWBAIiIiItLAgERERESkgQGJiIiISAMDkp6JjIyEl5cXzMzMEBgYiNjYWF2X1CWtWLECgwYNgkwmg4ODA8LDw3Hx4kVdl0W1VqxYAYlEgvnz5+u6lC7t5s2beP7552FrawupVIr+/fsjPj5e12V1SVVVVXj77bfh5eUFc3NzeHt747333oNSqdR1aR0WA5Ie2b59O+bPn49Fixbh1KlTGDFiBMLCwpCamqrr0rqc33//HbNnz8bx48cRHR2NqqoqhISEoLi4WNeldXl//fUXNm7ciL59++q6lC7t9u3bGD58OIyNjfHLL78gMTER//nPf2Btba3r0rqklStX4r///S8++eQTJCUlYdWqVfj3v/+Njz/+WNeldVj8mL8eGTJkCAYOHIioqCjVtt69eyM8PBwrVqzQYWWUnZ0NBwcH/P7773j44Yd1XU6XVVRUhIEDByIyMhIffPAB+vfvjzVr1ui6rC7prbfewpEjR9jLrSeefvppODo6YtOmTaptY8eOhVQqxZdffqnDyjou9iDpiYqKCsTHxyMkJERte0hICI4ePaqjqugOhUIBALCxsdFxJV3b7Nmz8dRTT+Hxxx/XdSld3u7duxEUFITnnnsODg4OGDBgAD799FNdl9VlPfTQQ/jtt9+QnJwMADh9+jT++OMPPPnkkzqurOPizWr1RE5ODqqrq+Ho6Ki23dHREZmZmTqqioCaOz8vWLAADz30EAICAnRdTpf1zTff4OTJk/jrr790XQoBuHr1KqKiorBgwQL861//QlxcHObNmwdTU1P8/e9/13V5Xc6bb74JhUKBXr16wdDQENXV1Vi2bBkmTpyo69I6LAYkPSORSNSeCyG0tlH7mjNnDs6cOYM//vhD16V0WWlpaXjllVdw4MABmJmZ6bocAqBUKhEUFITly5cDAAYMGIDz588jKiqKAUkHtm/fjq+++grbtm2Dv78/EhISMH/+fLi4uGDKlCm6Lq9DYkDSE3Z2djA0NNTqLcrKytLqVaL2M3fuXOzevRuHDx+Gq6urrsvpsuLj45GVlYXAwEDVturqahw+fBiffPIJysvLYWhoqMMKux5nZ2f4+fmpbevduzd27Niho4q6ttdffx1vvfUWJkyYAADo06cPrl+/jhUrVjAgNRPnIOkJExMTBAYGIjo6Wm17dHQ0hg0bpqOqui4hBObMmYMffvgBBw8ehJeXl65L6tIee+wxnD17FgkJCapHUFAQJk2ahISEBIYjHRg+fLjW0hfJycnw8PDQUUVdW0lJCQwM1N/SDQ0N+TH/FmAPkh5ZsGABJk+ejKCgIAwdOhQbN25EamoqZsyYoevSupzZs2dj27Zt+PHHHyGTyVQ9e3K5HObm5jquruuRyWRa878sLCxga2vLeWE68s9//hPDhg3D8uXLMX78eMTFxWHjxo3YuHGjrkvrkkaPHo1ly5bB3d0d/v7+OHXqFD766CNMmzZN16V1WPyYv56JjIzEqlWrkJGRgYCAAKxevZofK9eBhuZ9bd68GVOnTm3fYqheI0eO5Mf8dWzPnj1YuHAhLl26BC8vLyxYsAAvvfSSrsvqkgoLC/HOO+9g586dyMrKgouLCyZOnIh3330XJiYmui6vQ2JAIiIiItLAOUhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhE1GVJJBLs2rWrRccYOXIk5s+fr3ru6enJ1b2JOgEGJCLqtLKysvCPf/wD7u7uMDU1hZOTE0JDQ3Hs2DFdl0ZEeo43qyWiTmvs2LGorKzE1q1b4e3tjVu3buG3335DXl6erksjIj3HHiQi6pTy8/Pxxx9/YOXKlQgODoaHhwcGDx6MhQsX4qmnnlK1y8nJwZgxYyCVStGjRw/s3r1b7TiJiYl48sknYWlpCUdHR0yePBk5OTntfTlE1M4YkIioU7K0tISlpSV27dqF8vLyBtstXboU48ePx5kzZ/Dkk09i0qRJqh6mjIwMPPLII+jfvz9OnDiBffv24datWxg/fnx7XQYR6QgDEhF1SkZGRtiyZQu2bt0Ka2trDB8+HP/6179w5swZtXZTp07FxIkT4ePjg+XLl6O4uBhxcXEAgKioKAwcOBDLly9Hr169MGDAAHz++ec4dOgQkpOTdXFZRNROGJCIqNMaO3Ys0tPTsXv3boSGhiImJgYDBw7Eli1bVG369u2r+trCwgIymQxZWVkAgPj4eBw6dEjVG2VpaYlevXoBAK5cudKu10JE7YuTtImoUzMzM8OoUaMwatQovPvuu3jxxRexePFiTJ06FQBgbGys1l4ikUCpVAIAlEolRo8ejZUrV2od19nZuc1rJyLdYUAioi7Fz8+vyWsfDRw4EDt27ICnpyeMjPjnkqgr4RAbEXVKubm5ePTRR/HVV1/hzJkzSElJwXfffYdVq1bhmWeeadIxZs+ejby8PEycOBFxcXG4evUqDhw4gGnTpqG6urqNr4CIdIn/S0REnZKlpSWGDBmC1atX48qVK6isrISbmxteeukl/Otf/2rSMVxcXHDkyBG8+eabCA0NRXl5OTw8PPDEE0/AwID/f0nUmUmEEELXRRARERHpE/4vEBEREZEGBiQiIiIiDQxIRERERBoYkIiIiIg0MCARERERaWBAIiIiItLAgERERESkgQGJiIiISAMDEhEREZEGBiQiIiIiDQxIRERERBr+P1rjT35wDxmpAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "chianti_collisional_rates.loc[1,0,0,3].plot(logy=True,label=\"TARDIS exc\",legend=True)\n", "chianti_collisional_rates.loc[1,0,3,0].plot(logy=True,label=\"TARDIS deexc\",legend=True)\n", - "christian_coeff[\"coll_exc_coeff\"].loc[1,0,0,3].plot(logy=True,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", - "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,0,3].plot(logy=True,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "chianti_collisional_rates" + "reference_coeff[\"coll_exc_coeff\"].loc[1,0,0,3].plot(logy=True,label=\"reference exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "reference_coeff[\"coll_deexc_coeff\"].loc[1,0,0,3].plot(logy=True,label=\"reference deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" ] }, { @@ -221,19 +303,27 @@ "metadata": {}, "outputs": [], "source": [ - "cmfgen_atom_data = AtomData.from_hdf('~/tardis-refdata/nlte_atom_data/TestNLTE_He_Ti.h5')\n", + "cmfgen_atom_data = AtomData.from_hdf('/home/afullard/tardis-refdata/nlte_atom_data/TestNLTE_He_Ti.h5')\n", "cmfgen_radiative_transitions = cmfgen_atom_data.lines.loc[(1,0, slice(None), slice(None)), :]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Number of density points larger than number of shells. Assuming inner point irrelevant\n" + ] + } + ], "source": [ "cmfgen_sim_state = SimulationState.from_config(config, atom_data=cmfgen_atom_data)\n", "\n", - "temperature = christian_coeff[\"t_electrons\"].values * u.K\n", + "temperature = reference_coeff[\"t_electrons\"].values * u.K\n", "rad_field = PlanckianRadiationField(temperature=temperature)" ] }, @@ -266,18 +356,735 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456789
atomic_numberion_numberlevel_number_sourcelevel_number_destination
10011.267799e-137.409859e-144.118523e-142.162077e-141.063159e-144.847581e-152.024099e-157.620206e-162.536409e-167.279789e-17
23.356946e-151.788862e-158.989059e-164.223418e-161.836457e-167.299014e-172.611509e-178.253727e-182.250262e-185.134854e-19
31.989207e-169.873436e-174.586649e-171.978074e-177.842777e-182.825076e-189.111826e-192.584272e-196.299419e-201.281514e-20
41.370295e-166.868098e-173.227971e-171.410044e-175.663413e-182.064314e-186.719253e-191.914254e-194.654151e-209.350735e-21
56.270420e-173.114708e-171.449558e-176.263862e-182.486059e-188.942955e-192.868524e-198.039333e-201.918916e-203.775645e-21
....................................
28267.195997e-037.293750e-037.396148e-037.503646e-037.616808e-037.736337e-037.863108e-037.998223e-038.143076e-038.299442e-03
29261.417282e-031.436124e-031.455952e-031.476829e-031.498839e-031.522089e-031.546719e-031.572907e-031.600884e-031.630950e-03
28271.326055e-011.345468e-011.365893e-011.387426e-011.410185e-011.434318e-011.460005e-011.487475e-011.517012e-011.548981e-01
29278.433900e-038.553185e-038.679063e-038.811975e-038.952486e-039.101318e-039.259392e-039.427886e-039.608311e-039.802624e-03
281.551432e-011.574200e-011.598144e-011.623386e-011.650073e-011.678385e-011.708545e-011.740831e-011.775591e-011.813264e-01
\n", + "

870 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " 0 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 1.267799e-13 \n", + " 2 3.356946e-15 \n", + " 3 1.989207e-16 \n", + " 4 1.370295e-16 \n", + " 5 6.270420e-17 \n", + "... ... \n", + " 28 26 7.195997e-03 \n", + " 29 26 1.417282e-03 \n", + " 28 27 1.326055e-01 \n", + " 29 27 8.433900e-03 \n", + " 28 1.551432e-01 \n", + "\n", + " 1 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 7.409859e-14 \n", + " 2 1.788862e-15 \n", + " 3 9.873436e-17 \n", + " 4 6.868098e-17 \n", + " 5 3.114708e-17 \n", + "... ... \n", + " 28 26 7.293750e-03 \n", + " 29 26 1.436124e-03 \n", + " 28 27 1.345468e-01 \n", + " 29 27 8.553185e-03 \n", + " 28 1.574200e-01 \n", + "\n", + " 2 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 4.118523e-14 \n", + " 2 8.989059e-16 \n", + " 3 4.586649e-17 \n", + " 4 3.227971e-17 \n", + " 5 1.449558e-17 \n", + "... ... \n", + " 28 26 7.396148e-03 \n", + " 29 26 1.455952e-03 \n", + " 28 27 1.365893e-01 \n", + " 29 27 8.679063e-03 \n", + " 28 1.598144e-01 \n", + "\n", + " 3 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 2.162077e-14 \n", + " 2 4.223418e-16 \n", + " 3 1.978074e-17 \n", + " 4 1.410044e-17 \n", + " 5 6.263862e-18 \n", + "... ... \n", + " 28 26 7.503646e-03 \n", + " 29 26 1.476829e-03 \n", + " 28 27 1.387426e-01 \n", + " 29 27 8.811975e-03 \n", + " 28 1.623386e-01 \n", + "\n", + " 4 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 1.063159e-14 \n", + " 2 1.836457e-16 \n", + " 3 7.842777e-18 \n", + " 4 5.663413e-18 \n", + " 5 2.486059e-18 \n", + "... ... \n", + " 28 26 7.616808e-03 \n", + " 29 26 1.498839e-03 \n", + " 28 27 1.410185e-01 \n", + " 29 27 8.952486e-03 \n", + " 28 1.650073e-01 \n", + "\n", + " 5 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 4.847581e-15 \n", + " 2 7.299014e-17 \n", + " 3 2.825076e-18 \n", + " 4 2.064314e-18 \n", + " 5 8.942955e-19 \n", + "... ... \n", + " 28 26 7.736337e-03 \n", + " 29 26 1.522089e-03 \n", + " 28 27 1.434318e-01 \n", + " 29 27 9.101318e-03 \n", + " 28 1.678385e-01 \n", + "\n", + " 6 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 2.024099e-15 \n", + " 2 2.611509e-17 \n", + " 3 9.111826e-19 \n", + " 4 6.719253e-19 \n", + " 5 2.868524e-19 \n", + "... ... \n", + " 28 26 7.863108e-03 \n", + " 29 26 1.546719e-03 \n", + " 28 27 1.460005e-01 \n", + " 29 27 9.259392e-03 \n", + " 28 1.708545e-01 \n", + "\n", + " 7 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 7.620206e-16 \n", + " 2 8.253727e-18 \n", + " 3 2.584272e-19 \n", + " 4 1.914254e-19 \n", + " 5 8.039333e-20 \n", + "... ... \n", + " 28 26 7.998223e-03 \n", + " 29 26 1.572907e-03 \n", + " 28 27 1.487475e-01 \n", + " 29 27 9.427886e-03 \n", + " 28 1.740831e-01 \n", + "\n", + " 8 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 2.536409e-16 \n", + " 2 2.250262e-18 \n", + " 3 6.299419e-20 \n", + " 4 4.654151e-20 \n", + " 5 1.918916e-20 \n", + "... ... \n", + " 28 26 8.143076e-03 \n", + " 29 26 1.600884e-03 \n", + " 28 27 1.517012e-01 \n", + " 29 27 9.608311e-03 \n", + " 28 1.775591e-01 \n", + "\n", + " 9 \n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 7.279789e-17 \n", + " 2 5.134854e-19 \n", + " 3 1.281514e-20 \n", + " 4 9.350735e-21 \n", + " 5 3.775645e-21 \n", + "... ... \n", + " 28 26 8.299442e-03 \n", + " 29 26 1.630950e-03 \n", + " 28 27 1.548981e-01 \n", + " 29 27 9.802624e-03 \n", + " 28 1.813264e-01 \n", + "\n", + "[870 rows x 10 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cmfgen_collisional_rates" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456789
atomic_numberion_numberlevel_number_sourcelevel_number_destination
10011.947332e-141.150685e-146.471781e-153.439696e-151.712729e-157.906211e-163.340165e-161.271031e-164.270088e-171.234665e-17
23.641834e-142.151969e-141.210328e-146.432783e-153.203073e-151.478585e-156.246623e-162.377021e-167.985702e-172.309004e-17
33.896169e-142.302253e-141.294850e-146.881995e-153.426742e-151.581830e-156.682786e-162.542985e-168.543234e-172.470200e-17
45.387536e-162.876504e-161.448241e-166.817268e-172.969700e-171.182313e-174.236734e-181.340854e-183.659825e-198.358726e-20
51.026299e-155.479599e-162.758829e-161.298656e-165.657133e-172.252248e-178.070772e-182.554261e-186.971787e-191.592296e-19
....................................
20141.012879e-081.010773e-081.008320e-081.005477e-081.002191e-089.984012e-099.940370e-099.890124e-099.832251e-099.765511e-09
23141.613469e-051.610114e-051.606207e-051.601678e-051.596443e-051.590407e-051.583455e-051.575451e-051.566232e-051.555601e-05
20152.025768e-072.021555e-072.016650e-072.010963e-072.004391e-071.996813e-071.988084e-071.978035e-071.966460e-071.953112e-07
23151.153401e-061.151002e-061.148210e-061.144972e-061.141230e-061.136915e-061.131945e-061.126223e-061.119633e-061.112033e-06
24151.848863e-051.845018e-051.840541e-051.835351e-051.829353e-051.822436e-051.814470e-051.805298e-051.794734e-051.782552e-05
\n", + "

210 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " 0 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 1.947332e-14 \n", + " 2 3.641834e-14 \n", + " 3 3.896169e-14 \n", + " 4 5.387536e-16 \n", + " 5 1.026299e-15 \n", + "... ... \n", + " 20 14 1.012879e-08 \n", + " 23 14 1.613469e-05 \n", + " 20 15 2.025768e-07 \n", + " 23 15 1.153401e-06 \n", + " 24 15 1.848863e-05 \n", + "\n", + " 1 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 1.150685e-14 \n", + " 2 2.151969e-14 \n", + " 3 2.302253e-14 \n", + " 4 2.876504e-16 \n", + " 5 5.479599e-16 \n", + "... ... \n", + " 20 14 1.010773e-08 \n", + " 23 14 1.610114e-05 \n", + " 20 15 2.021555e-07 \n", + " 23 15 1.151002e-06 \n", + " 24 15 1.845018e-05 \n", + "\n", + " 2 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 6.471781e-15 \n", + " 2 1.210328e-14 \n", + " 3 1.294850e-14 \n", + " 4 1.448241e-16 \n", + " 5 2.758829e-16 \n", + "... ... \n", + " 20 14 1.008320e-08 \n", + " 23 14 1.606207e-05 \n", + " 20 15 2.016650e-07 \n", + " 23 15 1.148210e-06 \n", + " 24 15 1.840541e-05 \n", + "\n", + " 3 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 3.439696e-15 \n", + " 2 6.432783e-15 \n", + " 3 6.881995e-15 \n", + " 4 6.817268e-17 \n", + " 5 1.298656e-16 \n", + "... ... \n", + " 20 14 1.005477e-08 \n", + " 23 14 1.601678e-05 \n", + " 20 15 2.010963e-07 \n", + " 23 15 1.144972e-06 \n", + " 24 15 1.835351e-05 \n", + "\n", + " 4 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 1.712729e-15 \n", + " 2 3.203073e-15 \n", + " 3 3.426742e-15 \n", + " 4 2.969700e-17 \n", + " 5 5.657133e-17 \n", + "... ... \n", + " 20 14 1.002191e-08 \n", + " 23 14 1.596443e-05 \n", + " 20 15 2.004391e-07 \n", + " 23 15 1.141230e-06 \n", + " 24 15 1.829353e-05 \n", + "\n", + " 5 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 7.906211e-16 \n", + " 2 1.478585e-15 \n", + " 3 1.581830e-15 \n", + " 4 1.182313e-17 \n", + " 5 2.252248e-17 \n", + "... ... \n", + " 20 14 9.984012e-09 \n", + " 23 14 1.590407e-05 \n", + " 20 15 1.996813e-07 \n", + " 23 15 1.136915e-06 \n", + " 24 15 1.822436e-05 \n", + "\n", + " 6 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 3.340165e-16 \n", + " 2 6.246623e-16 \n", + " 3 6.682786e-16 \n", + " 4 4.236734e-18 \n", + " 5 8.070772e-18 \n", + "... ... \n", + " 20 14 9.940370e-09 \n", + " 23 14 1.583455e-05 \n", + " 20 15 1.988084e-07 \n", + " 23 15 1.131945e-06 \n", + " 24 15 1.814470e-05 \n", + "\n", + " 7 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 1.271031e-16 \n", + " 2 2.377021e-16 \n", + " 3 2.542985e-16 \n", + " 4 1.340854e-18 \n", + " 5 2.554261e-18 \n", + "... ... \n", + " 20 14 9.890124e-09 \n", + " 23 14 1.575451e-05 \n", + " 20 15 1.978035e-07 \n", + " 23 15 1.126223e-06 \n", + " 24 15 1.805298e-05 \n", + "\n", + " 8 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 4.270088e-17 \n", + " 2 7.985702e-17 \n", + " 3 8.543234e-17 \n", + " 4 3.659825e-19 \n", + " 5 6.971787e-19 \n", + "... ... \n", + " 20 14 9.832251e-09 \n", + " 23 14 1.566232e-05 \n", + " 20 15 1.966460e-07 \n", + " 23 15 1.119633e-06 \n", + " 24 15 1.794734e-05 \n", + "\n", + " 9 \n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 1.234665e-17 \n", + " 2 2.309004e-17 \n", + " 3 2.470200e-17 \n", + " 4 8.358726e-20 \n", + " 5 1.592296e-19 \n", + "... ... \n", + " 20 14 9.765511e-09 \n", + " 23 14 1.555601e-05 \n", + " 20 15 1.953112e-07 \n", + " 23 15 1.112033e-06 \n", + " 24 15 1.782552e-05 \n", + "\n", + "[210 rows x 10 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "chianti_collisional_rates" ] @@ -288,7 +1095,7 @@ "metadata": {}, "outputs": [], "source": [ - "assert cmfgen_collisional_rates.shape == christian_rate_coeff_df.shape" + "assert cmfgen_collisional_rates.shape == reference_rate_coeff_df.shape" ] }, { @@ -297,7 +1104,7 @@ "metadata": {}, "outputs": [], "source": [ - "pd.testing.assert_frame_equal(cmfgen_collisional_rates.sort_index() * (1-0.000015),christian_rate_coeff_df.sort_index(),check_names=False)" + "pd.testing.assert_frame_equal(cmfgen_collisional_rates.sort_index() * (1-0.000015),reference_rate_coeff_df.sort_index(),check_names=False)" ] }, { @@ -306,7 +1113,7 @@ "metadata": {}, "outputs": [], "source": [ - "christian_rate_coeff_df = christian_rate_coeff_df.sort_index()" + "reference_rate_coeff_df = reference_rate_coeff_df.sort_index()" ] }, { @@ -315,16 +1122,371 @@ "metadata": {}, "outputs": [], "source": [ - "christian_rate_coeff_df.index.names=cmfgen_collisional_rates.sort_index().index.names" + "reference_rate_coeff_df.index.names=cmfgen_collisional_rates.sort_index().index.names" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456789
atomic_numberion_numberlevel_number_sourcelevel_number_destination
10010.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000015
20.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000015
30.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000014
40.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000014
50.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000140.000014
....................................
29240.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000015
250.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000015
260.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000015
270.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000015
280.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.0000150.000015
\n", + "

870 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " 0 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000015 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 1 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000015 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 2 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000015 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 3 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000015 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 4 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000015 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 5 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000015 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 6 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000015 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 7 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000015 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 8 \\\n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000015 \n", + " 4 0.000015 \n", + " 5 0.000014 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + " 9 \n", + "atomic_number ion_number level_number_source level_number_destination \n", + "1 0 0 1 0.000015 \n", + " 2 0.000015 \n", + " 3 0.000014 \n", + " 4 0.000014 \n", + " 5 0.000014 \n", + "... ... \n", + " 29 24 0.000015 \n", + " 25 0.000015 \n", + " 26 0.000015 \n", + " 27 0.000015 \n", + " 28 0.000015 \n", + "\n", + "[870 rows x 10 columns]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "(cmfgen_collisional_rates - christian_rate_coeff_df) / christian_rate_coeff_df" + "(cmfgen_collisional_rates - reference_rate_coeff_df) / reference_rate_coeff_df" ] }, { @@ -342,77 +1504,224 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0.00010054083203834371" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "abs(8.63e-6 - beta_coll.value) / min(8.63e-6, beta_coll.value)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHACAYAAABKwtdzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABey0lEQVR4nO3deVhU9eI/8PewzAwDzCCILMnihgpuqKloaaaCWv6yTeprptlycy9bve6VevW2qKXeLJNri2IXNTM1zdxK0iuJ3twXFMVB9hm2GZY5vz8GjowzIMgywHm/nuc8zDnnc875HOFp3n2Wc2SCIAggIiIikhAHe1eAiIiIqKExABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwAN3FoUOHMGrUKPj7+0Mmk2Hbtm31er3g4GDIZDKrZcqUKfV6XSIiIilhALqL/Px8dO/eHZ999lmDXO+///0vtFqtuOzduxcA8PTTTzfI9YmIiKSAAeguRowYgQ8++ABPPPGEzf1FRUV4++23cd9998HV1RV9+/bFgQMH7vl63t7e8PX1FZcdO3agXbt2GDRo0D2fk4iIiCwxANXSCy+8gN9//x2bNm3CqVOn8PTTT2P48OG4ePFirc9dVFSEb775BhMnToRMJquD2hIREREAyARBEOxdiaZCJpNh69atGD16NADg8uXL6NChA27cuAF/f3+x3NChQ9GnTx8sXry4VtfbvHkz/u///g/JyckW5yciIqLaYQtQLfz5558QBAEhISFwc3MTl4MHD+Ly5csAgKtXr9oc1FxxmTp1qs3zr1u3DiNGjGD4ISIiqmNO9q5AU2YymeDo6IiEhAQ4Ojpa7HNzcwMA3HfffTh79myV52nRooXVtmvXruGXX37Bli1b6q7CREREBIABqFbCw8NRWlqKtLQ0PPjggzbLODs7o1OnTjU+9/r169GqVSs88sgjta0mERER3YEB6C7y8vJw6dIlcT0pKQmJiYnw9PRESEgIxo4di+effx4fffQRwsPDkZGRgV9//RVdu3bFyJEj7+maJpMJ69evx/jx4+HkxF8RERFRXeMg6Ls4cOAABg8ebLV9/PjxiImJQXFxMT744ANs2LABKSkp8PLyQkREBBYuXIiuXbve0zX37NmDqKgonD9/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559wcXFB165dYTKZcPDgQbELrLliFxgREVEF69atw1NPPYUuXbpYLBMnTkROTg5++umnSo996KGHEBYWhsWLF1tsz83NRWpqKq5fv45Dhw7hlVdewQcffIBFixaJLUh3WrBgAd5++20cOHAASUlJOHHiBCZOnIji4mIMGzbM5jFjx45Fy5Yt8dhjj+Hw4cNISkrCwYMHMWPGDNy4cQMA8OqrryIgIABz5szBxx9/DEEQ8OabbwIwB6zx48dj4sSJ2LZtG5KSknDgwIG7DgBvihiAiIiIyiQkJODkyZN48sknrfa5u7sjMjLyrlPCZ86ciS+++ALXr18Xt82bNw9+fn5o3749xo0bB51Oh3379uGdd96p9DyDBg3ClStX8Pzzz6NTp04YMWIEUlNTsWfPHnTs2NHmMSqVCocOHUJgYCCeeOIJdO7cGRMnTkRhYSHUajU2bNiAnTt34uuvv4aTkxNUKhW+/fZbfPnll9i5cycAYM2aNXjqqacwefJkdOrUCS+//HKlLU5NmUyoy3mDzYRer4dGo4FOp6u0CZGIiACDwYCkpCS0adMGSqXS3tUhCajqb64m399sASIiIiLJYQAiIiIiyWEAIiIiIslhACIiIiLJsWsAOnToEEaNGgV/f3/IZDKrZy7YcvDgQfTq1QtKpRJt27bFv/71L6sycXFxCA0NhUKhQGhoKLZu3VoPtSciIqKmyq4BKD8/H927d8dnn31WrfJJSUkYOXIkHnzwQZw4cQJ///vfMX36dMTFxYll4uPjER0djXHjxuHkyZMYN24cxowZg6NHj9bXbRAREVET02imwctkMmzdurXKJ2K+88472L59O86ePStue/XVV3Hy5EnEx8cDAKKjo6HX67Fr1y6xzPDhw9GiRQts3LixWnXhNHgiourhNHhqaJKcBh8fH4/IyEiLbVFRUTh+/DiKi4urLHPkyJEGqycRERE1bk0qAKWmpsLHx8dim4+PD0pKSpCRkVFlmdTU1ErPazQaodfrLRYiIqLm4OrVq5DJZEhMTLR3VRqVagcgT09PMWRMnDgRubm59VapqshkMov18h68itttlblzW0VLliyBRqMRl4CAgDqsMRERNSYymazKZcKECWLZyMhIODo64o8//rA6z4QJE8RjnJycEBgYiEmTJiE7O9uiXHBwsFjOxcUFwcHBGDNmDH799VeLcraC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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "cmfgen_collisional_rates.loc[1,0,1,2].plot(logy=False,label=\"TARDIS exc\",legend=True)\n", "cmfgen_collisional_rates.loc[1,0,2,1].plot(logy=False,label=\"TARDIS deexc\",legend=True)\n", "#plasma.coll_exc_coeff.loc[1,0,1,2].plot(logy=True,label=\"TARDIS old exc\",legend=True)\n", "#plasma.coll_deexc_coeff.loc[1,0,1,2].plot(logy=True,label=\"TARDIS old deexc\",legend=True)\n", - "christian_coeff[\"coll_exc_coeff\"].loc[1,0,1,2].plot(logy=False,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", - "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,1,2].plot(logy=False,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + "reference_coeff[\"coll_exc_coeff\"].loc[1,0,1,2].plot(logy=False,label=\"reference exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "reference_coeff[\"coll_deexc_coeff\"].loc[1,0,1,2].plot(logy=False,label=\"reference deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAHACAYAAACMB0PKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABH90lEQVR4nO3dd3wVVf7/8fdN7wmBFJBAQIh0aaKIiihd+YGClC+iiJWuoiJLdwUW1lVgVVYUQRFWcBHEhiBKUUA0GECI1FCEhISWBEJCyvn9EbkSUkhIuRPyej4e93HvnXtm5nOSyH175syMzRhjBAAAYEFOji4AAAAgPwQVAABgWQQVAABgWQQVAABgWQQVAABgWQQVAABgWQQVAABgWQQVAABgWQQVAABgWQQVAABgWddNUNmwYYO6deumatWqyWazacWKFaW6v+TkZD377LOqWbOmPD09dfvtt+vnn38u1X0CAFDRXDdB5fz587r55pv15ptvlsn+nnjiCa1Zs0YLFy7Uzp071bFjR7Vv317Hjh0rk/0DAFAR2K7HmxLabDYtX75cPXr0sC+7ePGixo0bp0WLFuns2bNq1KiRpk+frrvvvrvI279w4YJ8fX312Wef6b777rMvb9q0qe6//369+uqrJdALAADg4ugCyspjjz2mQ4cO6eOPP1a1atW0fPlyde7cWTt37lTdunWLtK2MjAxlZmbKw8Mjx3JPT0/98MMPJVk2AAAVWoUYUTlw4IDq1q2rP/74Q9WqVbO3a9++vVq1aqWpU6cWeR+333673NzctHjxYoWEhOi///2vHnnkEdWtW1d79uwpqa4AAFChXTdzVAqybds2GWMUEREhHx8f+2P9+vU6cOCAJOnQoUOy2WwFPoYNG2bf5sKFC2WM0Q033CB3d3fNnj1b//d//ydnZ2dHdRMAgOtOhTj0k5WVJWdnZ0VGRuYKEj4+PpKkG264QdHR0QVup1KlSvbXN954o9avX6/z588rKSlJVatWVZ8+fVSrVq2S7wAAABVUhQgqzZo1U2ZmpuLj43XnnXfm2cbV1VX16tUr8ra9vb3l7e2tM2fO6JtvvtGMGTOKWy4AAPjTdRNUzp07p/3799vfx8TEKCoqSoGBgYqIiFD//v31yCOP6F//+peaNWumkydP6rvvvlPjxo3VtWvXIu/vm2++kTFGN910k/bv368XX3xRN910kx577LGS7BYAABXadTOZdt26dWrXrl2u5Y8++qgWLFig9PR0vfrqq/rwww917NgxVa5cWa1bt9bkyZPVuHHjIu9v6dKlGjNmjP744w8FBgaqZ8+emjJlivz9/UuiOwAAQNdRUAEAANefCnHWDwAAKJ8IKgAAwLLK9WTarKwsHT9+XL6+vrLZbI4uBwAAFIIxRsnJyapWrZqcnAoeMynXQeX48eMKCwtzdBkAAOAaHD16VNWrVy+wTbkOKr6+vpKyO+rn5+fgagAAQGEkJSUpLCzM/j1ekHIdVC4d7vHz8yOoAABQzhRm2gaTaQEAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAQJ7S4+OV8O83lR4f77AaCCoAACBPGQkJOvnWW8pISHBYDQQVAACQmzFScpyjqyjfd08GAADFZIyUdFxKiJbio5W+f7syjuyRzhxSanyGpACl7t5tb+4SFCTX4OAyK4+gAgBARXBphCQhWor//bLn36W0JHuzszt9dXKXryQf+7K48RPsr6sMHaqg4cPKrGyCCgAA1xNjpHPxeQSSaCk1Me91bM5S5TpScD0FNK0pH+cQKaCWUo8nK27iZIX+/RV5NGggKXtEpSwRVAAAKK/On5Tio7NHRS5/vnA67/Y2JymwthRUTwqu/9dz5TqSi7skyfXPhyRp1y5JkkeDBvJs2LDUu5MXggoAAFaXcvrPIHLZ4Zr4aCnlZD4r2KTAWlJQfSm43l/PletKrh5lWnpxEVQAAChh6fHxOrtkqQL69C7axNMLZ3Ifron/XTpfwHVMKoXnDiRVIiRXz2L3wyUoSFWGDi3zwz05anDYngEAuE5duv6Izz3t8g4qqYlSwp7ch22SY/PfqH+NP8PIZYdtgm6S3LxLrR+uwcFlOnE2LwQVAABKS3qK9McvuQNJ0rH81/GrfkUgqS8FRUjuvmVXt4UQVAAAKI6Mi9LZI0o/EKWMQ9FS4h9K3bNfkpT6r/8nVUqXJLl4ZsrVM+uv9Xyr5TxcE1Q/e4TEw88RvbAsggoAAFdzMUU6EyOdjpFOH/zz9cHs94lHJZN12fVH/hL3c4D9dZVOEQp6qMdfh208A4SrI6gAACBJF85eFkAOSqcP/RVKCpo7IkmuXgpoHSafNqGS/w1KPe2iuHnfKHT8aHk0vUXSn9cfKcMrul4vCCoAgIrBmOzrjlwKIpePipw+mP+1Ry7x8M++BsmlR6Vaf732CZarzZbz+iPzvpFH01scdv2R6wVBBQBgCdd8Su/lsrKk5OM5A4g9lMRIF88VvL5PyGUB5LLnSrUkr8BrqwnFQlABAFjCVU/pvSQzXTp7JDt4XDkqcuaQlJlWwF5skn/1v0JIpSvCiLtPAesWnhWuP3K9IKgAAKwn/UJ26Mg1efWgdPaoZDLzX9fJRQqoecWoyJ+hpFJN+6XiS5MVrj9yvSCoAADKXlqylHhM6TG7lHF0n3QuXql7D0iSUmf1kjwSJOVxSu8lLp5/jYIEXnGoxq+65MzX2/WC3yQAoGRlpmefJZP4h5R4LPv03cQ/si9ylvhH9vs/7+Kb5ym9GyQp+5BJldu8FHRf49yTV31DJZutjDsGRyCoAAAKz5jsG+QlHs0ZPBIvvf5DOhcnmTxGQa7k4a+A1jfIp3UVySdYqaedFffhRoU+/7g8mt8uefjLJZhTeis6ggoAlHMlcrbMJRdTLgsgfz6SLnudeEzKuHD17Ti7SX43ZE9cvfTwu0HyD/vz/Q2Su69cpZyn9H64UR5tunBKL+wIKgBQzhX6bJmsTCk57s8gcvSyQzN//DVCknKqcDv1CbksiIRlBw97IKkueQdJTk4l00FUaAQVALhepJ2T4n7LYxTkz0CSfFzKyrj6dtx8rhgJuey1/w3ZAaUUzpzhlF7khaACAFZmjJR6Vko+kT3348/n9D8OK+PEH9L500o9kn2GTOobPfK/Ad4lTi7ZN8O7PHhcGhW5NELi4e+Qiaqc0ou8EFQAwBGysrIPs1wWPpQcJ507kfs5IzXX6le9AV7bUAW1vSXnyIh/9exDNk7Opd07oMQQVABUWCU6CfWSzHTpXPwVASSP5/PxhTsMc4mHv+QTKvmGSD6hCmjoJ58MH8mrslKPn1PcrIUKnThOHk2aSuIGeLh+EFQAVFiFnoQqZV8pNb8Rj8ufU05JMoUvwjsoRwDJ+zlEcvXMsVqus2VmLZRHk6acLYPrDkEFQMV1KU+cOSLFnCrgEMwJKS2x8Nu1OWeHiwLDR6jkEyw5u159e0AFRlABcH25eF46nyCdP5X9nHLyz/cnpfMnlX4iVhkJCVJqolKPJUvyUeo7g64+CVWSXDz+DCCheTxfFkC8KpfpqbmcLYPrmc0YU4QxSmtJSkqSv7+/EhMT5efn5+hygAqjVOZ25OdiymVh48rwcSr3Z1e5GFlCHpNQL1elXXUFdb/lstGP0L8CiYPOhgGuN0X5/mZEBUCRFWlux5XSUwsOHle+Tz9f9AKd3bPnfnhXzn72qiJ5Zz8C7vKQT6qL5FlJqUdOKm7aLIX+/RV5NGggiUmogNUQVAAUT0Za9mGVPEc5Tub+7GJy0ffh7JYjbFwZPnK9d/PJd+Qj1yRUzZJHgwZMQgUsiqAC4C8XU6QLp7NvOpfj+YzS42KVkXBCSk1S6pGTkqTU1+6XfLODR4FzO67k5JI7XBQUPNz9OOQCVFAEFaAMldncjsyM7KuZXgoaF87kET6uWH7hTJ4XFrskzwuMbfaQ5CFJqtIsS0F3Vi7cqIdF5nowCRWwPoIKUIaKPLfDmOyzWK4WMK4MIalFOJX2Sk4ukmeg5BV42XMlBTTylE+am+Tup9TjyYp7e5lCRw+TR5PmkruvXIKDy93cDi7ZDlgfQQUoKxlp2UFCkmJ3SM6HCjfKkXnx2vfp7i95VcoOHJ6Vrggff4UQ+3vPSpK7b56jHbnmdry9TB6t7mZuB4BSRVBBuVCmp8MWJDNdunA2O0Ckns1+feXzFZ+lnzqrjDPJUkaqUs+4SgpQ6gfPF+66HZc4u10RMCrlHTguX+ZZSXLmP3EA5Rv/iqFcKNbpsFfKTM8+NFLEwKELZ6/pVNm/5nb8Nb8jx83j7qmhoHbN/wwa+Yx6uHpZYk7HJcztAFBWCCoonzIzssOGPUicKSB4JGYvv7Ts4rni79/dX/L0lzwCJM+A7IBx6XWO50oKSDHyOZcpufsqdf8RxU2YWO6v28HcDgBlhaBynbPMIZMrXZokmnr2z8BxxePCWaWfOKGMkyeltGSlHj0lSUqd9ZDke05KTyna6bB5cfP9cxTDP3fIKCB4yMNfcnIu9G5yzO1wzx5V4bodAFA4BJXrXIkeMrmcMdl3k80VMs5e8fxX8MjV1mQWuIs8T4fdYCR5S/JWlYbJCmphrggX/nmHC88AyaPSX8s8/Jm/AQDlAP9SV2QZaXkEibP5BI88HsU5G+USJ5e/gsMVj4CGbvJJc5XcfZT6R7Li3vlMoc8Nkkejxtmnw1avJYVWK34NZYi5HQBQNASV8uzyoGEPFUlKjz2mjPg46eI5pR48LklKfX+EFJghpSXLxeWcXJ0SC7y4V6HZnC4LFwF5BI6Ay0Y5coeRgiaJ5jod9p3P5HFH13J9yIS5HQBQNASVfJT63A5jsoNCnqMVZ6XUpPxHMtL+/CyfoJHnIZMvj9tfV2mYoqDGl9a1SR5+eYSNgLyDxZWho4B7qgAAUFwElXxcdW6HfTLoZcEhz0MmBQSOrPQSqPSyoOH+5yGTal7yaecuufko9USa4hZtUeiT98njpjqSu49cqoZJN4RnBw43X8nJqQTqKF0cMgGAiomgkpcTu6RtH2S/Xj9d+i0r78BxlcmghZLj0MmfD3e/AkY0/HK+zyNo5DpksqiXPDo/xiETAEC5Q1C5THp8vDISEqR93yp19UJJAUrdvKbgK4g6ueR/iKQwgYNDJwAA5IugcpmzS5bq5Ftv/fkuQNIVVxDt21lBg/peMRnU09JBg0MmAIDyzGaMMY7aeUZGhiZNmqRFixYpLi5OVatW1cCBAzVu3Dg5FWLeRFJSkvz9/ZWYmCg/P79i12MfUZGUunu34sZPyHUFUUtdNA0AgHKoKN/fDh1RmT59uv7zn//ogw8+UMOGDfXLL7/osccek7+/v0aOHFnm9bgGB+cKIlxBFAAAx3FoUNm8ebO6d++u++67T5IUHh6u//73v/rll18cWRYAALAIh56Xescdd2jt2rXau3evJGn79u364Ycf1LVr1zzbp6WlKSkpKcejtDC3AwAAx3PoiMro0aOVmJioevXqydnZWZmZmZoyZYr69euXZ/tp06Zp8uTJZVIbp8MCAOB4Dh1RWbJkiT766CMtXrxY27Zt0wcffKDXXntNH3zwQZ7tx4wZo8TERPvj6NGjZVwxAAAoSw496ycsLEwvv/yyhg4dal/26quv6qOPPtLvv/9+1fVL+qwfAABQ+ory/e3QEZWUlJRcpyE7OzsrKysrnzUAAEBF4tA5Kt26ddOUKVNUo0YNNWzYUL/++qtef/11DRo0yJFlAQAAi3DooZ/k5GSNHz9ey5cvV3x8vKpVq6Z+/fppwoQJcnNzu+r6HPoBAKD8Kcr3t0ODSnERVAAAKH/KzRwVAACAghBUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZTk8qBw7dkwPP/ywKleuLC8vLzVt2lSRkZGOLgsAAFiAiyN3fubMGbVp00bt2rXT119/reDgYB04cEABAQGOLAsAAFiEQ4PK9OnTFRYWpvnz59uXhYeHO64gAABgKQ499LNy5Uq1bNlSDz30kIKDg9WsWTO9++67jiwJAABYiEODysGDBzVnzhzVrVtX33zzjZ555hmNGDFCH374YZ7t09LSlJSUlOMBAACuXzZjjHHUzt3c3NSyZUtt2rTJvmzEiBH6+eeftXnz5lztJ02apMmTJ+danpiYKD8/v1KtFQAAlIykpCT5+/sX6vvboSMqVatWVYMGDXIsq1+/vo4cOZJn+zFjxigxMdH+OHr0aFmUCQAAHMShk2nbtGmjPXv25Fi2d+9e1axZM8/27u7ucnd3L4vSAOC6lJWVpYsXLzq6DFznXF1d5ezsXCLbcmhQee6553T77bdr6tSp6t27t7Zu3aq5c+dq7ty5jiwLAK5LFy9eVExMjLKyshxdCiqAgIAAhYaGymazFWs7Dg0qt9xyi5YvX64xY8bolVdeUa1atTRz5kz179/fkWUBwHXHGKPY2Fg5OzsrLCxMTk4Ov94nrlPGGKWkpCg+Pl5S9jSP4nBoUJGk+++/X/fff7+jywCA61pGRoZSUlJUrVo1eXl5ObocXOc8PT0lSfHx8QoODi7WYSAiNQBUAJmZmZKyz7YEysKlQJyenl6s7RBUAKACKe58AaCwSupvjaACAAAsi6ACAAAsi6ACALAkm81W4GPgwIH2th07dpSzs7O2bNmSazsDBw60r+Pi4qIaNWpo8ODBOnPmTI524eHh9naenp4KDw9X79699d133+Vod+jQ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nCk/P78cy2bNmiVJOnLkiDZv3qxhw4ble3+fzp07KzY2VocOHdJ7772nzz//XEOGDMnV7pVXXlFsbKz27NmjDz/8UAEBAWrfvr2mTJmSb53ffvut+vbtq169emnr1q2KjIzUlClTdPHixZL5QVRwhb7Hd+vWrdWjRw+1aNFCxhiNGDFCnp6eebZ9//33S6xAAEDFFBoaan/t7+8vm82WY9kl8+fP1/3336/BgwerVatWmjlzpry9vXO0cXd3t69bvXp19enTRwsWLMi1LV9fX3u7GjVq6K677lLVqlU1YcIE9erVK8+bDH7xxRe644479OKLL9qXRUREqEePHgX2b+vWrXr66acVHR2tRo0aaezYsbna7N69Wy+88II2bNggb29vdezYUW+88YaqVKkiSTLG6J///Kf+85//KDY2VhERERo/frx69eolY4w6dOggFxcXff3117LZbDp79qyaNGmiAQMG2MPXypUr9corr+i3336Tj4+P7rrrLn366acF1l6WCj2i8tFHH6lr1646d+6cJCkxMVFnzpzJ8wEAQFkwxmj+/Pl6+OGHVa9ePUVERGjp0qUFrnPw4EGtWrVKrq6uhdrHyJEjZYzRZ599lufnoaGh2rVrl3777bdC133+/Hndf//9uummmxQZGalJkybphRdeyNEmNjZWbdu2VdOmTfXLL79o1apVOnHihHr37m1vM27cOM2fP19z5szRrl279Nxzz+nhhx/W+vXrZbPZ9MEHH2jr1q2aPXu2JOmZZ55RSEiIJk2aJEn68ssv9eCDD+q+++7Tr7/+qrVr16ply5aF7keZMNcgPDzcnDx58lpWLVGJiYlGkklMTHR0KQBgaRcuXDC7d+82Fy5cyF6QlWVM2jnHPLKyilz//Pnzjb+/f67lq1evNkFBQSY9Pd0YY8wbb7xh2rRpk6PNo48+apydnY23t7fx8PAwkowk8/rrr+doV7NmTfPGG2/kuf+QkBAzePBgY4wxMTExRpL59ddfjTHGnDt3znTt2tVIMjVr1jR9+vQx8+bNM6mpqfn255133jGBgYHm/Pnz9mVz5szJsd3x48ebjh075ljv6NGjRpLZs2ePOXfunPHw8DCbNm3K0ebxxx83/fr1s79funSpcXd3N2PGjDFeXl5mz5499s9at25t+vfvn2+dxZHrb+4yRfn+LvShn8DAQO3du1dV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hg8frhEjRuiWW27J9x5AAIDy7ZO9n6jPF33U54s+mrR5kiRp0uZJ9mWf7P2kxPdZt25d2Ww2RUdHX72xlGvupM1my3VoI69DSJebP3++Nm/erNtvv11LlixRRERErrkwBdmyZYv69u2rLl266IsvvtCvv/6qsWPH6uLFi0Wu9XJZWVl6+umnFRUVZX9s375d+/bt04033mhvt2HDBjk7O+v48eP2uSmS5OnpWeg+WE2RgsrMmTP15JNP5kqGkuTv76+nn35ar7/+eokVBwCwhociHtKS+5doyf1LNKn1JEnSpNaT7MseinioxPcZGBioTp066a233srxpXvJ2bNnS3yfktSsWTONGTNGmzZtUqNGjbR48WJJkpubmzIzMwtc98cff1TNmjU1duxYtWzZUnXr1tXhw4eLXVPz5s21a9cu1alTJ9fDzc1NUvZk2xkzZujzzz+Xn5+fhg8fbl+/SZMmioqKyjVnpzwoUlDZvn27OnfunO/nHTt2VGRkZLGLAgBYS5BXkBpUbqAGlRuofuXsS1PUr1zfvqykD/tc8vbbbyszM1OtWrXSsmXLtG/fPkVHR2v27Nlq3bp1ie4rJiZGY8aM0ebNm3X48GGtXr1ae/futV+KIzw8XDExMYqKitLJkyeVlpaWaxt16tTRkSNH9PHHH+vAgQOaPXu2li9fXuzaRo8erc2bN2vo0KGKiorSvn37tHLlSnsYSU5O1oABAzR8+HB16dJFixcv1tKlS/XJJ9kjXf369VNoaKh69OihH3/8UQcPHtSyZcu0efPmYtdW2ooUVE6cOJHnacmXuLi4cGVaAECJqVWrlrZt26Z27dpp1KhRatSokTp06KC1a9dqzpw5JbovLy8v/f777+rZs6ciIiL01FNPadiwYXr66aclST179lTnzp3Vrl07BQUF6b///W+ubXTv3l3PPfechg0bpqZNm2rTpk0aP358sWtr0qSJ1q9fr3379unOO+9Us2bNNH78ePv8mZEjR8rb21tTp06VJDVs2FDTp0/XM888o2PHjsnNzU2rV69WcHCwunbtqsaNG+sf//iHnJ2di11babOZS7OVCuHGG2/Ua6+9pgceeCDPzz/99FO98MILOnjwYIkVWJCkpCT5+/srMTExz8NRAIBsqampiomJUa1ateTh4VGsbSWkJOiTvZ/ooYiHSm0kBeVfQX9zRfn+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "cmfgen_collisional_rates.loc[1,0,0,1].plot(logy=False,label=\"TARDIS exc\",legend=True)\n", "cmfgen_collisional_rates.loc[1,0,1,0].plot(logy=False,label=\"TARDIS deexc\",legend=True)\n", "#plasma.coll_exc_coeff.loc[1,0,1,2].plot(logy=True,label=\"TARDIS old exc\",legend=True)\n", "#plasma.coll_deexc_coeff.loc[1,0,1,2].plot(logy=True,label=\"TARDIS old deexc\",legend=True)\n", - "christian_coeff[\"coll_exc_coeff\"].loc[1,0,0,1].plot(logy=False,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", - "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,0,1].plot(logy=False,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + "reference_coeff[\"coll_exc_coeff\"].loc[1,0,0,1].plot(logy=False,label=\"reference exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "reference_coeff[\"coll_deexc_coeff\"].loc[1,0,0,1].plot(logy=False,label=\"reference deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAHACAYAAACMB0PKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABqTUlEQVR4nO3deVwV9f7H8ddh30EQBBVwRcV916zUXLO8auWWuWSre3uZWtov9ea9bVZys1xL08o0szJNc8uFXFAT3HFHARdQ2WF+f3A7VxIUFZ0DvJ+Px3nImfnOzHsEnQ/f+Z7vWAzDMBARERGxQXZmBxAREREpiAoVERERsVkqVERERMRmqVARERERm6VCRURERGyWChURERGxWSpURERExGapUBERERGbpUJFREREbJYKFREREbFZJaZQWbduHV27dqV8+fJYLBaWLFli+vHGjx9PzZo1cXd3p0yZMrRv354tW7bc1lwiIiIlSYkpVC5fvkz9+vX5+OOPbeZ4YWFhfPzxx+zevZsNGzZQqVIlOnbsSEJCwh3JKCIiUtxZSuJDCS0WC4sXL6Z79+7WZRkZGYwdO5Z58+Zx4cIF6tSpwzvvvEObNm1uy/Hyk5ycjLe3N7/++ivt2rW75eOKiIiUdA5mB7hTHn/8cY4cOcKCBQsoX748ixcvpnPnzuzevZvq1avf9uNnZGQwffp0vL29qV+//m0/noiISElQKgqVQ4cO8dVXX3HixAnKly8PwEsvvcTy5cuZNWsWkyZNum3HXrZsGX369CElJYWgoCBWrlxJ2bJlb9vxRERESpISM0blWrZv345hGISFheHh4WF9rV27lkOHDgFw5MgRLBbLNV/Dhw+/4WO3bduWqKgoNm7cSOfOnenVqxfx8fFFfYoiIiIlUqnoUcnJycHe3p5t27Zhb2+fZ52HhwcAFSpUICYm5pr7KVOmzA0f293dnWrVqlGtWjVatGhB9erVmTFjBqNHj77hfYmIiJQ2paJQadiwIdnZ2cTHx3PPPffk28bR0ZGaNWve9iyGYZCenn7bjyMiIlISlJhC5dKlSxw8eND6PjY2lqioKHx9fQkLC6Nfv34MGDCAd999l4YNG5KYmMjq1aupW7cuXbp0KdLjhYSEcPnyZSZOnMg//vEPgoKCOHv2LNOmTePEiRP07NmzSM5ZRESkpCsxH09es2YNbdu2vWr5wIEDmT17NpmZmbz99tvMnTuXkydP4ufnR8uWLZkwYQJ169Yt8uOlpaXx6KOPsmXLFhITE/Hz86Np06aMHTuWpk2b3tQ5ioiIlDYlplARERGRkqdUfOpHREREiicVKiIiImKzivVg2pycHE6dOoWnpycWi8XsOCIiIlIIhmFw8eJFypcvj53dtftMinWhcurUKYKDg82OISIiIjfh+PHjVKxY8ZptinWh4unpCeSeqJeXl8lpREREpDCSk5MJDg62XsevpVgXKn/d7vHy8lKhIiIiUswUZtiGBtOKiIiIzVKhIiIiIjZLhYqIiIjYrGI9RkVERG5MTk4OGRkZZseQEs7R0RF7e/si2ZcKFRGRUiIjI4PY2FhycnLMjiKlgI+PD4GBgbc8z5kKFRGRUsAwDOLi4rC3tyc4OPi6k2yJ3CzDMEhJSSE+Ph6AoKCgW9qfChURkVIgKyuLlJQUypcvj5ubm9lxpIRzdXUFID4+noCAgFu6DaSSWkSkFMjOzgbAycnJ5CRSWvxVEGdmZt7SflSoiIiUInoumtwpRfWzpkJFREREbJYKlQIkpCQwLWoaCSkJZkcREREptVSoFCAhNYGInREkpKpQERExg8ViueZr0KBB1rYdO3bE3t6ezZs3X7WfQYMGWbdxcHAgJCSEIUOGcP78+TztKlWqZG3n6upKpUqV6NWrF6tXr87T7siRI1gsFqKioqzLFi1aRPPmzfH29sbT05PatWvz4osvFunfR2mlQqUAu05cMDuCiEipFhcXZ3198MEHeHl55Vn24YcfAnDs2DE2bdrE8OHDmTFjRr776ty5M3FxcRw5coTPP/+cH374gaFDh17V7q233iIuLo59+/Yxd+5cfHx8aN++PRMnTiww56+//kqfPn145JFHiIyMZNu2bUycOFET6xURFSpXSEhJIPpsNO+vXc0bP/8CQHRiNNFnc1+6DSQicucEBgZaX97e3lgslquWAcyaNYsHH3yQIUOGsHDhQi5fvnzVvpydnQkMDKRixYp07NiR3r17s2LFiqvaeXp6EhgYSEhICPfeey/Tp09n3LhxvPHGG+zbty/fnMuWLePuu+/m5ZdfpkaNGoSFhdG9e3c++uija57fyZMn6d27N2XKlMHPz49u3bpx5MgRAPbu3Yubmxvz58+3tv/uu+9wcXFh9+7dAKSnp/PKK68QHByMs7Mz1atXL7BQK85UqFzhm/3f0HtZb2YeGYVz0HcATNg8gd7LetN7WW++2f+NyQlFRIqGYRikZGSZ8jIMo0jPY9asWTz22GPUrFmTsLAwvv7662tuc/jwYZYvX46jo2OhjjFq1CgMw+D777/Pd31gYCB79uzhzz//LHTulJQU2rZti4eHB+vWrWPDhg14eHjQuXNnMjIyqFmzJv/+978ZOnQoR48e5dSpUzz11FP885//pG7dugAMGDCABQsWMHXqVGJiYvjPf/6Dh4dHoTMUF5rw7Qo9w3rSJrgNAPN3bOT7kx+SFvcQz9/TljY1A/B39Tc3oIhIEUnNzCb8jV9MOXb0W51wcyqay8+vv/5KSkoKnTp1AuCxxx5jxowZPP7443naLVu2DA8PD7Kzs0lLSwPgvffeK9QxfH19CQgIsPZ2/N2IESNYv349devWJTQ0lBYtWtCxY0f69euHs7NzvtssWLAAOzs7Pv/8c+vHeGfNmoWPjw9r1qyhY8eODB06lJ9++on+/fvj5ORE48aNGTVqFAD79+/n66+/ZuXKlbRv3x6AKlWqFOp8ihv1qFzB382fcL9wwv3CebThXQBkp1Xgg59TyUgpj7+bChUREVsyY8YMevfujYNDbuHTt29ftmzZctVtmrZt2xIVFcWWLVsYMWIEnTp1YsSIEYU+jmEYBc4L4u7uzo8//sjBgwcZO3YsHh4evPjiizRr1oyUlJR8t9m2bRsHDx7E09MTDw8PPDw88PX1JS0tjUOHDlnbzZw5k127drF9+3Zmz55tzRAVFYW9vT2tW7cu9DkUV+pRuY7mlX3ZFJPD03O3snT43QR6u5gdSUTklrk62hP9VifTjl0Uzp07x5IlS8jMzCQiIsK6PDs7m5kzZ/LOO+9Yl7m7u1OtWjUApk6dStu2bZkwYQL/93//d93jnD17loSEBCpXrnzNdlWrVqVq1ao8+eSTjBkzhrCwMBYuXHhV7w7kPsW6cePGzJs376p1/v7/+6V4586dXL58GTs7O06fPk358uWB/01RXxqoUCmAv6s/Q+oPoUulVjx9bj/7z1zi6S+28vUzLXEpon9kIiJmsVgsRXb7xSzz5s2jYsWKLFmyJM/yVatWMXnyZCZOnGjtafm7N998k/vvv58hQ4ZYL/4F+fDDD7Gzs6N79+6FzlapUiXc3NzyHdgL0KhRIxYuXEhAQABeXl75tjl37hyDBg1izJgxnD59mn79+rF9+3ZcXV2pW7cuOTk5rF271nrrp6Qy9dZPVlYWY8eOpXLlyri6ulKlShXeeustm3gEub+bP0MbDKWSTxCfD2hKGTdHdp1I4pVvdxXpQDAREbk5M2bM4JFHHqFOnTp5XoMHD+bChQv8+OOPBW7bpk0bateuzaRJk/Isv3jxIqdPn+b48eOsW7eOp59+mrfffpuJEydae2T+bvz48bzyyiusWbOG2NhYduzYweDBg8nMzKRDhw75btOvXz/Kli1Lt27dWL9+PbGxsaxdu5ZRo0Zx4sQJAJ599lmCg4MZO3Ys7733HoZh8NJLLwG5hdDAgQMZPHgwS5YsITY2ljVr1lx3IHGxZJjo7bffNvz8/Ixly5YZsbGxxjfffGN4eHgYH3zwQaG2T0pKMgAjKSnpNic1jI0HE42qo380Ql9dZny8+sBtP56ISFFKTU01oqOjjdTUVLOj3JRZs2YZ3t7e1vdbt241ACMyMjLf9l27djW6du1qGIZhDBw40OjWrdtVbebNm2c4OTkZx44dMwzDMEJDQw3AAAwnJycjJCTE6NWrl7F69eo828XGxhqAsWPHDsMwDGP16tXGww8/bAQHBxtOTk5GuXLljM6dOxvr16+/5jnFxcUZAwYMMMqWLWs4OzsbVapUMZ566ikjKSnJmDNnjuHu7m7s378/zzk7OTkZP/74o2EYud/T559/3ggKCjKcnJyMatWqGTNnzrzmMe+ka/3M3cj122IY5nUPPPjgg5QrVy7P574ffvhh3Nzc+OKLL667fXJyMt7e3iQlJRXYdVaUvtx8lLFLcj9+Nr1/YzrWDrztxxQRKQppaWnExsZSuXJlXFw01k5uv2v9zN3I9dvUWz933303q1atYv/+/UDuoKENGzbQpUsXM2MV6LEWoQxoGQrAcwuj2Hs62eREIiIiJZupI6leffVVkpKSqFmzJvb29mRnZzNx4kT69u2bb/v09HTS09Ot75OT73yhMO7BcA7GX2LjobM8OWcr3w9rhZ9H/p+TFxERkVtjao/KwoUL+fLLL5k/fz7bt29nzpw5/Pvf/2bOnDn5tp88eTLe3t7WV3Bw8B1ODI72dkzr14hQPzdOnE9lyLztZGSZP/hXRESkJDJ1jEpwcDCvvfYaw4YNsy57++23+fLLL9m7d+9V7fPrUQkODr5jY1SudODMRXpM28il9Cz6NgtmUo+6BU4GJCJiNo1RkTutRIxRSUlJwc4ubwR7e/sCP57s7OyMl5dXnpdZqpfz5KO+DbFY4KvI48zZeMS0LCIiIiWVqYVK165dmThxIj/++CNHjhxh8eLFvPfee/To0cPMWIXWtmYAo++vCcD//RjDhgOJJicSEREpWUwtVD766CMeeeQRhg4dSq1atXjppZd45plnCjWlsa146p4qPNSoAtk5BkPnbSM2Mf9ZCEVEROTGmTpG5Vbd6XlUCpKWmU3fzzaz49gFqvi7s3hoK7xdC/f4cBGRO0FjVOROKxFjVEoKF0d7Pu3fmCBvFw4nXGbkVzvIzim29Z+IiIjNUKFSRAI8XfhsQBNcHO1Yuz+ByT/FmB1JRESKkSNHjmCxWIiKijI7ik1RoVKE6lTw5t2eDQD4fEMs32w9bm4gEZFizGKxXPM1aNAga9uOHTtib2/P5s2br9rPoEGDrNs4ODgQEhLCkCFDOH/+fJ52lSpVsrZzdXWlUqVK9OrVi9WrV+dpl19BsWjRIpo3b463tzeenp7Url2bF198sUj/PkorFSpF7IF6QYxsVx2AMYv/ZOuRcyYnEhEpnuLi4qyvDz74AC8vrzzLPvzwQwCOHTvGpk2bGD58eJ5nx12pc+fOxMXFceTIET7//HN++OEHhg4delW7t956i7i4OPbt28fcuXPx8fGhffv2TJw4scCcv/76K3369OGRRx4hMjKSbdu2MXHiRDIyMormL6KUU6FyGzzXrjr31wkkIzuHZ7/cxskLqWZHEhEpdgIDA60vb29vLBbLVcsAZs2axYMPPsiQIUNYuHAhly9f/elLZ2dnAgMDqVixIh07dqR3796sWLHiqnaenp4EBgYSEhLCvffey/Tp0xk3bhxvvPEG+/btyzfnsmXLuPvuu3n55ZepUaMGYWFhdO/enY8++uia5xcZGUnDhg1xcXGhSZMm7Nix46o20dHRdOnSBQ8PD8qVK0f//v1JTPzfVBiGYTBlyhSqVKmCq6sr9evX59tvv7Wua9++PZ07d+avz81cuHCBkJAQxowZY93H0qVLadKkCS4uLpQtW5aHHnromrnvNBUqt4GdnYV3e9WnVpAXiZcyeHLOVlIyssyOJSLyP4YBGZfNeRXhh00Nw2DWrFk89thj1KxZk7CwML7++utrbnP48GGWL1+Oo2PhPp05atQoDMPg+++/z3d9YGAge/bs4c8//yx07suXL/Pggw9So0YNtm3bxvjx43nppZfytImLi6N169Y0aNCArVu3snz5cs6cOUOvXr2sbcaOHcusWbOIiIhgz549PP/88zz22GOsXbsWi8XCnDlziIyMZOrUqQA8++yzlCtXjvHjxwPw448/8tBDD/HAAw+wY8cOVq1aRZMmTQp9HneCqQ8lLMncnBz4bEBjun38OzFxybz49U4+ebQRdnaaZl9EbEBmCkwqb86xXz8FTu5Fsqtff/2VlJQUOnXqBMBjjz3GjBkzePzxx/O0W7ZsGR4eHmRnZ5OWlgbAe++9V6hj+Pr6EhAQwJEjR/JdP2LECNavX0/dunUJDQ2lRYsWdOzYkX79+uHsnP9Da+fNm0d2djYzZ87Ezc2N2rVrc+LECYYMGWJtExERQaNGjZg0aZJ12cyZMwkODmb//v1UqFCB9957j9WrV9OyZUsAqlSpwoYNG/j0009p3bo1FSpU4NNPP6V///6cOXOGH374gR07dliLtIkTJ9KnTx8mTJhgPUb9+vUL9fdyp6hH5TaqWMaNT/s3xtHews9/nubDVQfMjiQiUqLMmDGD3r174+CQ+3t337592bJly1W3adq2bUtUVBRbtmxhxIgRdOrUiREjRhT6OIZhFPg8N3d3d3788UcOHjzI2LFj8fDw4MUXX6RZs2akpKTku01MTAz169fHzc3NuuyvYuMv27Zt47fffsPDw8P6qlkzdzb0Q4cOER0dTVpaGh06dMjTZu7cuRw6dMi6n549e/LQQw8xefJk3n33XcLCwqzroqKiaNeuXaH/HsygHpXbrEklXyb2qMsr3+7iw1UHCCvnyQP1gsyOJSKlnaNbbs+GWccuAufOnWPJkiVkZmYSERFhXf5XT8U777xjXebu7k61atUAmDp1Km3btmXChAmFmgn97NmzJCQkULly5Wu2q1q1KlWrVuXJJ59kzJgxhIWFsXDhwqt6dwAKM9dqTk4OXbt2zXMefwkKCrLeavrxxx+pUKFCnvVX9uSkpKSwbds27O3tOXAg7y/Mrq6u181hNhUqd0CvJsHsO32RGRtiefGbKEL93KhTwdvsWCJSmlksRXb7xSzz5s2jYsWKLFmyJM/yVatWMXnyZCZOnGjtafm7N998k/vvv58hQ4ZQvvy1b4F9+OGH2NnZ0b1790Jnq1SpEm5ubvkO7AUIDw/niy++IDU11Vos/P2j1Y0aNWLRokVUqlQp3/MIDw/H2dmZY8eO0bp16wKzvPjii9jZ2fHzzz/TpUsXHnjgAe677z4A6tWrx6pVq/ItpmyFbv3cIaPvr8m9Yf6kZebw1NytxF9MMzuSiEixNmPGDB555BHq1KmT5zV48GAuXLjAjz/+WOC2bdq0oXbt2nnGfwBcvHiR06dPc/z4cdatW8fTTz/N22+/zcSJE609Mn83fvx4XnnlFdasWUNsbCw7duxg8ODBZGZm0qFDh3y3efTRR7Gzs+OJJ54gOjqan376iX//+9952gwbNoxz587Rt29fIiMjOXz4MCtWrGDw4MFkZ2fj6enJSy+9xPPPP8+cOXM4dOgQO3bs4JNPPmHOnDlAbm/LzJkzmTdvHh06dOC1115j4MCB1jlk3nzzTb766ivefPNNYmJi2L17N1OmTCn09+COMIqxpKQkAzCSkpLMjlIoF1IyjLb//s0IfXWZ0eOTDUZaZpbZkUSklEhNTTWio6ON1NRUs6PclFmzZhne3t7W91u3bjUAIzIyMt/2Xbt2Nbp27WoYhmEMHDjQ6Nat21Vt5s2bZzg5ORnHjh0zDMMwQkNDDcAADCcnJyMkJMTo1auXsXr16jzbxcbGGoCxY8cOwzAMY/Xq1cbDDz9sBAcHG05OTka5cuWMzp07G+vXr7/mOW3atMmoX7++4eTkZDRo0MBYtGhRnv0ahmHs37/f6NGjh+Hj42O4uroaNWvWNJ577jkjJyfHMAzDyMnJMT788EOjRo0ahqOjo+Hv72906tTJWLt2rREfH2+UK1fOmDRpknV/mZmZRrNmzYxevXpZly1atMho0KCB4eTkZJQtW9Z46KGHrpm7sK71M3cj1289lPAOi028TLePN5CclsXDjSry7571ChygJSJSVPRQQrnT9FDCYqpyWXc+6dcIezsLi7af4PP1sWZHEhERsVkqVExwT3V/xj5QC4BJP8fw2954kxOJiIjYJhUqJhl0VyX6NA3GMGDkVzs4GH/R7EgiIiI2R4WKSSwWC291q0OzSr5cTM/iiTlbuZCiB1iJiIhcSYWKiZwc7Ih4rBEVy7hy9GwKw+ZvJzM7x+xYIiIiNkOFisn8PJz5bEAT3Jzs+f3gWd5eFm12JBEREZuhQsUG1Ary4v3eDQCYs+ko87YcNTeQiIiIjVChYiM61Q7kpY65D4p68/s9bDp01uREIiIi5lOhYkOGta1G1/rlycoxGDpvG8fO5v/UTRERkdJChYoNsVgs/OuRetSr6M35lEyenPsHF9MyzY4lImLzLBbLVQ8nLIzx48fToEEDU44thaNCxca4ONozvX8TAjyd2X/mEs8vjCI7p9g+5UBE5JadPn2aESNGUKVKFZydnQkODqZr166sWrXqlvf90ksvFXo/BRU1cXFx3H///becRfKnQsUGBXq7MH1AE5wc7Pg1Jp5/r9hndiQREauElASmRU0jISXhth/ryJEjNG7cmNWrVzNlyhR2797N8uXLadu2LcOGDbvp/RqGQVZWFh4eHvj5+d1SxsDAQJydnW9pH1IwFSo2qkGwD1MergdAxJpDLNlx0uREIiK5ElITiNgZQULq7S9Uhg4disViITIykkceeYSwsDBq167NCy+8wObNm/O0TUxMpEePHri5uVG9enWWLl1qXbdmzRosFgu//PILTZo0wdnZmfXr11/VS7JmzRqaNWuGu7s7Pj4+tGrViqNHjzJ79mwmTJjAzp07sVgsWCwWZs+eDVx96+fVV18lLCwMNzc3qlSpwrhx48jM/N9t/L+O+cUXX1CpUiW8vb3p06cPFy9ee4byjRs3cu+99+Lq6kpwcDAjR47k8uXLAMydOxcPDw8OHDhgbT9ixAjCwsKsbU6cOEGfPn3w9fXF3d2dJk2asGXLlhv6fphBhYoN696wAkPaVAXglUW7iDp+wdxAIiJ30Llz51i+fDnDhg3D3d39qvU+Pj553k+YMIFevXqxa9cuunTpQr9+/Th37lyeNq+88gqTJ08mJiaGevXq5VmXlZVF9+7dad26Nbt27WLTpk08/fTTWCwWevfuzYsvvkjt2rWJi4sjLi6O3r1755vb09OT2bNnEx0dzYcffshnn33G+++/n6fNoUOHWLJkCcuWLWPZsmWsXbuWf/7znwX+XezevZtOnTrx0EMPsWvXLhYuXMiGDRsYPnw4AAMGDLCec1ZWFsuXL+fTTz9l3rx5uLu7c+nSJVq3bs2pU6dYunQpO3fu5JVXXiEnpxhMMmoUY0lJSQZgJCUlmR3ltsnOzjGemB1phL66zGj69koj7kKq2ZFEpBhKTU01oqOjjdTUm/s/JP5yvLEncY+xJ3GP8e2+b406s+sY3+771ros/nJ8ESc2jC1bthiA8d133123LWCMHTvW+v7SpUuGxWIxfv75Z8MwDOO3334zAGPJkiV5tnvzzTeN+vXrG4ZhGGfPnjUAY82aNfke48q2fz/24sWLC8w2ZcoUo3Hjxnn24+bmZiQnJ1uXvfzyy0bz5s0L3Ef//v2Np59+Os+y9evXG3Z2dtbv6blz54yKFSsaQ4YMMcqVK2e8/fbb1raffvqp4enpaZw9e7bAYxS1a/3M3cj128HEGkkKwc7Owgd9GvLQtN/Zf+YST3+xla+faYmLo73Z0USkFPlm/zdE7IzIs2z8pvHWr4fUH8LQBkOL9JiGkftBAovFUqj2V/aQuLu74+npSXx83qfTN2nSpMDtfX19GTRoEJ06daJDhw60b9+eXr16ERQUdEO5v/32Wz744AMOHjzIpUuXyMrKwsvLK0+bSpUq4enpaX0fFBR0VdYrbdu2jYMHDzJv3jzrMsMwyMnJITY2llq1alGmTBlmzJhBp06duOuuu3jttdesbaOiomjYsCG+vr43dC62QLd+igEPZwc+H9CUMm6O7DqRxMvf7rL+AxYRuRN6hvVk4YMLWfjgQsa3HA/A+Jbjrct6hvUs8mNWr14di8VCTExModo7OjrmeW+xWK66tZHfLaQrzZo1i02bNnHXXXexcOFCwsLCrhoLcy2bN2+mT58+3H///SxbtowdO3YwZswYMjLyPnS2MFmvlJOTwzPPPENUVJT1tXPnTg4cOEDVqlWt7datW4e9vT2nTp2yjk0BcHV1LfQ52BoVKsVEiJ8b0/o1xsHOwg87TzFtzSGzI4lIKeLv5k+4XzjhfuHU8qsFQC2/WtZl/m7+RX5MX19fOnXqxCeffJLnovuXCxcuFPkxARo2bMjo0aPZuHEjderUYf78+QA4OTmRnZ19zW1///13QkNDGTNmDE2aNKF69eocPXrrj0Vp1KgRe/bsoVq1ale9nJycgNzBtlOmTOGHH37Ay8uLESNGWLevV68eUVFRV43ZKQ5UqBQjLav6MaFbbQD+9cs+Vuw5bXIiEZHba9q0aWRnZ9OsWTMWLVrEgQMHiImJYerUqbRs2bJIjxUbG8vo0aPZtGkTR48eZcWKFezfv59atXILs0qVKhEbG0tUVBSJiYmkp6dftY9q1apx7NgxFixYwKFDh5g6dSqLFy++5WyvvvoqmzZtYtiwYURFRXHgwAGWLl1qLUYuXrxI//79GTFiBPfffz/z58/n66+/5ptvvgGgb9++BAYG0r17d37//XcOHz7MokWL2LRp0y1nu91UqBQz/ZqHMqBlKADPLYwiJi7Z5EQiUtr4u/ozpP4Q/F2Lvhfl7ypXrsz27dtp27YtL774InXq1KFDhw6sWrWKiIiI6+/gBri5ubF3714efvhhwsLCePrppxk+fDjPPPMMAA8//DCdO3embdu2+Pv789VXX121j27duvH8888zfPhwGjRowMaNGxk3btwtZ6tXrx5r167lwIED3HPPPTRs2JBx48ZZx8+MGjUKd3d3Jk2aBEDt2rV55513ePbZZzl58iROTk6sWLGCgIAAunTpQt26dfnnP/+Jvb3tj3e0GMV4sENycjLe3t4kJSVdNVCpJMvMzmHgzEg2HjpLBR9Xlg5vhZ+HJhsSkYKlpaURGxtL5cqVcXFxMTuOlALX+pm7keu3qT0qlSpVsk6cc+XrVmYbLA0c7e2Y1q8RoX5unLyQypAvt5ORVQw+Cy8iInKDTC1U/vjjD+vEOXFxcaxcuRKAnj2LfvR4SePj5sSMgU3wdHYg8sg53lz6pz4JJCIiJY6phYq/vz+BgYHW17Jly6hatSqtW7c2M1axUS3Ak6l9G2KxwFeRx5mz8YjZkURERIqUzQymzcjI4Msvv2Tw4MEFTu6Tnp5OcnJynldp17ZmAKPvrwnA//0Yw/oDt//ZGyIiIneKzRQqS5Ys4cKFCwwaNKjANpMnT8bb29v6Cg4OvnMBbdhT91ThoUYVyM4xGDZvO4cTLpkdSUREpEjYTKEyY8YM7r//fsqXL19gm9GjR5OUlGR9HT9+/A4mtF0Wi4VJPerSMMSH5LQsnpy7laTUzOtvKCIiYuNsolA5evQov/76K08++eQ12zk7O+Pl5ZXnJblcHO35tH9jgrxdOJxwmZFf7SA7R4NrRUSkeLOJQmXWrFkEBATwwAMPmB2lWAvwdOGzAU1wcbRj7f4EJv8UQ0JKAtOippGQorErIiJS/JheqOTk5DBr1iwGDhyIg4Me5nyr6lTw5t2eDQD4fEMs87f+ScTOCBJSVaiIiEjxY3qh8uuvv3Ls2DEGDx5sdpQS44F6QYxsVx2AT9YcNDmNiMjtZ7FYWLJkyQ1vN378eBo0aGDKsW/V7Nmz8fHxuePHvdNML1Q6duyIYRiEhYWZHaXESEhJoFODTO6pnYbhdAKAtUeiiD4bTfTZaN0GEpFi5fTp04wYMYIqVarg7OxMcHAwXbt2ZdWqVbe875deeqnQ+ymoqImLi+P++++/5SySP91rKYG+2f8NETtzH9blkvu8Kqb9OZlpf+Z+PaT+EIY2GGpSOhEp7jLj47mw8Gt8evfCMSDgth7ryJEjtGrVCh8fH6ZMmUK9evXIzMzkl19+YdiwYezdu/em9msYBtnZ2Xh4eODh4XFLGQMDA29pe7k203tUpOj1DOvJwgcXsvDBhbzUaCwAaXEP4XvhVT5r9yU9w/SIAhG5eVkJCSR+8glZCbe/d3bo0KFYLBYiIyN55JFHCAsLo3bt2rzwwgts3rw5T9vExER69OiBm5sb1atXZ+nSpdZ1a9aswWKx8Msvv9CkSROcnZ1Zv379Vb0ka9asoVmzZri7u+Pj40OrVq04evQos2fPZsKECezcudP6XLrZs2cDV9/6efXVVwkLC8PNzY0qVaowbtw4MjP/N2XEX8f84osvqFSpEt7e3vTp04eLFy9e8+9i9uzZhISE4ObmRo8ePTh79uxVbX744QcaN26Mi4sLVapUYcKECWRlZVnXJyUl8fTTTxMQEICXlxf33XcfO3fuBCAhIYHAwEDrE5gBtmzZYn3yMuSOK33nnXeoVq0azs7OhISEMHHixGvmvlUqVEogfzd/wv3CCfcLp2n5ugD42FfmaFwZ3ll6CXeHMiYnFBG5vnPnzrF8+XKGDRuGu7v7Vev/Pj5jwoQJ9OrVi127dtGlSxf69evHuXPn8rR55ZVXmDx5MjExMdSrVy/PuqysLLp3707r1q3ZtWsXmzZt4umnn8ZisdC7d29efPFFateubX0+Xe/evfPN7enpyezZs4mOjubDDz/ks88+4/3338/T5tChQyxZsoRly5axbNky1q5dyz//+c8C/y62bNnC4MGDGTp0KFFRUbRt25a33347T5tffvmFxx57jJEjRxIdHc2nn37K7NmzrYWEYRg88MADnD59mp9++olt27bRqFEj2rVrx7lz5/D392fmzJmMHz+erVu3cunSJR577DGGDh1Kx44dgdz5zN555x3GjRtHdHQ08+fPp1y5cgXmLhJGMZaUlGQARlJSktlRbNaexD1Gndl1jJ/3/WHUG/+LEfrqMmPAjC1GRla22dFE5A5KTU01oqOjjdTU1JvaPuPMGSPlzz+NlD//NM59/bURXaOmce7rr63LMs6cKeLEhrFlyxYDML777rvrtgWMsWPHWt9funTJsFgsxs8//2wYhmH89ttvBmAsWbIkz3ZvvvmmUb9+fcMwDOPs2bMGYKxZsybfY1zZ9u/HXrx4cYHZpkyZYjRu3DjPftzc3Izk5GTrspdfftlo3rx5gfvo27ev0blz5zzLevfubXh7e1vf33PPPcakSZPytPniiy+MoKAgwzAMY9WqVYaXl5eRlpaWp03VqlWNTz/91Pp+6NChRlhYmNGvXz+jTp061p+Z5ORkw9nZ2fjss88KzHmla/3M3cj1W2NUSjh/V3+G1B9C44qhzBxUlX6fb2bt/gRe/mYn7/VqgJ1d/s9VEhG50oWFX5P4ySd5lp0e94b167LDhuE/YniRHtP47xPhC3r+299d2UPi7u6Op6cn8fHxedo0adKkwO19fX0ZNGgQnTp1okOHDrRv355evXoRFBR0Q7m//fZbPvjgAw4ePMilS5fIysq6aoLSSpUq4enpaX0fFBR0VdYrxcTE0KNHjzzLWrZsyfLly63vt23bxh9//JHnVkx2djZpaWmkpKSwbds2Ll26hJ+fX579pKamcujQIev7f//739SpU4evv/6arVu34uLiYs2Qnp5Ou3btbuBv49apUCnh/N38rQNn/UMh4rHGPDVnK0uiTlHG3Yk3Hgwv9H8CIlJ6+fTuhcd9bQFIi47m9Lg3CPy/t3AJDwfAwd+/yI9ZvXp1LBYLMTExdO/e/brtHR0d87y3WCzk5OTkWZbfLaQrzZo1i5EjR7J8+XIWLlzI2LFjWblyJS1atChU5s2bN9OnTx8mTJhAp06d8Pb2ZsGCBbz77rs3nPVKfxVt15KTk8OECRN46KGHrlrn4uJCTk4OQUFBrFmz5qr1V95GO3z4MKdOnSInJ4ejR49aC0BXV9frZrgdVKiUMm1rBPCvnvV4fuFOZv1+hLIezgxrW83sWCJi4xwDAq76hI9LeDiutWvftmP6+vrSqVMnPvnkE0aOHHlVkXHhwoXbMo9Iw4YNadiwIaNHj6Zly5bMnz+fFi1a4OTkRHZ29jW3/f333wkNDWXMmDHWZUePHr3lTOHh4VcNHv77+0aNGrFv3z6qVcv///RGjRpx+vRpHBwcqFSpUr5tMjIy6NevH71796ZmzZo88cQT7N69m3LlylG9enVcXV1ZtWrVdR95U5Q0mLYU6tGwIuMezP0t6F+/7GNB5DGTE4mI5G/atGlkZ2fTrFkzFi1axIEDB4iJiWHq1Km0bNmySI8VGxvL6NGj2bRpE0ePHmXFihXs37+fWrVqAbm3a2JjY4mKiiIxMZH09PSr9lGtWjWOHTvGggULOHToEFOnTmXx4sW3nO2vXp4pU6awf/9+Pv744zy3fQDeeOMN5s6dy/jx49mzZw8xMTHWXiGA9u3b07JlS7p3784vv/zCkSNH2LhxI2PHjmXr1q0AjBkzhqSkJKZOncorr7xCrVq1eOKJJ4DcXplXX32VV155hblz53Lo0CE2b97MjBkzbvn8rkWFSin1xN2VGdqmKgCvL97N8j9Pm5xIRIoLB39/yg4bdltu9/xd5cqV2b59O23btuXFF1+kTp06dOjQgVWrVhEREVGkx3Jzc2Pv3r08/PDDhIWF8fTTTzN8+HCeeeYZAB5++GE6d+5M27Zt8ff356uvvrpqH926deP5559n+PDhNGjQgI0bNzJu3LhbztaiRQs+//xzPvroIxo0aMCKFSusBchfOnXqxLJly1i5ciVNmzalRYsWvPfee4SGhgK5t5d++ukn7r33XgYPHkxYWBh9+vThyJEjlCtXjjVr1vDBBx/wxRdf4OXlhZ2dHV988QUbNmyw/l2PGzeOF198kTfeeINatWrRu3fva46tKQoWozA3vmxUcnIy3t7eJCUl6UnKN8EwDF5btJuFW4/j5GDHnMeb0bKq3/U3FJFiJy0tjdjYWCpXrmwdHClyO13rZ+5Grt/qUSnFLBYLE3vUoWN4OTKycnhq7lb+PJlkdiwRERErFSqlnIO9HVP7NqR5ZV8upWcxaFYkRxIvmx1LREQEUKEigIujPZ8NbEKtIC8SL2UwYGYk8clpZscSERFRoSK5vFwcmTO4KSG+bhw7l8LAWX+QlJp5/Q1FRERuIxUqYhXg6cIXTzSjrIczMXHJPDV3K2mZ154zQESKl2L8+QkpZorqZ02FiuQR6ufOnMFN8XR2IDL2HCO+2kFWdsGzJYpI8WBvbw/kTuglciekpKQAV8/Ce6M0M61cpXZ5bz4b2IQBMyNZGX2G1xfv5p2H62mqfZFizMHBATc3NxISEnB0dMTOTr+nyu1hGAYpKSnEx8fj4+NjLZJvluZRkQL9suc0Q77cRo4BQ9pU5dXONc2OJCK3ICMjg9jY2Gs+U0akqPj4+BAYGJjvL7k3cv1Wj4oUqFPtQCY/VJdXF+0mYs0h/NydePKeKmbHEpGb5OTkRPXq1XX7R247R0fHW+5J+YsKFbmm3k1DOHs5gynL9/H2jzH4ujvxUKOKZscSkZtkZ2enmWmlWNFNSrmuIa2r8sTdlQF4+dtdrN57xuREIiJSWqhQkeuyWCyM6VKLHg0rkJ1jMHTedrYdPWd2LBERKQVUqEih2NlZmPJIPdrU8CctM4fHZ/3BvtMXzY4lIiIlnAoVKTRHezum9WtEoxAfktOyGDBzCyfOp5gdS0RESjAVKnJD3JwcmDmoKWHlPDiTnM6AGZGcvZRudiwRESmhVKjIDfNxc2Lu4OZU8HHlcOJlHp/9B5fSs8yOJSIiJZAKFbkpgd4uzH2iGb7uTuw6kcQzX2wlPUvPBRIRkaKlQkVuWlV/D2Y/3hR3J3t+P3iWFxbuJDun2E50LCIiNkiFitySehV9+LR/ExztLfy4O47xS/fo6awiIlJkVKjILbu7elne790AiwW+2HyUD1cdMDuSiIiUECpUpEg8WK88b3WrA8AHvx7gi01HzA0kIiIlggoVKTL9W4TyXPvqALyxdA/Ldp0yOZGIiBR3KlSkSI1qV53+LUIxDHh+YRQbDiSaHUlERIox0wuVkydP8thjj+Hn54ebmxsNGjRg27ZtZseSm2SxWBj/j9o8UC+IzGyDp7/Yys7jF8yOJSIixZSphcr58+dp1aoVjo6O/Pzzz0RHR/Puu+/i4+NjZiy5RfZ2Ft7rVZ+7q5UlJSObx2f/waGES2bHEhGRYshimPhZ0tdee43ff/+d9evX39T2ycnJeHt7k5SUhJeXVxGnk1t1KT2LRz/bzK4TSVTwcWXRkLsI9HYxO5aIiJjsRq7fpvaoLF26lCZNmtCzZ08CAgJo2LAhn332mZmRpAh5ODswa1BTqpR15+SFVAbM3MKFlAyzY4mISDFiaqFy+PBhIiIiqF69Or/88gvPPvssI0eOZO7cufm2T09PJzk5Oc9LbJufhzNzn2hGOS9n9p+5xODZf5Caoan2RUSkcEy99ePk5ESTJk3YuHGjddnIkSP5448/2LRp01Xtx48fz4QJE65arls/tm//mYv0/M8mklIzaVvDn+kDmuBob/pYbhERMUGxufUTFBREeHh4nmW1atXi2LFj+bYfPXo0SUlJ1tfx48fvREwpAmHlPJk5qAkujnb8ti+BV77dRY6eCyQiItdhaqHSqlUr9u3bl2fZ/v37CQ0Nzbe9s7MzXl5eeV5SfDQO9SWiX2Ps7Sws3nGSiT/F6LlAIiJyTaYWKs8//zybN29m0qRJHDx4kPnz5zN9+nSGDRtmZiy5jdrWDOBfj9QDYMaGWP6z9rDJiURExJaZWqg0bdqUxYsX89VXX1GnTh3+7//+jw8++IB+/fqZGUtus4caVWTsA7UAeGf5Xhb+kf+tPhEREVMH094qzaNSvL2zfC8Raw5hZ4GIxxrTqXag2ZFEROQOKDaDaaV0e6VTDXo1qUiOASO+2sGWw2fNjiQiIjZGhYqYxmKxMKlHXTqElyMjK4cn52wl+pTmxhERkf9RoSKmcrC346O+DWlW2ZeL6VkMmBnJsbMpZscSEREboUJFTOfiaM/nA5tQK8iLxEvp9J+5hfiLaWbHEhERG6BCRWyCl4sjcwY3JcTXjaNnUxg08w+S0zLNjiUiIiZToSI2I8DThS+eaEZZD2ei45J5as5W0jL1XCARkdJMhYrYlFA/d2Y/3hRPZwe2xJ5j5Fc7yMrOISElgWlR00hISTA7ooiI3EEqVMTm1KngzfQBTXBysGNF9BnGLP6T+JR4InZGkJCqQkVEpDRRoSI2qWVVP6b2aYidBRZuPc7cTUfNjiQiIiZQoSI2q3EVe0Z0dsXO5STf7dkCQMzZGKLPRhN9Nlq3gURESgEHswOIFOSb/d8w80gE7pX/t2z8pvHWr4fUH8LQBkPvfDAREbljVKiIzeoZ1pM2wW0wDIMP169hU/J/SIt7iMca3kXPJsH4u/qbHVFERG4z3foRm+Xv5k+4Xzi1y9Zm1D1tAMhOq8Cs37JYucORsq5lzQ0oIiK3nQoVKRYsFgsAA1uGAvD+r/v594p9FOOHf4uISCGoUJFiwd/VP3dMyj2NGPtALQA++e0Qk36KUbEiIlKCaYyKFAv+bv7WgbNP3uOPk4Mdb3y/h8/Wx5KZbfBm13Brr4uIiJQc6lGRYmlAy0pMfqguFgvM3niE1xf/SU6OelZEREoaFSpSbPVtFsK/HqmPnQW+ijzGK4t2ka1iRUSkRFGhIsXaI40r8n7vBtjbWfh22wle+DqKrOwcs2OJiEgRUaEixV63BhX4qG9DHOwsfB91ilELoshUsSIiUiKoUJESoUvdIKb1a4SjvYUfd8cxdN520rOyzY4lIiK3SIWKlBgdawdan7q8MvoMz36xjbRMFSsiIsWZChUpUdrWCGDmwKa4ONrx274Enpq7ldQMFSsiIsWVChUpce6uXpbZjzfDzcme9QcSeXx2JJfTs8yOJSIiN0GFipRILar4MXdwMzycHdh8+BwDZ0ZyMS3T7FgiInKDVKhIidWkki9fPtkcLxcHth49T/8ZkSSlqlgRESlOVKhIidYg2If5T7XAx82RqOMX6Pf5Zs5fzjA7loiIFJIKFSnx6lTwZsHTLfBzd+LPk8n0/WwziZfSzY4lIiKFoEJFSoWagV4seLoF/p7O7D19kb7TNxOfnGZ2LBERuQ4VKlJqVC/nycKnWxDo5cKB+Ev0mb6Z00kqVkREbJkKFSlVqvh7sPCZFlTwceVw4mV6fbqJE+dTzI4lIiIFUKEipU6onzsLn2lBiK8bx86l0PvTzRw7q2JFRMQWqVCRUqliGTcWPtOCKmXdOXkhld7TNxGbeNnsWCIi8jcqVKTUCvJ2ZcHTLage4EFcUhq9Pt3EwfiLZscSEZErmFqojB8/HovFkucVGBhoZiQpZQK8XPjq6RbUDPQk4WI6vT/dzN7TyWbHEhGR/zK9R6V27drExcVZX7t37zY7kpQyZT2c+eqpFtSp4MXZyxn0nb6ZP08mmR1LRESwgULFwcGBwMBA68vf39/sSFIKlXF3Yt6TLagf7MP5lEwe/WwzUccvmB1LRKTUM71QOXDgAOXLl6dy5cr06dOHw4cPF9g2PT2d5OTkPC+RouLt6siXTzSjSWgZktOyeOzzLWw7es7sWCIipZqphUrz5s2ZO3cuv/zyC5999hmnT5/mrrvu4uzZs/m2nzx5Mt7e3tZXcHDwHU4sJZ2niyNzBjejeWVfLqVn0X9GJJsP5//zKCIit5/FMAzD7BB/uXz5MlWrVuWVV17hhRdeuGp9eno66en/e0ZLcnIywcHBJCUl4eXldSejSgmXmpHNU3O3suFgIi6Odnw+oCl3Vy9rdiwRkRIhOTkZb2/vQl2/Tb/1cyV3d3fq1q3LgQMH8l3v7OyMl5dXnpfI7eDqZM/nA5vQpoY/aZk5DJ7zB7/tizc7lohIqWNThUp6ejoxMTEEBQWZHUUEF0d7Pu3fmA7h5cjIyuGZudtYGX3G7FgiIqWKqYXKSy+9xNq1a4mNjWXLli088sgjJCcnM3DgQDNjiVg5O9gzrV8jutQNJCM7hyFfbuOn3XFmxxIRKTUczDz4iRMn6Nu3L4mJifj7+9OiRQs2b95MaGiombFE8nC0t2Nqn4Y42u/k+6hTjPhqB5nZOXRrUMHsaCIiJZ6phcqCBQvMPLxIoTnY2/FerwY42tvx7bYTPL8wisxsg0caVzQ7mohIiWZTY1REbJm9nYUpD9ejb7MQcgx4+dudLIg8ZnYsEZESrdCFiq+vL4mJiQAMHjyYixf18DYpfezsLEzqUYeBLUMxDHjtu93M3XTE7FgiIiVWoQuVjIwM60ywc+bMIS0t7baFErFlFouF8f+ozVP3VAbgje/38Pn6gmdUFhGRm1foMSotW7ake/fuNG7cGMMwGDlyJK6urvm2nTlzZpEFFLFFFouF17vUwsnBjk9+O8TbP8aQkZ3D0DbVzI4mIlKiFLpQ+fLLL3n//fc5dOgQAElJSepVkVLNYrHwUscaONrb8cGvB5iyfB+ZWQYj21XDYrGYHU9EpES4qSn0K1euzNatW/Hz87sdmQrtRqbgFbmdPvntIP/6ZR8Aw9pW5aWONVSsiIgU4LZMoX/lYNq2bdvi5OR0aylFSpBhbasx9oFaAHzy2yEm/RSDDT1GS0Sk2NJgWpEi8uQ9VZjwj9oAfLY+lgk/RKtYERG5RRpMK1KEBt5VCUd7O8Ys2c3sjUdIz8phYvc62NnpNpCIyM24qcG0FotFg2lFCvBo8xAc7S28smgXX0UeIzM7h3ceroe9ihURkRumwbQit8n3USd54eudZOcYdGtQnnd71ud8+lm+2f8NPcN64u/mb3ZEERFT3JbBtFeKjY21FinqVRHJX7cGFfiob0Mc7Cx8H3WKUQuiiLsUT8TOCBJSE8yOJyJSLNxUoZKTk8P//d//UaFCBTw8PDh8OHdWznHjxjFjxowiDShSnHWpG8S0fo1wtLfw4+44/vlzjNmRRESKlZsqVN5++21mz57NlClT8nxMuW7dunz++edFFk6kJGhY2Z5xD3vh7H6KP+J2AxB15k+iz0YTfTaahBT1roiIFOSmxqhUq1aNTz/9lHbt2uHp6cnOnTupUqUKe/fupWXLlpw/f/52ZL2KxqhIcTAtahoROyMKXD+k/hCGNhh6BxOJiJjrRq7fhf7Uz5VOnjxJtWpXP9MkJyeHzMzMm9mlSInVM6wnbYLbALD8wDZm7ZtCWtxD+NhX4o0Ha9MitLK5AUVEbNhN3fqpXbs269evv2r5N998Q8OGDW85lEhJ4u/mT7hfOOF+4XSu3hiACq7VSTgbwCvzzxF1JMfkhCIituumelTefPNN+vfvz8mTJ8nJyeG7775j3759zJ07l2XLlhV1RpESZ0rPenz0cyrrDyTy9BdbGdOlFk/cXVnPBxIR+Zub6lHp2rUrCxcu5KeffsJisfDGG28QExPDDz/8QIcOHYo6o0iJ4e/qz5D6Q6jsE8TMQU3p2ywEw4C3f4xh3Pd/kpWt3hURkSvd1GBaW6HBtFLcGYbB5+tjmfRzDIYB94b588mjDfF0cTQ7mojIbXMj1+9bKlS2bdtGTEwMFouF8PDwOz4+RYWKlBS/7DnNcwuiSM3MpkY5T2YMakLFMm5mxxIRuS1ue6ESHx9Pnz59WLNmDT4+PhiGQVJSEm3btmXBggX4+9+ZqcFVqEhJsvtEEk/M+YP4i+mU9XDm84FNaBDsY3YsEZEid9un0B8xYgTJycns2bOHc+fOcf78ef7880+Sk5MZOXLkTYUWKe3qVvTm++GtqBXkReKldHp/uomfdseZHUtExFQ31aPi7e3Nr7/+StOmTfMsj4yMpGPHjly4cKGo8l2TelSkJLqUnsXIr3awem88AK92rsmzravoE0EiUmLc9h6VnJwcHB2vHuzn6OhITo4+tSByKzycHfhsQBMG3VUJgHeW7+W1RbvJyNK/LREpfW6qULnvvvsYNWoUp06dsi47efIkzz//PO3atSuycCKllb2dhfH/qM2Ef9TGzgILtx5n4MxIklI087OIlC43Vah8/PHHXLx4kUqVKlG1alWqVatG5cqVuXjxIh999FFRZxQptQbeVYkZA5vi7mTPpsNn6RHxO0fPXjY7lojIHXNLH09euXIle/fuxTAMwsPDad++fVFmuy6NUZHSIiYumSdm/8GppDTKuDkyfUATmlbyNTuWiMhNuW1jVFavXk14eDjJyckAdOjQgREjRjBy5EiaNm1a4DOAROTW1AryYsmwVtSt4M35lEz6fbaF76NOmh1LROS2u6FC5YMPPuCpp57Kt/rx9vbmmWee4b333iuycCLyPwFeLix8pgWdapcjIzuHUQui+ODX/RTjyaVFRK7rhgqVnTt30rlz5wLXd+zYkW3btt1yKBHJn5uTAxH9GvPMvVUA+ODXAzy/MIr0rGyTk4mI3B43VKicOXMm348l/8XBwYGEhIRbDiUiBbOzszC6Sy0mP1QXezsLS6JO8djnWzh3OcPsaCIiRe6GCpUKFSqwe/fuAtfv2rWLoKCgWw4lItfXt1kIcx5vhqeLA38cOU+Pab9zKOGS2bFERIrUDRUqXbp04Y033iAtLe2qdampqbz55ps8+OCDRRZORK7t7upl+W7IXVQs48rRsyn0+OR3Nh5KNDuWiEiRuaFCZezYsZw7d46wsDCmTJnC999/z9KlS3nnnXeoUaMG586dY8yYMTcVZPLkyVgsFp577rmb2l6ktKpezpMlw1rRKMSH5LQsBsyI5Outx82OJSJSJBxupHG5cuXYuHEjQ4YMYfTo0dZPG1gsFjp16sS0adMoV67cDYf4448/mD59OvXq1bvhbUUEyno4M/+pFrz87S5+2HmKV77dxZHEy7zUsQZ2dnpGkIgUXzdUqACEhoby008/cf78eQ4ePIhhGFSvXp0yZcrcVIBLly7Rr18/PvvsM95+++2b2oeIgIujPR/2bkBlPzemrj7ItDWHOHo2hXd71cfF0d7seCIiN+WmptAHKFOmDE2bNqVZs2Y3XaQADBs2jAceeKBQs9qmp6eTnJyc5yUi/2NnZ+GFjjV4t2d9HO0t/Lg7jj7TN5NwMd3saCIiN+WmC5WisGDBArZv387kyZML1X7y5Ml4e3tbX8HBwbc5oUjx9HDjinz5RHN83ByJOn6B7p/8zv4zF82OJSJyw0wrVI4fP86oUaP48ssvcXFxKdQ2o0ePJikpyfo6flwDBkUK0ryKH4uHtqJyWXdOXkjl4WkbWbdf8xyJSPFySw8lvBVLliyhR48e2Nv/7955dnY2FosFOzs70tPT86zLjx5KKHJ95y9n8MyX24iMPYe9nYW3utWmX/NQs2OJSCl2I9dv0wqVixcvcvTo0TzLHn/8cWrWrMmrr75KnTp1rrsPFSoihZOelc3o73bz3fbcBxk+eXdlRnephb0+ESQiJriR6/cNf+qnqHh6el5VjLi7u+Pn51eoIkVECs/ZwZ53e9anSll3/r1iP59viOXouRQ+7NMANyfT/hsQEbkuUwfTisidY7FYGH5fdab2bYiTgx0ro8/Q69NNnEm+eqZpERFbYdqtn6KgWz8iN2fb0fM8PXcrZy9nEOjlwoxBTahd3tvsWCJSStzI9Vs9KiKlUOPQMiwe2opqAR6cTk6j5382sSrmjNmxRESuokJFpJQK8XNj0ZC7aFXNj5SMbJ6au5WZG2Ipxp2sIlICqVARKcW8XR2Z/Xgz+jYLJseAt5ZF8+bSPWRl55gdTUQEUKEiUuo52tsxqUddXu9SE4sF5m46ypNzt3IxLdPsaCIiKlREJPcTQU/fW5WIfo1xcbRjzb4Eev5nEycvpJodTURKORUqImLVuU4gXz/TEn9PZ/aevki3j39n5/ELZscSkVJMhYqI5FGvog/fD2tFzUBPEi+l03v6Jpb/GWd2LBEppVSoiMhVyvu48u2Qu2hTw5+0zBye/XI7/1l7SJ8IEpE7ToWKiOTLw9mBzwc0YWDL3AcY/vPnvYz+bjeZ2TkkpCQwLWoaCSl6GrOI3F4qVESkQA72dkzoVofxXcOxs8CCP44zaFYksRfiiNgZQUKqChURub30NDIRua5BrSoT4ufGiPk7+P3gWY5/fQDKmJ1KREoD9aiISKHUDbHjnUf9CCibQFzaQQAW79lC9Nloos9G6zaQiNwW6lERkUL5Zv83ROyMAH9w+e+yBbHvsSA29+sh9YcwtMFQ0/KJSMmkQkVECqVnWE/aBLcBYHfCHt7e8hZpcQ+RnVaB6gEetPRvZW5AESmRdOtHRArF382fcL9wwv3CqetfG4DX23XAy64S+45503/6Xr6POmlyShEpaVSoiMhNa17Fl59H3UOzSr5cSs9i1IIoXvl2JykZWWZHE5ESQoWKiNwwf1d/htQfgr+rP0Hersx/qjkj21XHYoGvt56g60cbiIlLNjumiJQAFqMYTzWZnJyMt7c3SUlJeHl5mR1HpNTbdOgszy3cwZnkdJwc7Bj3YDiPNQ/BYrGYHU1EbMiNXL/VoyIiRaZlVT9+HnUv99UMICMrh3FL/mTIl9tJSsk0O5qIFFMqVESkSPm6OzFjYBPGPRiOo72F5XtO02XqerYdPWd2NBEphlSoiEiRs1gsPHF3Zb4b0opQPzdOXkil16eb+eS3g2TnFNu7zSJiAhUqInLb1K3ozbIRd9OtQXmycwz+9cs+BszcQvzFNLOjiUgxoUJFRG4rTxdHPujdgH89Ug9XR3t+P3iWLh+uZ+1+TbkvItenQkVEbjuLxULPJsH8MOJuagV5kXgpg4EzI5n8UwwZWTlmxxMRG6ZCRUTumGoBHiweehcDWoYC8Om6w/T8dBPHzqaYnExEbJUKFRG5o1wc7XmrWx3+81hjvF0d2Xn8Ag9MXc+yXafMjiYiNkiFioiYonOdQH4adQ9NQstwMT2L4fN3MPq7XaRmZJsdTURsiAoVETFNBR9XFjzdghH3VcNiga8ij/OPjzew7/RFs6OJiI1QoSIipnKwt+PFjjWY90Rz/D2dORB/iX98vIF5W45SjJ/wISJFRIWKiNiEu6qV5edR99Cmhj/pWTmMWfwnw+fvIClV0++LlGYqVETEZpT1cGbmwKaM6VILBzsLP+6O44Gp69l+7LzZ0UTEJCpURMSm2NlZeOreKiwachchvm6cOJ9Kr/9sImLNIXI0/b5IqaNCRURsUv1gH34ceTdd65cnK8fgneV7GTgrkoSL6WZHE5E7yNRCJSIignr16uHl5YWXlxctW7bk559/NjOSiNgQTxdHpvZpwDsP18XF0Y71BxK5/8P1rD+g6fdFSgtTC5WKFSvyz3/+k61bt7J161buu+8+unXrxp49e8yMJSI2xGKx0LtpCD8Mv5uagZ4kXkqn/4xI3lm+l8xsTb8vUtJZDBv7/J+vry//+te/eOKJJ67bNjk5GW9vb5KSkvDy8roD6UTETGmZ2bz9YzRfbj4GQMMQH6b2aUiwr5vJyUTkRtzI9dtmxqhkZ2ezYMECLl++TMuWLc2OIyI2yMXRnre71yWiXyO8XBzYcewCXaau56fdcWZHE5HbxMHsALt376Zly5akpaXh4eHB4sWLCQ8Pz7dteno66en/G0iXnJx8p2KKiA25v24QdSp4M2rBDrYfu8DQedt5tHkIbzwYjoujvdnxRKQImd6jUqNGDaKioti8eTNDhgxh4MCBREdH59t28uTJeHt7W1/BwcF3OK2I2IpgXzcWPtOSoW2qYrHA/C3H6Pbx7xw4o+n3RUoSmxuj0r59e6pWrcqnn3561br8elSCg4M1RkWklNtwIJHnFkaReCkdF0c7xnetTe+mwVgsFrOjiUg+iuUYlb8YhpGnGLmSs7Oz9aPMf71ERO6unjv9/r1h/qRl5vDad7sZ8dUOktM0/b5IcWdqofL666+zfv16jhw5wu7duxkzZgxr1qyhX79+ZsYSkWLI39OZ2YOaMvr+mjjYWVi2K3f6/ajjF8yOJiK3wNRC5cyZM/Tv358aNWrQrl07tmzZwvLly+nQoYOZsUSkmLKzs/BM66p882xLKpZx5fi5VB6J2Mj0dZp+X6S4srkxKjdC86iISEGSUjN5/bvd/Pjfjy63DvPn3V71KevhbHIyESnWY1RERIqCt6sjHz/akMkP1cXZwY61+xO4/8P1/H4w0exoInIDVKiISIllsVjo2yyEH0bcTVg5DxIupvPYjC3865e9ZGXnkJCSwLSoaSSk6NlBIrZKhYqIlHhh5Tz5ftjd9G0WgmHAJ78dovf0zew5c5yInREkpKpQEbFVKlREpFRwdbJn8kN1+eTRRng6O7Dt6HlGfLXD7Fgich0qVESkVGlWzYGpA/2pFZpMml3uww3H/rScDceiiD4brdtAIjZGn/oRkVJlWtQ0InZGFLj+mXrPMrzhsDuYSKT0uZHrt+kPJRQRuZN6hvWkTXAbAGLOxjB+03j80x/jyKkyACy7WJ57/S9Qr6KPeSFFxEqFioiUKv5u/vi7+edZ9lGPB9l52JN//hzD3hNZdPvkdwa0COXFTjXwcnE0KamIgMaoiIhgsbPwaPMQVr3Yhh4NK2AYMGfTUdq9u5Yfdp6iGN8hFyn2VKiISKnl7+rPkPpD8HfN7WHx93Tm/d4NmP9kc6qUdSfhYjojvtrBwFl/cPTsZZPTipROGkwrIpKP9Kxs/rPmMJ+sOUhGVg5ODnaMaFuNp1tXwdnB3ux4IsWaptAXEblFzg72jGpfnV+eu5e7q5UlIyuHd1fu5/4P17PxkKbhF7lTVKiIiFxD5bLufPFEM6b2bUhZD2cOJ1zm0c+28MLCKBIvpZsdT6TEU6EiInIdFouFf9Qvz6oXW9O/RSgWC3y34yTt3l3LV5HHyMkptnfQRWyexqiIiNygqOMXeP273UTHJQPQKMSHiT3qUitI/w+JFIbGqIiI3EYNgn1YOrwV4x4Mx93Jnu3HLvDgRxuY9FMMKRlZZscTKVFUqIiI3AQHezueuLsyv77YmvvrBJKdYzB93WE6vLeOldFnzI4nUmKoUBERuQVB3q5EPNaYmYOaULGMKycvpPLU3K08NXcrJy+kmh1PpNhToSIiUgTuq1mOlc+3ZkibqjjYWVgZfYb2765l+rpDZGbnmB1PpNhSoSIiUkRcnex5tXNNfhp1D00rlSE1M5tJP+2l60cb2Hb0vNnxRG5YZnw8CR99TGZ8vGkZVKiIiBSxsHKeLHy6JVMeqUcZN0f2nr7IwxEbGf3dbi6kZJgdz2bZwkWxqJSUc8lKSCDxk0/ISkgwLYMKlQKUlB8ynYdt0XnYltt5HnZ2Fno1CWbVi23o2bgiAF9FHqPdu2v5bvuJIn3QYUn5ftjCRbGomHouhgHZmZCZBumXIPUCXD4LF89A0km4cAzOHYbEAxAfA6d3w6koOLENjm2BI7/D4bVwaHXue5M5mB3AVv31Q+ZxX1scAwLMjnPTdB62RedhW+7Eefi6O/GvnvV5pHFFxiz5k4Pxl3jh6518s/UEb/eoQ1V/j1s+Rkn5flzFMMDIgZxsMLL/9uf1luf8bd3f319r+TX2ne+6fPZx7L+PWfj9Q4j1gJys3OU5Wf9tk5V32VV/XtnuyvZZucfL8z477z6NWxsTlZlqR1Zq7vOs0s47Aj6kRUdb1zv4+9/RnzMVKiJy+/x1oTEMwLjiz78tM3L+tt7IZ5v82uW37+ttc8WyhMO5OeNjwDv1irw5V+w/J5/lRgHL/97+fzmbGzksb53Dun1nWBVzmuyjOcye+g2tq/vSuro/jnbc/LGPnc09jy3/gRNeedf9dcG+8n1OzjXWG3kvynnaXLHfq9pcb72RT45sMi/nkJViASOHtLMWwI20dzpBmXQwDBxcs3F0LR6DkfO9wK//AcpkAtjGudg5XPGyB4v9VcsuHMoh8Y/MPJudHveG9euyw4bhP2L4HYusQuUKmfHxud10CftIW70QgLSFb0FF79x/MF7OOHq5XLFFPl23BXbnFrbtrbfLTE4n62LuM0jSTl7M/XP+WCjvCYCDpxOOXk757N/IZ1khlt+mtpkXM8lKzr2fnxaXkvvn7OchyA0wcPBwxNHDIZ99G1ef0w2vuzJXPu1uYF3mxSyyLudeZNLic//xp0UMgoDc7A5udji6W/Jul+dP8llmFNCeG2xf+H1lpkBW7reBtHP2gBtpUzqDbyYY//1P2OW/F6L8fj5tRL4Xk5kj7sjFxAG4D7jPHvjrAcyH//u6Qfmex2/f2tZFsRAu7PEkcY9nnmWnIz2B3GVla1/Ev+7FAra2gMXuigvuX3/a/e29ff7tLHaFb5vvcrs8x7uw8hCJKw7mPZc/fKxfl+3aEP8Oza9bKOT/p8MVbe2v0f6vtnZ/269Dbs5C8ImPx+O/t6zSoqM5Pe4NAv/vLVzCw4HcHpU7SVPoXyHho49J/OSTAtdf+x+M7UjYffU//CvpPO4snUcRsdiRe2GyYL1AWb/Ob1l+21hI2G5P4o6C/8Mu28Qe/2ZO/9uXxe6K/fy1LL/lf29PActzvzYsFs5czCAm7iKpWQY5WAjycaN2eW9cnBzz2Td59pGw4hCJKw8WdBqUvb82/g/Wv+LiemUO+yv2W1Trr8xqX+htM88lkXXuAlgspO0/zOnJHxL4+gu41KoBFjsc/ANybzPkWzhYbvnHqihZf9ml4At8cbs1l7pnD0cefoRKi77FtXbtItvvjVy/1aNyBZ/evfC4ry2cO0zamkWcnreFwH7NcQn2BcDBxw283f62VT7/UAr8x1PYtvm1K/z+fBqn4JH03x6IY4mcnruBwAH34BJSFiwWHLzdwMct7/bWHPktK8Tym26bN/uVbX1aXcLjwmXAQtqRM5ye8QuBT3TCpXIgAA4+nlDGI2/2v59Hvu+vte7vWfJpe4PH8OmUjMf53GfCpB0+yemPFxI4vA8uVYMBCw5+XuDrk082y9V/FnodN7ldQevA5+x5PM6ez72g7DuYe0EZ/TwuNavnnoe/H/j7/20/dtbtCyww8ikm8iwr4otRoX5bvAMXEwsQCLinZfLeyv3M2XiEnATwTHbg5c416Nc8FHu7gs/dp3k8Hs+afx63yjEAHP9647UH+BCXxncV6UXxTnEMCLiqEHEJDy+W52JLVKhc4X8/ZLXBtwrMewSXh14udj9kjlzxD3/PHpi7AZduo4r/ecz4BZcuTxX/8/h4IS5tHyl+5+F3xXl4BgEf4tKkVfE7Dxu7mHi6OPJm19o83Kgiry/eza4TSbzx/R4WbTvBxB51qVPBO9/tbO08pGRy8Pen7LBhd/x2z5X08WQRERtQp4I3i4e24q1utfF0dmDniST+8fEGJvywh4tpmdffQQlgCxfFolJSzsUxIAD/EcNNvWWlQqUAJeWHTOdhW3QetsXWzsPezsKAlpVY9WJrutYvT44Bs34/Qvv31vLT7rgC516xtfO4WbZwUSwqJelczKbBtCIiNmrd/gTGff8nR8/mjjlrU8Oft/5RhxC/v4+VEylebuT6rR4VEREbdW+YP788dy8j76uGo72FNfsS6PD+Wj757SAZWbb/0WORoqBCRUTEhrk42vNCxxr8POpeWlbxIz0rh3/9so8uU9ez5XDuRG8JKQlMi5pGQkrxn3pe5O9UqIiIFAPVAjyY/1Rz3u9dHz93Jw7GX6L39M289M1ODp07RcTOCBJSVahIyWNqoTJ58mSaNm2Kp6cnAQEBdO/enX379pkZSUTEZlksFno0rMiqF1vTt1kIAN9uO8EzX24DICen2A45FCmQqYXK2rVrGTZsGJs3b2blypVkZWXRsWNHLl++bGYsERGb5uPmxAudA3n3MT+qVDhPCkcBePrrpXy6eS17EvboNpCUGDb1qZ+EhAQCAgJYu3Yt995773Xb61M/IlJaTYuaRsTOiALXdwh6jH+3fwW7a8xuK2KWYjuFflJSEgC+vr75rk9PTyc9Pd36Pjk5+Y7kEhGxNT3DetImuA0AMWdjGL9pPK28h/D7HmcuZ2az+IAne2M28HyHMNrXCsBiY8/FESksm+lRMQyDbt26cf78edavX59vm/HjxzNhwoSrlqtHRURKs+iz0fRe1puFDy6kvGs1ZmyIZeaGWC5nZANQt4I3L3QIo00NfxUsYhOK5Twqw4cPZ9euXXz11VcFthk9ejRJSUnW1/Hjx+9gQhER2+fj5sSLHWuw/tX7GNKmKm5O9uw+mcTjs/+gx7SNrN2fUOAMtyK2yCZ6VEaMGMGSJUtYt24dlStXLvR2GqMiIpI7j8o3+7+hZ1hP/N3yTqOfeCmd6esOM3fTEdIycyeJaxxahhc6hHFXVT/1sIgpbuT6bWqhYhgGI0aMYPHixaxZs4bq1avf0PYqVERECif+Yhr/WXOYeVuOkv7fWW2bVfblhQ5htKjiZ3I6KW2KTaEydOhQ5s+fz/fff0+NGjWsy729vXF1db3u9ipURERuzJnkNCLWHGL+lmNkZOcWLHdV9eP5DmE0rZT/BxlEilqxKVQK6nKcNWsWgwYNuu72KlRERG7OqQupTFtzkIV/HCczO/cycE/1sjzfIYxGIWVMTiclXbEpVG6VChURkVtz4nwKn/x2kG+2niDrvzPbtqnhz/Ptw6gf7GNuOCmxVKiIiMgNOX4uhY9WH2DR9pNk/7dgaV8rgOfah1GngrfJ6aSkUaEiIiI35UjiZaauPsCSHSf569FBnWqX47n2YdQK0v+zUjRUqIiIyC05lHCJqasOsHTnKf66SjxQN4hR7asTVs7T3HBS7KlQERGRInHgzEU+WHWAH3fFAWCxQNd65RnZrjrVAjxMTifFlQoVEREpUntPJ/Phrwf4+c/TANhZoFuDCoxsV53KZd1NTifFjQoVERG5LfacSuKDXw+wMvoMAPZ2Fno0rMDI+6oT4udmcjopLlSoiIjIbbXrxAU++PUAq/fGA+BgZ+GRxhUZ1rYawb4qWOTaVKiIiMgdsePYed7/9QDr9icA4GhvoVeTYIa1rUZ5n+vPMC6lkwoVERG5o7YdPcf7Kw+w4WAiAE72dvRpFszQNtUI9HYxOZ3YGhUqIiJiii2Hz/Leyv1siT0HgJODHf2ahzCkTVUCPFWwSC4VKiIiYqqNhxJ5b8V+th49D4CLox39W4TyTOuqlPVwNjmdmE2FioiImM4wDDYcTOS9lfvZcewCAK6O9gy8qxJP31sFX3cncwOKaVSoiIiIzTAMgzX7E/hg5X52nkgCwN3JnsdbVebJeyrj45ZbsCSkJPDN/m/oGdYTfzd/MyPLbXYj12+7O5RJRERKKYvFQtsaASwZ1ooZA5tQu7wXlzOy+fi3g9zzzm+8t3I/SamZJKQmELEzgoTUBLMjiw1xMDuAiIiUDhaLhXa1ynFfzQBWRJ/h/ZX72Xv6IlNXHWD277F0b15sO/jlNlKhIiIid5TFYqFT7UA61CrH11F7+HRDFEfPpfDVzpO4BMG7a1bTt0Eq5X1c8Xf1122gUk6FioiImMLOzsI5u3Ukekfg7v2/5ZGXPiVyw6cAtAt8jCntXsbJQSMVSisNphUREdMkpCRYx6TsSYzmrc0TCM0ZSMxRLwzAyPLEz8WfXk0q0rdZiKbnLyFu5PqtHhURETGNv9vVt3am/KMLnpZKLPzjOAu3HifhYjrT1hwiYu0h7q3uz6PNQ2hXMwAHe/WylAYqVERExOYE+7rxUqcajGpfnV+jzzA/8hjrDySydn8Ca/cnEOjlQq+mwfRpGqxnCpVwuvUjIiI24XrzqBxJvMxXfxzj260nOHs5AwA7C9xXM4B+zUO5N8wfezvLnY4tN0ETvomISImVnpXNL3vOMH/LUTYfPmddXsHHlT5Ng+ndNJgALz1XyJapUBERkVLhYPwlvoo8xrfbTpCUmgmAg52F9rXK0a9FCK2qlsVOvSw2R4WKiIiUKmmZ2fy0O475W45ZH4QIEOLrxqPNQ3ikcUU9DNGGqFAREZFSa9/pi8zfcpTvtp/kYnoWAI72uZPM9WseSosqvlgs6mUxkwoVEREp9VIysli2M455kcfYefyCdXkVf3cebZbby/LXAxHlzlKhIiIicoU/TyYxP/IY3+84yeWMbACcHOx4oG4Q/ZqH0Di0jHpZ7iAVKiIiIvm4lJ7F91Enmbf5GNFxydblNcp58mjzELo3rIC3q6OJCUsHFSoiIiLXYBgGO08kMX/LUZbuPEVaZg4ALo52/KN+eR5tHkr9it7qZblNVKiIiIgUUlJqJkt2nGTelqPsP3PJujw8yIt+LULo1qACHs6ayL0oqVARERG5QYZhsO3oeeZtOcaPu+PIyMrtZXF3sqdbwwo82iyEOhW8r7MXKQwVKiIiIrfg/OUMFm0/wfwtxziceNm6vH6wD/2ahfBg/SDcnNTLcrNUqIiIiBQBwzDYfPgc8yOPsfzPODKzcy+Zns4OPNSoAo82D6VGoOdV213vuUWl3Y1cv019Rva6devo2rUr5cuXx2KxsGTJEjPjiIiI5GGxWGhZ1Y+P+jZk0+h2vHZ/TUJ83biYnsWcTUfp9ME6HonYyHfbT5CWmW3dLiE1gYidESSkJpiYvmQwtVC5fPky9evX5+OPPzYzhoiIyHWV9XDm2dZVWfNSG754ohmdawdib2dh69HzvPD1TppPWsX/LYvmYPyl6+9MCs3UG2z3338/999/v5kRREREboidnYV7qvtzT3V/4pPT+Hrrcb6KPM6pS2eYtfUIs7ZCtYoXwBG2nNxl3c7f1V+3gW6CRgKJiIjcpAAvF4bfV50hbarx2up/s/zkXADi/rv+vR0TYUfu172qDmZsq+c0N8sNKlaFSnp6Ounp6db3ycnJ12gtIiJyZ9jbWXjlrkE8nvoACRfT+Wb3Ztaem0Za3ENkp1UAYOYBT1ZvXkuH8HJ0CC9Ho5Ay2NupaLmeYlWoTJ48mQkTJpgdQ0RE5Cr+bv+9teMH/p7OrF02jVmP9uBYnC8rok+z8eBZYhMvM33dYaavO4yfuxPtagXQMTyQu6uXxcXR3uxTsEnFqlAZPXo0L7zwgvV9cnIywcHBJiYSEREpmK+7E3c3D+HR5iFcSs9i7b4EVkafZtXeeM5ezuDrrSf4eusJXB3tuad6WTrWDqRdzQDKuOupzn8pVoWKs7Mzzs7OZscQERG5Jn9Xf4bUH4K/6/8Gz3o4O/BAvSAeqBdEZnYOkbHnWBl9hhV7TnMqKY0V0WdYEX0GOws0reRLh/BydAwPJMTPzcQzMZ+pE75dunSJgwcPAtCwYUPee+892rZti6+vLyEhIdfdXhO+iYhIcWcYBntOJbMi+gwro88QE5d3/GXNQE9r0VKngleJGIxbbGamXbNmDW3btr1q+cCBA5k9e/Z1t1ehIiIiJc3xcyms/G/REnnkHNk5/7tMB3m7WAfjNq/sh5ODqdOh3bRiU6jcKhUqIiJSkl1IyWD13nhW7DnDugMJpGT8b/ZbTxcH2tYIoEN4OdrU8MfTxdHEpDdGhYqIiEgJk5aZzcZDiazYc4ZfY86QeCnDus7R3kLLqmVze1tqlSPQ28XEpNenQkVERKQEy8kx2HH8AiuiT7Nyz5k8T3gGqF/Rm461A+kQXo7qAR42N65FhYqIiEgpcjD+Uu4niKJPs+PYhTzrQv3c6Bhejg7hgTQOtY1J5lSoiIiIlFLxyWn8GhPPyujT/H7wLBnZOdZ1vu5OtKuZO67lnur+uDqZM8mcChURERHhUnoW6/YnsDL6DKtizpCclmVd5+Joxz3V/ekYXo52tcrhm88kcwkpCXyz/xt6hvUs0gcqqlARERGRPDKzc/gj9px1vpaTF1Kt6+ws0CTUl461cz/6HOrnDkD02Wh6L+vNwgcXEu4XXmRZbuT6XaxmphUREZGb42hvx13VynJXtbK82TWc6LhkVuzJLVqi45KJPHKOyCPnePvHGGqUy51krlrwRbNjq1AREREpbSwWC7XLe1O7vDfPdwjj+LkUfo3JLVq2HDvCgaSTHNi0F/sdJ3EJgpizMdZt/V39i/Q20HWz6taPiIiI/OW9Pz5iVvT0AtcPqT+EoQ2G3tIxdOtHREREbkr/2n3oXKUdALvi9zAx8i3GtxxPLb9aAHketHgnqFARERERK3+3q2/t1PKrVaSDaW9E8XyakYiIiJQKKlREREQkX/6u/gypP+SO3+65km79iIiISL783fxveeDsrVKPioiIiNgsFSoiIiJis1SoiIiIiM1SoSIiIiI2S4WKiIiI2CwVKiIiImKzVKiIiIiIzVKhIiIiIjZLhYqIiIjYLBUqIiIiYrOK9RT6hmEAkJycbHISERERKay/rtt/XcevpVgXKhcvXgQgODjY5CQiIiJyoy5evIi3t/c121iMwpQzNionJ4dTp07h6emJxWIp0n0nJycTHBzM8ePH8fLyKtJ9y43T98O26PthW/T9sD36nlybYRhcvHiR8uXLY2d37VEoxbpHxc7OjooVK97WY3h5eemHzIbo+2Fb9P2wLfp+2B59Twp2vZ6Uv2gwrYiIiNgsFSoiIiJis1SoFMDZ2Zk333wTZ2dns6MI+n7YGn0/bIu+H7ZH35OiU6wH04qIiEjJph4VERERsVkqVERERMRmqVARERERm6VCJR/Tpk2jcuXKuLi40LhxY9avX292pFJp8uTJNG3aFE9PTwICAujevTv79u0zO5b81+TJk7FYLDz33HNmRynVTp48yWOPPYafnx9ubm40aNCAbdu2mR2rVMrKymLs2LFUrlwZV1dXqlSpwltvvUVOTo7Z0Yo1FSp/s3DhQp577jnGjBnDjh07uOeee7j//vs5duyY2dFKnbVr1zJs2DA2b97MypUrycrKomPHjly+fNnsaKXeH3/8wfTp06lXr57ZUUq18+fP06pVKxwdHfn555+Jjo7m3XffxcfHx+xopdI777zDf/7zHz7++GNiYmKYMmUK//rXv/joo4/Mjlas6VM/f9O8eXMaNWpERESEdVmtWrXo3r07kydPNjGZJCQkEBAQwNq1a7n33nvNjlNqXbp0iUaNGjFt2jTefvttGjRowAcffGB2rFLptdde4/fff1evr4148MEHKVeuHDNmzLAue/jhh3Fzc+OLL74wMVnxph6VK2RkZLBt2zY6duyYZ3nHjh3ZuHGjSankL0lJSQD4+vqanKR0GzZsGA888ADt27c3O0qpt3TpUpo0aULPnj0JCAigYcOGfPbZZ2bHKrXuvvtuVq1axf79+wHYuXMnGzZsoEuXLiYnK96K9bN+ilpiYiLZ2dmUK1cuz/Jy5cpx+vRpk1IJ5D7A6oUXXuDuu++mTp06ZscptRYsWMD27dv5448/zI4iwOHDh4mIiOCFF17g9ddfJzIykpEjR+Ls7MyAAQPMjlfqvPrqqyQlJVGzZk3s7e3Jzs5m4sSJ9O3b1+xoxZoKlXz8/UnMhmEU+dOZ5cYMHz6cXbt2sWHDBrOjlFrHjx9n1KhRrFixAhcXF7PjCLlPkG/SpAmTJk0CoGHDhuzZs4eIiAgVKiZYuHAhX375JfPnz6d27dpERUXx3HPPUb58eQYOHGh2vGJLhcoVypYti729/VW9J/Hx8Vf1ssidM2LECJYuXcq6detu+9OypWDbtm0jPj6exo0bW5dlZ2ezbt06Pv74Y9LT07G3tzcxYekTFBREeHh4nmW1atVi0aJFJiUq3V5++WVee+01+vTpA0DdunU5evQokydPVqFyCzRG5QpOTk40btyYlStX5lm+cuVK7rrrLpNSlV6GYTB8+HC+++47Vq9eTeXKlc2OVKq1a9eO3bt3ExUVZX01adKEfv36ERUVpSLFBK1atbrqI/v79+8nNDTUpESlW0pKCnZ2eS+r9vb2+njyLVKPyt+88MIL9O/fnyZNmtCyZUumT5/OsWPHePbZZ82OVuoMGzaM+fPn8/333+Pp6Wnt6fL29sbV1dXkdKWPp6fnVeOD3N3d8fPz07ghkzz//PPcddddTJo0iV69ehEZGcn06dOZPn262dFKpa5duzJx4kRCQkKoXbs2O3bs4L333mPw4MFmRyveDLnKJ598YoSGhhpOTk5Go0aNjLVr15odqVQC8n3NmjXL7GjyX61btzZGjRpldoxS7YcffjDq1KljODs7GzVr1jSmT59udqRSKzk52Rg1apQREhJiuLi4GFWqVDHGjBljpKenmx2tWNM8KiIiImKzNEZFREREbJYKFREREbFZKlRERETEZqlQEREREZulQkVERERslgoVERERsVkqVERERMRmqVARERERm6VCRURMZbFYWLJkyS3to02bNjz33HPW95UqVeKDDz64pX2KiG1QoSIit1V8fDzPPPMMISEhODs7ExgYSKdOndi0aZPZ0USkGNBDCUXktnr44YfJzMxkzpw5VKlShTNnzrBq1SrOnTtndjQRKQbUoyIit82FCxfYsGED77zzDm3btiU0NJRmzZoxevRoHnjgAWu7xMREevTogZubG9WrV2fp0qV59hMdHU2XLl3w8PCgXLly9O/fn8TExDt9OiJiAhUqInLbeHh44OHhwZIlS0hPTy+w3YQJE+jVqxe7du2iS5cu9OvXz9rjEhcXR+vWrWnQoAFbt25l+fLlnDlzhl69et2p0xARE6lQEZHbxsHBgdmzZzNnzhx8fHxo1aoVr7/+Ort27crTbtCgQfTt25dq1aoxadIkLl++TGRkJAARERE0atSISZMmUbNmTRo2bMjMmTP57bff2L9/vxmnJSJ3kAoVEbmtHn74YU6dOsXSpUvp1KkTa9asoVGjRsyePdvapl69etav3d3d8fT0JD4+HoBt27bx22+/WXtnPDw8qFmzJgCHDh26o+ciIneeBtOKyG3n4uJChw4d6NChA2+88QZPPvkkb775JoMGDQLA0dExT3uLxUJOTg4AOTk5dO3alXfeeeeq/QYFBd327CJiLhUqInLHhYeHF3rulEaNGrFo0SIqVaqEg4P+yxIpbXTrR0Rum7Nnz3Lffffx5ZdfsmvXLmJjY/nmm2+YMmUK3bp1K9Q+hg0bxrlz5+jbty+RkZEcPnyYFStWMHjwYLKzs2/zGYiI2fTriYjcNh4eHjRv3pz333+fQ4cOkZmZSXBwME899RSvv/56ofZRvnx5fv/9d1599VU6depEeno6oaGhdO7cGTs7/a4lUtJZDMMwzA4hIiIikh/9OiIiIiI2S4WKiIiI2CwVKiIiImKzVKiIiIiIzVKhIiIiIjZLhYqIiIjYLBUqIiIiYrNUqIiIiIjNUqEiIiIiNkuFioiIiNgsFSoiIiJis1SoiIiIiM36f1t8dSYsZS4mAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "cmfgen_collisional_rates.loc[1,0,1,29].plot(logy=False,label=\"TARDIS exc\",legend=True)\n", "cmfgen_collisional_rates.loc[1,0,29,1].plot(logy=False,label=\"TARDIS deexc\",legend=True)\n", - "christian_coeff[\"coll_exc_coeff\"].loc[1,0,1,29].plot(logy=False,label=\"Christian exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", - "christian_coeff[\"coll_deexc_coeff\"].loc[1,0,1,29].plot(logy=False,label=\"Christian deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" + "reference_coeff[\"coll_exc_coeff\"].loc[1,0,1,29].plot(logy=False,label=\"reference exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "reference_coeff[\"coll_deexc_coeff\"].loc[1,0,1,29].plot(logy=False,label=\"reference deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "cmfgen_collisional_rates.sort_index().plot(logy=True,label=\"TARDIS\",legend=True)\n", - "christian_coeff[\"coll_deexc_coeff\"].sort_index().plot(logy=True,label=\"Christian\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\")" + "reference_coeff[\"coll_deexc_coeff\"].sort_index().plot(logy=True,label=\"reference\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAGxCAYAAACa3EfLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAADQNklEQVR4nOydeZhU1Zn/v7X2vtA0NLQ0ICqIoqAQFdQIRkFUkpjRmGhcok5ijDHG0cw4WTTOLyHJzKhJjMa4MZkxatRoNiOiUVEBFwRFQRAFQVkaGui9u7qqzu+PqnPvubfucs49RVVX836eh4de6tS5Vbe67rfe9/u+b4gxxkAQBEEQBFHihIt9AARBEARBEPmARA1BEARBEEMCEjUEQRAEQQwJSNQQBEEQBDEkIFFDEARBEMSQgEQNQRAEQRBDAhI1BEEQBEEMCUjUEARBEAQxJIgW+wAKRTqdxrZt21BTU4NQKFTswyEIgiAIQgLGGDo7O9Hc3Ixw2DsWc8CImm3btqGlpaXYh0EQBEEQRAC2bt2KMWPGeN7mgBE1NTU1ADJPSm1tbZGPhiAIgiAIGTo6OtDS0mJcx704YEQNTznV1taSqCEIgiCIEkPGOkJGYYIgCIIghgQkagiCIAiCGBKQqCEIgiAIYkhwwHhqZEmlUhgYGCj2YRA+xGIxRCKRYh8GQRAEMYggUZOFMYYdO3Zg3759xT4UQpL6+nqMGjWK+g4RBEEQAEjUGHBBM3LkSFRWVtKFchDDGENPTw9aW1sBAKNHjy7yEREEQRCDARI1yKScuKAZPnx4sQ+HkKCiogIA0NraipEjR1IqiiAIgiCjMADDQ1NZWVnkIyFU4OeLPFAEQRAEQKLGAqWcSgs6XwRBEIQIiRqCIAiCIIYEJGoIgiAIghgSkKgZIuzYsQPf+ta3MGHCBJSVlaGlpQULFizAc889BwAYP348QqEQHn744Zy1Rx55JEKhEBYtWmT8jN9e/Gefjrpq1Sqcf/75GD16NMrKyjBu3DicffbZ+Mtf/gLGGABg8+bNOffD/61YsQIAsGjRIoRCIZxxxhmW+9+3bx9CoRBeeOGFPD5TBEEQxFCFRM0QYPPmzZg+fTr+8Y9/4Oc//znWrFmDp59+GnPmzME3v/lN43YtLS144IEHLGtXrFiBHTt2oKqqKud+b7nlFmzfvt34t2rVKuN3f/rTn3DCCSegq6sL//M//4O1a9fi0Ucfxec//3l8//vfR3t7u+W+nn32Wct9bd++HdOnTzd+H41G8dxzz+H555/P19NCEARBKLKlrQedfaVbfEEl3UOAq666CqFQCK+99ppFnBx55JG47LLLjO8vvPBC3Hbbbdi6dStaWloAAPfffz8uvPBC/O53v8u535qaGowaNSrn593d3bj88stx1lln4Y9//KPx80MOOQTHHXccrrjiCiNSwxk+fLjjfXGqqqrwxS9+Ef/2b/+GV199Vf7BEwRBEHlh7bYOnPnLlzB93DA8/o1ZSmu3t/fihkffRm1FFHdeON1/wX6CIjUuMMbQk0gW5Z9dEHixZ88ePP300/jmN7/pGG2pr683vm5qasK8efPwP//zPwCAnp4ePPLIIxbhI8MzzzyDtrY2fPe733W9TZDKpJtvvhlr1qzBY489pryWIAiCAG5bsgEn/vQf2LavV3ntr1/YCABY+dFe5bWdfUm8vHE3ln/Qprw2n1CkxoXegRSO+OHiouy99pZ5qIzLnZqNGzeCMYbDDz9c6vaXXXYZ/uVf/gXf+9738Nhjj+GQQw7BtGnTHG/7r//6r/j+979vfP+Tn/wE11xzDTZs2AAAmDRpkvG7119/HXPmzDG+f/jhh3H22Wcb38+aNQvhsFVDt7e3W5rmNTc349vf/ja+973v4fOf/7zU4yEIghhK9CSS+PnT6zF/yigcP0GtGWwqzfCL594HAPzt7e34509PUFr/+qY9SrcXGUilAQCxSHFjJRSpKXF4VEc2MnLWWWehq6sLS5cuxf333+8ZpbnhhhuwevVq49/FF1/setujjz7auF13dzeSyaTl94888ojlvlavXu3YBfhf//VfsWvXLtx///1Sj4cgCGKw0drRh/U7OgOt/dGf12LRss04/7crlNe+u830MjbWxJXXd/cn/W/kwkAqcy0qtqihSI0LFbEI1t4yr2h7y3LYYYchFAph3bp1UtGNaDSKiy66CDfddBNeffVVPPHEE663bWxsxKGHHuq4JwCsX78eJ5xwAgCgrKzM8baclpYWz99z6uvrceONN+JHP/qRJdJDEARRCjDGcNxPMlWnr/77Z9BUW660/pE3tgbee2dHv/F1Oq2+fiAtb32wkzQiNcVtikqRGhdCoRAq49Gi/FPxozQ0NGDevHn49a9/je7u7pzfO00dv+yy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sGABmz17tvGYRB544AE2YcIEpfvNF6VwLm677TZWW1vLHn30Ufb++++z73//+6y8vJxt3LhR+j6ef/55VllZyW688Ua2fft2419bW1vObb/yla+w448/3vW+brrpJnbqqacqPQYZSuFcbN++na1atYrdc889DABbunQpW7VqlfE8vvrqq+xXv/oVW7VqFdu8eTP7xz/+wU466SR2yCGHsL6+Pul9fv/737NoNMp+/etfW86XveeKiFv10yWXXJLTuyQIg/38dHR0sOOPP54dddRRbOPGjZbnTXzfOuOMM9jRRx/Nli9fzpYvX86OOuoodvbZZ0vvw5jc+env7zeei9GjR7Prr7+erVq1ir3//vuW+6Lzsz3nuvLss88yAGzt2rXS92+HP87p06ezCy64gK1atYq9++67Obc76aST2Pnnn+96P/k6P36UtKhhjLETTjiB/eY3v7H8zK0Z0KZNm4zbAGAPPPCA530/+uijbNKkSSwWi7HDDz+cPf7445bfP/DAA8xPF/b29rKrr76aNTQ0sIqKCnb22WezLVu25BzvJZdc4nk/vPGU/Z/I3Llz2cKFCz3vZ38y2M8FY4wtXLiQjRkzhlVWVrKZM2fmNCv0OxdujfVOOeUUy+327dvHKioq2G9/+1vX+5o4cSJ76KGHfI85CIP9XNx0002Ox8L3fvvtt9mcOXNYQ0MDKysrY+PHj2dXXnkl+/jjjy33M27cOHbTTTe57uP2mP3OsV3U9Pb2straWrZ8+XLPxyXLYD4/Xo3bxGNpa2tjF154IaupqWE1NTXswgsvzCnNz8f52bRpk+/fHJ2f3GNhjLEvf/nLbNasWa735Xd++GOy/xs3bpzlNuvXr2cA2DPPPON4H/k+P57Hu9932M/87W9/Y5MnT2apVEp6zaZNm1g0GmUbNmzQ2vumm27KuZgFYdy4cb5/CH6sWbOGjRw50vMT6P6GzoU8f/3rX9nkyZNd+0roMhTOhR89PT2svLyc/eMf/9jve91xxx3s9NNPz9v90fnJL3R+1Cnl8+NFSRuFAeDMM8/E+++/j08++US6XO3pp5/G1772NRx22GFaey9evBi/+MUvtO7jvffeQ01NjavZVJZt27bhd7/7Herq6rTuRwc6F/J0d3fjgQcecO0roUupnwsZXnzxRZx66qmYM2fOft8rFovltVs3nZ/8QudHnVI+P16EGAtYH0kQBEEQBDGIKOnqJ4IgCIIgCA6JGoIgCIIghgQkagiCIAiCGBKQqCEIgiAIYkhAooYgCIIgiCEBiRqCIAiCIIYEJGo0uPTSSx2nL5cSmzdvRigUwurVqwuy31B4zmS5+eabMW3atILtFwqF8OSTTxZsPyAzU+v2228v6J5BKMZzM5Qo9GsZMCfcD3aK8dy4UYjnrJDnJcj1YkiJmkJfoH/xi19g0aJFBdlrqEDPGUEQRGng9KHl/PPPx4YNG/K6j9u1O8j1ouQ7CheTYnbvHewkEgnE4/Gcn9Nzps/AwMB+n7hL+OP2Gi8m9NoYOgzWc1lRUYGKioqC7BXkelFykZqnn34aJ510Eurr6zF8+HCcffbZ+OCDDwAABx98MIDM6PhQKITZs2cDANLpNG655RaMGTMGZWVlmDZtGp5++mnjPrlK/MMf/oCTTz4ZFRUV+NSnPoUNGzbg9ddfx4wZM1BdXY0zzjgDu3btMtbZQ2PpdBo/+9nPcOihh6KsrAxjx47Fj3/8Y9/HxPf/4x//iDlz5qCyshJTp07F8uXLjds4hThvv/12jB8/Pud4fvKTn6CpqQn19fX40Y9+hGQyiRtuuAENDQ0YM2YM7r///pxjeO+99zBr1iyUl5fjyCOPxAsvvGD5/dq1a3HmmWeiuroaTU1NuOiii7B7927j97Nnz8bVV1+N6667Do2NjTj99NMdH6v9Oevv78c111yDkSNHory8HCeddBJef/114/cvvPACQqEQnnvuOcyYMQOVlZWYNWsW1q9f7/u8is/b//7v/2L8+PGoq6vDl770JXR2dhq3cfo0Mm3aNNx8883G96FQCHfffTfOPvtsVFZWYvLkyVi+fDk2btyI2bNno6qqCjNnzjReiyJ33303WlpaUFlZifPOOw/79u2z/P6BBx7A5MmTUV5ejsMPPxx33nmn8TvxtTl79myUl5fj//7v/6Qe+yeffILzzz8fw4YNw/Dhw/G5z30OmzdvBpBpxV5eXp5zLNdccw1OOeUU4/tly5bh05/+NCoqKtDS0oJrrrkG3d3dUvvbCYVCuPfee3HOOeegsrIShx12GP785z8bv3cKaz/55JMIhULG9/x83n///Rg7diyqq6vxjW98A6lUCj//+c8xatQojBw50vHvbvv27Zg/fz4qKipw8MEH49FHH5V+vgDztbtw4UI0Nzdj4sSJvo/5zjvvxGGHHYby8nI0NTXh3HPPNX7n99pXfT4mTJiAsrIyMMawb98+fO1rX0NTUxPKy8sxZcoU/PWvfzXW5eO8er1uZ86ciX/7t3+z3H7Xrl2IxWJ4/vnnAWRE4Xe/+10cdNBBqKqqwvHHH5/zviPLgfp3vmjRIowdOxaVlZU455xz0NbWlnObv/zlL5g+fTrKy8sxYcIE45ogPndjx45FWVkZmpubcc011wDIvKd/9NFH+M53voNQKGS87uyvS5nn3uu6Dbhfu4NcL0puoOVjjz3GHn/8cbZhwwa2atUqtmDBAnbUUUexVCrFXnvtNQaAPfvss2z79u2sra2NMcbYrbfeympra9lDDz3E3nvvPfbd736XxWIxY/AYnwJ7+OGHs6effpqtXbuWnXDCCezYY49ls2fPZi+//DJ788032aGHHsquvPJK41js03y/+93vsmHDhrFFixaxjRs3spdeeondc889vo9J3P+vf/0rW79+PTv33HPZuHHjjIGHN910E5s6dapl3W233WaZlnrJJZewmpoa9s1vfpO999577L777mMA2Lx589iPf/xjtmHDBvYf//EfLBaLGZPC+d5jxoxhjz32GFu7di274oorWE1NDdu9ezdjjLFt27axxsZGduONN7J169axN998k51++ulszpw5xt6nnHIKq66uZjfccAN777332Lp16xwfq/05u+aaa1hzczN76qmn2LvvvssuueQSNmzYMOPc8Ym0xx9/PHvhhRfYu+++y04++WTPybMiN910E6uurmZf+MIX2Jo1a9jSpUvZqFGj2L//+78btxk3bhy77bbbLOumTp1qmV4LgB100EHskUceYevXr2ef//zn2fjx49mpp55qec2cccYZlr2rqqrYqaeeylatWsVefPFFduihh7ILLrjAuM1vf/tbNnr0aPb444+zDz/8kD3++OOsoaGBLVq0yHJ+xo8fb9zmk08+cXysANgTTzzBGGOsu7ubHXbYYeyyyy5jb7/9Nlu7di274IIL2KRJk1h/fz9LJpOsqamJ3XvvvcZ6/rO7776bMZaZlF1dXc1uu+02tmHDBvbKK6+wY445hl166aWez50b/HX2+9//nr3//vvsmmuuYdXV1ca5fuCBB1hdXZ1lzRNPPGGZWMzP57nnnsveffdd9uc//5nF43E2b9489q1vfYu999577P7772cALBOBAbDhw4eze+65h61fv559//vfZ5FIhK1du1bq+WIs89qtrq5mF110EXvnnXfYmjVrPB/v66+/ziKRCPv973/PNm/ezN588032i1/8wvi932tf9vmoqqpi8+bNY2+++SZ76623WDKZZCeccAI78sgj2TPPPMM++OAD9pe//IU99dRTjDG582rH/v7j97r91a9+xcaOHcvS6bSx5le/+hU76KCDjCGRF1xwAZs1axZbunQp27hxI/vP//xPVlZWZrwvOz1+r+M7UP7OOStWrGChUIgtXLiQrV+/nv3iF79g9fX1lufs6aefZrW1tWzRokXsgw8+YM888wwbP348u/nmmxljmYnhtbW17KmnnmIfffQRe/XVV9lvf/tbxlhmCvuYMWPYLbfcwrZv3862b9/ueF5knnuv6zZjzPXaHeh64fmslQCtra0MAFuzZo3xwli1apXlNs3NzezHP/6x5Wef+tSn2FVXXcUYM19Q4hv8Qw89xACw5557zvjZwoUL2aRJk4zvxSe8o6ODlZWVSYkYO077v/vuuwyAIQ5kRc24ceMsk2UnTZrETj75ZOP7ZDLJqqqq2EMPPWTZ+6c//alxm4GBATZmzBj2s5/9jDHG2A9+8AM2d+5cy95bt25lANj69esZYxlRM23aNN/HKj5nXV1dLBaLsQcffND4fSKRYM3NzeznP/85Y8wUNc8++6xxm7/97W8MAOvt7fXd76abbmKVlZWso6PD+NkNN9zAjj/+eON72Te773//+8b3y5cvZwDYfffdZ/zsoYceYuXl5Za9I5EI27p1q/Gzv//97ywcDhtvEC0tLez3v/+9Ze//+I//YDNnzmSMmefn9ttv932soqi577772KRJkywXlf7+flZRUcEWL17MGMu8QZx66qnG7xcvXszi8Tjbs2cPY4yxiy66iH3ta1+z7PHSSy+xcDhsPPeqokZ8Dru6ulgoFGJ///vfGWPyF3H7+Zw3bx4bP358zut+4cKFlr3FDySMMXb88cezb3zjG4wxuefrkksuYU1NTYbI8ePxxx9ntbW1lmMVH7vfa1/2+YjFYqy1tdX42eLFi1k4HDb+Nu3InFc79vcfv9dta2sri0ajbOnSpcbvZ86cyW644QbGGGMbN25koVAo58L9mc98ht14442uj9+NA+nvnPPlL3/ZIq4YY+z888+3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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "cmfgen_collisional_rates[0].sort_index().plot(logy=True,label=\"CMFGEN\",legend=True)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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+Qvz+Xxs/vz57Gtf+xrbsWMHe/TRRxkA9vrrrxv23a9fP/arX/2K7dy5k33ve99jbrebbdu2zdb5Yix+75aWlrLFixezrVu3svfffz/l8b799tvM7XazP/zhD2z//v1s06ZN7Oc//7n4Pt29b/d8lJSUsPnz57NNmzaxd999l0UiEXbeeeexiRMnshdffJHt3buX/fWvf2WrV69mjNm7rirq8yfdfXv//fezoUOHslgsJta5//772eDBg0XD1i984Qts1qxZbN26dWzPnj3sf//3f5nf7xfPZbPjTzW+vvI757zxxhtM0zS2YsUKtnPnTvbzn/+cVVZWGs7ZCy+8wMrLy9nKlSvZ3r172YsvvsiGDx/Obr/9dsYYY0899RQrLy9nq1evZh999BF788032SOPPMIYY6yxsZENGTKE3XHHHezIkSPsyJEjptfFzrlPNW8zxiznbqfzRZ8XSCoNDQ0MAHv//ffFTbZ582bDMoMGDWJ33nmn4bMZM2awJUuWMMb0m1OeLJ544gkGgL388svisxUrVrBx48aJv+WL19LSwvx+vy1BpGK2/w8++IABEELDrkAaNmyYoWP0uHHj2OzZs8XfkUiElZSUsCeeeMKw7x//+MdimXA4zIYMGcLuvvtuxhhj3//+99m8efMM+z548CADwHbu3MkYiwuks846K+2xyuesra2Neb1e9vvf/158HwqF2KBBg9hPfvITxpgukF566SWxzN/+9jcGgHV2dqbd3/Lly1lxcTFraWkRn337299m5557rvjb7oPze9/7nvj79ddfZwDYb37zG/HZE088wQKBgGHfbrebHTx4UHz297//nblcLvGwqa+vZ3/4wx8M+/7Rj37EZs6cyRjTr899992X9lhlgfSb3/yGjRs3zjBBBYNBVlRUxNasWcMYiz9sLr74YvH9mjVrmM/nY01NTYwxxhYvXsy+8pWvGPaxfv165nK5xLl3KpDkc9jW1sY0TWN///vfGWP2BYF6PefPn8+GDx+edN+vWLHCsG/55YYxxs4991z21a9+lTFm73xde+21rK6uTgimdDz99NOsvLzcMFb52NPd+3bPh9frZQ0NDeKzNWvWMJfLJX6bKnauq4r6/El33zY0NDCPx8PWrVsnvp85cyb79re/zRhjbM+ePUzTtCQRcMkll7DbbrvN8vit6Eu/c87nP/95g1Bj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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "chianti_collisional_rates[0].sort_index().plot(logy=True,label=\"Chianti\",legend=True, ylabel=\"Coeff\")" ] @@ -428,9 +1737,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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oed46KGHcNttt2HJkiWWv+lnP/sZjjzySN/HX3nllbj88sut6yMjI+IkKd1iKDm1QLpF+KHd3d1YtWoVvv/97+PSSy/1KDxDQ0MOH5IoHnzwQZx55pn46Ec/CgAol8t45ZVXcPjhh0s9TzqdRqlUin4ggRCBOzcY38ebHngNV66W2w83D9gKkqwawRurYw0+VewHxEPXdamTj/LgUyUVJz7BMdZTISneVFM2lYwVL9+NWrEPEvde5Qpq5EzeaB3fpM22tZYVbECDEiQG95db5gv/9re/XUqdyGazyGblhyQCMDxAgmmuWuOGG27ASSedhOOPPx5XX301lixZgmKxiLVr1+LGG28UUpfcOPjgg/GrX/0K69atw7Rp03Dttddi586d0gRpwYIFuPfee/G2t70N2WwW06ZNk94WAoFHIsav0wlusryqp0QWKukat/JRKutS/g6VEz2g2FG6gkZpdRVHh4x9TC216Hy8rAeJX2+yIPfjsqio3qsonFNFY1ub0uJEdF+gIVNsPT09SCaTHrWov7/foyoR5LBw4UI88cQTWLFiBT7/+c9j8eLFOO2003DvvffixhtvjPWc//RP/4RjjjkGq1atwvLlyzF79mycddZZ0s/z7//+71i7di36+vpw9NFHx9oWAoFHMgZBcs71UmmeJw+VcnV3WwBZFUeZpCj0E3KnuWRRSbOyvMG8Muk9IIYKxK09JUmQ3CRY9l2fKsTf11lsrQlSQypImUwGy5Ytw9q1a3H22Wdbt69duxZnnnlmDbds/8CcOXNw/fXX4/rrr/e93y8Hz48VWb58ueMx3d3doaNJAKN3khvumDVr1mDNmjWO27761a86+iURCDJIxPiJWClfh6ynwx0vT3C8qaJmiJ+AKjkPraaVZJLql2q5O0+KckU5kuL+zGRVIJ7M8cqnCGS31Q1ZQuYX25SurYZTtwRpbGwMGzfafUY2bdqEDRs2oLu7G/PmzcPll1+O8847D8ceeyxOPPFE3HTTTdiyZQs+9alP1XCrCQRCIyGOglRUUDP42DiNHvm0hzTJKKud6FUUpFJZd/hQql1JptSsUTHNxX9m0gTHtbYsyXGn2GRsKFMutUqWz09xBEs6tlAfKba6JUiPP/44VqxYYV1nBunzzz8fN998M84991wMDg7i6quvxo4dO7B48WLcddddmD9/fq02mUAgNBgS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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "cmfgen_collisional_rates[0].sort_index().plot(logy=True,label=\"CMFGEN\",legend=True)\n", "chianti_collisional_rates_full[0].sort_index().plot(logy=True,label=\"Chianti\",legend=True, ylabel=\"Coeff\")" @@ -438,7 +1768,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -449,9 +1779,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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ty5XX18/o/+ST5X9dGrsp1NjP50a+ym+9Qzoay5MACCNCAGQZtpFqFwux4MPPhjlcjl7lCnNfjo19tOpsZ9Ojf00flPuwgQAZo5pdyYEwJlDhABII0IApBEhANJMqwg9+uij0d7eHmeddVYsX7483njjjeyRppSenp4olUpjHs3Nzdljpdu+fXusXr06Wltbo1QqxUsvvTTm9aIooqenJ1pbW2P+/PmxatWq2LVrV86wib5tP91+++3HHV+XXnppzrCJent745JLLom6urpYuHBh3HDDDfHhhx+OWcYxdeqmTYSef/752LBhQzzwwAPxzjvvxBVXXBGdnZ2xZ8+e7NGmlAsvvDD27t07+nj//fezR0p38ODBWLZsWWzevPmErz/00EOxadOm2Lx5c+zcuTOam5vj2muvHb2P4UzxbfspIuK6664bc3y98srMu8djf39/rFu3Lt58883o6+uLw4cPR0dHRxw8eHB0GcfUOBTTxI9+9KPirrvuGvPc97///eIXv/hF0kRTz4MPPlgsW7Yse4wpLSKKF198cfTro0ePFs3NzcWvf/3r0ef+8Y9/FA0NDcXvfve7hAmnhm/up6Ioiq6uruL6669PmWcqGx4eLiKi6O/vL4rCMTVe0+JM6NChQ/H2229HR0fHmOc7Ojpix44dSVNNTbt3747W1tZob2+PW265JT7++OPskaa0gYGBGBoaGnNslcvluOqqqxxbJ7Bt27ZYuHBhXHDBBXHHHXfE8PBw9kjpRkZGIiKisbExIhxT4zUtIrRv3744cuRINDU1jXm+qakphoaGkqaaelasWBFPP/10vPrqq/HEE0/E0NBQrFy5Mvbv35892pT19fHj2Pp2nZ2d8cwzz8TWrVvj4Ycfjp07d8Y111wT1Wo1e7Q0RVFEd3d3XH755bF06dKIcEyN15S7i/bJfPOjHYqiOOHHPcxUnZ2do7++6KKL4rLLLovzzz8/nnrqqeju7k6cbOpzbH27m2++efTXS5cujYsvvjgWL14cf/zjH2PNmjWJk+VZv359vPfee/HnP//5uNccU6dmWpwJLViwIGbPnn3c/0UMDw8f938b/Ms555wTF110UezevTt7lCnr66sHHVvj19LSEosXL56xx9fdd98dL7/8crz++utjPn7GMTU+0yJC8+bNi+XLl0dfX9+Y5/v6+mLlypVJU0191Wo1Pvjgg2hpackeZcpqb2+P5ubmMcfWoUOHor+/37H1Lfbv3x+Dg4Mz7vgqiiLWr18fL7zwQmzdujXa29vHvO6YGp9p8+247u7uuO222+Liiy+Oyy67LB5//PHYs2dP3HXXXdmjTRn33HNPrF69OhYtWhTDw8Pxq1/9KiqVSnR1dWWPluqLL76Ijz76aPTrgYGBePfdd6OxsTEWLVoUGzZsiI0bN8aSJUtiyZIlsXHjxjj77LPj1ltvTZz6u3ey/dTY2Bg9PT1x0003RUtLS3zyySdx//33x4IFC+LGG29MnPq7t27dunj22Wdjy5YtUVdXN3rG09DQEPPnz49SqeSYGo/Ua/PG6be//W2xePHiYt68ecUPf/jD0Usi+aebb765aGlpKebOnVu0trYWa9asKXbt2pU9VrrXX3+9iIjjHl1dXUVR/POS2gcffLBobm4uyuVyceWVVxbvv/9+7tAJTraf/v73vxcdHR3FueeeW8ydO7dYtGhR0dXVVezZsyd77O/cifZRRBRPPvnk6DKOqVPnoxwASDMt3hMC4MwkQgCkESEA0ogQAGlECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABp/h/qGbbnQFWWsQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -460,9 +1811,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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hbe3N2XLlqVr165s2bKFggUL8vLLL6f5PVi6dCnvvPMObdq0oUSJEtSoUYNXX32VPn36pNln//79NGnSBFdXV9zc3KhRowa7d+9Ofn7Lli00atQIZ2dn8uXLR8uWLVMETbPZzFtvvUX+/Pnx9vZm5MiRKY4fERHBiy++iJeXF25ubjz++OPs378/+fl/zj5Nnz6d4sWL4+Liwssvv0xSUhLjx4/H29sbLy+vO1Z1v9txRST3iYhJoNfUHQSduY6bkx1z+tYm0DcfrHwLdk3FEmwmQtVu1i71gSjc3I1hQHy0dR73uWC7ra0tY8aM4euvv+b8+fOptjl48CAtW7bk6aef5sCBA8yfP5/NmzczcOBAwDI25NChQ4SHhwOwYcMGChQowIYNGwBITExk69atNGrU6IG/pX/++ScxMTE0a9aMXr168fPPPxMVFZVm+6SkJH7++WeuXbuGvb39XY+fJ08e+vfvz5YtWwgLC0u1jbe3NytWrEj3df+rR48eFC1alF27dhEUFMTbb7+dXM++ffto2rQpFSpUYNu2bWzevJn27duTlJSU3H/WrFnkzZuXHTt2MH78eD766CPWrFkDWKY4b9u2LaGhoaxYsYKgoCCqV69O06ZNuXbtWvIxTpw4wcqVK/n999+ZN28e06dPp23btpw/f54NGzYwbtw43nvvPbZv335fxxWR3ONadDzdpmxn//kI8jnbM7dfHaoWdYff34adkwETPPkNVO1u7VIfmO6WupuEGBhT2Dqv/c5FcMh7X12eeuopqlatyogRI1I9I/Lpp5/SvXv35MGtZcqU4auvvqJRo0ZMmjSJihUr4unpyYYNG+jYsSPr16/njTfe4MsvvwRg165dxMbG8thjjz3w25o2bRpdu3bF1taWChUqULp0aebPn0/fvn1TtOvWrRu2trbExsaSlJRE/vz572iTln/G8pw+fRovL687np88eTI9evTA09OTKlWq8Nhjj9GpUyfq16+f5jHPnj3Lm2++mXzsMmXKJD83fvx4AgMDmThxYvK+ChUqpOhfuXJlRowYkdz3m2++Yd26dTRv3pw///yTgwcPEhYWhqOjIwCfffYZixcv5pdffuHFF18ELGd/pk+fjqurKwEBATRp0oSjR4+yYsUKbGxsKFeuHOPGjWP9+vXUqVPnno8rIrnDlag4ekzdzrHLNyng4sCcvrUp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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(coll_matrix[0,1,:],label=\"Old TARDIS scheme\")\n", "plt.plot(chianti_collisional_rates.loc[1,0,1,0],label=\"New TARDIS scheme\")\n", @@ -473,27 +1845,90 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.003541\n", + "1 0.004709\n", + "2 0.004400\n", + "3 0.002548\n", + "4 0.001518\n", + "5 0.005794\n", + "6 0.007756\n", + "7 0.007275\n", + "8 0.004203\n", + "9 0.002876\n", + "Name: (1, 0, 1, 0), dtype: float64" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "(coll_matrix[0,1,:] - chianti_collisional_rates.loc[1,0,1,0]) / chianti_collisional_rates.loc[1,0,1,0]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0 1.003542\n", + "1 1.004710\n", + "2 1.004401\n", + "3 1.002549\n", + "4 1.001519\n", + "5 1.005795\n", + "6 1.007757\n", + "7 1.007276\n", + "8 1.004205\n", + "9 1.002877\n", + "Name: (1, 0, 0, 1), dtype: float64" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "coll_matrix[1,0,:] / chianti_collisional_rates.loc[1,0,0,1]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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f/yDsWPH5luuZs2awIXDYLNmzWLjxo20aNGCihUr0q1bN9avX8+6devo0aPHVWf77LPPyMzMpH379s55DocDu93O7t27CQ8Pd84PDg6mXr161KtXj4ULFxIREUGbNm3yjCnInj17gAuFoSDu7u507dqVrl278tRTT/Hqq6/y8ssvM3HiRDw8PPKNf/HFF7nrrrv45ptvWLFiBS+88AKff/45t956K97e3n+b6a+H7wzDwG63Axd+LyEhIc6r5P6sYsWKl13HtVjvtaYCVMr4dxgOX/1Ar5x1RB9IokuDqmZHEpHSzjCu6lCU2V5//XVatmxJgwYN8sxv1aoVu3btuuyelB49ejBu3Di++OILZ9np3r07a9asYcuWLYwbN+6qc82ePZvHHnssXzEbO3Ysc+bM4c0337zkcvXq1WPQoEFMmjSJpUsvf0uT8+fPM2vWLLp160bVqoX/73x4eDi5ublkZmZesgABNGjQgAYNGvDoo48ydOhQPv74Y2699VaaN2/O2rVreemllwr9eX/WqlUrEhIScHNzu2xpKy3r/Ts6BFbKuDe9hWzDk7qWeLZtWW12HBGRYtOsWTOGDRvG+++/n2f+xIkTiY6O5uGHHyY2Npb9+/ezbNkyHnnkEeeYi+cB/e9//3MWoB49erBkyRLOnz9/1ef/xMbG8vPPP3P//ffTtGnTPNPQoUP59NNPycnJKXD5xx57jK+++irPlVcAiYmJJCQksH//fj7//HM6d+5MUlISM2fOLHBdPXr04KOPPiImJoYjR46wfPlynn76aXr27Im/v3++8efPn2fMmDGsW7eO33//nc2bN7N161YaN24MwKRJk9i6dSv//Oc/+eWXX9i7dy8zZ850nkz+d3r16kXHjh0ZOHAgK1eu5MiRI2zZsoVnn3023/ZeieJa799RASptPP04G9YXgKqHl3AuO9fkQCIixeeVV15xngtzUfPmzVm/fj379++na9euRERE8NxzzxESEuIcYxiG8yqvrl27Ope7eKPBSxWEwpg9ezbh4eGXvPnhwIEDOXPmDF999VWByzdr1oxevXrx/PPP55nfsGFDQkNDad26Na+//jq9evXi119/veyhsj59+vDJJ58QGRlJ48aNeeSRR+jTpw8LFiy45Hir1crp06cZMWIEDRo0YPDgwfTr18+5x6dBgwasWrWKHTt20K5dOzp2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(coll_matrix[1,0,:],label=\"Old TARDIS scheme\")\n", "plt.plot(chianti_collisional_rates.loc[1,0,0,1],label=\"New TARDIS scheme\")\n", diff --git a/docs/physics/plasma/detailed_balance/test_continuum_template_wkerzen_rate_coeffs.yml b/docs/physics/plasma/detailed_balance/test_continuum_template_wkerzen_rate_coeffs.yml new file mode 100644 index 00000000000..880468bc3d5 --- /dev/null +++ b/docs/physics/plasma/detailed_balance/test_continuum_template_wkerzen_rate_coeffs.yml @@ -0,0 +1,64 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + time_explosion: 16 day + +atom_data: TestNLTE_He_Ti.h5 + +model: + structure: + type: specific + velocity: + start: 5700 km/s + stop: 12500 km/s + num: 10 + density: + type : power_law + time_0: 16.0 day + rho_0: 1.3636e-14 g/cm^3 #1.948e-14 g/cm^3 + v_0: 8000 km/s + exponent: -10 + + abundances: + type: uniform + H: 1.0 + +plasma: + initial_t_inner: 9000 K + ionization: nebular + excitation: dilute-lte + radiative_rates_type: dilute-blackbody + line_interaction_type: macroatom + #nlte: + # species: + # - H I + continuum_interaction: + species: + - H I + nlte_ionization_species: + - H I + nlte_excitation_species: + - H I + +montecarlo: + seed: 23111963 + no_of_packets: 500000 + iterations: 1 + nthreads: 1 + + last_no_of_packets: 100000 + no_of_virtual_packets: 0 + + convergence_strategy: + type: damped + damping_constant: 0.5 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + + +spectrum: + start: 800 angstrom + stop: 10000 angstrom + num: 4000 From 6edb4328a72e0ee55258312a6bf046357a16194a Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Tue, 1 Oct 2024 16:47:59 -0400 Subject: [PATCH 110/118] Chianti test beginnings --- .../tests/test_collisional_transitions.py | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py index 664325bc95e..dd4e6213a43 100644 --- a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py +++ b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py @@ -7,6 +7,7 @@ import pytest from astropy import units as u +from tardis.io.atom_data import AtomData from tardis.plasma.assembly.base import ( PlasmaSolverFactory, convert_species_to_multi_index, @@ -64,6 +65,22 @@ def legacy_cmfgen_collision_rate_plasma_solver(nlte_atomic_dataset): ) +@pytest.fixture +def chianti_atomic_dataset(tardis_regression_path): + atomic_data_fname = ( + tardis_regression_path / "atom_data" / "kurucz_atom_chianti_many.h5" + ) + return AtomData.from_hdf(atomic_data_fname) + + +@pytest.fixture +def legacy_chianti_collision_rate_plasma_solver(chianti_atomic_dataset): + chianti_atomic_dataset.prepare_atom_data([1], "macroatom", [(1, 0)], []) + return chianti_atomic_dataset.nlte_data.get_collision_matrix( + (1, 0), np.array([10000, 20000]) + ) + + def test_legacy_cmfgen_collisional_strengths( legacy_cmfgen_collision_rate_plasma_solver, nlte_atomic_dataset, @@ -96,8 +113,6 @@ def test_legacy_cmfgen_collisional_strengths( npt.assert_allclose( new_regemorter_collision_strengths.values, approximated_cmfgen_yg_data, - rtol=1e-7, - atol=0, ) # residuals are ~1e-8 not sure if that is good enough # Not comparing to the yg_data as they are saved differently @@ -135,3 +150,34 @@ def test_thermal_collision_rates( legacy_cmfgen_collision_rate_plasma_solver.coll_deexc_coeff, check_names=False, ) + + +# Add chianti tests +def test_legacy_chianti_collisional_strengths( + legacy_chianti_collision_rate_plasma_solver, + chianti_atomic_dataset, + regression_data, +): + collision_strengths = legacy_chianti_collision_rate_plasma_solver + atom_data = copy.deepcopy(chianti_atomic_dataset) + + temperature = np.array([10000, 20000]) * u.K + + col_strengths = atom_data.collision_data.loc[ + (1, 0, slice(None), slice(None)), : + ] + radiative_transitions = chianti_atomic_dataset.lines.loc[ + (1, 0, slice(None), slice(None)), : + ] + collisional_rate_solver = ThermalCollisionalRateSolver( + atom_data.levels, + radiative_transitions, + temperature, + col_strengths, + "chianti", + ) + chianti_collisional_rates = collisional_rate_solver.solve(temperature) + + npt.assert_allclose( + collision_strengths[0, 1, :], chianti_collisional_rates.loc[1, 0, 1, 0] + ) From 0d4005b1d16f0288919f995758615579912d1f90 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Mon, 7 Oct 2024 14:14:41 -0400 Subject: [PATCH 111/118] Working tests --- .../tests/test_collisional_transitions.py | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py index dd4e6213a43..752ac9e6db3 100644 --- a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py +++ b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py @@ -35,7 +35,7 @@ def legacy_cmfgen_collision_rate_plasma_solver(nlte_atomic_dataset): atom_data = copy.deepcopy(nlte_atomic_dataset) # almost all settings are irrelevant for collisional strength data - number_densities = pd.DataFrame({2: [1, 1]}).T + number_densities = pd.DataFrame({1: [1, 1]}).T temperatures = [10000, 20000] * u.K dilution_factor = np.array([1, 1]) time_explosion = 5 * u.day @@ -46,7 +46,7 @@ def legacy_cmfgen_collision_rate_plasma_solver(nlte_atomic_dataset): # plasma_solver_factory.continuum_interaction_species = ["He I"] plasma_solver_factory.line_interaction_type = "macroatom" - plasma_solver_factory.prepare_factory([2]) + plasma_solver_factory.prepare_factory([1]) plasma_solver_factory.plasma_modules += [ YgData, ContinuumInteractionSpecies, @@ -56,7 +56,7 @@ def legacy_cmfgen_collision_rate_plasma_solver(nlte_atomic_dataset): ThermalLevelBoltzmannFactorLTE, BetaElectron, ] - species_mindex = convert_species_to_multi_index(["He I"]) + species_mindex = convert_species_to_multi_index(["H I"]) return plasma_solver_factory.assemble( number_densities, dilute_planck_rad_field, @@ -66,17 +66,17 @@ def legacy_cmfgen_collision_rate_plasma_solver(nlte_atomic_dataset): @pytest.fixture -def chianti_atomic_dataset(tardis_regression_path): +def new_chianti_atomic_dataset(tardis_regression_path): atomic_data_fname = ( - tardis_regression_path / "atom_data" / "kurucz_atom_chianti_many.h5" + tardis_regression_path / "atom_data" / "new_kurucz_cd23_chianti_H_He.h5" ) return AtomData.from_hdf(atomic_data_fname) @pytest.fixture -def legacy_chianti_collision_rate_plasma_solver(chianti_atomic_dataset): - chianti_atomic_dataset.prepare_atom_data([1], "macroatom", [(1, 0)], []) - return chianti_atomic_dataset.nlte_data.get_collision_matrix( +def legacy_chianti_collision_rate_plasma_solver(atomic_dataset): + atomic_dataset.prepare_atom_data([1], "macroatom", [(1, 0)], []) + return atomic_dataset.nlte_data.get_collision_matrix( (1, 0), np.array([10000, 20000]) ) @@ -90,7 +90,7 @@ def test_legacy_cmfgen_collisional_strengths( plasma_solver = legacy_cmfgen_collision_rate_plasma_solver atom_data = copy.deepcopy(nlte_atomic_dataset) legacy_cmfgen_yg_data = plasma_solver.yg_data.loc[ - atom_data.yg_data.loc[(2, 0, slice(None), slice(None)), :].index + atom_data.yg_data.loc[(1, 0, slice(None), slice(None)), :].index ] approximated_cmfgen_yg_data = plasma_solver.yg_data.loc[ ~plasma_solver.yg_data.index.isin(atom_data.yg_data.index) @@ -98,7 +98,7 @@ def test_legacy_cmfgen_collisional_strengths( # This is testing againt the old setup radiative_transitions = nlte_atomic_dataset.lines.loc[ - (2, 0, slice(None), slice(None)), : + (1, 0, slice(None), slice(None)), : ] collision_strengths_regemorter_solver = UpsilonRegemorterSolver( @@ -123,16 +123,18 @@ def test_thermal_collision_rates( regression_data, ): radiative_transitions = nlte_atomic_dataset.lines.loc[ - (2, 0, slice(None), slice(None)), : + (1, 0, slice(None), slice(None)), : ] collision_strengths = nlte_atomic_dataset.yg_data.loc[ - (2, 0, slice(None), slice(None)), : + (1, 0, slice(None), slice(None)), : ] - collision_strengths_temperatures = collision_strengths.columns.values * u.K + collision_strengths_temperatures = ( + nlte_atomic_dataset.collision_data_temperatures + ) therm_coll_rate_solver = ThermalCollisionalRateSolver( - nlte_atomic_dataset.levels.loc[(2, 0, slice(None)), :], + nlte_atomic_dataset.levels, radiative_transitions, collision_strengths_temperatures, collision_strengths, @@ -141,13 +143,15 @@ def test_thermal_collision_rates( ) coll_rates_coeff = therm_coll_rate_solver.solve([10000, 20000] * u.K) pdt.assert_frame_equal( - coll_rates_coeff.iloc[:3681], + coll_rates_coeff.iloc[:435], legacy_cmfgen_collision_rate_plasma_solver.coll_exc_coeff, check_names=False, ) pdt.assert_frame_equal( - coll_rates_coeff.iloc[3681:], - legacy_cmfgen_collision_rate_plasma_solver.coll_deexc_coeff, + coll_rates_coeff.iloc[435:], + legacy_cmfgen_collision_rate_plasma_solver.coll_deexc_coeff.swaplevel( + "level_number_lower", "level_number_upper" + ), check_names=False, ) @@ -155,18 +159,18 @@ def test_thermal_collision_rates( # Add chianti tests def test_legacy_chianti_collisional_strengths( legacy_chianti_collision_rate_plasma_solver, - chianti_atomic_dataset, + new_chianti_atomic_dataset, regression_data, ): collision_strengths = legacy_chianti_collision_rate_plasma_solver - atom_data = copy.deepcopy(chianti_atomic_dataset) + atom_data = copy.deepcopy(new_chianti_atomic_dataset) temperature = np.array([10000, 20000]) * u.K col_strengths = atom_data.collision_data.loc[ (1, 0, slice(None), slice(None)), : ] - radiative_transitions = chianti_atomic_dataset.lines.loc[ + radiative_transitions = atom_data.lines.loc[ (1, 0, slice(None), slice(None)), : ] collisional_rate_solver = ThermalCollisionalRateSolver( @@ -179,5 +183,8 @@ def test_legacy_chianti_collisional_strengths( chianti_collisional_rates = collisional_rate_solver.solve(temperature) npt.assert_allclose( - collision_strengths[0, 1, :], chianti_collisional_rates.loc[1, 0, 1, 0] + collision_strengths[0, 1, :], + chianti_collisional_rates.loc[1, 0, 1, 0], + rtol=1e-4, + atol=1e-13, ) From d62f96dfe7a18bb700654c8b0084a15e2f9c53a1 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Mon, 7 Oct 2024 14:15:10 -0400 Subject: [PATCH 112/118] Up to date comparison notebook --- .../plasma/detailed_balance/comparison.ipynb | 475 ++++++++++++------ 1 file changed, 319 insertions(+), 156 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/comparison.ipynb b/docs/physics/plasma/detailed_balance/comparison.ipynb index 6ef5011ddc4..40c6132affb 100644 --- a/docs/physics/plasma/detailed_balance/comparison.ipynb +++ b/docs/physics/plasma/detailed_balance/comparison.ipynb @@ -8,7 +8,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f28dcb342f514ab889cd610faa37e88d", + "model_id": "6ce91876833548fe8cd8c4c486b6e70a", "version_major": 2, "version_minor": 0 }, @@ -22,7 +22,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "382bcf43633a4789b9d5b99a0897df2e", + "model_id": "5fd7f05b61ff4d5080726af72e29fd6c", "version_major": 2, "version_minor": 0 }, @@ -43,6 +43,7 @@ ")\n", "from tardis.plasma.radiation_field import (\n", " PlanckianRadiationField,\n", + " DilutePlanckianRadiationField\n", ")\n", "\n", "from astropy import units as u" @@ -193,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -202,13 +203,13 @@ "" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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yx864SqftBVOrtWd2Kt730PranyfltL+H25TTZ3Vva+m0KASEmraVk3ragszdVxHTY4BSdOc/T8gfFPdTubVhgg8OqgQPTFJDSekBye4ak481a6v7iRVh/dXe3LTrv69NdZWw75r3HY1tam0ldS8ba0a6nuswFHNtqsLFo8MANV93eo+RQpRa8CApGmKMoD0G+quQpVECyonRYUTgtI6SFT/YNfUVnl9tft5uM0jTqAP6q3vNqBcp/JxPObJvE7rnmQ7dWwDidIJuL4fPJkSUcvHgKRpuowHPJ6uw0m7lhMiUMeTp+Sh7dbWlidDIiJqXRiQNI2lR9UHERERqY2WugsgIiIi0jQMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGRklYRkEaNGgULCwu8+OKLKuv27t2L9u3bo127dvj+++/VUB0RERFpmlYRkGbMmIGffvpJZXlFRQVmzZqFY8eO4eLFi1ixYgWysrLUUCERERFpklYRkAICAmBqaqqy/Ny5c/Dx8YGTkxNMTU0xbNgwHDx4UA0VEhERkSZRe0A6deoUhg8fDkdHR0gkEuzevVulzfr16+Hh4QEDAwP4+/vj9OnTDbLvpKQkODk5yV87OzsjMTGxQbZNREREzZfaA1JhYSE6d+6MtWvXVrt++/btmDlzJubPn49Lly6hf//+CA4ORkJCgryNv78/fH19VT6SkpJq3bcQQmWZRCJ5sgMiIiKiZk9H3QUEBwcjODi4xvWrVq3Cm2++ibfeegsAsHr1ahw8eBChoaEICQkBAISHh9dr305OTgo9Rvfu3UOvXr2qbVtaWorS0lL567y8vHrtk4iIiDSf2nuQalNWVobw8HAEBgYqLA8MDMSZM2eeePs9e/bEtWvXkJiYiPz8fOzfvx9BQUHVtg0JCYFUKpV/uLi4PPH+iYiISDNpdEDKyMhAZWUl7OzsFJbb2dkhJSWlztsJCgrCmDFjsH//fjg7O+P8+fMAAB0dHfzrX/9CQEAAunbtijlz5sDKyqrabcybNw+5ubnyj7t379b/wIiIiEijqf0SW10ojwsSQjzWWKHa7kx7/vnn8fzzzz9yG/r6+tDX16/zPomIiKj50ugeJGtra2hra6v0FqWlpan0KhERERE1FI0OSHp6evD398fhw4cVlh8+fBh9+/ZVU1VERETU0qn9EltBQQFu374tfx0bG4uIiAhYWlrC1dUVs2bNwoQJE9C9e3f06dMHGzZsQEJCAiZPnqzGqomIiKglU3tAunDhAgICAuSvZ82aBQCYOHEiNm/ejHHjxiEzMxNLly5FcnIyfH19sX//fri5uamrZCIiImrhJKK62RLpkfLy8iCVSpGbmwszMzN1l0NERER1UNfzt0aPQSIiIiJSBwYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIR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", + "image/png": "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xOn3nXCVT9oKJ9e6Tux1rXffvHrX01La//3L1FFnXevVFxpUQkJ926pv3oPCTAPnUYtjQNI0p/4DRG9s2Mm8zhCBhwcVoscmqeeEdO8EV8eJp875dZ2kGrB+nSc3ad3r1ltbPfuud9t11KayrKT+bWvVU98jBY46tl1XsHhoAKjrfWv4EClE7QEDkqYpzQayrqq7ClUSLaicFBVOCErzIFH9g13fssrz69zP/cs85AR6r97GbgPKdSofxyOezBs073G208BlIFE6ATf2iydTImr7GJA0TeAEwGNAA07aDzghAg08eUru2+6DluXJkIiI2hcGJE1j6VH7RURERGqjpe4CiIiIiDQNAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpIQBiYiIiEgJAxIRERGREgYkIiIiIiUMSERERERKGJCIiIiIlDAgERERESlhQCIiIiJSwoBEREREpKRdBKTRo0fDwsICzz//vMq83bt3w9vbG506dcI333yjhuqIiIhI07SLgPT666/ju+++U5leXV2N+fPn4/Dhwzh37hxWrlyJ3NxcNVRIREREmqRdBKTQ0FCYmJioTD99+jT8/f3h5OQEExMTDB8+HPv27VNDhURERKRJ1B6Qjh07hhEjRsDR0RESiQS7du1SWWbdunXw8PCAvr4+goKCcPz48SbZd2pqKpycnOSvnZ2dkZKS0iTbJiIiotZL7QGppKQEXbt2xZdfflnn/G3btmHevHlYtGgRzp8/j/79+2PYsGFITk6WLxMUFISAgACVr9TU1AfuWwihMk0ikTzeAREREVGrp63uAoYNG4Zhw4bVO3/VqlWYNm0aXnnlFQDA6tWrsW/fPkRGRiIiIgIAEB0d3ah9Ozk5KbQY3blzBz179qxz2YqKClRUVMhfFxYWNmqfREREpPnU3oL0IJWVlYiOjkZYWJjC9LCwMJw4ceKxt//EE0/g8uXLSElJQVFREfbu3Yvw8PA6l42IiICZmZn8y8XF5bH3T0RERJpJowNSdnY2ampqYGdnpzDdzs4O6enpDd5OeHg4xowZg71798LZ2RlnzpwBAGhra+Nf//oXQkND0a1bN7z99tuwsrKqcxsLFy5EQUGB/Ov27duNPzAiIiLSaGq/xNYQyv2ChBCP1FfoQXemPfPMM3jmmWceug09PT3o6ek1eJ9ERETUeml0C5K1tTWkUqlKa1FmZqZKqxIRERFRU9HogKSrq4ugoCAcOHBAYfqBAwfQp08fNVVFREREbZ3aL7EVFxfjxo0b8tdJSUmIiYmBpaUlXF1dMX/+fEycOBHBwcHo3bs31q9fj+TkZMyYMUONVRMREVFbpvaAdPbsWYSGhspfz58/HwAwadIkbNq0CePGjUNOTg6WLVuGtLQ0BAQEYO/evXBzc1NXyURERNTGSURdoyXSQxUWFsLMzAwFBQUwNTVVdzlERETUAA09f2t0HyQiIiIidWBAIiIiIlLCgERERESkhAGJiIiISAkDEhEREZESBiQiIiIiJQxIREREREoYkIiIiIiUMCARERERKWFAIiIiIlLCgERERESkhAGJiIiISAkDEhEREZESBiQiIiIiJQxIREREREoYkIiIiIiUMCARERERKWFAIiIiIlLCgERERESkhAGJiIiISAkDEhEREZESBiQiIiIiJQxIREREREoYkIiIiIiUMCARERERKWFAIiIiIlLCgERERESkhAGJiIiISAkDEhEREZESBiQiIiIiJQxIREREREoYkIiIiIiUMCARERERKWFAIiIiIlLCgERERESkhAGJiIiISAkDEhEREZESBiQiIiIiJQxIREREREoYkIiIiIiUMCARERERKWFAIiIiIlLCgERERESkhAGJiIiISAkDEhEREZESBiQiIiIiJQxIREREREoYkIiIiIiUMCARERERKWFAIiIiIlLCgERERESkhAGJiIiISAkDEhEREZESBiQiIiIiJQxIREREREoYkIiIiIiU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", "text/plain": [ "
" ] @@ -226,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -235,13 +236,13 @@ "" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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+SeY+vu36rZlMhmsrKzue/7ukF0mVVVVSEhIwFtvvaWyPCwsDH///XeTt5OXlwcHBwdcuXIFp06dwn//+98G265ZswYrVqxocc2N6Szpv7McB9B5jkXX/iJrKR6HbjF0cNA44Zr4+bX6iayt8TioMR0yIOXn50Mul8PR0VFluaOjI3Jycpq8nQkTJqCoqAhmZmbYunVro0NsixcvRlRUlPL5vR6k1tBZfml2luMAOs+xdJZfnDwOoq7FwN4ednPmaPV3bYcMSPeIRCKV54IgaCxrTHN6m4yNjWFsbNzk9s3RWX5pdpbjADrXsRC1JV04kbUGHoduMXRw0HovfYcMSHZ2dtDX19foLcrLy9PoVSKiWp3lFyePQ7fowomsNfA4SJ3Ofsy/MUZGRggODkZcXJzK8ri4OAwZMkRLVbWOzvJLs7McB9B5juXeL86ONllTHY+DiNqDzvYglZSUIC0tTfk8PT0diYmJsLGxgbu7O6KiojBt2jSEhIRg8ODB2Lx5MzIzMzFz5kwtVv3gOkv67yzHAXSuYyEioqbR2YB05swZhIaGKp/fmyD9wgsvICYmBpGRkSgoKMDKlSuRnZ2NgIAA7NmzBx4eHtoqmYiIiDqJDnEdJF3U1OsoEBERke5o6vm7Q85BIiIiImpLDEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNR0iYA0ceJEdOvWDU8//XSz1hEREVHX1CUC0vz58/H11183ex0RERF1TV0iIIWGhsLCwqLZ64iIiKhr0npAOnz4MMaPHw8XFxeIRCLs3LlTo82mTZvg5eUFExMTBAcH48iRI+1fKBEREXUZWg9IpaWlCAoKwmeffVbv+tjYWLz++utYsmQJzp07h+HDhyMiIgKZmZnKNsHBwQgICNB4ZGVltddhEBERUSdioO0CIiIiEBER0eD69evX46WXXsLLL78MAPj444+xb98+REdHY82aNQCAhISENq+zsrISlZWVyucymazN90lERETaofUepMZUVVUhISEBYWFhKsvDwsLw999/t2sta9asgZWVlfLh5ubWrvsnIiKi9qPTASk/Px9yuRyOjo4qyx0dHZGTk9Pk7YSHh+OZZ57Bnj174OrqitOnTzdpXV2LFy+GVCpVPm7evNmygyIiIiKdp/UhtqYQiUQqzwVB0FjWmH379rVoXV3GxsYwNjZu8j6JiIio49LpHiQ7Ozvo6+tr9Bbl5eVp9CoRERERtRadDkhGRkYIDg5GXFycyvK4uDgMGTJES1URERFRZ6f1IbaSkhKkpaUpn6enpyMxMRE2NjZwd3dHVFQUpk2bhpCQEAwePBibN29GZmYmZs6cqcWqiYiIqDPTekA6c+YMQkNDlc+joqIAAC+88AJiYmIQGRmJgoICrFy5EtnZ2QgICMCePXvg4eGhrZKJiIiokxMJgiBou4iOSCaTwcrKClKpFJaWltouh4iIiJqgqedvnZ6DRERERKQNDEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpYUAiIiIiUsOARERERKSGAYmIiIhIDQMSERERkRoGJCIiIiI1DEhEREREahiQiIiIiNQwIBERERGpaXJAsrGxQX5+PgBgxowZKC4ubrOiiIiIiLSpyQGpqqoKMpkMALBt2zZUVFS0WVFERERE2mTQ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", + "image/png": "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7NOnVbetVCphb29/0/N3h2wyqa6uRkJCAl566SWN6dHR0Th27FiztyOXy+Hq6oqLFy/i+PHj+O9//9vosmvWrMFrr73W4pqb0lnSf2c5DqDzHIux/UXWUjwO42Lm6qpzwrUICWn1E1lb43FQUzpkQMrPz0ddXR3c3Nw0pru5uSE3N7fZ25k0aRKKiopgbW2NTZs2NXmJbenSpYiJiVG/b2hBag2d5ZdmZzkOoPMcS2f5xcnjIOpaTF1c4Pzsswb9XdshA1IDiUSi8V4IoTOtKbfS2iSTySCTyZq9/K3oLL80O8txAJ3rWIjakjGcyFoDj8O4mLm6GryVvkMGJGdnZ0ilUp3WIrlcrtOqRET1OssvTh6HcTGGE1lr4HGQNqO9zb8p5ubmiIiIQFxcnMb0uLg4DB482EBVtY7O8kuzsxwH0HmOpeEXZ0frrKmNx0FE7cFoW5BKS0uRmpqqfp+eno7ExEQ4OjrCx8cHMTExmD59OiIjIzFo0CBs2LABmZmZmDt3rgGrvn2dJf13luMAOtexEBFR8xhtQDp58iSioqLU7xs6SM+YMQObN2/GlClTUFBQgJUrVyInJwehoaHYs2cPfH19DVUyERERdRIdYhwkY9TccRSIiIjIeDT3/N0h+yARERERtSUGJCIiIiItDEhEREREWhiQiIiIiLQwIBERERFpYUAiIiIi0sKARERERKSFAYmIiIhICwMSERERkRYGJCIiIiItDEhEREREWhiQiIiIiLQwIBERERFpYUAiIiIi0sKARERERKSFAYmIiIhICwMSERERkRYGJCIiIiItDEhEREREWhiQiIiIiLQwIBERERFpYUAiIiIi0sKARERERKSFAYmIiIhICwMSERERkRYGJCIiIiItDEhEREREWhiQiIiIiLQwIBERERFpYUAiIiIi0sKARERERKSFAYmIiIhICwMSERERkRYGJCIiIiItDEhEREREWhiQiIiIiLQwIBERERFpYUAiIiIi0sKARERERKSFAYmIiIhICwMSERERkRYGJCIiIiItDEhEREREWhiQiIiIiLQwIBERERFpYUAiIiIi0sKARERERKSFAYmIiIhICwMSERERkRYGJCIiIiItDEhEREREWrpEQJo8eTK6deuGhx566JbmERERUdfUJQLSwoUL8fnnn9/yPCIiIuqaukRAioqKgq2t7S3PIyIi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", "text/plain": [ "
" ] @@ -259,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -268,13 +269,13 @@ "" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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Bvd/9NFHmD59Ol588UUAwJo1a7B//35ERUVhxYoVAID4+Pg2r3PFihVYunRpm5+HiIiIdE/nQ2yNqaioQHx8PEJCQtS2h4SE4OjRo+1ay8KFC6FQKFSPtLS0dj0/ERERtR+d9yA1JicnB9XV1XB0dFTb7ujoiMzMzCYfJzQ0FCdPnkRxcTFcXV2xc+dODBo06J776jI1NYWpqWnLLoiIiIg6BL0OSHdIJBK150IIrW2N2b9/f7P2ERERUdek10NsdnZ2MDQ01OotysrK0upVIiIiImoteh2QTExMEBgYiOjoaLXt0dHRGDZsmI6qIiIios5O50NsRUVFuHz5sup5SkoKEhISYGNjA3d3dyxYsACTJ09GUFAQhg4dio0bNyI1NRUzZszQYdVERETUmek8IJ04cQLBwcGq5wsWLAAATJkyBVu2bEFERARyc3Px3nvvISMjAwEBAdi7dy88PDx0VTIRERF1chIhhNB1ER1RQUEB5HI5FAoFrKysdF0OERERNUFT37/1eg4SERERkS4wIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKSBAYmIiIhIAwMSERERkQYGJCIiIiINDEhEREREGhiQiIiIiDQwIBERERFpYEAiIiIi0sCARERERKShSwSkMWPGoFu3bhg3bpza9sLCQgwaNAj9+/dHnz598Omnn+qoQiIiItInEiGE0HURbe3QoUMoKirC1q1b8f3336u2V1dXo7y8HFKpFCUlJQgICMBff/0FW1vbex6zoKAAcrkcCoUCVlZWbVk+ERERtZKmvn93iR6k4OBgyGQyre2GhoaQSqUAgLKyMlRXV6ML5EUiIiK6B50HpMOHD2P06NFwcXGBRCLBrl27tNpERkbCy8sLZmZmCAwMRGxsbKudPz8/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", + "image/png": "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J05sdv27776L+fPn45lnngEAvP/++zhy5AgiIiKwadMmAEB0dHSH17lp0yasW7euw89DREREuqfzLraWVFVVITo6GqGhoWrLQ0NDcfr06U6tZeXKlVAoFKpXWlpap56fiIiIOo/OW5Bakpubi9raWjg5Oaktd3JyQmZmZquPExYWhvPnz6O0tBRubm7Yt28fhg8ffsd1jclkMshksnu7ICIiIuoS9DogNZBIJGrvhRBay1py5MiRNq0jIiKinkmvu9js7e0hlUq1Wouys7O1WpWIiIiI2oteByRjY2MEBgYiMjJSbXlkZCSCg4N1VBURERF1dzrvYispKUFSUpLqfUpKCmJjY2FrawsPDw+Eh4dj9uzZCAoKwsiRI7Ft2zakpqZi4cKFOqyaiIiIujOdB6Rz584hJCRE9T48PBwAMGfOHOzcuRMzZsxAXl4e1q9fj4yMDAQEBODQoUPw9PTUVclERETUzUmEEELXRXRFRUVFsLKygkKhgKWlpa7LISIiolZo7f1br8cgEREREekCAxIRERGRBgYkIiIiIg0MSEREREQaGJCIiIiINDAgEREREWlgQCIiIiLSwIBEREREpIEBiYiIiEgDAxIRERGRBgYkIiIiIg0MSEREREQaGJCIiIiINDAgEREREWlgQCIiIiLSwIBEREREpIEBiYiIiEgDAxIRERGRBgYkIiIiIg0MSEREREQaGJCIiIiINDAgEREREWlgQCIiIiLSwIBEREREpIEBiYiIiEgDAxIRERGRBgYkIiIiIg0MSEREREQaGJCIiIiINDAgEREREWlgQCIiIiLSwIBEREREpIEBiYiIiEgDAxIRERGRBgYkIiIiIg0MSEREREQaGJCIiIiINDAgEREREWlgQCIiIiLSwIBEREREpIEBiYiIiEgDAxIRERGRBgYkIiIiIg0MSEREREQaekRAmjp1KmxsbDB9+nS15cXFxRg+fDiGDBmCgQMHYvv27TqqkIiIiPSJRAghdF1ERztx4gRKSkqwa9cu7NmzR7W8trYWlZWVMDU1RVlZGQICAvDnn3/Czs7ujscsKiqClZUVFAoFLC0tO7J8IiIiaietvX/3iBakkJAQWFhYaC2XSqUwNTUFAFRUVKC2thY9IC8SERHRHeg8IJ08eRKTJk2Cq6srJBIJ9u/fr7XN1q1b4e3tDblcjsDAQJw6dardzl9Y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", "text/plain": [ "
" ] @@ -299,7 +300,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -309,7 +310,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -329,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -338,7 +339,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -347,7 +348,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -356,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -712,7 +713,7 @@ "[870 rows x 10 columns]" ] }, - "execution_count": 22, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -723,7 +724,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -1080,7 +1081,7 @@ "[210 rows x 10 columns]" ] }, - "execution_count": 23, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1091,7 +1092,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -1100,7 +1101,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -1109,7 +1110,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -1118,7 +1119,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -1127,7 +1128,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -1480,7 +1481,7 @@ "[870 rows x 10 columns]" ] }, - "execution_count": 28, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1491,7 +1492,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -1504,7 +1505,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -1513,7 +1514,7 @@ "0.00010054083203834371" ] }, - "execution_count": 30, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1522,9 +1523,16 @@ "abs(8.63e-6 - beta_coll.value) / min(8.63e-6, beta_coll.value)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## CMFGEN data compared to reference data" + ] + }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -1533,13 +1541,13 @@ "" ] }, - "execution_count": 31, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHACAYAAABKwtdzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABey0lEQVR4nO3deVhU9eI/8PewzAwDzCCILMnihgpuqKloaaaCWv6yTeprptlycy9bve6VevW2qKXeLJNri2IXNTM1zdxK0iuJ3twXFMVB9hm2GZY5vz8GjowzIMgywHm/nuc8zDnnc875HOFp3n2Wc2SCIAggIiIikhAHe1eAiIiIqKExABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwAN3FoUOHMGrUKPj7+0Mmk2Hbtm31er3g4GDIZDKrZcqUKfV6XSIiIilhALqL/Px8dO/eHZ999lmDXO+///0vtFqtuOzduxcA8PTTTzfI9YmIiKSAAeguRowYgQ8++ABPPPGEzf1FRUV4++23cd9998HV1RV9+/bFgQMH7vl63t7e8PX1FZcdO3agXbt2GDRo0D2fk4iIiCwxANXSCy+8gN9//x2bNm3CqVOn8PTTT2P48OG4ePFirc9dVFSEb775BhMnToRMJquD2hIREREAyARBEOxdiaZCJpNh69atGD16NADg8uXL6NChA27cuAF/f3+x3NChQ9GnTx8sXry4VtfbvHkz/u///g/JyckW5yciIqLaYQtQLfz5558QBAEhISFwc3MTl4MHD+Ly5csAgKtXr9oc1FxxmTp1qs3zr1u3DiNGjGD4ISIiqmNO9q5AU2YymeDo6IiEhAQ4Ojpa7HNzcwMA3HfffTh79myV52nRooXVtmvXruGXX37Bli1b6q7CREREBIABqFbCw8NRWlqKtLQ0PPjggzbLODs7o1OnTjU+9/r169GqVSs88sgjta0mERER3YEB6C7y8vJw6dIlcT0pKQmJiYnw9PRESEgIxo4di+effx4fffQRwsPDkZGRgV9//RVdu3bFyJEj7+maJpMJ69evx/jx4+HkxF8RERFRXeMg6Ls4cOAABg8ebLV9/PjxiImJQXFxMT744ANs2LABKSkp8PLyQkREBBYuXIiuXbve0zX37NmDqKgonD9/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559wcXFB165dYTKZcPDgQbELrLliFxgREVEF69atw1NPPYUuXbpYLBMnTkROTg5++umnSo996KGHEBYWhsWLF1tsz83NRWpqKq5fv45Dhw7hlVdewQcffIBFixaJLUh3WrBgAd5++20cOHAASUlJOHHiBCZOnIji4mIMGzbM5jFjx45Fy5Yt8dhjj+Hw4cNISkrCwYMHMWPGDNy4cQMA8OqrryIgIABz5szBxx9/DEEQ8OabbwIwB6zx48dj4sSJ2LZtG5KSknDgwIG7DgBvihiAiIiIyiQkJODkyZN48sknrfa5u7sjMjLyrlPCZ86ciS+++ALXr18Xt82bNw9+fn5o3749xo0bB51Oh3379uGdd96p9DyDBg3ClStX8Pzzz6NTp04YMWIEUlNTsWfPHnTs2NHmMSqVCocOHUJgYCCeeOIJdO7cGRMnTkRhYSHUajU2bNiAnTt34uuvv4aTkxNUKhW+/fZbfPnll9i5cycAYM2aNXjqqacwefJkdOrUCS+//HKlLU5NmUyoy3mDzYRer4dGo4FOp6u0CZGIiACDwYCkpCS0adMGSqXS3tUhCajqb64m399sASIiIiLJYQAiIiIiyWEAIiIiIslhACIiIiLJsWsAOnToEEaNGgV/f3/IZDKrZy7YcvDgQfTq1QtKpRJt27bFv/71L6sycXFxCA0NhUKhQGhoKLZu3VoPtSciIqKmyq4BKD8/H927d8dnn31WrfJJSUkYOXIkHnzwQZw4cQJ///vfMX36dMTFxYll4uPjER0djXHjxuHkyZMYN24cxowZg6NHj9bXbRAREVET02imwctkMmzdurXKJ2K+88472L59O86ePStue/XVV3Hy5EnEx8cDAKKjo6HX67Fr1y6xzPDhw9GiRQts3LixWnXhNHgiourhNHhqaJKcBh8fH4/IyEiLbVFRUTh+/DiKi4urLHPkyJEGqycRERE1bk0qAKWmpsLHx8dim4+PD0pKSpCRkVFlmdTU1ErPazQaodfrLRYiIqLm4OrVq5DJZEhMTLR3VRqVagcgT09PMWRMnDgRubm59VapqshkMov18h68itttlblzW0VLliyBRqMRl4CAgDqsMRERNSYymazKZcKECWLZyMhIODo64o8//rA6z4QJE8RjnJycEBgYiEmTJiE7O9uiXHBwsFjOxcUFwcHBGDNmDH799VeLcraC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", + "image/png": "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0LFjxxAYGCitR0dHY9++fWZl9u7di379+jV21YiIiKiJsmkXWEFBAVJSUqT1ixcvIikpCV5eXggJCcH8+fORnp6OTZs2AQBWrlyJsLAwdOnSBQaDAZ9//jni4uIQFxcnnWPOnDkYMGAAVqxYgTFjxuDbb7/FDz/8gJ9++qnR74+IiIiaJpsGoD/++AODBw+W1ivG4UyZMgWxsbHIyMhAamqqtN9gMOD5559Heno6nJ2d0aVLF+zatQujRo2SyvTr1w9fffUVXnvtNSxYsADt27fHli1b0KdPn8a7MSIiImrSmsxzgJoSPgeIiIio+WnxzwEiIiIiuh0MQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDs2DUAJCQkYPXo0goKCoFAosH379mrLb926FcOGDYOvry88PDwQHR2N77//3qxMbGwsFAqFxaLT6RrwToiIiKg5sWkAKiwsRI8ePfDBBx/UqHxCQgKGDRuG3bt3IzExEYMHD8bo0aNx7Ngxs3IeHh7IyMgwW1QqVUPcAhERETVDDra8+MiRIzFy5Mgal1+5cqXZ+rJly/Dtt9/if//7HyIjI6XtCoUCAQEB9VVNIiIiamGa9Rggo9GI/Px8eHl5mW0vKChAaGgo2rRpg/vvv9+ihehmer0eWq3WbCEiIqKWq1kHoH//+98oLCzEuHHjpG3h4eGIjY3Fjh07sHnzZqhUKvTv3x/nzp2r8jzLly+HWq2WluDg4MaoPhEREdmIQgghbF0JwNRttW3bNowdO7ZG5Tdv3ownnngC3377LYYOHVplOaPRiF69emHAgAFYvXq11TJ6vR56vV5a12q1CA4OhkajgYeHR63ug4iIiGxDq9VCrVbX6PvbpmOA6mrLli2YPn06vvnmm2rDDwDY2dnhzjvvrLYFSKlUQqlU1nc1iYiIqIlqdl1gmzdvxtSpU/Hll1/ivvvuu2V5IQSSkpIQGBjYCLUjIiKi5sCmLUAFBQVISUmR1i9evIikpCR4eXkhJCQE8+fPR3p6OjZt2gTAFH4mT56MVatWoW/fvsjMzAQAODs7Q61WAwCWLFmCvn37okOHDtBqtVi9ejWSkpKwZs2axr9BIiIiapJs2gL0xx9/IDIyUprCPm/ePERGRmLhwoUAgIyMDKSmpkrlP/roI5SWlmLWrFkIDAyUljlz5khl8vLy8OSTT6Jz586IiYlBeno6EhIScNdddzXuzREREVGT1WQGQTcltRlERURERE1Dbb6/m90YICIiIqLbxQBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREsuNg6woQEVHzU1ZWhpKSEltXg2TIyckJdna3337DAERERDUmhEBmZiby8vJsXRWSKTs7O7Rt2xZOTk63dR4GICIiqrGK8OPn5wcXFxcoFApbV4lkxGg04sqVK8jIyEBISMht/ftjACIiohopKyuTwo+3t7etq0My5evriytXrqC0tBSOjo51Pg8HQRMRUY1UjPlxcXGxcU1Iziq6vsrKym7rPAxARERUK+z2Iluqr39/DEBEREQkOwxAREREJDsMQERE1KIpFIpql6lTp0plY2JiYG9vj19++cXiPFOnTpWOcXBwQEhICGbOnInc3FyzcmFhYVI5Z2dnhIWFYdy4cfjxxx/Nyl26dAkKhQJJSUnStri4OPTp0wdqtRru7u7o0qULnnvuuXr9fZAJAxAREbVoGRkZ0rJy5Up4eHiYbVu1ahUAIDU1FUeOHMHs2bOxYcMGq+caMWIEMjIycOnSJXzyySf43//+h6efftqi3Ouvv46MjAycOXMGmzZtgqenJ4YOHYqlS5dWWc8ffvgBjz76KB5++GH89ttvSExMxNKlS2EwGOrnF0FmGICIiKhFCwgIkBa1Wg2FQmGxDQA2btyI+++/HzNnzsSWLVtQWFhocS6lUomAgAC0adMGMTExGD9+PPbu3WtRzt3dHQEBAQgJ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NCtnLajExcWhT58+UKvVcHd3R5cuXfDcc8/V6++DTGocgAwGg9Qy8tlnn0Gn0zVYpaoSEBBg0ZKTlZUFBwcHeHt7V1vm5lahyubPnw+NRiMtld/nQkREzVtGRoa0rFy5Eh4eHmbbVq1aBQBITU3FkSNHMHv27Crf/zVixAhkZGTg0qVL+OSTT/C///0PTz/9tEW5119/HRkZGThz5gw2bdoET09PDB06FEuXLq2ynj/88AMeffRRPPzww/jtt9+QmJiIpUuXwmAw1M8vgszUOABFR0dj7NixePzxxyGEwLPPPotp06ZZXRpKdHQ09u3bZ7Zt7969iIqKgqOjY7Vl+vXrV+V5lUolPDw8zBYiImoZAgICpEWtVkOhUFhsA4CNGzfi/vvvx8yZM7FlyxarLwRVKpUICAhAmzZtEBMTg/Hjx2Pv3r0W5dzd3REQEICQkBAMGDAA69evx4IFC7Bw4UKcOXPGaj137tyJu+++Gy+88AI6deqEjh07YuzYsXj//fervb/ffvsNkZGRUKlUiIqKwrFjxyzKJCcnY9SoUXBzc4O/vz8mTZok9eoApp6St956C+3atYOzszN69OiB//73v9K+oUOHYsSIEVKvS15eHkJCQvDqq69K59ixYweioqKgUqng4+ODBx98sNp621qNA9Dnn3+OUaNGoaCgAACg0WiQm5trdampgoICJCUlSc1/Fy9eRFJSElJTUwGYWmYmT54slX/qqafw999/Y968eTh16hQ+/fRTbNiwAc8//7xUZs6cOdi7dy9WrFiB06dPY8WKFfjhhx8wd+7cGteLiIjkRQiBjRs34rHHHkN4eDg6duyIr7/+utpjLly4gO+++076D/BbmTNnDoQQ+Pbbb63uDwgIwMmTJ/HXX3/VuN6FhYW4//770alTJyQmJmLx4sVm34mAqQVs4MCB6NmzJ/744w989913uHr1KsaNGyeVee2117Bx40asW7cOJ0+exD//+U889thjOHjwIBQKBT777DP89ttvWL16NQDT97G/vz8WL14MANi1axcefPBB3HfffTh27Bj279+PqKioGt+HTYg6CAsLEzk5OXU51MyBAwcEAItlypQpQgghpkyZIgYOHGh2THx8vIiMjBROTk4iLCxMrFu3zuK833zzjejUqZNwdHQU4eHhIi4urlb10mg0AoDQaDR1vTUiohanuLhY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HY899hi8vb3h4uKCnj17IjEx0dbVkqXS0lK89tpraNu2LZydndGuXTu8/vrrMBqNtq5as8YA1Ei2bNmCuXPn4tVXX8WxY8dwzz33YOTIkUhNTbV11WTp4MGDmDVrFn755Rfs27cPpaWliImJQWFhoa2rJmu///471q9fj+7du9u6KrKWm5uL/v37w9HREXv27EFycjL+/e9/w9PT09ZVk6UVK1bgww8/xAcffIBTp07hrbfewttvv43333/f1lVr1jgLrJH06dMHvXr1wrp166RtnTt3xtixY7F8+XIb1owAIDs7G35+fjh48CAGDBhg6+rIUkFBAXr16oW1a9fizTffRM+ePbFy5UpbV0uWXn75Zfz8889spW4i7r//fvj7+2PDhg3StoceegguLi74z3/+Y8OaNW9sAWoEBoMBiYmJiImJMdseExODw4cP26hWVJlGowEAeHl52bgm8jVr1izcd999GDp0qK2rIns7duxAVFQUHnnkEfj5+SEyMhIff/yxraslW3fffTf279+Ps2fPAgCOHz+On376CaNGjbJxzZo3vgusEeTk5KCsrAz+/v5m2/39/ZGZmWmjWlEFIQTmzZuHu+++G127drV1dWTpq6++wtGjR/H777/buioE4MKFC1i3bh3mzZuHV155Bb/99hueffZZKJVKTJ482dbVk52XXnoJGo0G4eHhsLe3R1lZGZYuXYoJEybYumrNGgNQI7r5zfJCiHp/2zzV3uzZs3HixAn89NNPtq6KLKWlpWHOnDnYu3cvVCqVratDAIxGI6KiorBs2TIAQGRkJE6ePIl169YxANnAli1b8Pnnn+PLL79Ely5dkJSUhLlz5yIoKAhTpkyxdfWaLQagRuDj4wN7e3uL1p6srCyLViFqXM888wx27NiBhIQEtGnTxtbVkaXExERkZWWhd+/e0raysjIkJCTggw8+gF6vh729vQ1rKD+BgYGIiIgw29a5c2fExcXZqEby9sILL+Dll1/Go48+CgDo1q0b/v77byxfvpwB6DZwDFAjcHJyQu/evbFv3z6z7fv27UO/fv1sVCt5E0Jg9uzZ2Lp1K3788Ue0bdvW1lWSrSFDhuDPP/9EUlKStERFRWHixIlISkpi+LGB/v37WzwW4uzZswgNDbVRjeStqKgIdnbmX9f29vacBn+b2ALUSObNm4dJkyYhKioK0dHRWL9+PVJTU/HUU0/ZumqyNGvWLHz55Zf49ttv4e7uLrXOqdVqODs727h28uLu7m4x9srV1RXe3t4ck2Uj//znP9GvXz8sW7YM48aNw2+//Yb169dj/fr1tq6aLI0ePRpLly5FSEgIunTpgmPHjuHdd9/FtGnTbF21Zo3T4BvR2rVr8dZbbyEjIwNdu3bFe++9xynXNlLV2KuNGzdi6tSpjVsZsjBo0CBOg7exnTt3Yv78+Th37hzatm2LefPmYcaMGbaulizl5+djwYIF2LZtG7KyshAUFIQJEyZg4cKFcHJysnX1mi0GICIiIpIdjgEiIiIi2WEAIiIiItlhACIiIiLZYQAiIiIi2WEAIiIiItlhACIiIiLZYQAiIiIi2WEAIiIiItlhACKiFkmhUGD79u23dY5BgwZh7ty50npYWBifTk3UQjAAEVGzlJWVhf/7v/9DSEgIlEolAgICMHz4cBw5csTWVSOiZoAvQyWiZumhhx5CSUkJPvvsM7Rr1w5Xr17F/v37cf36dVtXjYiaAbYAEVGzk5eXh59++gkrVqzA4MGDERoairvuugvz58/HfffdJ5XLycnBAw88ABcXF3To0AE7duwwO09ycjJGjRoFNzc3+Pv7Y9KkScjJyWns2yEiG2AAIqJmx83NDW5ubti+fTv0en2V5ZYsWYJx48bhxIkTGDVqFCZOnCi1EGVkZGDgwIHo2bMn/vjjD3z33Xe4evUqxo0b11i3QUQ2xABERM2Og4MDYmNj8dlnn8HT0xP9+/fHK6+8ghMnTpiVmzp1KiZMmIA77rgDy5YtQ2FhIX777TcAwLp169CrVy8sW7YM4eHhiIyMxKeffooDBw7g7NmztrgtImpEDEBE1Cw99NBDuHLlCnbs2IHhw4cjPj4evXr1QmxsrFSme/fu0mdXV1e4u7sjKysLAJCYmIgDBw5IrUlubm4IDw8HAJw/f75R74WIGh8HQRNRs6VSqTBs2DAMGzYMCxcuxBNPPIFFixZh6tSpAABHR0ez8gqFAkajEQBgNBoxevRorFixwuK8gYGBDV53IrItBiAiajEiIiJq/OyfXr16IS4uDmFhYXBw4P8VEskNu8CIqNm5du0a7r33Xnz++ec4ceIELl68iG+++QZvvfUWxowZU6NzzJo1C9evX8eECRPw22+/4cKFC9i7dy+mTZuGsrKyBr4DIrI1/mcPETU7bm5u6NOnD9577z2cP38eJSUlCA4OxowZM/DKK6/U6BxBQUH4+eef8dJLL2H48OHQ6/UIDQ3FiBEjYGfH/zYkaukUQghh60oQERERNSb+Zw4RERHJDgMQERERyQ4DEBEREckOAxARERHJDgMQERERyQ4DEBEREckOAxARERHJDgMQERERyQ4DEBEREckOAxARERHJDgMQERERyQ4DEBEREcnO/we2hkgkPuCqCwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1559,7 +1567,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -1568,13 +1576,13 @@ "" ] }, - "execution_count": 32, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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ZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZRFUAACAZTk8qBw7dkwPP/ywKleuLC8vLzVt2lSRkZGOLgsAAFiAiyN3fubMGbVp00bt2rXT119/reDgYB04cEABAQGOLAsAAFiEQ4PK9OnTFRYWpvnz59uXhYeHO64gAABgKQ499LNy5Uq1bNlSDz30kIKDg9WsWTO9++67jiwJAABYiEODysGDBzVnzhzVrVtX33zzjZ555hmNGDFCH374YZ7t09LSlJSUlOMBAACuXzZjjHHUzt3c3NSyZUtt2rTJvmzEiBH6+eeftXnz5lztJ02apMmTJ+danpiYKD8/v1KtFQAAlIykpCT5+/sX6vvboSMqVatWVYMGDXIsq1+/vo4cOZJn+zFjxigxMdH+OHr0aFmUCQAAHMShk2nbtGmjPXv25Fi2d+9e1axZM8/27u7ucnd3L4vSAOC6lJWVpYsXLzq6DFznXF1d5ezsXCLbcmhQee6553T77bdr6tSp6t27t7Zu3aq5c+dq7ty5jiwLAK5LFy9eVExMjLKyshxdCiqAgIAAhYaGymazFWs7Dg0qt9xyi5YvX64xY8bolVdeUa1atTRz5kz179/fkWUBwHXHGKPY2Fg5OzsrLCxMTk4Ov94nrlPGGKWkpCg+Pl5S9jSP4nBoUJGk+++/X/fff7+jywCA61pGRoZSUlJUrVo1eXl5ObocXOc8PT0lSfHx8QoODi7WYSAiNQBUAJmZmZKyz7YEysKlQJyenl6s7RBUAKACKe58AaCwSupvjaACAAAsi6ACAAAsi6ACALAkm81W4GPgwIH2th07dpSzs7O2bNmSazsDBw60r+Pi4qIaNWpo8ODBOnPmTI524eHh9naenp4KDw9X79699d133+Vod+jQ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nCk/P78cy2bNmiVJOnLkiDZv3qxhw4ble3+fzp07KzY2VocOHdJ7772nzz//XEOGDMnV7pVXXlFsbKz27NmjDz/8UAEBAWrfvr2mTJmSb53ffvut+vbtq169emnr1q2KjIzUlClTdPHixZL5QVRwhb7Hd+vWrdWjRw+1aNFCxhiNGDFCnp6eebZ9//33S6xAAEDFFBoaan/t7+8vm82WY9kl8+fP1/3336/BgwerVatWmjlzpry9vXO0cXd3t69bvXp19enTRwsWLMi1LV9fX3u7GjVq6K677lLVqlU1YcIE9erVK8+bDH7xxRe644479OKLL9qXRUREqEePHgX2b+vWrXr66acVHR2tRo0aaezYsbna7N69Wy+88II2bNggb29vdezYUW+88YaqVKkiSTLG6J///Kf+85//KDY2VhERERo/frx69eolY4w6dOggFxcXff3117LZbDp79qyaNGmiAQMG2MPXypUr9corr+i3336Tj4+P7rrrLn366acF1l6WCj2i8tFHH6lr1646d+6cJCkxMVFnzpzJ8wEAQFkwxmj+/Pl6+OGHVa9ePUVERGjp0qUFrnPw4EGtWrVKrq6uhdrHyJEjZYzRZ599lufnoaGh2rVrl3777bdC133+/Hndf//9uummmxQZGalJkybphRdeyNEmNjZWbdu2VdOmTfXLL79o1apVOnHihHr37m1vM27cOM2fP19z5szRrl279Nxzz+nhhx/W+vXrZbPZ9MEHH2jr1q2aPXu2JOmZZ55RSEiIJk2aJEn68ssv9eCDD+q+++7Tr7/+qrVr16ply5aF7keZMNcgPDzcnDx58lpWLVGJiYlGkklMTHR0KQBgaRcuXDC7d+82Fy5cyF6QlWVM2jnHPLKyilz//Pnzjb+/f67lq1evNkFBQSY9Pd0YY8wbb7xh2rRpk6PNo48+apydnY23t7fx8PAwkowk8/rrr+doV7NmTfPGG2/kuf+QkBAzePBgY4wxMTExRpL59ddfjTHGnDt3znTt2tVIMjVr1jR9+vQx8+bNM6mpqfn255133jGBgYHm/Pnz9mVz5szJsd3x48ebjh075ljv6NGjRpLZs2ePOXfunPHw8DCbNm3K0ebxxx83/fr1s79funSpcXd3N2PGjDFeXl5mz5499s9at25t+vfvn2+dxZHrb+4yRfn+LvShn8DAQO3du1dV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hg8frhEjRuiWW27J9x5AAIDy7ZO9n6jPF33U54s+mrR5kiRp0uZJ9mWf7P2kxPdZt25d2Ww2RUdHX72xlGvupM1my3VoI69DSJebP3++Nm/erNtvv11LlixRRERErrkwBdmyZYv69u2rLl266IsvvtCvv/6qsWPH6uLFi0Wu9XJZWVl6+umnFRUVZX9s375d+/bt04033mhvt2HDBjk7O+v48eP2uSmS5OnpWeg+WE2RgsrMmTP15JNP5kqGkuTv76+nn35ar7/+eokVBwCwhociHtKS+5doyf1LNKn1JEnSpNaT7MseinioxPcZGBioTp066a233srxpXvJ2bNnS3yfktSsWTONGTNGmzZtUqNGjbR48WJJkpubmzIzMwtc98cff1TNmjU1duxYtWzZUnXr1tXhw4eLXVPz5s21a9cu1alTJ9fDzc1NUvZk2xkzZujzzz+Xn5+fhg8fbl+/SZMmioqKyjVnpzwoUlDZvn27OnfunO/nHTt2VGRkZLGLAgBYS5BXkBpUbqAGlRuofuXsS1PUr1zfvqykD/tc8vbbbyszM1OtWrXSsmXLtG/fPkVHR2v27Nlq3bp1ie4rJiZGY8aM0ebNm3X48GGtXr1ae/futV+KIzw8XDExMYqKitLJkyeVlpaWaxt16tTRkSNH9PHHH+vAgQOaPXu2li9fXuzaRo8erc2bN2vo0KGKiorSvn37tHLlSnsYSU5O1oABAzR8+HB16dJFixcv1tKlS/XJJ9kjXf369VNoaKh69OihH3/8UQcPHtSyZcu0efPmYtdW2ooUVE6cOJHnacmXuLi4cGVaAECJqVWrlrZt26Z27dpp1KhRatSokTp06KC1a9dqzpw5JbovLy8v/f777+rZs6ciIiL01FNPadiwYXr66aclST179lTnzp3Vrl07BQUF6b///W+ubXTv3l3PPfechg0bpqZNm2rTpk0aP358sWtr0qSJ1q9fr3379unOO+9Us2bNNH78ePv8mZEjR8rb21tTp06VJDVs2FDTp0/XM888o2PHjsnNzU2rV69WcHCwunbtqsaNG+sf//iHnJ2di11babOZS7OVCuHGG2/Ua6+9pgceeCDPzz/99FO98MILOnjwYIkVWJCkpCT5+/srMTExz8NRAIBsqampiomJUa1ateTh4VGsbSWkJOiTvZ/ooYiHSm0kBeVfQX9zRfn+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", + "image/png": "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49Tu0KFDstlsio6OdixbtmyZ2rdvr6CgIAUEBKhZs2Z64oknivTngWwEFQCAJRw/ftzxeOONNxQYGOi0bM6cOZKkw4cPa9u2bRozZowWLFjgclu33nqrjh8/rkOHDundd9/Vf/7zH40aNSpPuxdeeEHHjx/X3r179f777ys4OFg9evTQjBkzrljn119/rfvuu0/33HOPtm/frqioKM2YMUNpaWlF84OAE4IKAMASqlWr5ngEBQXJZrPlWSZJCxcu1B133KGRI0dq6dKlunDhQp5t2e12VatWTbVq1VJkZKQGDBigtWvX5mkXEBCgatWqqXbt2urSpYvmzZunKVOmaOrUqXmunJ5j5cqV6ty5s5566ik1btxYjRo1Ur9+/fT3v/893/4dPXpUAwYMUKVKlVSlShX17dtXhw4dkiT98ssv8vPz00cffeRo/9lnn8nHx0c//fSTpOwb8z799NMKDw+X3W5Xw4YNrxjUyhKCCgCUA8YYJadluOVRlNcVNcZo4cKFeuCBBxQREaFGjRrpk08+yXedAwcOaM2aNfLy8irQPsaNGydjjL744guXn1erVk179uzRzz//XOC6k5OT1b17d/n7+2vz5s369ttv5e/vr1tvvVVpaWmKiIjQq6++qlGjRul///ufjh07phEjRuivf/2rWrRoIUkaMmSIPv74Y7355puKjY3VO++8I39//wLXUFq5/YJvAIDidzE9U02nfuWWfce80Et+3kXzdfP1118rOTlZvXr1kiQ98MADWrBggR566CGnditXrpS/v78yMzOVkpIiSXrttdcKtI/KlSsrNDTUMdqR29ixY7Vlyxa1aNFCderU0f/7f/9PkZGRGjRo0BXvR/fxxx+rQoUKevfddx2n7S5cuFDBwcHauHGjIiMjNWrUKK1evVqDBw+Wt7e32rZtq3HjxknKvg/eJ598onXr1qlHjx6SpPr16xeoP6UdIyoAgFJjwYIFGjBggDw9s4PPwIED9d///jfPYZru3bsrOjpa//3vfzV27Fj16tVLY8eOLfB+jDFXvA5IxYoVtWrVKu3fv1/PPfec/P399cQTT+jGG29UcnKyy3WioqK0f/9+BQQEyN/fX/7+/qpcubJSUlIUFxfnaPfee+9p9+7d2rlzpxYtWuSoITo6Wh4eHuratWuB+1BWMKICAOWAr5eHYl7o5bZ9F4XTp09r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xTqLksu/w0sK8/1d4EM/lStX1r59+xQSEqLu3bvL29u7OHITAKA4pCdLM2u4Z9/PHpO8K/55uwJYsGCBBgwYIE/P7K+vgQMH6qmnntLevXudDtN0795dc+fOVXJyst59913t27dPY8eOLfB+jDGy2WwuP6tYsaJWrVqluLg4bdiwQd9//72eeOIJzZkzR9u2bZOfn1+edWJjY3X99dc7fdahQwenNlFRUdqwYYP8/f3zrB8XF6fExESlpKSoZ8+eTp+lpaWpdevWjvf33nuvPv/8c82aNUtz585Vo0aNHJ9FR0drxIgRBfshWASTaQEApcLp06e1fPlyvf322/L09JSnp6dq1qypjIyMPHMjK1asqOuuu04tW7bUm2++qdTUVD3//PMF2s/vv/+uhIQE1atXL992DRo00MMPP6x3331XO3fuVExMjJYuXeqyrTHmT/eblZWlPn36KDo62unx66+/qkuXLsrKypKUffjm8s9jYmL073//27Gd5ORkRUVFycPDQ7/++qvTPq40t9TKmEwLAOWBl1/2yIa79l0ElixZolq1amn58uVOy9evX69Zs2ZpxowZjpGW3KZNm6bbbrtNI0eOVI0a+Y8szZkzRxUqVPjTybGXq1u3rvz8/HThwgWXnzdt2lQffPCBLl686PjuzH1qdZs2bbRs2TLVrVvXZT+aNm0qu92uw4cPq2vXrles5YknnlCFChX05Zdfqnfv3rr99tt18803S5Jatmyp9evX66GHHipw39ytwEHlww8/1Ouvv664uDjZbDbHEBQAoBSw2Yrs8Iu7LFiwQPfcc4+aN2/utLxOnTqaOHGiVq1apb59+7pct1u3bmrWrJlmzpypf/zjH47l586d04kTJ5Senq6DBw/qww8/1LvvvqtZs2bpuuuuc7mt6dOnKzk5Wb1791adOnV09uxZvfnmm0pPT89zWCbH/fffr8mTJ2v48OF67rnndOjQIb366qtObUaPHq358+c7DmeFhIRo//79+vjjjzV//nwFBAToySef1OOPP66srCx17txZSUlJ2rp1q/z9/fXggw9q1apVeu+997Rt2za1adNGzzzzjB588EHt3r1blSpV0rRp03TLLbeoQYMGuu+++5SRkaEvv/xSTz/9dGF+FSXraibIMJkWAKwrv0mMpUXuybQ//PCDkWS2b9/usn2fPn1Mnz59jDHZ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fKMxY8bo+++/V2BgoHr27On4ZSYmJqpZs2Z65513dNNNNxVLsQCAkvHpvk8198e5Tsumb5vueD3y+pEa1WpUsey7YsWKTu+zsrLUp08fzZ49O0/bnICQW858yVWrVqlmzZpOn9nt9ivurzDrXT5X02azOa3v6+vrsq6cNh4eHoqKipKHh4fTZ67CWM461atXdzmPJTg42PH6wIEDOnbsmLKysvS///3PEabyq8fqChVU3njjDY0YMUKBgYF5PgsKCtJf/vIXvfbaawQVACjl7m10r7qFd5OUPZIyfdt0Te8wXU2qZJ/tWdW3eEZTXGnTpo2WLVumunXrFviMnKZNm8put+vw4cPq2rVrgfd1tevl1rJlS61fv14PPfRQns9at26tzMxMxcfHF/j7sk2bNjpx4oQ8PT0dk4VzS0tL06BBgzRgwABFRERo+PDh+umnnxQWFqaGDRvK19dX69ev18MPP3zV/XKHQgWVH3/80WWizREZGalXX331mosCALhXVb+8h3aaVGmiplWalngto0eP1vz58zVw4EA99dRTCgkJ0f79+/Xxxx9r/vz5eUYlJCkgIEBPPvmkHn/8cWVlZalz585KSkrS1q1b5e/vrwcffNDlvq52vdymTZumW265RQ0aNNB9992njIwMffnll3r66afVqFEjDRo0SEOGDNHf/vY3tW7dWqdOndI333yjFi1aqHfv3nm216NHD3Xo0EH9+vXT7Nmz1bhxYx07dkyrV69Wv3791K5dO02ePFmJiYl688035e/vry+//FLDhw/XypUr5ePjo4kTJ+rpp5+Wt7e3OnXqpISEBO3Zs0fDhw8v3C+khBUqqJw8edLlacmOjXl6cmVaAECRqlGjhr777jtNnDhRvXr1UmpqqurUqaNbb71VFSpc+SobL774okJDQzVr1iwdOHBAwcHBatOmjZ599tl893e1612uW7du+vTTT/Xiiy/qr3/9qwIDA9WlSxfH5wsXLtRLL72kJ554QkePHlWVKlXUoUMHlyFFyj60tHr1ak2ePFnDhg1znI7cpUsXhYWFaePGjXrjjTe0YcMGx1GPDz74QC1bttTcuXM1cuRITZkyRZ6enpo6daqOHTum6tWr69FHHy1wn9zFZowxBW3coEEDvfrqq7rzzjtdfv7ZZ5/pySef1IEDB4qswPwkJSUpKChIiYmJLg9HAUB5lJKSooMHD6pevXqOyZTXIiE5QZ/u+1T3Nrq32CbQouzJ7++wMN/fhbrgW+/evTV16lSlpKTk+ezixYuaNm2a7rjjjsJsEgBgcVX9qmpUq1GEFLhFoQ79PPfcc/rss8/UqFEjjRkzRo0bN5bNZlNsbKzeeustZWZmavLkycVVKwAAKGcKFVTCwsK0detWjRw5UpMmTVLOUSObzaZevXrp7bffVlhYWLEUCgAAyp9CX/CtTp06Wr16tc6cOaP9+/fLGKOGDRuqUqVKxVEfAAAox676FpGVKlXSDTfcUJS1AAAAOLmquycXh1mzZslms2n8+PHuLgUAAFiEJYLKjh07NG/ePKf7JgAAALg9qJw/f16DBg3S/PnzmecCAACcuD2ojB49Wrfffjt3XgYAAHm4Nah8/PHH2rlzp2bNmlWg9qmpqUpKSnJ6AABgjNEjjzyiypUry2azKTo62t0llQibzably5e7u4xi5bagcuTIEY0bN04ffvhhgS/xPGvWLAUFBTke4eHhxVwlAKA0WLNmjRYtWqSVK1fq+PHjat68ubtLQhFxW1CJiopSfHy82rZtK09PT3l6emrTpk1688035enpqczMzDzrTJo0SYmJiY7HkSNH3FA5AJQv6fHxSvj7P5QeH1/i+05LSytQu7i4OFWvXl0dO3ZUtWrV5OlZ+KtvGGOUkZFR6PVQvNwWVG655Rb99NNPio6OdjzatWunQYMGKTo62uVtu+12uwIDA50eAIDilZGQoFNvvaWMhIRi31e3bt00ZswYTZgwQSEhIerZs6ckKSYmRr1795a/v7/CwsI0ePBgnTp1SpI0dOhQjR07VocPH5bNZlPdunUlZQePl19+WfXr15evr6+uv/56/fvf/3bsa+PGjbLZbPrqq6/Url072e12bdmypcDrrV+/Xu3atZOfn586duyovXv3OvVlxYoVateunXx8fBQSEqK77rrL8VlaWpqefvpp1axZUxUrVlT79u21cePGfH82v/76q7p06SIfHx81bdpU69aty9Pm6NGjGjBggCpVqqQqVaqob9++OnTokFObhQsXqkmTJvLx8VFERITefvttx2fDhg1Ty5YtlZqaKklKT09X27ZtNWjQIEeb7777Tl27dpWfn58qVaqkXr166cyZM/nWfk2MhXTt2tWMGzeuwO0TExONJJOYmFh8RQFAKXPx4kUT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sggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAsggqAADAstweVN5++23Vq1dPPj4+atu2rbZs2eLukgAAgEW4NagsXbpU48eP1+TJk7Vr1y7ddNNNuu2223T48GF3liVJSkhO0NvRbyshOcHdpVwT+mEt9MNa6Ie1lJV+SGWnL1boh1uDymuvvabhw4fr4YcfVpMmTfTGG28oPDxcc+fOdWdZkqSEiwma++NcJVws5X9k9MNS6Ie10A9rKSv9kMpOX6zQD0937TgtLU1RUVF65plnnJZHRkZq69atbqoqW3Jahk4mpkiSTiamKMCW7NZ6rkVOP+KTUhRYofT2Iz6JflgJ/bAW+mE9ZaUvOf1wJ7cFlVOnTikzM1NhYWFOy8PCwnTixAmX66Smpio1NdXxPikpqUhrSkhOUMLFBG3al6DXNn0jn+rSI598ocyUHyRJJiNAJiOwSPdZHGyeSbJ5npMkefgclU91acRS+uEu9MNa6Ie1lJV+SGWnL676Eft7rOPzqr5VVdWvaonV47agksNmszm9N8bkWZZj1qxZev7554utlk/3faq5P2YfdvKprkvPnzk+zzzdQ1mnI4tt/0WlQuXt8qj8tdMy+uE+f9qP33sosxT0w6PydnlUoR9WQT+sp6z0xVU/pm+b7ng98vqRGtVqVInVYzPGmBLb22XS0tLk5+enTz/9VHfeeadj+bhx4xQdHa1NmzblWcfViEp4eLgSExMVGHjtKTVnREXKTo/Tt03X9A7T1aRKE0klnyKvFv2wFvphLfTDWspKP6Sy05eS6EdSUpKCgoIK9P3tthEVb29vtW3bVuvWrXMKKuvWrVPfvn1drmO322W324utpqp+eX/4Tao0UdMqTYttn8WBflgL/bAW+mEt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", "text/plain": [ "
" ] @@ -1594,7 +1602,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -1603,13 +1611,13 @@ "" ] }, - "execution_count": 33, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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07G3tzcxYekTFBREeHh4nmW1atVi0aJFJiUq3V5++WVee+01+vTpA0DdunU5evQokydPVqFyCzRG5QpOTk40btyYlStX5lm+cuVK7rrrLpNSlV6GYTB8+HC+++47Vq9eTeXKlc2OVKq1a9eO3bt3ExUVZX01adKEfv36ERUVpSLFBK1atbrqI/v79+8nNDTUpESlW0pKCnZ2eS+r9vb2+njyLVKPyt+88MIL9O/fnyZNmtCyZUumT5/OsWPHePbZZ82OVuoMGzaM+fPn8/333+Pp6Wnt6fL29sbV1dXkdKWPp6fnVeOD3N3d8fPz07ghkzz//PPcddddTJo0iV69ehEZGcn06dOZPn262dFKpa5duzJx4kRCQkKoXbs2O3bs4L333mPw4MFmRyveDLnKJ598YoSGhhpOTk5Go0aNjLVr15odqVQC8n3NmjXL7GjyX61btzZGjRpldoxS7YcffjDq1KljODs7GzVr1jSmT59udqRSKzk52Rg1apQREhJiuLi4GFWqVDHGjBljpKenmx2tWNM8KiIiImKzNEZFREREbJYKFREREbFZKlRERETEZqlQEREREZulQkVERERslgoVERERsVkqVERERMRmqVARERERm6VCRURMZbFYWLJkyS3to02bNjz33HPW95UqVeKDDz64pX2KiG1QoSIit1V8fDzPPPMMISEhODs7ExgYSKdOndi0aZPZ0USkGNBDCUXktnr44YfJzMxkzpw5VKlShTNnzrBq1SrOnTtndjQRKQbUoyIit82FCxfYsGED77zzDm3btiU0NJRmzZoxevRoHnjgAWu7xMREevTogZubG9WrV2fp0qV59hMdHU2XLl3w8PCgXLly9O/fn8TExDt9OiJiAhUqInLbeHh44OHhwZIlS0hPTy+w3YQJE+jVqxe7du2iS5cu9OvXz9rjEhcXR+vWrWnQoAFbt25l+fLlnDlzhl69et2p0xARE6lQEZHbxsHBgdmzZzNnzhx8fHxo1aoVr7/+Ort27crTbtCgQfTt25dq1aoxadIkLl++TGRkJAARERE0atSISZMmUbNmTRo2bMjMmTP57bff2L9/vxmnJSJ3kAoVEbmtHn74YU6dOsXSpUvp1KkTa9asoVGjRsyePdvapl69etav3d3d8fT0JD4+HoBt27bx22+/WXtnPDw8qFmzJgCHDh26o+ciIneeBtOKyG3n4uJChw4d6NChA2+88QZPPvkkb775JoMGDQLA0dExT3uLxUJOTg4AOTk5dO3alXfeeeeq/QYFBd327CJiLhUqInLHhYeHF3rulEaNGrFo0SIqVaqEg4P+yxIpbXTrR0Rum7Nnz3Lffffx5ZdfsmvXLmJjY/nmm2+YMmUK3bp1K9Q+hg0bxrlz5+jbty+RkZEcPnyYFStWMHjwYLKzs2/zGYiI2fTriYjcNh4eHjRv3pz333+fQ4cOkZmZSXBwME899RSvv/56ofZRvnx5fv/9d1599VU6depEeno6oaGhdO7cGTs7/a4lUtJZDMMwzA4hIiIikh/9OiIiIiI2S4WKiIiI2CwVKiIiImKzVKiIiIiIzVKhIiIiIjZLhYqIiIjYLBUqIiIiYrNUqIiIiIjNUqEiIiIiNkuFioiIiNgsFSoiIiJis1SoiIiIiM36f1t8dSYsZS4mAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -1625,34 +1633,74 @@ "reference_coeff[\"coll_deexc_coeff\"].loc[1,0,1,29].plot(logy=False,label=\"reference deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## New Chianti method compared to 2014 Chianti method" + ] + }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "chianti_atom_data_old = AtomData.from_hdf('/home/afullard/tardis-refdata/atom_data/kurucz_atom_chianti_many.h5')\n", + "chianti_atom_data_old.prepare_atom_data([1],'macroatom',[(1, 0)],[])\n", + "coll_matrix = chianti_atom_data_old.nlte_data.get_collision_matrix((1,0), temperature.value)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 34, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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ty5XX18/o/+ST5X9dGrsp1NjP50a+ym+9Qzoay5MACCNCAGQZtpFqFwux4MPPhjlcjl7lCnNfjo19tOpsZ9Ojf00flPuwgQAZo5pdyYEwJlDhABII0IApBEhANJMqwg9+uij0d7eHmeddVYsX7483njjjeyRppSenp4olUpjHs3Nzdljpdu+fXusXr06Wltbo1QqxUsvvTTm9aIooqenJ1pbW2P+/PmxatWq2LVrV86wib5tP91+++3HHV+XXnppzrCJent745JLLom6urpYuHBh3HDDDfHhhx+OWcYxdeqmTYSef/752LBhQzzwwAPxzjvvxBVXXBGdnZ2xZ8+e7NGmlAsvvDD27t07+nj//fezR0p38ODBWLZsWWzevPmErz/00EOxadOm2Lx5c+zcuTOam5vj2muvHb2P4UzxbfspIuK6664bc3y98srMu8djf39/rFu3Lt58883o6+uLw4cPR0dHRxw8eHB0GcfUOBTTxI9+9KPirrvuGvPc97///eIXv/hF0kRTz4MPPlgsW7Yse4wpLSKKF198cfTro0ePFs3NzcWvf/3r0ef+8Y9/FA0NDcXvfve7hAmnhm/up6Ioiq6uruL6669PmWcqGx4eLiKi6O/vL4rCMTVe0+JM6NChQ/H2229HR0fHmOc7Ojpix44dSVNNTbt3747W1tZob2+PW265JT7++OPskaa0gYGBGBoaGnNslcvluOqqqxxbJ7Bt27ZYuHBhXHDBBXHHHXfE8PBw9kjpRkZGIiKisbExIhxT4zUtIrRv3744cuRINDU1jXm+qakphoaGkqaaelasWBFPP/10vPrqq/HEE0/E0NBQrFy5Mvbv35892pT19fHj2Pp2nZ2d8cwzz8TWrVvj4Ycfjp07d8Y111wT1Wo1e7Q0RVFEd3d3XH755bF06dKIcEyN15S7i/bJfPOjHYqiOOHHPcxUnZ2do7++6KKL4rLLLovzzz8/nnrqqeju7k6cbOpzbH27m2++efTXS5cujYsvvjgWL14cf/zjH2PNmjWJk+VZv359vPfee/HnP//5uNccU6dmWpwJLViwIGbPnn3c/0UMDw8f938b/Ms555wTF110UezevTt7lCnr66sHHVvj19LSEosXL56xx9fdd98dL7/8crz++utjPn7GMTU+0yJC8+bNi+XLl0dfX9+Y5/v6+mLlypVJU0191Wo1Pvjgg2hpackeZcpqb2+P5ubmMcfWoUOHor+/37H1Lfbv3x+Dg4Mz7vgqiiLWr18fL7zwQmzdujXa29vHvO6YGp9p8+247u7uuO222+Liiy+Oyy67LB5//PHYs2dP3HXXXdmjTRn33HNPrF69OhYtWhTDw8Pxq1/9KiqVSnR1dWWPluqLL76Ijz76aPTrgYGBePfdd6OxsTEWLVoUGzZsiI0bN8aSJUtiyZIlsXHjxjj77LPj1ltvTZz6u3ey/dTY2Bg9PT1x0003RUtLS3zyySdx//33x4IFC+LGG29MnPq7t27dunj22Wdjy5YtUVdXN3rG09DQEPPnz49SqeSYGo/Ua/PG6be//W2xePHiYt68ecUPf/jD0Usi+aebb765aGlpKebOnVu0trYWa9asKXbt2pU9VrrXX3+9iIjjHl1dXUVR/POS2gcffLBobm4uyuVyceWVVxbvv/9+7tAJTraf/v73vxcdHR3FueeeW8ydO7dYtGhR0dXVVezZsyd77O/cifZRRBRPPvnk6DKOqVPnoxwASDMt3hMC4MwkQgCkESEA0ogQAGlECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABp/h/qGbbnQFWWsQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.imshow(coll_matrix[:,:,0])" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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hbe3N2XLlqVr165s2bKFggUL8vLLL6f5PVi6dCnvvPMObdq0oUSJEtSoUYNXX32VPn36pNln//79NGnSBFdXV9zc3KhRowa7d+9Ofn7Lli00atQIZ2dn8uXLR8uWLVMETbPZzFtvvUX+/Pnx9vZm5MiRKY4fERHBiy++iJeXF25ubjz++OPs378/+fl/zj5Nnz6d4sWL4+Liwssvv0xSUhLjx4/H29sbLy+vO1Z1v9txRST3iYhJoNfUHQSduY6bkx1z+tYm0DcfrHwLdk3FEmwmQtVu1i71gSjc3I1hQHy0dR73uWC7ra0tY8aM4euvv+b8+fOptjl48CAtW7bk6aef5sCBA8yfP5/NmzczcOBAwDI25NChQ4SHhwOwYcMGChQowIYNGwBITExk69atNGrU6IG/pX/++ScxMTE0a9aMXr168fPPPxMVFZVm+6SkJH7++WeuXbuGvb39XY+fJ08e+vfvz5YtWwgLC0u1jbe3NytWrEj3df+rR48eFC1alF27dhEUFMTbb7+dXM++ffto2rQpFSpUYNu2bWzevJn27duTlJSU3H/WrFnkzZuXHTt2MH78eD766CPWrFkDWKY4b9u2LaGhoaxYsYKgoCCqV69O06ZNuXbtWvIxTpw4wcqVK/n999+ZN28e06dPp23btpw/f54NGzYwbtw43nvvPbZv335fxxWR3ONadDzdpmxn//kI8jnbM7dfHaoWdYff34adkwETPPkNVO1u7VIfmO6WupuEGBhT2Dqv/c5FcMh7X12eeuopqlatyogRI1I9I/Lpp5/SvXv35MGtZcqU4auvvqJRo0ZMmjSJihUr4unpyYYNG+jYsSPr16/njTfe4MsvvwRg165dxMbG8thjjz3w25o2bRpdu3bF1taWChUqULp0aebPn0/fvn1TtOvWrRu2trbExsaSlJRE/vz572iTln/G8pw+fRovL687np88eTI9evTA09OTKlWq8Nhjj9GpUyfq16+f5jHPnj3Lm2++mXzsMmXKJD83fvx4AgMDmThxYvK+ChUqpOhfuXJlRowYkdz3m2++Yd26dTRv3pw///yTgwcPEhYWhqOjIwCfffYZixcv5pdffuHFF18ELGd/pk+fjqurKwEBATRp0oSjR4+yYsUKbGxsKFeuHOPGjWP9+vXUqVPnno8rIrnDlag4ekzdzrHLNyng4sCcvrUp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", "text/plain": [ "
" ] @@ -1662,8 +1710,11 @@ } ], "source": [ - "cmfgen_collisional_rates.sort_index().plot(logy=True,label=\"TARDIS\",legend=True)\n", - "reference_coeff[\"coll_deexc_coeff\"].sort_index().plot(logy=True,label=\"reference\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\")" + "plt.plot(coll_matrix[0,1,:],label=\"Old TARDIS scheme\")\n", + "plt.plot(chianti_collisional_rates.loc[1,0,1,0],label=\"New TARDIS scheme\")\n", + "plt.xlabel(\"Shell\")\n", + "plt.ylabel(\"Coeff\")\n", + "plt.legend()" ] }, { @@ -1674,26 +1725,26 @@ { "data": { "text/plain": [ - "" + "0 0.003541\n", + "1 0.004709\n", + "2 0.004400\n", + "3 0.002548\n", + "4 0.001518\n", + "5 0.005794\n", + "6 0.007756\n", + "7 0.007275\n", + "8 0.004203\n", + "9 0.002876\n", + "Name: (1, 0, 1, 0), dtype: float64" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAGxCAYAAACa3EfLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAADQNklEQVR4nOydeZhU1Zn/v7X2vtA0NLQ0ICqIoqAQFdQIRkFUkpjRmGhcok5ijDHG0cw4WTTOLyHJzKhJjMa4MZkxatRoNiOiUVEBFwRFQRAFQVkaGui9u7qqzu+PqnPvubfucs49RVVX836eh4de6tS5Vbe67rfe9/u+b4gxxkAQBEEQBFHihIt9AARBEARBEPmARA1BEARBEEMCEjUEQRAEQQwJSNQQBEEQBDEkIFFDEARBEMSQgEQNQRAEQRBDAhI1BEEQBEEMCUjUEARBEAQxJIgW+wAKRTqdxrZt21BTU4NQKFTswyEIgiAIQgLGGDo7O9Hc3Ixw2DsWc8CImm3btqGlpaXYh0EQBEEQRAC2bt2KMWPGeN7mgBE1NTU1ADJPSm1tbZGPhiAIgiAIGTo6OtDS0mJcx704YEQNTznV1taSqCEIgiCIEkPGOkJGYYIgCIIghgQkagiCIAiCGBKQqCEIgiAIYkhwwHhqZEmlUhgYGCj2YRA+xGIxRCKRYh8GQRAEMYggUZOFMYYdO3Zg3759xT4UQpL6+nqMGjWK+g4RBEEQAEjUGHBBM3LkSFRWVtKFchDDGENPTw9aW1sBAKNHjy7yEREEQRCDARI1yKScuKAZPnx4sQ+HkKCiogIA0NraipEjR1IqiiAIgiCjMADDQ1NZWVnkIyFU4OeLPFAEQRAEQKLGAqWcSgs6XwRBEIQIiRqCIAiCIIYEJGoIgiAIghgSkKgZIuzYsQPf+ta3MGHCBJSVlaGlpQULFizAc889BwAYP348QqEQHn744Zy1Rx55JEKhEBYtWmT8jN9e/Gefjrpq1Sqcf/75GD16NMrKyjBu3DicffbZ+Mtf/gLGGABg8+bNOffD/61YsQIAsGjRIoRCIZxxxhmW+9+3bx9CoRBeeOGFPD5TBEEQxFCFRM0QYPPmzZg+fTr+8Y9/4Oc//znWrFmDp59+GnPmzME3v/lN43YtLS144IEHLGtXrFiBHTt2oKqqKud+b7nlFmzfvt34t2rVKuN3f/rTn3DCCSegq6sL//M//4O1a9fi0Ucfxec//3l8//vfR3t7u+W+nn32Wct9bd++HdOnTzd+H41G8dxzz+H555/P19NCEARBKLKlrQedfaVbfEEl3UOAq666CqFQCK+99ppFnBx55JG47LLLjO8vvPBC3Hbbbdi6dStaWloAAPfffz8uvPBC/O53v8u535qaGowaNSrn593d3bj88stx1lln4Y9//KPx80MOOQTHHXccrrjiCiNSwxk+fLjjfXGqqqrwxS9+Ef/2b/+GV199Vf7BEwRBEHlh7bYOnPnLlzB93DA8/o1ZSmu3t/fihkffRm1FFHdeON1/wX6CIjUuMMbQk0gW5Z9dEHixZ88ePP300/jmN7/pGG2pr683vm5qasK8efPwP//zPwCAnp4ePPLIIxbhI8MzzzyDtrY2fPe733W9TZDKpJtvvhlr1qzBY489pryWIAiCAG5bsgEn/vQf2LavV3ntr1/YCABY+dFe5bWdfUm8vHE3ln/Qprw2n1CkxoXegRSO+OHiouy99pZ5qIzLnZqNGzeCMYbDDz9c6vaXXXYZ/uVf/gXf+9738Nhjj+GQQw7BtGnTHG/7r//6r/j+979vfP+Tn/wE11xzDTZs2AAAmDRpkvG7119/HXPmzDG+f/jhh3H22Wcb38+aNQvhsFVDt7e3W5rmNTc349vf/ja+973v4fOf/7zU4yEIghhK9CSS+PnT6zF/yigcP0GtGWwqzfCL594HAPzt7e34509PUFr/+qY9SrcXGUilAQCxSHFjJRSpKXF4VEc2MnLWWWehq6sLS5cuxf333+8ZpbnhhhuwevVq49/FF1/setujjz7auF13dzeSyaTl94888ojlvlavXu3YBfhf//VfsWvXLtx///1Sj4cgCGKw0drRh/U7OgOt/dGf12LRss04/7crlNe+u830MjbWxJXXd/cn/W/kwkAqcy0qtqihSI0LFbEI1t4yr2h7y3LYYYchFAph3bp1UtGNaDSKiy66CDfddBNeffVVPPHEE663bWxsxKGHHuq4JwCsX78eJ5xwAgCgrKzM8baclpYWz99z6uvrceONN+JHP/qRJdJDEARRCjDGcNxPMlWnr/77Z9BUW660/pE3tgbee2dHv/F1Oq2+fiAtb32wkzQiNcVtikqRGhdCoRAq49Gi/FPxozQ0NGDevHn49a9/je7u7pzfO00dv+yy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sGABmz17tvGYRB544AE2YcIEpfvNF6VwLm677TZWW1vLHn30Ufb++++z73//+6y8vJxt3LhR+j6ef/55VllZyW688Ua2fft2419bW1vObb/yla+w448/3vW+brrpJnbqqacqPQYZSuFcbN++na1atYrdc889DABbunQpW7VqlfE8vvrqq+xXv/oVW7VqFdu8eTP7xz/+wU466SR2yCGHsL6+Pul9fv/737NoNMp+/etfW86XveeKiFv10yWXXJLTuyQIg/38dHR0sOOPP54dddRRbOPGjZbnTXzfOuOMM9jRRx/Nli9fzpYvX86OOuoodvbZZ0vvw5jc+env7zeei9GjR7Prr7+erVq1ir3//vuW+6Lzsz3nuvLss88yAGzt2rXS92+HP87p06ezCy64gK1atYq9++67Obc76aST2Pnnn+96P/k6P36UtKhhjLETTjiB/eY3v7H8zK0Z0KZNm4zbAGAPPPCA530/+uijbNKkSSwWi7HDDz+cPf7445bfP/DAA8xPF/b29rKrr76aNTQ0sIqKCnb22WezLVu25BzvJZdc4nk/vPGU/Z/I3Llz2cKFCz3vZ38y2M8FY4wtXLiQjRkzhlVWVrKZM2fmNCv0OxdujfVOOeUUy+327dvHKioq2G9/+1vX+5o4cSJ76KGHfI85CIP9XNx0002Ox8L3fvvtt9mcOXNYQ0MDKysrY+PHj2dXXnkl+/jjjy33M27cOHbTTTe57uP2mP3OsV3U9Pb2straWrZ8+XLPxyXLYD4/Xo3bxGNpa2tjF154IaupqWE1NTXswgsvzCnNz8f52bRpk+/fHJ2f3GNhjLEvf/nLbNasWa735Xd++GOy/xs3bpzlNuvXr2cA2DPPPON4H/k+P57Hu9932M/87W9/Y5MnT2apVEp6zaZNm1g0GmUbNmzQ2vumm27KuZgFYdy4cb5/CH6sWbOGjRw50vMT6P6GzoU8f/3rX9nkyZNd+0roMhTOhR89PT2svLyc/eMf/9jve91xxx3s9NNPz9v90fnJL3R+1Cnl8+NFSRuFAeDMM8/E+++/j08++US6XO3pp5/G1772NRx22GFaey9evBi/+MUvtO7jvffeQ01NjavZVJZt27bhd7/7Herq6rTuRwc6F/J0d3fjgQcecO0roUupnwsZXnzxRZx66qmYM2fOft8rFovltVs3nZ/8QudHnVI+P16EGAtYH0kQBEEQBDGIKOnqJ4IgCIIgCA6JGoIgCIIghgQkagiCIAiCGBKQqCEIgiAIYkhAooYgCIIgiCEBiRqCIAiCIIYEJGo0uPTSSx2nL5cSmzdvRigUwurVqwuy31B4zmS5+eabMW3atILtFwqF8OSTTxZsPyAzU+v2228v6J5BKMZzM5Qo9GsZMCfcD3aK8dy4UYjnrJDnJcj1YkiJmkJfoH/xi19g0aJFBdlrqEDPGUEQRGng9KHl/PPPx4YNG/K6j9u1O8j1ouQ7CheTYnbvHewkEgnE4/Gcn9Nzps/AwMB+n7hL+OP2Gi8m9NoYOgzWc1lRUYGKioqC7BXkelFykZqnn34aJ510Eurr6zF8+HCcffbZ+OCDDwAABx98MIDM6PhQKITZs2cDANLpNG655RaMGTMGZWVlmDZtGp5++mnjPrlK/MMf/oCTTz4ZFRUV+NSnPoUNGzbg9ddfx4wZM1BdXY0zzjgDu3btMtbZQ2PpdBo/+9nPcOihh6KsrAxjx47Fj3/8Y9/HxPf/4x//iDlz5qCyshJTp07F8uXLjds4hThvv/12jB8/Pud4fvKTn6CpqQn19fX40Y9+hGQyiRtuuAENDQ0YM2YM7r///pxjeO+99zBr1iyUl5fjyCOPxAsvvGD5/dq1a3HmmWeiuroaTU1NuOiii7B7927j97Nnz8bVV1+N6667Do2NjTj99NMdH6v9Oevv78c111yDkSNHory8HCeddBJef/114/cvvPACQqEQnnvuOcyYMQOVlZWYNWsW1q9f7/u8is/b//7v/2L8+PGoq6vDl770JXR2dhq3cfo0Mm3aNNx8883G96FQCHfffTfOPvtsVFZWYvLkyVi+fDk2btyI2bNno6qqCjNnzjReiyJ33303WlpaUFlZifPOOw/79u2z/P6BBx7A5MmTUV5ejsMPPxx33nmn8TvxtTl79myUl5fj//7v/6Qe+yeffILzzz8fw4YNw/Dhw/G5z30OmzdvBpBpxV5eXp5zLNdccw1OOeUU4/tly5bh05/+NCoqKtDS0oJrrrkG3d3dUvvbCYVCuPfee3HOOeegsrIShx12GP785z8bv3cKaz/55JMIhULG9/x83n///Rg7diyqq6vxjW98A6lUCj//+c8xatQojBw50vHvbvv27Zg/fz4qKipw8MEH49FHH5V+vgDztbtw4UI0Nzdj4sSJvo/5zjvvxGGHHYby8nI0NTXh3HPPNX7n99pXfT4mTJiAsrIyMMawb98+fO1rX0NTUxPKy8sxZcoU/PWvfzXW5eO8er1uZ86ciX/7t3+z3H7Xrl2IxWJ4/vnnAWRE4Xe/+10cdNBBqKqqwvHHH5/zviPLgfp3vmjRIowdOxaVlZU455xz0NbWlnObv/zlL5g+fTrKy8sxYcIE45ogPndjx45FWVkZmpubcc011wDIvKd/9NFH+M53voNQKGS87uyvS5nn3uu6Dbhfu4NcL0puoOVjjz3GHn/8cbZhwwa2atUqtmDBAnbUUUexVCrFXnvtNQaAPfvss2z79u2sra2NMcbYrbfeympra9lDDz3E3nvvPfbd736XxWIxY/AYnwJ7+OGHs6effpqtXbuWnXDCCezYY49ls2fPZi+//DJ788032aGHHsquvPJK41js03y/+93vsmHDhrFFixaxjRs3spdeeondc889vo9J3P+vf/0rW79+PTv33HPZuHHjjIGHN910E5s6dapl3W233WaZlnrJJZewmpoa9s1vfpO999577L777mMA2Lx589iPf/xjtmHDBvYf//EfLBaLGZPC+d5jxoxhjz32GFu7di274oorWE1NDdu9ezdjjLFt27axxsZGduONN7J169axN998k51++ulszpw5xt6nnHIKq66uZjfccAN777332Lp16xwfq/05u+aaa1hzczN76qmn2LvvvssuueQSNmzYMOPc8Ym0xx9/PHvhhRfYu+++y04++WTPybMiN910E6uurmZf+MIX2Jo1a9jSpUvZqFGj2L//+78btxk3bhy77bbbLOumTp1qmV4LgB100EHskUceYevXr2ef//zn2fjx49mpp55qec2cccYZlr2rqqrYqaeeylatWsVefPFFduihh7ILLrjAuM1vf/tbNnr0aPb444+zDz/8kD3++OOsoaGBLVq0yHJ+xo8fb9zmk08+cXysANgTTzzBGGOsu7ubHXbYYeyyyy5jb7/9Nlu7di274IIL2KRJk1h/fz9LJpOsqamJ3XvvvcZ6/rO7776bMZaZlF1dXc1uu+02tmHDBvbKK6+wY445hl166aWez50b/HX2+9//nr3//vvsmmuuYdXV1ca5fuCBB1hdXZ1lzRNPPGGZWMzP57nnnsveffdd9uc//5nF43E2b9489q1vfYu999577P7772cALBOBAbDhw4eze+65h61fv559//vfZ5FIhK1du1bq+WIs89qtrq5mF110EXvnnXfYmjVrPB/v66+/ziKRCPv973/PNm/ezN588032i1/8wvi932tf9vmoqqpi8+bNY2+++SZ76623WDKZZCeccAI78sgj2TPPPMM++OAD9pe//IU99dRTjDG582rH/v7j97r91a9+xcaOHcvS6bSx5le/+hU76KCDjCGRF1xwAZs1axZbunQp27hxI/vP//xPVlZWZrwvOz1+r+M7UP7OOStWrGChUIgtXLiQrV+/nv3iF79g9fX1lufs6aefZrW1tWzRokXsgw8+YM888wwbP348u/nmmxljmYnhtbW17KmnnmIfffQRe/XVV9lvf/tbxlhmCvuYMWPYLbfcwrZv3862b9/ueF5knnuv6zZjzPXaHeh64fmslQCtra0MAFuzZo3xwli1apXlNs3NzezHP/6x5Wef+tSn2FVXXcUYM19Q4hv8Qw89xACw5557zvjZwoUL2aRJk4zvxSe8o6ODlZWVSYkYO077v/vuuwyAIQ5kRc24ceMsk2UnTZrETj75ZOP7ZDLJqqqq2EMPPWTZ+6c//alxm4GBATZmzBj2s5/9jDHG2A9+8AM2d+5cy95bt25lANj69esZYxlRM23aNN/HKj5nXV1dLBaLsQcffND4fSKRYM3NzeznP/85Y8wUNc8++6xxm7/97W8MAOvt7fXd76abbmKVlZWso6PD+NkNN9zAjj/+eON72Te773//+8b3y5cvZwDYfffdZ/zsoYceYuXl5Za9I5EI27p1q/Gzv//97ywcDhtvEC0tLez3v/+9Ze//+I//YDNnzmSMmefn9ttv932soqi577772KRJkywXlf7+flZRUcEWL17MGMu8QZx66qnG7xcvXszi8Tjbs2cPY4yxiy66iH3ta1+z7PHSSy+xcDhsPPeqokZ8Dru6ulgoFGJ///vfGWPyF3H7+Zw3bx4bP358zut+4cKFlr3FDySMMXb88cezb3zjG4wxuefrkksuYU1NTYbI8ePxxx9ntbW1lmMVH7vfa1/2+YjFYqy1tdX42eLFi1k4HDb+Nu3InFc79vcfv9dta2sri0ajbOnSpcbvZ86cyW644QbGGGMbN25koVAo58L9mc98ht14442uj9+NA+nvnPPlL3/ZIq4YY+z888+3PGcnn3wy+8lPfmK5zf/+7/+y0aNHM8YY++///m82ceJElkgkHPdwes6cRI3fc29HvG4zxlyv3UGuFyXnqfnggw/wgx/8ACtWrMDu3buRTqcBAFu2bMERRxyRc/uOjg5s27YNJ554ouXnJ554It566y3Lz44++mjj66amJgDAUUcdZflZa2ur43GtW7cO/f39+MxnPhPsgdn2Hz16NACgtbUVhx9+uPR9HHnkkQiHzaxiU1MTpkyZYnwfiUQwfPjwnMcxc+ZM4+toNIoZM2Zg3bp1AICVK1fi+eefR3V1dc5+H3zwgRGGnzFjhvRx8rUDAwOWcxOLxXDccccZe3PcnpuxY8f67jN+/HjU1NRY1rudRy9kXh99fX3o6OhAbW0tAGDs2LEYM2aMcZuZM2cinU5j/fr1iEQi2Lp1Ky6//HL88z//s3GbZDKZk0tWfW5XrlyJjRs3Wh43APT19Rlh3wsvvBAzZ87Etm3b0NzcjAcffBBnnnkmhg0bZrmPBx980FjPGEM6ncamTZswefJkpWMCrM9hVVUVampqlM+F/Xw2NTUhEonkvO69XuP8e25MlHm+gMz5lvXRnH766Rg3bhwmTJiAM844A2eccYaRelN57fsxbtw4jBgxwvh+9erVGDNmjGt6TPe87tq1y/d1O2LECJx++ul48MEHcfLJJ2PTpk1Yvnw57rrrLgDAm2++CcZYzjH29/dj+PDhSo+fc6D9na9btw7nnHOO5WczZ860WCtWrlyJ119/3ZKOTaVS6OvrQ09PD8477zzcfvvtxmv0zDPPxIIFCxCNqkkDv+fe67otXp+8kP2bKTlRs2DBArS0tOCee+5Bc3Mz0uk0pkyZgkQi4blOzEMDmT9i+89EUxb/nf1n/GTYyYdxyml/vl84HAazDVQfGBjwvA9+P04/c3sc9tvxY1iwYAF+9rOf5dyGCwwgc5FSgT+eoOdG5jHY1/L14togz63b68PvuPhtxGO45557cPzxx1tuF4lELN+rPrfpdBrTp0+3XLg4/AJ43HHH4ZBDDsHDDz+Mb3zjG3jiiSfwwAMPWO7j61//upFjF5ERk054nYtiv8b9ni9A7TzU1NTgzTffxAsvvIBnnnkGP/zhD3HzzTfj9ddfl3rtyz4f9mPyey/SPa+yr9sLL7wQ3/72t/GrX/0Kv//973HkkUdi6tSpxn1EIhGsXLky57Xu9OFJhgPt79z+WJxIp9P40Y9+hC984Qs5vysvL0dLSwvWr1+PJUuW4Nlnn8VVV12F//zP/8SLL76oZFL2e+6DXrdFZK8XJSVq2trasG7dOtx99904+eSTAQAvv/yy8Xv+CSqVShk/q62tRXNzM15++WV8+tOfNn6+bNkyHHfccXk7tsMOOwwVFRV47rnncMUVV+TtfjkjRozAjh07LCcwn6XrK1asMJ6fZDKJlStX4uqrrwYAHHvssXj88ccxfvx4ZQXvxaGHHop4PI6XX34ZF1xwAf5/O/ce0lQfxgH86zDbXOUFtfLWHzpt6qYbSZJ5QSTTbBO1iw1N7I5kl6VSNM0oqVkGiVFpuKjlIhIqsaUkqEQlBqWYXUzLkihDQSnpD3vfP6TDO9tyzmnv1vMB/9iOnPM7v/M75/mdPec5wPhFpq2tDXv37jXbdibj6uqKjx8/Mp+Hh4fR29trlnX39fUxv4QAwMOHD8FiseDn54eFCxfCw8MDPT09kMlkZtneT2KxGNevX4ebmxtzN6nPpk2boFar4enpCRaLhTVr1uiso7OzE76+vmZtmyGurq4YGRnB169fmYu7ucd4RkaGzmeRSATA+P6aKltbW8TGxiI2NhaFhYVwdHREY2Mj4uLiJh37pvaHUCjEhw8f8OrVK72/1kz3uBo7bpOSkrBjxw5otVpcu3YN6enpzDKRSISxsTF8/vyZuZbPNGs7zwMCAvDo0SOd7yZ+FovFePny5W+PNYfDgUQigUQiQXZ2NpYuXYqOjg6IxWLY2dnpxFNTTBa3Af2xeyJj44VFTWp+ViVcvHgRixcvRl9fn84T9m5ubuBwONBqtfD09ASbzYaDgwNyc3NRWFgIHx8fhISEoKqqCk+fPtV7V2YqNpuN/Px85OXlwc7ODuHh4RgYGEBnZye2bNky7fVHR0djYGAASqUSqamp0Gq1uHv3rtkuwOXl5eDxeODz+Thz5gyGhoaQlZUFAMjOzkZFRQXS0tKQm5sLFxcXdHd3Q6PRoKKi4pe7DWNxuVzs2rWLqczy9vaGUqnEt2/fzNJnxoqJiYFKpcLatWvh5OQEhUJh8j5NxGazsXnzZpw6dQrDw8PIycnB+vXrsWjRIgDjlQM5OTlYsGAB4uPj8f37d7S1tWFoaAj79+83ebsymQwlJSWQSqVM5V9fXx9qamqQm5vL/FQuk8lQVFSE48ePIzU1FWw2m1lHfn4+wsLCkJ2djW3btoHL5aKrqwsNDQ0oKyubXsfosXz5ctjb2+PQoUPYvXs3WltbzfpOoxs3bmDZsmVYuXIl1Go1WltbcenSJQDG99dU1NbWoqenB5GRkXByckJdXR1+/PgBf39/o8a+qf0RFRWFyMhIpKSkoLS0FL6+vnjx4gVsbGywevVqsxxXY8Ytl8uFVCqFQqFAV1cXE4gAwM/PDzKZDBkZGTh9+jREIhG+fPmCxsZGCAQCJCQkTLm/J2Nt53lOTg5WrFgBpVKJpKQk1NfX66SeAKCgoACJiYnw8vLCunXrwGKx0N7ejo6ODhw7dgwqlQpjY2PMWLty5Qo4HA6WLFkCYDyt1NzcjI0bN2Lu3LlwcXGZcjsni9uA4dj9X8bGC4sq6WaxWNBoNHjy5AmCgoKwb98+lJSUMMttbW1x9uxZXLhwAe7u7pBKpQDGD75cLodcLodAIIBWq8Xt27fB4/HM2j6FQgG5XI6CggLw+Xxs2LDBpJyuPnw+H+fOnUN5eTmCg4PR2tqKAwcOmGXdAHDixAmcPHkSwcHBaGlpwa1bt5gB7O7ujgcPHmBsbAxxcXEICgrCnj174ODgoPMcgz6ZmZlMeZ6h7aakpCA9PR1isRjd3d24d+8e81zHbDh48CAiIyORmJiIhIQEJCUlwcfHxyzr9vX1RXJyMhISErBq1SoEBQXplHJu3boVlZWVUKlUEAgEiIqKgkqlYkocf8fGxsZgkLO3t0dzczO8vb2RnJwMPp+PrKwsjI6O6kyEeTweQkND0d7e/stdpFAoRFNTE16/fo2IiAiIRCIoFAqdlKM5OTs74+rVq6irq4NAIEB1dbVOue10FRUVQaPRQCgU4vLly1Cr1cxzeMb211Q4OjqipqYGMTEx4PP5OH/+PKqrqxEYGAhg8rE/nf64efMmQkNDkZaWhoCAAOTl5TF3wcYc1yNHjui8LmIiY8etTCbDs2fPEBER8Utqq6qqChkZGZDL5fD394dEIsHjx4/h5eVl1D5OlaWe54aEhYWhsrISZWVlCAkJQX19PQ4fPqzzP3FxcaitrUVDQwNCQ0MRFhaG0tJSZtLi6OiIiooKhIeHQygU4v79+7hz5w7zXNPRo0fx9u1b+Pj46KRhp2KyuA0Yjt0TGRMvbP4xJjFHiImio6MRHR1t1uBExt9rwePx8Pz5c7NPzgnJzMwEAHr7N7E4FpV+IpZlZGQEb9680XnpFzEPrVaL7du304SGzIimpiY0Nzf/6WYQMmUWlX6yVMXFxZg3b57ev/j4+D/dvBkzf/58vH//3uRqBmMEBgYa7FtzPjP1f7Nz506Ul5f/6WYw1Gq1wePwM91ibVpaWgzu80yO+dnQ29s7Y2kgU/yN53l8fLzBfS4uLv7TzfvfovTTLBgcHMTg4KDeZRwOBx4eHrPcIuvx7t07vWWZwHiVxsT3jpCZMTIygk+fPuldNmfOHCaHb01GR0fR399vcPlsVY39Df7G87y/vx+jo6N6lzk7O8PZ2XmWW2QZaFJDCCGEEKtA6SdCCCGEWAWa1BBCCCHEKtCkhhBCCCFWgSY1hBBCCLEKNKkhhBBCiFWgSQ0hhBBCrAJNagghhBBiFWhSQwghhBCr8C/Y2clyLampPgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "cmfgen_collisional_rates[0].sort_index().plot(logy=True,label=\"CMFGEN\",legend=True)" + "(coll_matrix[0,1,:] - chianti_collisional_rates.loc[1,0,1,0]) / chianti_collisional_rates.loc[1,0,1,0]" ] }, { @@ -1704,7 +1755,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 36, @@ -1713,7 +1764,7 @@ }, { "data": { - "image/png": "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+Qvz+Xxs/vz57Gtf+xrbsWMHe/TRRxkA9vrrrxv23a9fP/arX/2K7dy5k33ve99jbrebbdu2zdb5Yix+75aWlrLFixezrVu3svfffz/l8b799tvM7XazP/zhD2z//v1s06ZN7Oc//7n4Pt29b/d8lJSUsPnz57NNmzaxd999l0UiEXbeeeexiRMnshdffJHt3buX/fWvf2WrV69mjNm7rirq8yfdfXv//fezoUOHslgsJta5//772eDBg0XD1i984Qts1qxZbN26dWzPnj3sf//3f5nf7xfPZbPjTzW+vvI757zxxhtM0zS2YsUKtnPnTvbzn/+cVVZWGs7ZCy+8wMrLy9nKlSvZ3r172YsvvsiGDx/Obr/9dsYYY0899RQrLy9nq1evZh999BF788032SOPPMIYY6yxsZENGTKE3XHHHezIkSPsyJEjptfFzrlPNW8zxiznbqfzRZ8XSCoNDQ0MAHv//ffFTbZ582bDMoMGDWJ33nmn4bMZM2awJUuWMMb0m1OeLJ544gkGgL388svisxUrVrBx48aJv+WL19LSwvx+vy1BpGK2/w8++IABEELDrkAaNmyYoWP0uHHj2OzZs8XfkUiElZSUsCeeeMKw7x//+MdimXA4zIYMGcLuvvtuxhhj3//+99m8efMM+z548CADwHbu3MkYiwuks846K+2xyuesra2Neb1e9vvf/158HwqF2KBBg9hPfvITxpgukF566SWxzN/+9jcGgHV2dqbd3/Lly1lxcTFraWkRn337299m5557rvjb7oPze9/7nvj79ddfZwDYb37zG/HZE088wQKBgGHfbrebHTx4UHz297//nblcLvGwqa+vZ3/4wx8M+/7Rj37EZs6cyRjTr899992X9lhlgfSb3/yGjRs3zjBBBYNBVlRUxNasWcMYiz9sLr74YvH9mjVrmM/nY01NTYwxxhYvXsy+8pWvGPaxfv165nK5xLl3KpDkc9jW1sY0TWN///vfGWP2BYF6PefPn8+GDx+edN+vWLHCsG/55YYxxs4991z21a9+lTFm73xde+21rK6uTgimdDz99NOsvLzcMFb52NPd+3bPh9frZQ0NDeKzNWvWMJfLJX6bKnauq4r6/El33zY0NDCPx8PWrVsnvp85cyb79re/zRhjbM+ePUzTtCQRcMkll7DbbrvN8vit6Eu/c87nP/95g1BjjLFrrrnGcM5mz57N7rrrLsMyv/3tb9nAgQMZY4z97Gc/Y2PHjmWhUMh0H2bnzEwgpTv3KvK8zRiznLudzhd9PgZp7969+P73v4833ngDJ06cQCwWAwAcOHAAEyZMSFq+paUFhw8fxvnnn2/4/Pzzz8e7775r+Gzy5Mni/+vq6gAAZ555puGzhoYG03Ft374dwWAQl1xySWYHpux/4MCBAICGhgacccYZtrcxceJEuFy6J7aurg6TJk0Sf7vdbvTr1y/pOGbOnCn+3+PxYPr06di+fTsAYOPGjXjllVdQWlqatL+9e/cKV8P06dNtj5OvGw6HDdfG6/XinHPOEfvmWJ2boUOHpt3P8OHDUVZWZljf6jqmws790dXVhZaWFpSXlwMAhg4diiFDhohlZs6ciVgshp07d8LtduPgwYO44YYb8OUvf1ksE4lEknzvTs/txo0bsWfPHsNxA0BXV5cwbX/xi1/EzJkzcfjwYQwaNAi///3vcdlll6Gqqsqwjd///vdifcYYYrEY9u3bh/HjxzsaE2A8hyUlJSgrK3N8LdTrWVdXB7fbnXTfp7rH+d88KNTO+QLi19tu3NGll16KYcOGYeTIkViwYAEWLFgg3ItO7v10DBs2DP379xd/b9myBUOGDLF0AWZ7XY8fP572vu3fvz8uvfRS/P73v8fs2bOxb98+vP7663jooYcAAJs2bQJjLGmMwWAQ/fr1c3T8nL72O9++fTuuvPJKw2czZ840hI9s3LgRb7/9tsHlHI1G0dXVhY6ODlx99dW47777xD162WWXYdGiRfB4nEmNdOc+1bwtz0+psPOb6fMCadGiRaivr8evfvUrDBo0CLFYDJMmTUIoFEq5nuy3B+IPBPUzOSCOf6d+xi+sSi6C1sz2z/fncrnAGDMsHw6HU26Db8fsM6vjUJfjY1i0aBHuvvvupGW4WAHiE54T+PFkem3sHIO6Ll9fXjeTc2t1f6QbF19GHsOvfvUrnHvuuYbl3G634W+n5zYWi2HatGmGSZDDJ9NzzjkHo0aNwpNPPomvfvWrePbZZ/HYY48ZtnHTTTeJmAQZO8LUjFTXIt/3eLrzBTi7DmVlZdi0aRNeffVVvPjii/jBD36A22+/HW+//bate9/u+VDHlO5ZlO11tXvffvGLX8TXv/513H///fjDH/6AiRMnYsqUKWIbbrcbGzduTLrXzV7E7NDXfufqsZgRi8Xwwx/+EJ/5zGeSvgsEAqivr8f/3879x1L9/XEAf7qT7qX8Gio/qo1LF/dy71KWXGaWSBj6wR2Z9FPpxw2rhbSyorRlWqK5rW60xlaZbsTmRyVjKyYpUcr6odhYWVu37/cP673PvZFLV7+8Hps/7vvYeZ/3eZ9zzzn3/Ojo6EBlZSVu376N7du3IysrCzU1NRNaID5e3k+23f4vTerMtO4gffjwAe3t7cjLy4OnpycAoL6+ngn/NrJTKpXMNUNDQ1haWqK+vh5isZi5fvfuXSxZskRraeNyueBwOKiqqkJcXJzW4v3G3Nwcb968USkM2jzOoKGhgcmfL1++oLm5GTt27AAAiEQilJSUYOHChRMeWfyInZ0d9PT0UF9fj8jISAAjX1hNTU3YvXu31u4zHnNzc7x+/Zr5PDg4iO7ubq3E3dPTw/xCAwD37t0Di8WCvb095syZAysrK3R1dUEikWjlft+IRCJcuXIFFhYWzCh3NJGRkZDL5bC2tgaLxcKqVatU4mhra4OdnZ1W0zYWc3NzDA0N4ePHj0xDoe0yHh0drfJZKBQC0Dy/JkpXVxe+vr7w9fVFWloajI2NUV1dDT8/v3HL/mTzQyAQ4NWrV3jy5MmovyL97HvVtNyGhIRgy5YtUCgUuHz5MqKiopgwoVAIpVKJd+/eMd/lU+1fq+eOjo5oaGhQuab+WSQSoaOj44fvmsPhICgoCEFBQYiPj8eiRYvQ2toKkUgEPT09lfZ0MsZrt4HR2251mrQX07qD9G13yblz5zBv3jz09PSo7JSwsLAAh8OBQqGAtbU12Gw2jIyMkJiYiLS0NNja2sLV1RWFhYV48ODBqKPFyWKz2UhOTkZSUhL09PTg4eGBvr4+tLW1YePGjT8dv7e3N/r6+pCZmYnw8HAoFArcvHlTa1/mubm54HK54PF4OHXqFAYGBhAbGwsAiI+PR35+PiIiIpCYmAgzMzN0dnaiuLgY+fn5342CNGVgYIBt27YxO+zmz5+PzMxMfPr0SSt5pikfHx/IZDKsXr0aJiYmSElJmfQzqWOz2diwYQNOnDiBwcFBJCQkYO3atZg7dy6AkR0gCQkJMDQ0hL+/Pz5//oympiYMDAxg7969k76vRCJBVlYWgoODmR2cPT09KC0tRWJiIjMdIJFIkJ6ejqNHjyI8PBxsNpuJIzk5Ge7u7oiPj8emTZtgYGCA9vZ2VFZWIicn5+cyZhRLly6Fvr4+Dhw4gJ07d6KxsVGrZ2ZdvXoVixcvxvLlyyGXy9HY2Ijz588D0Dy/JqKsrAxdXV0Qi8UwMTFBeXk5vn79CgcHB43K/mTzw8vLC2KxGGFhYcjOzoadnR0eP34MHR0drFy5UivvVZNya2BggODgYKSkpKC9vZ1p1ADA3t4eEokE0dHROHnyJIRCId6/f4/q6mrw+XwEBARMOL/H86/V84SEBCxbtgyZmZkICQlBRUWFyvQaAKSmpiIwMBA2NjZYs2YNWCwWWlpa0NraiiNHjkAmk0GpVDJl7eLFi+BwOFiwYAGAkamz2tparF+/HjNnzoSZmdmE0zleuw2M3Xb/lyZ1Zlpv82exWCguLkZzczOcnZ2xZ88eZGVlMeG6uro4ffo08vLyYGlpieDgYAAjBUkqlUIqlYLP50OhUOD69evgcrlaTV9KSgqkUilSU1PB4/Gwbt26Sc2Bj4bH4+HMmTPIzc2Fi4sLGhsbsW/fPq3EDQDHjh3D8ePH4eLigrq6Oly7do2pDJaWlrhz5w6USiX8/Pzg7OyMXbt2wcjISGXdx2hiYmKYLZtj3TcsLAxRUVEQiUTo7OzErVu3mHUwv8L+/fshFosRGBiIgIAAhISEwNbWVitx29nZITQ0FAEBAVixYgWcnZ1VtvfGxcWhoKAAMpkMfD4fXl5ekMlkzLbXH9HR0RmzwdTX10dtbS3mz5+P0NBQ8Hg8xMbGYnh4WKVTzeVy4ebmhpaWlu9GtwKBADU1NXj69Ck8PT0hFAqRkpKiMq2qTaamprh06RLKy8vB5/NRVFSksgX7Z6Wnp6O4uBgCgQAXLlyAXC5n1i1qml8TYWxsjNLSUvj4+IDH4+Hs2bMoKiqCk5MTgPHL/s/kR0lJCdzc3BAREQFHR0ckJSUxo3NN3uuhQ4dUjhBRp2m5lUgkePjwITw9Pb+bvissLER0dDSkUikcHBwQFBSE+/fvw8bGRqNnnKi/tZ6Pxd3dHQUFBcjJyYGrqysqKipw8OBBlf/x8/NDWVkZKisr4ebmBnd3d2RnZzMdIGNjY+Tn58PDwwMCgQBVVVW4ceMGsw7s8OHDeP78OWxtbVWmmidivHYbGLvtVjdendH5nyYTj4T8Iby9veHt7a3Vho6MnJvC5XLx6NEjrXf0CYmJiQEAOvWe/FWm9RQb+bsMDQ3h2bNnKgfUEe1QKBTYvHkzdY7IlKipqUFtbe3vTgYhEzKtp9j+VhkZGZg1a9aof/7+/r87eVNm9uzZePny5aR3pWjCyclpzLzV5hqzP83WrVuRm5v7u5PBkMvlY76Hb1NK/5q6uroxn3kqy/yv0N3dPWVTXZMxHeu5v7//mM+ckZHxu5P3R6Iptr9Qf38/+vv7Rw3jcDiwsrL6xSn6d7x48WLUrbrAyG4b9XNtyNQYGhrC27dvRw2bMWMGs+bhXzI8PIze3t4xw3/V7r/pYDrW897eXgwPD48aZmpqClNT01+coj8fdZAIIYQQQtTQFBshhBBCiBrqIBFCCCGEqKEOEiGEEEKIGuogEUIIIYSooQ4SIYQQQoga6iARQgghhKihDhIhhBBCiBrqIBFCCCGEqPk/O/dGDZn1hzgAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHACAYAAABKwtdzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABi0ElEQVR4nO3dd3gU9cLF8e/sppMCoaRIC51QQ+9FIRRFURREBFHUi1cExILYK4jXgoqg3AuilysGRIoK0pQeFSJBpEk1lIQQSCGBtN19/0D2NYZgICSTZM/neeaBnf3N7JlE3eNUw+FwOBARERFxIRazA4iIiIiUNBUgERERcTkqQCIiIuJyVIBERETE5agAiYiIiMtRARIRERGXowIkIiIiLkcFSERERFyOCpCIiIi4HBUgERERcTkqQH9jw4YNDBgwgNDQUAzDYMmSJaXq8/7xj39gGAbTpk0r1lwiIiLliQrQ38jIyKBFixZMnz691H3ekiVL+PHHHwkNDS2BZCIiIuWHm9kBSrt+/frRr1+/At/Pzs7m2Wef5X//+x8pKSk0bdqUqVOn0qNHj2L5vIuOHz/OmDFjWLlyJTfeeONVfZaIiIirUgEqonvvvZcjR47w+eefExoayuLFi+nbty87d+6kfv36xfKZdrud4cOH88QTT9CkSZNi+QwREZHyTIfAiuDgwYPMnz+fhQsX0rVrV+rWrcvjjz9Oly5d+Pjjj4vtc6dOnYqbmxtjx44tts8QEREpz7QHqAh+/vlnHA4HDRo0yDM/KyuLypUrA3DkyBHCwsIuu56HH3640OcYxcTE8O677/Lzzz9jGMbVBRcREXFxKkBFYLfbsVqtxMTEYLVa87zn6+sLwHXXXceePXsuu55KlSoV+jM3btxIYmIiNWvWdM6z2Ww89thjTJs2jSNHjhR+A0RERFyUClARREREYLPZSExMpGvXrpcc4+7uTqNGja7ZZw4fPpxevXrlmdenTx+GDx/Ovffee80+R0REpDxTAfob6enpHDhwwPn68OHDxMbGEhgYSIMGDRg2bBgjRozgrbfeIiIigqSkJL777juaNWtG//79r+nn1axZk8qVKzsPr13k7u5OcHAwDRs2vPoNFRERcSEqQH9j27Zt9OzZ0/l6woQJANxzzz3MnTuXjz/+mFdffZXHHnuM48ePU7lyZTp27HhV5acwnyciIiJFZzgcDofZIURERERKki6DFxEREZejAiQiIiIuR+cAXYLdbufEiRP4+fnpXjsiIiJlhMPh4OzZs4SGhmKxXH4fjwrQJZw4cYIaNWqYHUNERESuwtGjR6levfplx6gAXYKfnx9w4Qfo7+9vchoREREpjLS0NGrUqOH8Hr8cFaBLuHjYy9/fXwVIRESkjCnM6Ss6CVpERERcjgqQiIiIuBxTC9CUKVNo27Ytfn5+VKtWjYEDB7Jv376/XW79+vW0bt0aLy8v6tSpw4cffphvzKJFiwgPD8fT05Pw8HAWL15cHJsgIiIiZZCp5wCtX7+ehx9+mLZt25Kbm8szzzxDZGQku3fvpkKFCpdc5vDhw/Tv358HHniAefPmsXnzZv75z39StWpVBg0aBEB0dDRDhgzhlVde4dZbb2Xx4sUMHjyYTZs20b59+5LcRBGRYmOz2cjJyTE7hkiJ8vDw+NtL3AujVD0K49SpU1SrVo3169fTrVu3S46ZOHEiy5YtY8+ePc55o0ePZseOHURHRwMwZMgQ0tLSWLFihXNM3759qVSpEvPnz//bHGlpaQQEBJCamqqToEWk1HE4HCQkJJCSkmJ2FJESZ7FYCAsLw8PDI997V/L9XaquAktNTQUgMDCwwDHR0dFERkbmmdenTx9mz55NTk4O7u7uREdH8+ijj+YbM23atEuuMysri6ysLOfrtLS0q9wCEZHid7H8VKtWDR8fH92wVVzGxRsVx8fHU7NmzSL9s19qCpDD4WDChAl06dKFpk2bFjguISGBoKCgPPOCgoLIzc0lKSmJkJCQAsckJCRccp1TpkzhpZdeKvpGiIgUM5vN5iw/lStXNjuOSImrWrUqJ06cIDc3F3d396teT6m5CmzMmDH88ssvhTpE9dfGd/Eo3p/nX2pMQU1x0qRJpKamOqejR49eaXwRkRJx8ZwfHx8fk5OImOPioS+bzVak9ZSKPUCPPPIIy5YtY8OGDX976+rg4OB8e3ISExNxc3Nz/t9QQWP+ulfoIk9PTzw9PYuwBSIiJUuHvcRVXat/9k3dA+RwOBgzZgxffvkl3333HWFhYX+7TMeOHVm9enWeeatWraJNmzbOXWEFjenUqdO1Cy8iIiJllqkF6OGHH2bevHl89tln+Pn5kZCQQEJCAufPn3eOmTRpEiNGjHC+Hj16NL///jsTJkxgz549zJkzh9mzZ/P44487x4wbN45Vq1YxdepU9u7dy9SpU1mzZg3jx48vyc0TEZGrVLt27QIvXLnIMAyWLFlSInnKi7lz51KxYkWzY5QKphagmTNnkpqaSo8ePQgJCXFOUVFRzjHx8fHExcU5X4eFhbF8+XLWrVtHy5YteeWVV3jvvfec9wAC6NSpE59//jkff/wxzZs3Z+7cuURFRekeQCIiJjt69CijRo0iNDQUDw8PatWqxbhx4zh9+vQ1/RzDMC47jRw50jk2MjISq9XKDz/8kG89I0eOdC7j5uZGzZo1eeihh0hOTs4zrnbt2s5x3t7e1K5dm8GDB/Pdd9/lGXfkyBEMwyA2NtY5b9GiRbRv356AgAD8/Pxo0qQJjz322DX9eUh+pp4DVJhbEM2dOzffvO7du/Pzzz9fdrnbb7+d22+//WqjFZtTZ7NISs+icYjuLyQiruXQoUN07NiRBg0aMH/+fMLCwti1axdPPPEEK1as4IcffrjsbVCuRHx8vPPvUVFRPP/883meNODt7Q1AXFwc0dHRjBkzhtmzZ9OhQ4d86+rbty8ff/wxubm57N69m/vuu4+UlJR8F+28/PLLPPDAA2RnZ3PkyBHmzZtHr169eOWVV3jmmWcumXPNmjXceeedTJ48mZtvvhnDMNi9ezdr1669Fj8GuYxScxWYK/j213g6TlnNlEWbzI4iIlLiHn74YTw8PFi1ahXdu3enZs2a9OvXjzVr1nD8+PECSwLA/v376datG15eXoSHh+c7z/OvgoODnVNAQACGYeSbB/Dxxx9z00038dBDDxEVFUVGRka+dXl6ehIcHEz16tWJjIxkyJAhrFq1Kt84Pz8/goODqVmzJt26dWPWrFk899xz+crXn3399dd06dKFJ554goYNG9KgQQMGDhzI+++/X+C2ZWdnM2bMGEJCQvDy8qJ27dpMmTLF+X5KSgoPPvggQUFBeHl50bRpU77++us861i5ciWNGzfG19eXvn375imMF38ujRs3xsvLi0aNGjFjxgznexf3Yi1YsICuXbvi7e1N27Zt+e2339i6dStt2rRxrvfUqVOFXm9JUwEqQe35hfXu47j35OscOpVudhwRKSccDgfnsnNLfLqSBwmcOXOGlStX8s9//tO59+Wi4OBghg0bRlRU1CXXabfbue2225yHqT788EMmTpx4TX5uH3/8MXfffTeNGjWiQYMGLFiw4LLLHDp0iG+//bbQ958ZN24cDoeDpUuXXvL94OBgdu3axa+//lro3O+99x7Lli1jwYIF7Nu3j3nz5lG7dm3gws+qX79+bNmyhXnz5rF7925ef/11rFarc/lz587x5ptv8t///pcNGzYQFxeX5zzaf//73zzzzDO89tpr7Nmzh8mTJ/Pcc8/xySef5Mnxwgsv8Oyzz/Lzzz/j5ubG0KFDefLJJ3n33XfZuHEjBw8e5Pnnn7/i9ZaUUnEZvKuoFFyXSkYSQZYz/OfHHYy+qbPZkUSkHDifYyP8+ZUl/rm7X+6Dj0fhvkb279+Pw+GgcePGl3y/cePGJCcnOx+J9Gdr1qxhz549HDlyxHmrlMmTJ9OvX78i5V+zZg3nzp2jT58+ANx9993Mnj2be++9N8+4r7/+Gl9fX2w2G5mZmQC8/fbbhfqMwMBAqlWrxpEjRy75/iOPPMLGjRtp1qwZtWrVokOHDkRGRjJs2LACb88SFxdH/fr16dKlC4ZhUKtWrTzb9NNPP7Fnzx4aNGgAQJ06dfIsn5OTw4cffkjdunWBC/fhe/nll53vv/LKK7z11lvcdtttwIVzb3fv3s1HH33EPffc4xz3+OOPO39248aNY+jQoaxdu5bOnS98t40aNSrPaSyFXW9J0R6gklSlHmcqtcDNsJO9YyF2e6l5DJuIiKkudUPbi/bs2UPNmjXz3CeuY8eORf7M2bNnM2TIENzcLpS4oUOH8uOPP+Y7XNWzZ09iY2P58ccfeeSRR+jTpw+PPPJIoT/ncjfirVChAt988w0HDhzg2WefxdfXl8cee4x27dpx7ty5Sy4zcuRIYmNjadiwIWPHjs1zOC42Npbq1as7y8+l+Pj4OMsPQEhICImJicCFZ3JePFHd19fXOb366qscPHgwz3qaN2/u/PvF++w1a9Ysz7yrWW9J0R6gEubb7m5YuYPrs75n2+/JtAu7Nif8iYjr8na3svvlPqZ8bmHVq1fPeYLvwIED872/d+9eKlWqRJUqVfK9d6nDYkW9Gd6ZM2dYsmQJOTk5zJw50znfZrMxZ84cpk6d6pxXoUIF6tWrB1w4/NSzZ09eeuklXnnllb/9nNOnT3Pq1Km/vc9d3bp1qVu3Lvfffz/PPPMMDRo0ICoqKt/eKIBWrVpx+PBhVqxYwZo1axg8eDC9evXiiy++yHd48VL+evjOMAznz9hutwMXDlf99crpPx9G++t6Lv4+/jrv4vquZL0lRQWohHm0uJ3cVZNoajnCtC3raRd2q9mRRKSMMwyj0IeizFK5cmV69+7NjBkzePTRR/N8USckJPC///2PESNGXLLYhIeHExcXx4kTJwgNDQUuPBi7KP73v/9RvXr1fPcRWrt2LVOmTOG1115z7hn6qxdeeIF+/frx0EMPOfMU5N1338VisVyy9BWkdu3a+Pj4XPKE7Iv8/f0ZMmQIQ4YM4fbbb6dv376cOXOG5s2bc+zYMX777bfL7gUqSFBQENdddx2HDh1i2LBhV7x8Sa+3KEr3vzHlkU8gqdV7Uvnoavz3f0lmzs14XcH/RYmIlFXTp0+nU6dO9OnTh1dffTXPZfDXXXcdr7322iWX69WrFw0bNmTEiBG89dZbpKWlXfaKscKYPXs2t99+e76Hb9eqVYuJEyfyzTffcMstt1xy2R49etCkSRMmT57M9OnTnfPPnj1LQkICOTk5HD58mHnz5vGf//yHKVOmOPcg/dWLL77IuXPn6N+/P7Vq1SIlJYX33nuPnJwcevfufcll3nnnHUJCQmjZsiUWi4WFCxcSHBxMxYoV6d69O926dWPQoEG8/fbb1KtXj71792IYBn379i3Uz+bFF19k7Nix+Pv7069fP7Kysti2bRvJyclMmDChUOsoyfVeLZ0DZIJKHS/c2bq/YyNrd8f/zWgRkfKhfv36bNu2jbp16zJkyBDq1q3Lgw8+SM+ePYmOji7wHkAWi4XFixeTlZVFu3btuP/++wssS4URExPDjh078txA9yI/Pz8iIyOZPXv2ZdcxYcIE/v3vf+d5ePbzzz9PSEgI9erVY/jw4aSmprJ27drLXrHWvXt3Dh06xIgRI2jUqBH9+vUjISGBVatW0bBhw0su4+vry9SpU2nTpg1t27blyJEjLF++HIvlwlf6okWLaNu2LUOHDiU8PJwnn3zyih4cev/99/Of//yHuXPn0qxZM7p3787cuXML9bgqM9Z7tQzHlVzH6CLS0tIICAggNTUVf/9iuGFhbhbnp9TD25bG28FTmTB69LX/DBEplzIzMzl8+DBhYWF4eXmZHUekxF3u34Er+f7WHiAzuHmS3WggAGHHv+Z0epa5eURERFyMCpBJAjpcOAzWx/ITK2IOmJxGRETEtagAmaV6G1J9auJjZJG4dZHZaURERFyKCpBZDAO3iKEAtE1dyYFEPRpDRESkpKgAmahCm7sA6GzZxeofYkxOIyIi4jpUgMxUqTanK7fGYjiw//KFHo0hIiJSQlSATObf/m4AemV/x4+HTpucRkRExDWoAJnMvdlt5BgeNLQc44ct35sdR0RExCWoAJnNuyJptS7c7rzywS85n134u3WKiIjI1VEBKgUqdRgOQD82sWbXcZPTiIiIK+rRowfjx483O0aJUQEqBSz1e3HOrRJVjTT2Ry81O46ISLEYOXIkhmHw+uuv55m/ZMmSSz4FvjjMnTsXwzAuO61btw6AY8eO4eHhQaNGjS65rj8v4+vrS4sWLZg7d26eMevWrXOOsVgsBAQEEBERwZNPPkl8fN5nQb744ou0bNnS+TojI4OJEydSp04dvLy8qFq1Kj169ODrr7++lj8Sl6UCVBpY3ckJvw2ABvHfkHg20+RAIiLFw8vLi6lTp5KcnGzK5w8ZMoT4+Hjn1LFjRx544IE88zp16gRcKEuDBw/m3LlzbN68+ZLr+/jjj4mPj2fHjh0MGTKEe++9l5UrV+Ybt2/fPk6cOMHWrVuZOHEia9asoWnTpuzcubPArKNHj2bJkiVMnz6dvXv38u233zJo0CBOn9YFM9eCClApEfDHYbBelm2s2LbP5DQiIsWjV69eBAcHM2XKlMuO27JlC926dcPb25saNWowduxYMjIyAHj//fdp1qyZc+zFPUgffPCBc16fPn2YNGlSvvV6e3sTHBzsnDw8PPDx8ck3z+Fw8PHHHzN8+HDuuuuuAp8OX7FiRYKDg6lbty5PP/00gYGBrFq1Kt+4atWqERwcTIMGDbjzzjvZvHkzVatW5aGHHirwZ/DVV1/x9NNP079/f2rXrk3r1q155JFHuOeeewpcZseOHfTs2RM/Pz/8/f1p3bo127Ztc76/efNmunfvjo+PD5UqVaJPnz55yqjdbufJJ58kMDCQ4OBgXnzxxTzrT01N5cEHH6RatWr4+/tz/fXXs2PHDuf7F/dizZkzh5o1a+Lr68tDDz2EzWbjjTfeIDg4mGrVqvHaa69d0XqLgwpQaRHSkpQKdfAyckjZ9oXZaUSkLHE4IDuj5CfHld+7zGq1MnnyZN5//32OHTt2yTE7d+6kT58+3Hbbbfzyyy9ERUWxadMmxowZA1w4V2XXrl0kJSUBsH79eqpUqcL69esByM3NZcuWLXTv3v0qf6Dw/fffc+7cOXr16sXw4cNZsGABZ8+eLXC8zWZjwYIFnDlzBnd3979dv7e3N6NHj2bz5s0kJiZeckxwcDDLly+/7Of+1bBhw6hevTpbt24lJiaGp556ypknNjaWG264gSZNmhAdHc2mTZsYMGAANtv/X3zzySefUKFCBX788UfeeOMNXn75ZVavXg2Aw+HgxhtvJCEhgeXLlxMTE0OrVq244YYbOHPmjHMdBw8eZMWKFXz77bfMnz+fOXPmcOONN3Ls2DHWr1/P1KlTefbZZ/nhhx+uaL3XmluxrVmujGHg0fou2PAq7c+uZl/CkzQM9jM7lYiUBTnnYHJoyX/u0yfAo8IVL3brrbfSsmVLXnjhhUvuWfnXv/7FXXfd5Twht379+rz33nt0796dmTNn0rRpUypXrsz69esZNGgQ69at47HHHuOdd94BYOvWrWRmZtKlS5er3rTZs2dz5513YrVaadKkCfXq1SMqKor7778/z7ihQ4ditVrJzMzEZrMRGBiYb0xBLp5bdOTIEapVq5bv/VmzZjFs2DAqV65MixYt6NKlC7fffjudO3cucJ1xcXE88cQTznXXr1/f+d4bb7xBmzZtmDFjhnNekyZN8izfvHlzXnjhBeey06dPZ+3atfTu3Zvvv/+enTt3kpiYiKenJwBvvvkmS5Ys4YsvvuDBBx8ELuxFmjNnDn5+foSHh9OzZ0/27dvH8uXLsVgsNGzYkKlTp7Ju3To6dOhQ6PVea9oDVIr4tB6KHYMOlj2s/eEns+OIiBSbqVOn8sknn7B79+5878XExDB37lx8fX2dU58+fbDb7Rw+fBjDMOjWrRvr1q0jJSWFXbt2MXr0aGw2G3v27GHdunW0atUKX1/fq8qWkpLCl19+yd133+2cd/fddzNnzpx8Y9955x1iY2NZvXo1LVu25J133qFevXqF+hzHH3vQCjoBvFu3bhw6dIi1a9cyaNAgdu3aRdeuXXnllVcKXOeECRO4//776dWrF6+//joHDx50vndxD9DlNG/ePM/rkJAQ5x6qmJgY0tPTqVy5cp7fzeHDh/N8Tu3atfHz+///gQ8KCiI8PByLxZJn3pWu91rTHqDSJKA6yVXbU/nUD1h3LsR28/VYLSVzZYSIlGHuPhf2xpjxuVepW7du9OnTh6effpqRI0fmec9ut/OPf/yDsWPH5luuZs2awIXDYLNmzWLjxo20aNGCihUr0q1bN9avX8+6devo0aPHVWf77LPPyMzMpH379s55DocDu93O7t27CQ8Pd84PDg6mXr161KtXj4ULFxIREUGbNm3yjCnInj17gAuFoSDu7u507dqVrl278tRTT/Hqq6/y8ssvM3HiRDw8PPKNf/HFF7nrrrv45ptvWLFiBS+88AKff/45t956K97e3n+b6a+H7wzDwG63Axd+LyEhIc6r5P6sYsWKl13HtVjvtaYCVMr4dxgOX/1Ar5x1RB9IokuDqmZHEpHSzjCu6lCU2V5//XVatmxJgwYN8sxv1aoVu3btuuyelB49ejBu3Di++OILZ9np3r07a9asYcuWLYwbN+6qc82ePZvHHnssXzEbO3Ysc+bM4c0337zkcvXq1WPQoEFMmjSJpUsvf0uT8+fPM2vWLLp160bVqoX/73x4eDi5ublkZmZesgABNGjQgAYNGvDoo48ydOhQPv74Y2699VaaN2/O2rVreemllwr9eX/WqlUrEhIScHNzu2xpKy3r/Ts6BFbKuDe9hWzDk7qWeLZtWW12HBGRYtOsWTOGDRvG+++/n2f+xIkTiY6O5uGHHyY2Npb9+/ezbNkyHnnkEeeYi+cB/e9//3MWoB49erBkyRLOnz9/1ef/xMbG8vPPP3P//ffTtGnTPNPQoUP59NNPycnJKXD5xx57jK+++irPlVcAiYmJJCQksH//fj7//HM6d+5MUlISM2fOLHBdPXr04KOPPiImJoYjR46wfPlynn76aXr27Im/v3++8efPn2fMmDGsW7eO33//nc2bN7N161YaN24MwKRJk9i6dSv//Oc/+eWXX9i7dy8zZ850nkz+d3r16kXHjh0ZOHAgK1eu5MiRI2zZsoVnn3023/ZeieJa799RASptPP04G9YXgKqHl3AuO9fkQCIixeeVV15xngtzUfPmzVm/fj379++na9euRERE8NxzzxESEuIcYxiG8yqvrl27Ope7eKPBSxWEwpg9ezbh4eGXvPnhwIEDOXPmDF999VWByzdr1oxevXrx/PPP55nfsGFDQkNDad26Na+//jq9evXi119/veyhsj59+vDJJ58QGRlJ48aNeeSRR+jTpw8LFiy45Hir1crp06cZMWIEDRo0YPDgwfTr18+5x6dBgwasWrWKHTt20K5dOzp27MjSpUtxcyvcwSDDMFi+fDndunXjvvvuc17Sf+TIEYKCggq1jpJc799+ruOv/+QJaWlpBAQEkJqaetX/EhWF48BajHm3kezwZf3NGxnYuk6JZxCR0ikzM5PDhw8TFhaGl5eX2XFEStzl/h24ku9v7QEqhYw6PUj3qEIlI53DejSGiIjINacCVBpZrNia3A5A45PfcDJNj8YQERG5lkwtQBs2bGDAgAGEhoZiGAZLliy57PiLD9L76/TnGzkV9KC7zMyyVSIC2l94NMb1lp/5dmv++2SIiIjI1TO1AGVkZNCiRQumT59eqPHvvvtungfWHT16lMDAQO6444484/z9/fOMi4+PL3vHyoObcsavIR6GjdRtC81OIyIiUq6Yeh+gfv360a9fv0KPDwgIICAgwPl6yZIlJCcnc++99+YZZxgGwcHB1yynWbxb3wXrXqBzxmp2n5hEeGjJn5AtIqWTrl8RV3Wt/tkv0+cAzZ49m169elGrVq0889PT06lVqxbVq1fnpptuYvv27ZddT1ZWFmlpaXmm0sC79Z3YsdDasp910dFmxxGRUuDiHXXPnTtnchIRc2RnZwMXLvsvijJ7J+j4+HhWrFjBZ599lmd+o0aNmDt3Ls2aNSMtLY13332Xzp07s2PHjjwPhfuzKVOmXPWdMYuVXzBngjtTJWEj7rsWkjuwN27WMt1ZRaSIrFYrFStWdD5HycfHp8BnSYmUN3a7nVOnTuHj41Po+xcVpNTcB8gwDBYvXszAgQMLNX7KlCm89dZbnDhxosDbgcOFH1arVq3o1q0b77333iXHZGVlkZWV5XydlpZGjRo1TLsP0J/lxkbhtuRB4uxVOTxsC90b5n9isIi4FofDQUJCAikpKWZHESlxFouFsLCwS373X8l9gMrkHiCHw8GcOXMYPnz4ZcsPXPhBtW3blv379xc4xtPTE09Pz2sd85pwCx9A1jJvanKKxZtX0L3hPWZHEhGTGYZBSEgI1apVu+xjGUTKIw8PjzxPlr9aZbIArV+/ngMHDjBq1Ki/HetwOIiNjaVZs2YlkKwYePiQXvcmPPcvJOTIEtKzhuHrWSZ/bSJyjVmt1iKfByHiqkw9oSQ9PZ3Y2FhiY2MBOHz4MLGxscTFxQEXHtw2YsSIfMvNnj2b9u3b07Rp03zvvfTSS6xcuZJDhw4RGxvLqFGjiI2NZfTo0cW6LcUpsOOFewL1NX5g1Y7fTU4jIiJS9plagLZt20ZERAQREREATJgwgYiICOdD5OLj451l6KLU1FQWLVpU4N6flJQUHnzwQRo3bkxkZCTHjx9nw4YNtGvXrng3phgZtbty1jMIf+McR39YZHYcERGRMq/UnARdmpj9MNRLSfv6Wfy3vc8aWyvCH1tOaEVvsyOJiIiUKnoYajnk/8ejMbpbdrDyp50mpxERESnbVIDKiqoNORPQBHfDxrmYBboLrIiISBGoAJUh3m3vBqDL+bXsOlE67lYtIiJSFqkAlSHeEYOxYaWF5RDrN28yO46IiEiZpQJUllSowpnQ7gB471lIjs1uciAREZGySQWojKnU8cJ9kfrYN7Dxt5MmpxERESmbVIDKGLdG/ci0+nKdcZqdm5ebHUdERKRMUgEqa9y9yKh/MwDV45aSlqnnAImIiFwpFaAy6OKjMfoYP7Iq9pDJaURERMoeFaAyyKjZkVSv6/A1MjmhR2OIiIhcMRWgssgwsLQYAkCL0ys4euacyYFERETKFhWgMsqv3R83RbTsZPWPO0xOIyIiUraoAJVVleuSVKklVsNBVmyUHo0hIiJyBVSAyjDfP/YCdT//HTuOpZqcRkREpOxQASrDvFoMItdwJ9zyO1s2fW92HBERkTJDBags8wkk+bqeAPjuW0R2rh6NISIiUhgqQGVcYKd7AOjr2MiGvfEmpxERESkbVIDKOGuDSM65BVDNSGHPlq/MjiMiIlImqACVdW4eZDYYCEDNY1+Rek6PxhAREfk7KkDlwMXDYJHGT6zcfsDkNCIiIqWfClB5cF0rUrxr4W1kk/jjArPTiIiIlHoqQOWBYeDWaigAEckriTutR2OIiIhcjgpQOeHb5i4AOlp2s/qHGJPTiIiIlG4qQOVFpVqcqtwWi+EgV4/GEBERuSwVoHLEv8NwAK7P+o6ff082OY2IiEjppQJUjng2u5Ucw4P6luP8sHmt2XFERERKLRWg8sTLn5SakQBU3L+IrFybyYFERERKJxWgciaw0wgA+jg2s273CZPTiIiIlE4qQOWMtd4NZLhVooqRxm+bl5gdR0REpFRSASpvrG5kNR4EQN34r0jOyDY5kIiISOmjAlQOXTwMdoPxMytj9pqcRkREpPRRASqPgptzpkI9PI0czmxdaHYaERGRUsfUArRhwwYGDBhAaGgohmGwZMmSy45ft24dhmHkm/buzbuXY9GiRYSHh+Pp6Ul4eDiLFy8uxq0ohQwDjz8ejdE6dRWHkzJMDiQiIlK6mFqAMjIyaNGiBdOnT7+i5fbt20d8fLxzql+/vvO96OhohgwZwvDhw9mxYwfDhw9n8ODB/Pjjj9c6fqnm2/Yu7Bi0t+zluy2ute0iIiJ/x83MD+/Xrx/9+vW74uWqVatGxYoVL/netGnT6N27N5MmTQJg0qRJrF+/nmnTpjF//vyixC1b/ENJqtqBaqeicfwShf2mnlgshtmpRERESoUyeQ5QREQEISEh3HDDDXz//fd53ouOjiYyMjLPvD59+rBly5YC15eVlUVaWlqeqTyo2OGPk6Gzv2fbkTMmpxERESk9ylQBCgkJYdasWSxatIgvv/yShg0bcsMNN7BhwwbnmISEBIKCgvIsFxQUREJCQoHrnTJlCgEBAc6pRo0axbYNJcmj6c1kG16EWU4Ss3ml2XFERERKDVMPgV2phg0b0rBhQ+frjh07cvToUd588026devmnG8YeQ/1OByOfPP+bNKkSUyYMMH5Oi0trXyUIE9fUsL6Uu3QEiodXExmzhC83K1mpxIRETFdmdoDdCkdOnRg//79ztfBwcH59vYkJibm2yv0Z56envj7++eZyosqnUYC0Nexme9/PWZuGBERkVKizBeg7du3ExIS4nzdsWNHVq9enWfMqlWr6NSpU0lHKxUsdbpx1r0qFY0MDkcvMjuOiIhIqWDqIbD09HQOHDjgfH348GFiY2MJDAykZs2aTJo0iePHj/Ppp58CF67wql27Nk2aNCE7O5t58+axaNEiFi36/y/2cePG0a1bN6ZOncott9zC0qVLWbNmDZs2bSrx7SsVLFZym94O22dSL+EbTqc/TGVfT7NTiYiImMrUPUDbtm0jIiKCiIgIACZMmEBERATPP/88APHx8cTFxTnHZ2dn8/jjj9O8eXO6du3Kpk2b+Oabb7jtttucYzp16sTnn3/Oxx9/TPPmzZk7dy5RUVG0b9++ZDeuFKn0x9VgPYztrNq62+Q0IiIi5jMcDofD7BClTVpaGgEBAaSmppab84FOv9Weymf38mGFhxj9xOtmxxEREbnmruT7u8yfAySF49n6LgDan13NgcR0k9OIiIiYSwXIRfi2vhMbFiIsB1h3mZtCioiIuAIVIFfhF8TpoK4AuO1cgN2uI58iIuK6VIBcSMWOdwPQK/d7fjyUZHIaERER86gAuRCPJgPItFSgupFE7OblZscRERExjQqQK3H35mydGwGodmgJ57NtJgcSERExhwqQi6nc6cI9gXoTzdpffzc5jYiIiDlUgFyMpXZnUj1D8DfOE7flC7PjiIiImEIFyNVYLDiaDQagUeJyTp3NMjmQiIhIyVMBckEVOwwHoJuxg1U/7TQ5jYiISMlTAXJFVeqTFNAUN8NORsznZqcREREpcSpALsqnzYV7AnVMX82+hLMmpxERESlZKkAuyqfVYGxYaWY5wobNG8yOIyIiUqJUgFxVhcokhfYAwHPXQmx6NIaIiLgQFSAXFnjxnkC29UTvTzQ5jYiISMlRAXJh7o36cc7qR4hxhp2bvzY7joiISIlRAXJlbp5k1LsZgJDfl3AuO9fkQCIiIiVDBcjFVel88dEYP7JmxyGT04iIiJQMFSAXZ9RoT4pXdSoYWRyPXmh2HBERkRKhAuTqDAOaDwGgadIKTqZlmhxIRESk+KkAifPRGJ2MX1n943aT04iIiBQ/FSCBwDASK0VgNRxkxkSZnUZERKTYqQAJAL5tLzwao8u5New+nmpyGhERkeKlAiQA+EQMIsdwp5HlKFu2fG92HBERkWKlAiQXeFfi9HXXX/jrnoXk2uwmBxIRESk+KkDiVLnTPQBE2jayef9Jk9OIiIgUHxUgcXJvGEmGW0WqGqns3bTU7DgiIiLFRgVI/p/VnXMNBgJwXdxS0rP0aAwRESmfVIAkjyqdLxwG62VsZc32AyanERERKR4qQJKHERrBGe/aeBk5nPxB9wQSEZHySQVI8jIMLC2HAtD8zLfEp543OZCIiMi1pwIk+VRsPwyAjpbdrIneZnIaERGRa8/UArRhwwYGDBhAaGgohmGwZMmSy47/8ssv6d27N1WrVsXf35+OHTuycuXKPGPmzp2LYRj5psxMPeSz0CrW4GTldgDkbP8ch8NhciAREZFry9QClJGRQYsWLZg+fXqhxm/YsIHevXuzfPlyYmJi6NmzJwMGDGD79rwP8PT39yc+Pj7P5OXlVRybUG75t7/wgNTu59eyS4/GEBGRcsbNzA/v168f/fr1K/T4adOm5Xk9efJkli5dyldffUVERIRzvmEYBAcHX6uYLsm7xa1kr3icupZ4/r1pNU3vvMPsSCIiItdMmT4HyG63c/bsWQIDA/PMT09Pp1atWlSvXp2bbrop3x6iv8rKyiItLS3P5PI8/ThTMxIA/32L9GgMEREpV8p0AXrrrbfIyMhg8ODBznmNGjVi7ty5LFu2jPnz5+Pl5UXnzp3Zv39/geuZMmUKAQEBzqlGjRolEb/Uq9JpBAC97RvZtPeEyWlERESunTJbgObPn8+LL75IVFQU1apVc87v0KEDd999Ny1atKBr164sWLCABg0a8P777xe4rkmTJpGamuqcjh49WhKbUOq51bues26VCTTS2bd5sdlxRERErpkyWYCioqIYNWoUCxYsoFevXpcda7FYaNu27WX3AHl6euLv759nEsDqRmaj2wCodWwZaZk5JgcSERG5NspcAZo/fz4jR47ks88+48Ybb/zb8Q6Hg9jYWEJCQkogXflTpfOFw2A9jZ9Z8/Nek9OIiIhcG6ZeBZaens6BA///vKnDhw8TGxtLYGAgNWvWZNKkSRw/fpxPP/0UuFB+RowYwbvvvkuHDh1ISEgAwNvbm4CAAABeeuklOnToQP369UlLS+O9994jNjaWDz74oOQ3sBwwQpqTVKE+VTL2c/qHKOjUzOxIIiIiRWbqHqBt27YRERHhvIR9woQJRERE8PzzzwMQHx9PXFycc/xHH31Ebm4uDz/8MCEhIc5p3LhxzjEpKSk8+OCDNG7cmMjISI4fP86GDRto165dyW5cOeLe6sKjMSJSVnIs+ZzJaURERIrOcOg2v/mkpaUREBBAamqqzgcCSIvH/nY4Fux82nYJI27saXYiERGRfK7k+7vMnQMkJvAPIbFqBwAcO/RoDBERKftUgKRQKna4cDJ0j8zv2HE0xdwwIiIiRaQCJIXi1exmsgwvalkS2bZxhdlxREREikQFSArHowLJtS88t63igS/JztWjMUREpOxSAZJCq9p5JAC97ZvZuOeYuWFERESKQAVICs1apxtp7tUIMM5xaPMXZscRERG5aipAUngWC9lN7gAg7MTXpJ7TozFERKRsUgGSK3LxCfHdjVjWbNtlchoREZGrowIkV6ZaI075NcbdsJG89XOz04iIiFwVFSC5Yp6thwHQLvVb1u9LNDmNiIjIlVMBkivm33YoOYYHzS2H+X7JbHJsuiReRETKFhUguXIVqmDr+AgAozJmM3/zbyYHEhERuTIqQHJVvHo8xjnPatSwnCLlu2kkZ2SbHUlERKTQVIDk6nhUwKv/awCMcnzJf5ZvNjmQiIhI4akAyVWzNL+DtKqtqGBkUfeXN9mXcNbsSCIiIoWiAiRXzzDwH/gWALdZN/HZokU4HA6TQ4mIiPw9FSApmutakd74TgBuPfkea3YnmBxIRETk76kASZH59n+ZLIsPLS0H2bp0Jlm5NrMjiYiIXJYKkBSdXxB0fwKAUVmf8L/1ekSGiIiUbipAck14dn6YdJ8aBBkp2Da8xamzWWZHEhERKZAKkFwbbp74DJgKwAi+Zs5X35scSEREpGAqQHLNWBr1Jy20C55GLi32vMmvx1PNjiQiInJJKkBy7fxxWbwNC32tW/nyi//psngRESmVCl2AAgMDSUpKAuC+++7j7Fnd9E4uoVojzre8D4DBp2ewYscxkwOJiIjkV+gClJ2dTVpaGgCffPIJmZmZxRZKyjbfPs9y3i2ARpaj7P76PTJzdFm8iIiULm6FHdixY0cGDhxI69atcTgcjB07Fm9v70uOnTNnzjULKGWQdyWsNzwHKx9nVM5nfLp2CA/2bWN2KhEREadC7wGaN28e/fv3Jz09HYDU1FSSk5MvOYl4tLuXVP8GVDLS8dnyBgmp2mMoIiKlh+G4irNUw8LC2LZtG5UrVy6OTKZLS0sjICCA1NRU/P39zY5TZjkOrcP49BZyHRbeqjObiffcZnYkEREpx67k+/uqToLu2bMnHh4eRUsp5Z5RpweptfviZtjpfOBNfv79jNmRREREAJ0ELcUs4ObXyTE86GLdxbeL5mC367J4ERExn06CluIVGEZ224dw/+ldhqV8xLKY2xjYto7ZqURExMVd1UnQhmHoJGgptAo3PEmGRxVqWRI59u1bZGTlmh1JRERcXKELUFBQEK+//joLFy6kZs2a/Pe//2Xx4sWXnAprw4YNDBgwgNDQUAzDYMmSJX+7zPr162ndujVeXl7UqVOHDz/8MN+YRYsWER4ejqenJ+Hh4VeUSYqBpy/ufV8BYGTuF/x39Y8mBxIREVd3VY/COHz4sPMKsKKcC5SRkUGLFi2YPn16oT+3f//+dO3ale3bt/P0008zduxYFi1a5BwTHR3NkCFDGD58ODt27GD48OEMHjyYH3/Ul66ZPFreSUpgC3yNTKr+NJWjZ86ZHUlERFzYVV0Gb7fbee211/jwww85efIkv/32G3Xq1OG5556jdu3ajBo16sqDGAaLFy9m4MCBBY6ZOHEiy5YtY8+ePc55o0ePZseOHURHRwMwZMgQ0tLSWLFihXNM3759qVSpEvPnzy9UFl0GXzwcR7dizO4FwNQaM5k46i6TE4mISHlSLJfB/9mrr77K3LlzeeONN/JcDt+sWTP+85//XM0qCyU6OprIyMg88/r06cO2bdvIycm57JgtW7YUuN6srCzS0tLyTHLtGTXaktLgdgB6//4WPx5MMjmRiIi4qqsqQJ9++imzZs1i2LBhWK1W5/zmzZuzd+/eaxburxISEggKCsozLygoiNzcXOc9igoak5CQUOB6p0yZQkBAgHOqUaPGtQ8vAFS86VWyLN60shxg/aIZ2HRZvIiImOCqCtDx48epV69evvl2u925J6a4GIaR5/XFI3h/nn+pMX+d92eTJk0iNTXVOR09evQaJpY8/EPI7TwBgBEZc1j8wz6TA4mIiCu6qgLUpEkTNm7cmG/+woULiYiIKHKoggQHB+fbk5OYmIibm5vzpOyCxvx1r9CfeXp64u/vn2eS4lOh21jSvKsTbCSTsvoN0jKLtzSLiIj81VUVoBdeeIExY8YwdepU7HY7X375JQ888ACTJ0/m+eefv9YZnTp27Mjq1avzzFu1ahVt2rTB3d39smM6depUbLnkCrl74X3T6wAMty/jvys2mBxIRERczVUVoAEDBhAVFcXy5csxDIPnn3+ePXv28NVXX9G7d+9Cryc9PZ3Y2FhiY2OBC5e5x8bGEhcXB1w4NDVixAjn+NGjR/P7778zYcIE9uzZw5w5c5g9ezaPP/64c8y4ceNYtWoVU6dOZe/evUydOpU1a9Ywfvz4q9lUKSbu4TdxJqgjnkYOdbZP5XBShtmRRETEhVzVZfDXyrp16+jZs2e++ffccw9z585l5MiRHDlyhHXr1jnfW79+PY8++ii7du0iNDSUiRMnMnr06DzLf/HFFzz77LMcOnSIunXr8tprr3HbbYV/Erkugy8ZjpO7cMzsggU7/wp+kydGP2B2JBERKcOu5Pu7SAUoJiaGPXv2YBgG4eHhxXr+T0lSASo5KV+MpeKvn7DHXpOkYavo2jDE7EgiIlJGFft9gBITE7n++utp27YtY8eOZcyYMbRu3ZobbriBU6dOXVVocU0V+7/IeasfjS1x/Lz4XXJtdrMjiYiIC7iqAvTII4+QlpbGrl27OHPmDMnJyfz666+kpaUxduzYa51RyjOfQOj5DADDz/+XLzb/anIgERFxBVdVgL799ltmzpxJ48aNnfPCw8P54IMP8jyCQqQwvDs+QIpvXQKNdGzfTSHlXLbZkUREpJy7qgJkt9udl53/mbu7O3a7DmHIFbK64XfLmwAMcXzL/75aZXIgEREp766qAF1//fWMGzeOEydOOOcdP36cRx99lBtuuOGahRPXYa1/Paer98LNsNNs11T2J+h5bCIiUnyuqgBNnz6ds2fPUrt2berWrUu9evUICwvj7NmzvP/++9c6o7iIyre+QQ7udLP8wrIvPsbEOzSIiEg5V6TL4FevXs3evXtxOByEh4fTq1eva5nNNLoM3jypy54m4OcPOGwP4vDgtVzfVA+mFRGRwim2y+C/++47wsPDSUu7cHiid+/ePPLII4wdO5a2bdsW+IwwkcIK6DOJdPfKhFlOsm/Zm2Tn6pwyERG59q6oAE2bNo0HHnjgkq0qICCAf/zjH7z99tvXLJy4IE8/rL1fBODurCgWrosxN4+IiJRLV1SAduzYQd++fQt8PzIykpgYfWFJ0Xi3uZszAU3wM87jtXEySelZZkcSEZFy5ooK0MmTJy95+ftFbm5uuhO0FJ3FQsBt7wBwK98zf8kykwOJiEh5c0UF6LrrrmPnzp0Fvv/LL78QEqJnOUnRWWu1J6nOQCyGgw6/vcGu4ylmRxIRkXLkigpQ//79ef7558nMzMz33vnz53nhhRe46aabrlk4cW1VBk4hy/CireU31iycqcviRUTkmrmiy+BPnjxJq1atsFqtjBkzhoYNG2IYBnv27OGDDz7AZrPx888/ExQUVJyZi50ugy89UldOJiB6KiccgewcuJY+EXXMjiQiIqXUlXx/X/F9gH7//XceeughVq5c6fw/csMw6NOnDzNmzKB27dpXHby0UAEqRXLOk/pmBAFZ8cxxG8JdE2fi5W41O5WIiJRCxVqALkpOTubAgQM4HA7q169PpUqVripsaaQCVLpk/fIlnl/eS6bDnQUdFjOiX1ezI4mISClUbDdC/LNKlSrRtm1b2rVrV67Kj5Q+ns1u5VSVtngZOVT94TVOpuU/B01ERORKXHUBEikxhkHl297GhoV+RjRfLIoyO5GIiJRxKkBSJlhCm5Pc6C4Aehx+i9jfT5ucSEREyjIVICkzqgx4iXMWX5pYfmfLF9N0WbyIiFw1FSApOypUIbfrRAAGp81l+da9JgcSEZGySgVIyhT/bg9xxrs2VYw0Ur99jXPZuWZHEhGRMkgFSMoWqzu+t/wLgDtsy4la8Z3JgUREpCxSAZIyx6NRJCeDe+Bu2AiLmczxlPNmRxIRkTJGBUjKpGq3v0kubvSwbGfpgo/NjiMiImWMCpCUSUaV+iQ3HwVAn2Pvse1ggsmJRESkLFEBkjKrav9nOOtWibqWeLYv+hd2uy6LFxGRwlEBkrLLKwBueAGAIRmf8dWWHSYHEhGRskIFSMo0v/b3cMqvMf7GOWxrX+VsZo7ZkUREpAxQAZKyzWKh4m1vAzDQvoaFX68wOZCIiJQFKkBS5rmHdSKh5k1YDAdNf5nM70npZkcSEZFSTgVIyoWg214ny/CknWUP3y740Ow4IiJSyplegGbMmEFYWBheXl60bt2ajRs3Fjh25MiRGIaRb2rSpIlzzNy5cy85JjMzsyQ2R0xiVKzB2TZjALjx5Ex+2HvU5EQiIlKamVqAoqKiGD9+PM888wzbt2+na9eu9OvXj7i4uEuOf/fdd4mPj3dOR48eJTAwkDvuuCPPOH9//zzj4uPj8fLyKolNEhNV6f04Ke5BVDeS+G3JZHJtdrMjiYhIKWVqAXr77bcZNWoU999/P40bN2batGnUqFGDmTNnXnJ8QEAAwcHBzmnbtm0kJydz77335hlnGEaeccHBwSWxOWI2Dx/c+r4KwB3nv2Dphq0mBxIRkdLKtAKUnZ1NTEwMkZGReeZHRkayZcuWQq1j9uzZ9OrVi1q1auWZn56eTq1atahevTo33XQT27dvv+x6srKySEtLyzNJ2eTb6g4SKrbC28jGZ/1LpJ7TZfEiIpKfaQUoKSkJm81GUFBQnvlBQUEkJPz9Yw3i4+NZsWIF999/f575jRo1Yu7cuSxbtoz58+fj5eVF586d2b9/f4HrmjJlCgEBAc6pRo0aV7dRYj7DoPLt72DHoB+b+XLpF2YnEhGRUsj0k6ANw8jz2uFw5Jt3KXPnzqVixYoMHDgwz/wOHTpw991306JFC7p27cqCBQto0KAB77//foHrmjRpEqmpqc7p6FGdQFuWuVdvycm6gwFou2cqB05qj56IiORlWgGqUqUKVqs1396exMTEfHuF/srhcDBnzhyGDx+Oh4fHZcdaLBbatm172T1Anp6e+Pv755mkbAu59TXOGT40tRxm/YJpZscREZFSxrQC5OHhQevWrVm9enWe+atXr6ZTp06XXXb9+vUcOHCAUaNG/e3nOBwOYmNjCQkJKVJeKWN8q3K+0+MA3Jz0bzbsPGhyIBERKU1MPQQ2YcIE/vOf/zBnzhz27NnDo48+SlxcHKNHjwYuHJoaMWJEvuVmz55N+/btadq0ab73XnrpJVauXMmhQ4eIjY1l1KhRxMbGOtcprqNyz0c47VWTqkYaJ5a9Qo4uixcRkT+4mfnhQ4YM4fTp07z88svEx8fTtGlTli9f7ryqKz4+Pt89gVJTU1m0aBHvvvvuJdeZkpLCgw8+SEJCAgEBAURERLBhwwbatWtX7NsjpYybB94DpsLCodyWvYwlazdwR2QPs1OJiEgpYDgcDofZIUqbtLQ0AgICSE1N1flA5cCJD24k9NQmvqc1zR9fQWVfT7MjiYhIMbiS72/TrwITKW5Bd7xDLlZ6EsOyRf81O46IiJQCKkBS7lmrNSAxfCQAXQ6+zZ5jp80NJCIiplMBEpcQOuB5zlorUt9ynB8X/Asd+RURcW0qQOIavCuS0/0ZAG5N/YTvft5jciARETGTCpC4jMAuozjp04AA4xxpK14iK9dmdiQRETGJCpC4DosV/1vfAuDmnJUs/XaVyYFERMQsKkDiUrzrd+NoaF+shoPaW18mMfW82ZFERMQEKkDicq67/Q2y8KCdsZtvv5hldhwRETGBCpC4HEtgLU63vPBolJ5x77PzSMLfLCEiIuWNCpC4pND+T5HsVpUaxil+WfianhMmIuJiVIDENXlUgN4vAzAofT4fzP0vNrvuDSQi4ipUgMRlVWo3lKTQnngZOYyKm8iMeQuwqwSJiLgEFSBxXYZBlXvnc7pKO/yM8ww/+CgfLViqu0SLiLgAFSBxbe7eVH7gS05XaklFI4M79jzCnCXfmp1KRESKmQqQiKcflR9cymn/xlQx0rgpdjTzln9vdioRESlGKkAiAN4VqTx6OWcq1CPISKHHj/ezYM0Ws1OJiEgxUQESucgnkMDRyznjVZPqRhJtN4xk6cYYs1OJiEgxUAES+TO/ICo9tIJkz1DCLCdpvHo4K37caXYqERG5xlSARP7CCKhOxX8sJ9W9Kg0sx6n5zTC+277P7FgiInINqQCJXIIRGIbfA8s5a61EE8vvVF48lM27DpkdS0RErhEVIJECWKo1wHvUV6Rb/GlhOYjHgqFs/e2Y2bFEROQaUAESuQy30GZ43ruUc4YPbY295PxvKDsO6+GpIiJlnQqQyN9wr9EK64hFZBpedDJ+IeWTu9hzLMnsWCIiUgQqQCKF4BnWCcfQz8nCg+7EcGz23Rw8mWJ2LBERuUoqQCKF5N2gJ7l3/Jcc3OjtiGbvR/dw9HS62bFEROQqqACJXIEKTfpy/pb/YMPCjfZ1xMy8l4SU82bHEhGRK6QCJHKF/CNuJb3/B9gxGJi7ik0fPEDS2UyzY4mIyBVQARK5CgHt7iKl11sA3J7zFas/GEvquRyTU4mISGGpAIlcpcAuo0jq9hoAQzOj+Gr6BNKzck1OJSIihaECJFIEVa4fQ2KHZwG4+9ynLJo+ifPZNpNTiYjI31EBEimian2f4GSrCQDcc3YWUTNfJCtXJUhEpDRTARK5BoIGPE9809EAjEx+j89mTSXXZjc5lYiIFMT0AjRjxgzCwsLw8vKidevWbNy4scCx69atwzCMfNPevXvzjFu0aBHh4eF4enoSHh7O4sWLi3szxNUZBiGDXudEwxEAjDj5Bv+d/S42u8PkYCIicimmFqCoqCjGjx/PM888w/bt2+natSv9+vUjLi7ussvt27eP+Ph451S/fn3ne9HR0QwZMoThw4ezY8cOhg8fzuDBg/nxxx+Le3PE1RkGoUPe5XjY7VgNB3cff4V5n36Iw6ESJCJS2hgOE//r3L59e1q1asXMmTOd8xo3bszAgQOZMmVKvvHr1q2jZ8+eJCcnU7FixUuuc8iQIaSlpbFixQrnvL59+1KpUiXmz59fqFxpaWkEBASQmpqKv7//lW2UiN3GsTkjqH7sa7Icbixs8BbD7roHwzDMTiYiUq5dyfe3aXuAsrOziYmJITIyMs/8yMhItmzZctllIyIiCAkJ4YYbbuD777/P8150dHS+dfbp0+ey68zKyiItLS3PJHLVLFaq3/sJx4J74WnkMui3J1jwxedmpxIRkT8xrQAlJSVhs9kICgrKMz8oKIiEhIRLLhMSEsKsWbNYtGgRX375JQ0bNuSGG25gw4YNzjEJCQlXtE6AKVOmEBAQ4Jxq1KhRhC0TAaxuVL9/PseqdMXbyObGX8ezaNkSs1OJiMgf3MwO8NfDAg6Ho8BDBQ0bNqRhw4bO1x07duTo0aO8+eabdOvW7arWCTBp0iQmTJjgfJ2WlqYSJEXn5kH1fyzk2AcDqJ6ylV4xD/GVhycD+vYzO5mIiMszbQ9QlSpVsFqt+fbMJCYm5tuDczkdOnRg//79ztfBwcFXvE5PT0/8/f3zTCLXhLs31R9awnG/FgQY5+gU/QDf/uWwrYiIlDzTCpCHhwetW7dm9erVeeavXr2aTp06FXo927dvJyQkxPm6Y8eO+da5atWqK1qnyDXl6UvoP5dxwqcxlY2ztFo3ku82X/48NxERKV6mHgKbMGECw4cPp02bNnTs2JFZs2YRFxfH6NEXbig3adIkjh8/zqeffgrAtGnTqF27Nk2aNCE7O5t58+axaNEiFi1a5FznuHHj6NatG1OnTuWWW25h6dKlrFmzhk2bNpmyjSIAhndFQsYsJ/69XoRkHqTRqrvZ6PEFXdu2MjuaiIhLMrUADRkyhNOnT/Pyyy8THx9P06ZNWb58ObVq1QIgPj4+zz2BsrOzefzxxzl+/Dje3t40adKEb775hv79+zvHdOrUic8//5xnn32W5557jrp16xIVFUX79u1LfPtE/szwCSTonys4Ob0Xodlx5H49hJ88FtOuRVOzo4mIuBxT7wNUWuk+QFKccpOPkfxBL6rmxnPQEUranUuJaNzA7FgiImVembgPkIircqtUHf/RKzhtrUpd4wQ+n9/OrgNHzI4lIuJSVIBETOBZJQzfB5eTbKlEQ+N3mHcbv/1+zOxYIiIuQwVIxCSeQQ3wvO9r0gx/mnCQcx8P4vCJRLNjiYi4BBUgERP5VG+KMWIJ6UYFWrKX0/++jWOJp82OJSJS7qkAiZjML6w1uUMXcg4v2jh2cvTDOziZrOfRiYgUJxUgkVKgYoPOnL9jPll40NEew74PhnA6LcPsWCIi5ZYKkEgpUbnJ9aTdMpds3OiWu4Ud0+8iNSPT7FgiIuWSCpBIKVI14kZO9/83uVi5PnsdP70/gozMHLNjiYiUOypAIqVMSLvbSLjhPWwY9M5cyYb37yczO9fsWCIi5YoKkEgpVL3r3Rzv9iYA/TKWsHb6P8nOsZmcSkSk/FABEimlal5/P4c7vArAjWlRfDvzMXJtdpNTiYiUDypAIqVYWN9HONjqaQBuPvMxyz96Grtdj+8TESkqFSCRUq7uzRM50HQ8ADcnzuTr2S+jZxiLiBSNCpBIGVBv0Iv81uBBAG4+/jZff/IvlSARkSJQARIpCwyDBkPf4LfadwPQ//Bkls//wORQIiJllwqQSFlhGDS4Zzr7rhuE1XDQZ99zrPziP2anEhEpk1SARMoSw6DhqP+wL+hG3Aw7PXZOZO2y/5mdSkSkzFEBEilrLBYaPvgp+wKvx9PIpXPMONav/NLsVCIiZYoKkEhZZHWjwT8/Z19AZ7yMHNpsGc2m778xO5WISJmhAiRSRhlunjQYs4j9vm2oYGTRct19fDPrWVLO6inyIiJ/RwVIpAwz3L2pM2YpB31b42tkcuOJ9zn9VjvWfrMAm26YKCJSIBUgkTLO6uVL3QlrONhxCimGP3U5xg1bHyD69Zv4dfcus+OJiJRKKkAi5YHFQt0+/6TCYzvYXf1ObA6DLtmbqBPVkxUzHicpJc3shCIipYoKkEg54u4bSPj9H5E6Yi2HfJrjY2TRL/HfZExry5qln+phqiIif1ABEimHAuu2ps4TGzjUbRqnjUBqkUCv7Y+wbUokO3ZsNzueiIjpVIBEyivDoM7191LxyR3sChtJDlY65G6l0Ze9WfX+IySePmN2QhER06gAiZRzVm9/mtzzLhn3bWS/b1s8jRwiT39K7nttWfPFR+Tk2syOKCJS4lSARFxExZpNqP/Yag7f8BGJlqqEGkn0+vVJdk7pyfaYH8yOJyJSolSARFyJYRDW9U6qTNzBrvqjycKdVrYdNF3WnzXvPkD8yUSzE4qIlAgVIBEXZPGsQJNhU8l6MJq9AV1wN2z0Sl6A24y2rP78PbJycs2OKCJSrFSARFyYf2h9Gj36DXF9P+WE9TqqGin03vscv03pwrYf1pkdT0Sk2KgAiQg1O9xCyFM/s6vxeM7jSTP7HiJWDOT7t4dz/MRxs+OJiFxzphegGTNmEBYWhpeXF61bt2bjxo0Fjv3yyy/p3bs3VatWxd/fn44dO7Jy5co8Y+bOnYthGPmmzMzM4t4UkTLNcPeiyZCXsP3zJ3ZV6oXVcNAzbRk+H7VnzbypZGZlmx1RROSaMbUARUVFMX78eJ555hm2b99O165d6devH3FxcZccv2HDBnr37s3y5cuJiYmhZ8+eDBgwgO3b897Yzd/fn/j4+DyTl5dXSWySSJnnW602TcYt4ujNURx1q0Ul4yy9Dkzm8NSO/LhxFQ6HHrIqImWf4TDxv2bt27enVatWzJw50zmvcePGDBw4kClTphRqHU2aNGHIkCE8//zzwIU9QOPHjyclJeWqc6WlpREQEEBqair+/v5XvR6Rss6Rm83uZW9T65d38eUcABsq9KHWkH9Rq2Ytk9OJiOR1Jd/fpu0Bys7OJiYmhsjIyDzzIyMj2bJlS6HWYbfbOXv2LIGBgXnmp6enU6tWLapXr85NN92Ubw/RX2VlZZGWlpZnEhEw3DxocttTGGNj2Fn1RgC6Zayk0uwOrJ37Eud0aFlEyijTClBSUhI2m42goKA884OCgkhISCjUOt566y0yMjIYPHiwc16jRo2YO3cuy5YtY/78+Xh5edG5c2f2799f4HqmTJlCQECAc6pRo8bVbZRIOVUhMJRmD3/G8UFLOexeH3/jHDcceZv4qW2JXrtUh8VEpMwx/SRowzDyvHY4HPnmXcr8+fN58cUXiYqKolq1as75HTp04O6776ZFixZ07dqVBQsW0KBBA95///0C1zVp0iRSU1Od09GjR69+g0TKseua9aD2Uz+wq/XLpOJLXUccHTeOIPqNgRw+tM/seCIihWZaAapSpQpWqzXf3p7ExMR8e4X+KioqilGjRrFgwQJ69ep12bEWi4W2bdtedg+Qp6cn/v7+eSYRuTTD6kaTAePwfDSWHcGDsDsMOp1fR7VPuvLdfyaRnpFhdkQRkb9lWgHy8PCgdevWrF69Os/81atX06lTpwKXmz9/PiNHjuSzzz7jxhtv/NvPcTgcxMbGEhISUuTMIvL/vAKq0mL0HE7e+S0HPJtQwcji+mMzOP2vNmxZGaXDYiJSqrmZ+eETJkxg+PDhtGnTho4dOzJr1izi4uIYPXo0cOHQ1PHjx/n000+BC+VnxIgRvPvuu3To0MG598jb25uAgAAAXnrpJTp06ED9+vVJS0vjvffeIzY2lg8++MCcjRQp50Iad4BGm9n97b8J/uk1ajlOUCv6QX76eS6Bt/2Leg2bmh1RRCQfU88BGjJkCNOmTePll1+mZcuWbNiwgeXLl1Or1oXLa+Pj4/PcE+ijjz4iNzeXhx9+mJCQEOc0btw455iUlBQefPBBGjduTGRkJMePH2fDhg20a9euxLdPxGUYBuH9HqTCY7HEVh9GrsNCu6wtVP+sB+s+fJRUXVkpIqWMqfcBKq10HyCRojl5cDvJXzxKo/MXbkFxnGocbvMMnfqNwGI1/doLESmnysR9gESk/AqqG0GjJ79nT9fpnDSqcB2JdNk2jtipvdj3689mxxMRUQESkWJiGDS+YTiVnojl51qjyHa40So7hrCFvVj/wUMkJ58xO6GIuDAVIBEpVh4+frS6923S7tvErgod8DBsdD/1GTnvtmLT4pnYbHazI4qIC1IBEpESUaVWY5o8sZJ91/+bE5YQqpFMlx1PsWdKV/bEFu7xNyIi14oKkIiUqIbdBlNt4s/8XPdhzuNB09xfabC4P5veu4/TSYlmxxMRF6ECJCIlzs3Th1bDJ3PugR/Y4d8Dq+Ggy5lFML01m+a/wZnTSWZHFJFyTpfBX4IugxcpWft/+BrP1U9R03bhOXxZDjd2eUWQUacfdbvcQeh1NU1OKCJlwZV8f6sAXYIKkEjJs+VkE7voDYJ++4zq9uP/P99hsMc9nDM1I7muw2Dq1G9cqAcmi4jrUQEqIhUgERM5HCQcjOV49EIqxq2ibk7eBxnvt4QRH9KLym1uo3HzDrqxoog4qQAVkQqQSOmRfOIgRzYtwPvQCuqf/wWr8f//yTpKMIer9sSv5a00aXcDHu6mPt5QREymAlREKkAipVN68kkOblyI5bdvaHB2K55GjvO9U1RkX8VueDS9mSadbqSCj4+JSUXEDCpARaQCJFL6ZZ9LY/+WJeT8uox6KZvx5ZzzvTSHD7t8O2JveBONu95KYKVKJiYVkZKiAlREKkAiZYs9J4uDPy0nPXYJNZPWUdmR4nwv0+HOTq/WnK/bj3pdbic0tLp5QUWkWKkAFZEKkEjZ5bDlcvSXDSRtW0RI/BpC7AnO93IdFna5NyWlZiQ1Og8mrE4DXVEmUo6oABWRCpBIOeFwkLA/hhM/LCQwbhW1cw/leXuvpR4Job2o2vZ2Gjdrg8WiMiRSlqkAFZEKkEj5lHxsH0c2L6DCoW+pl7kLy5+uKDvMdfxe7Xr8I26laZseeLhbTUwqIldDBaiIVIBEyr+MMyc4uHEBbr99Q/30GNwNm/O9BCrzW8VueDa7haad+lHB28vEpCJSWCpARaQCJOJastOTObD5S3J3f0W91Gh8yHS+l+zwZbdfJxyNbiK8y0ACKwaYmFRELkcFqIhUgERcly37PId/+pr02KXUTlpPRdKc751zeLLTuw2Z9fpTv8vthAYHm5hURP5KBaiIVIBEBMBhyyFux3ec2baY6xLWUM1+yvlejsPKrx7NSanZh5qd76BOWF1dUSZiMhWgIlIBEpF8HA4S9v1Awg9fUPnYKmrkxjnfsjsMdlsbkHhdb4La307j8Ja6okzEBCpARaQCJCJ/50zcbo5uicL30LfUzd6b570DRk2OVumGNaQZfjWaEFqnKdUCK2oPkUgxUwEqIhUgEbkSGUlxHNq4APf9y6mbEZvnijK4sIfoBFVI8KhFul8YjsoN8AltTLWwZlSvXgN3N11yL3ItqAAVkQqQiFytrLOnObR5EdkHN1Ah7RDVsn7Hn/QCx6c4KnDcWp3kCmHkVKqHR1AjKtVqSvU6jfD38S7B5CJlnwpQEakAicg143CQlZZI4qFfSI3bRW7iPjxSDhJ4/gjVbIl5bsb4Z9kOK8eMEE551SIzoC5G1Yb4VQ8npG4zgqpU0eE0kUtQASoiFSARKQmO7HMkxe3h9OGdnI/fg/XMAfwzDhOccxQvsgtcLsERSIJHDc761sEeWA/vkMZUCWtG9Zp1dQdrcWkqQEWkAiQiprLbOXvqCImHdnL22C4cp37DJ+0QVbN+J/BPT7r/q3SHF8es1Un2rk12pbq4BTWiYo0mVK/bhAA/35LLL2ISFaAiUgESkdIq++wZTh7eScrRXeQk7MUj+QCVzh8hKDceN8N+yWVyHRaOG0Gc8qzJOf+6GFUa4Fs9nKC6zQiuFqJL9qXcUAEqIhUgESlrHLlZnD66j6TDOzkXvxdL0m/4pR8mOCeOCpwvcLnTDn9OuNckzTcMW2A9vIIbU6V2U0JrN8DLw70Et0Ck6FSAikgFSETKDYeDjNPHSDj0C2eP7caW+Bs+qQepnPk71RxJBS6W6XDnqPU6UrxqkO1ZGbtXRfCuhKVCIG4VKuPpXwWfgCpUCKiKf6Uq+Pp468RsMZ0KUBGpAImIK8g5l8rJw7tIjttFVsJePJL3UzHjCMG243iQe0XrSnd4k2r4kWHx47ybP9nu/uR4VMTuVQm8K2L4VMbDNxBPvyp4B1ShQsWq+AdWpYK3ipNcOypARaQCJCKuzGHL4czxAyQe3sn5hP3YzyVjZCZjzUzGPTsVr9xUvG1n8bWfxZ+MIn1WusOLs4YvGRY/zrkFkOUeQK5HAHbPiuBTCcOnMu6+gXj5V8HLrzIVKlUloFI1fHx8VJwknyv5/nYroUwFmjFjBv/617+Ij4+nSZMmTJs2ja5duxY4fv369UyYMIFdu3YRGhrKk08+yejRo/OMWbRoEc899xwHDx6kbt26vPbaa9x6663FvSkiIuWCYXWncs3GVK7Z+O8H23LJTD9DWnIiGSlJZKYlkX32NLnpp3GcOwPnk7FmpeKenYJnbhoVbGlUsJ/Fz5GBxXDga2TiSybYkyCbC1MhOlWGw5Ozf9rjlOnmT65nRWyeFTF8ArH4VHIeqvMOqIJPQGU8vSrg4emFh5cPHu7uKlAuztQCFBUVxfjx45kxYwadO3fmo48+ol+/fuzevZuaNWvmG3/48GH69+/PAw88wLx589i8eTP//Oc/qVq1KoMGDQIgOjqaIUOG8Morr3DrrbeyePFiBg8ezKZNm2jfvn1Jb6KISPlmdcMroBpeAdWuaDGHLZfz6SmcTUkkI/kU59NOkXP2DDnpp7GfT8Y4//97nDxz0/CxpeFrP4ufIx2r4aCCkUUFsvIWp3OF//xch4Us3Mkx3MnGgxzDnVzcybF4YDPcyTU8sFkuTHaLBzarJw6LBw6rBw43TxxWT3DzBKsnhrsnhpsnFjcvDHcvrO6eWDy8sLp7YfXwxs3DCzcPT9w8vHH39MLd0wd3T288vbzx9PDEsFiu6Gcn14aph8Dat29Pq1atmDlzpnNe48aNGThwIFOmTMk3fuLEiSxbtow9e/Y4540ePZodO3YQHR0NwJAhQ0hLS2PFihXOMX379qVSpUrMnz+/ULl0CExEpHRy2G2cP5vM2eRTZKScIjMtiaz009jST2PLOIORmYI1K+XCHqecvMWpoNsEmC3L4f6nMnahfOUY7tgMD3It7s4iZrN4Yrd44DAsOAwrGBb44+8OiwWDi3+3YhgWHIYFDCtY/vjTsILF+OPPi2OsGBYrhuVPfzcsf7x/YT6W/x+D4YZhtWKxGBiGG1isWCwWDIsbhsWCxWIFqxXLH8s4/7RaMSxuWCwGFqsbhsUNDy9vqgTn39lRFGXiEFh2djYxMTE89dRTeeZHRkayZcuWSy4THR1NZGRknnl9+vRh9uzZ5OTk4O7uTnR0NI8++mi+MdOmTSswS1ZWFllZWc7XaWlpV7g1IiJSEgyLFZ+AC1egQSEO0f2JPTeH7Kxz5GRnkn3+PDk5meRkniM3J5PcrExs2ZnkZmdizzmPLScLe04WjpxM7LkX/sR24U/Dlg22bCy2C3+32LKw2LOx2HOw2rOw2nNws2fh5sjB3ZF94U9y8CAHD0cOHkbeE8w9jRw8yfn/GY4/JoC8z9UtV/a5NaLKsz+a9vmmFaCkpCRsNhtBQUF55gcFBZGQkHDJZRISEi45Pjc3l6SkJEJCQgocU9A6AaZMmcJLL710lVsiIiJlgcXNHS+3ALwqBEAl83I47DZysrPIyjxHTtZ5crIyL/yZfbGEnceWnYktJxNbTha27PM4cv+/jBl2Gw67DRw2cDjA+Xf7hT/tduffjT+NMRw2wI5hv/ieHQP7hfdwYFyc96f3Lry+8HeLwwY4sDhsf7znwIINi8OO8cd8Cxf/bsfChfVasOeZrH+Mz7V4mPdLoBScBP3Xk9AcDsdlT0y71Pi/zr/SdU6aNIkJEyY4X6elpVGjRo2/Dy8iInKFDIv1wonYXj5mRzFVE5M/37QCVKVKFaxWa749M4mJifn24FwUHBx8yfFubm5Urlz5smMKWieAp6cnnp6eV7MZIiIiUgaZduq5h4cHrVu3ZvXq1Xnmr169mk6dOl1ymY4dO+Ybv2rVKtq0aYO7u/tlxxS0ThEREXE9ph4CmzBhAsOHD6dNmzZ07NiRWbNmERcX57yvz6RJkzh+/DiffvopcOGKr+nTpzNhwgQeeOABoqOjmT17dp6ru8aNG0e3bt2YOnUqt9xyC0uXLmXNmjVs2rTJlG0UERGR0sfUAjRkyBBOnz7Nyy+/THx8PE2bNmX58uXUqlULgPj4eOLi4pzjw8LCWL58OY8++igffPABoaGhvPfee857AAF06tSJzz//nGeffZbnnnuOunXrEhUVpXsAiYiIiJMehXEJug+QiIhI2XMl39+6/aSIiIi4HBUgERERcTkqQCIiIuJyVIBERETE5agAiYiIiMtRARIRERGXowIkIiIiLkcFSERERFyOCpCIiIi4HFMfhVFaXbw5dlpamslJREREpLAufm8X5iEXKkCXcPbsWQBq1KhhchIRERG5UmfPniUgIOCyY/QssEuw2+2cOHECPz8/DMO4putOS0ujRo0aHD16VM8ZKwX0+yhd9PsoXfT7KH30O7k8h8PB2bNnCQ0NxWK5/Fk+2gN0CRaLherVqxfrZ/j7++sf3lJEv4/SRb+P0kW/j9JHv5OC/d2en4t0ErSIiIi4HBUgERERcTkqQCXM09OTF154AU9PT7OjCPp9lDb6fZQu+n2UPvqdXDs6CVpERERcjvYAiYiIiMtRARIRERGXowIkIiIiLkcFqATNmDGDsLAwvLy8aN26NRs3bjQ7ksuaMmUKbdu2xc/Pj2rVqjFw4ED27dtndizhwu/GMAzGjx9vdhSXdvz4ce6++24qV66Mj48PLVu2JCYmxuxYLik3N5dnn32WsLAwvL29qVOnDi+//DJ2u93saGWaClAJiYqKYvz48TzzzDNs376drl270q9fP+Li4syO5pLWr1/Pww8/zA8//MDq1avJzc0lMjKSjIwMs6O5tK1btzJr1iyaN29udhSXlpycTOfOnXF3d2fFihXs3r2bt956i4oVK5odzSVNnTqVDz/8kOnTp7Nnzx7eeOMN/vWvf/H++++bHa1M01VgJaR9+/a0atWKmTNnOuc1btyYgQMHMmXKFBOTCcCpU6eoVq0a69evp1u3bmbHcUnp6em0atWKGTNm8Oqrr9KyZUumTZtmdiyX9NRTT7F582btpS4lbrrpJoKCgpg9e7Zz3qBBg/Dx8eG///2vicnKNu0BKgHZ2dnExMQQGRmZZ35kZCRbtmwxKZX8WWpqKgCBgYEmJ3FdDz/8MDfeeCO9evUyO4rLW7ZsGW3atOGOO+6gWrVqRERE8O9//9vsWC6rS5curF27lt9++w2AHTt2sGnTJvr3729ysrJNzwIrAUlJSdhsNoKCgvLMDwoKIiEhwaRUcpHD4WDChAl06dKFpk2bmh3HJX3++ef8/PPPbN261ewoAhw6dIiZM2cyYcIEnn76aX766SfGjh2Lp6cnI0aMMDuey5k4cSKpqak0atQIq9WKzWbjtddeY+jQoWZHK9NUgErQX58s73A4rvnT5uXKjRkzhl9++YVNmzaZHcUlHT16lHHjxrFq1Sq8vLzMjiOA3W6nTZs2TJ48GYCIiAh27drFzJkzVYBMEBUVxbx58/jss89o0qQJsbGxjB8/ntDQUO655x6z45VZKkAloEqVKlit1nx7exITE/PtFZKS9cgjj7Bs2TI2bNhA9erVzY7jkmJiYkhMTKR169bOeTabjQ0bNjB9+nSysrKwWq0mJnQ9ISEhhIeH55nXuHFjFi1aZFIi1/bEE0/w1FNPceeddwLQrFkzfv/9d6ZMmaICVAQ6B6gEeHh40Lp1a1avXp1n/urVq+nUqZNJqVybw+FgzJgxfPnll3z33XeEhYWZHcll3XDDDezcuZPY2Fjn1KZNG4YNG0ZsbKzKjwk6d+6c77YQv/32G7Vq1TIpkWs7d+4cFkver2ur1arL4ItIe4BKyIQJExg+fDht2rShY8eOzJo1i7i4OEaPHm12NJf08MMP89lnn7F06VL8/Pyce+cCAgLw9vY2OZ1r8fPzy3fuVYUKFahcubLOyTLJo48+SqdOnZg8eTKDBw/mp59+YtasWcyaNcvsaC5pwIABvPbaa9SsWZMmTZqwfft23n77be677z6zo5Vpugy+BM2YMYM33niD+Ph4mjZtyjvvvKNLrk1S0LlXH3/8MSNHjizZMJJPjx49dBm8yb7++msmTZrE/v37CQsLY8KECTzwwANmx3JJZ8+e5bnnnmPx4sUkJiYSGhrK0KFDef755/Hw8DA7XpmlAiQiIiIuR+cAiYiIiMtRARIRERGXowIkIiIiLkcFSERERFyOCpCIiIi4HBUgERERcTkqQCIiIuJyVIBERETE5agAiUi5ZBgGS5YsKdI6evTowfjx452va9eurbtTi5QTKkAiUiYlJibyj3/8g5o1a+Lp6UlwcDB9+vQhOjra7GgiUgboYagiUiYNGjSInJwcPvnkE+rUqcPJkydZu3YtZ86cMTuaiJQB2gMkImVOSkoKmzZtYurUqfTs2ZNatWrRrl07Jk2axI033ugcl5SUxK233oqPjw/169dn2bJledaze/du+vfvj6+vL0FBQQwfPpykpKSS3hwRMYEKkIiUOb6+vvj6+rJkyRKysrIKHPfSSy8xePBgfvnlF/r378+wYcOce4ji4+Pp3r07LVu2ZNu2bXz77becPHmSwYMHl9RmiIiJVIBEpMxxc3Nj7ty5fPLJJ1SsWJHOnTvz9NNP88svv+QZN3LkSIYOHUq9evWYPHkyGRkZ/PTTTwDMnDmTVq1aMXnyZBo1akRERARz5szh+++/57fffjNjs0SkBKkAiUiZNGjQIE6cOMGyZcvo06cP69ato1WrVsydO9c5pnnz5s6/V6hQAT8/PxITEwGIiYnh+++/d+5N8vX1pVGjRgAcPHiwRLdFREqeToIWkTLLy8uL3r1707t3b55//nnuv/9+XnjhBUaOHAmAu7t7nvGGYWC32wGw2+0MGDCAqVOn5ltvSEhIsWcXEXOpAIlIuREeHl7oe/+0atWKRYsWUbt2bdzc9J9CEVejQ2AiUuacPn2a66+/nnnz5vHLL79w+PBhFi5cyBtvvMEtt9xSqHU8/PDDnDlzhqFDh/LTTz9x6NAhVq1axX333YfNZivmLRARs+l/e0SkzPH19aV9+/a88847HDx4kJycHGrUqMEDDzzA008/Xah1hIaGsnnzZiZOnEifPn3IysqiVq1a9O3bF4tF/28oUt4ZDofDYXYIERERkZKk/80RERERl6MCJCIiIi5HBUhERERcjgqQiIiIuBwVIBEREXE5KkAiIiLiclSARERExOWoAImIiIjLUQESERERl6MCJCIiIi5HBUhERERcjgqQiIiIuJz/A2dOIVoVrsEDAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1723,7 +1774,20 @@ } ], "source": [ - "chianti_collisional_rates[0].sort_index().plot(logy=True,label=\"Chianti\",legend=True, ylabel=\"Coeff\")" + "plt.plot(coll_matrix[1,0,:],label=\"Old TARDIS scheme\")\n", + "plt.plot(chianti_collisional_rates.loc[1,0,0,1],label=\"New TARDIS scheme\")\n", + "plt.xlabel(\"Shell\")\n", + "plt.ylabel(\"Coeff\")\n", + "plt.legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Chianti compared to CMFGEN, new method\n", + "\n", + "Differences seem likely to be related to splitting of levels in Chianti compared to CMFGEN. Need to get more detailed CMFGEN data to do a direct comparison." ] }, { @@ -1732,27 +1796,51 @@ "metadata": {}, "outputs": [], "source": [ - "chianti_collisional_rates_full = chianti_collisional_rates.reindex(cmfgen_collisional_rates.index)" + "cmfgen_levels_h = cmfgen_atom_data.levels.loc[1, 0, :]\n", + "chianti_levels_h = chianti_atom_data.levels.loc[1, 0, :]" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_2973239/2570574510.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " chianti_levels_h[\"energy\"] = chianti_levels_h[\"energy\"].round(14)\n" + ] + } + ], + "source": [ + "chianti_levels_h[\"energy\"] = chianti_levels_h[\"energy\"].round(14)\n", + "grouped_chianti = chianti_levels_h.groupby(\"energy\")['g'].sum().reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 38, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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oed46KGHcNttt2HJkiWWv+lnP/sZjjzySN/HX3nllbj88sut6yMjI+IkKd1iKDm1QLpF+KHd3d1YtWoVvv/97+PSSy/1KDxDQ0MOH5IoHnzwQZx55pn46Ec/CgAol8t45ZVXcPjhh0s9TzqdRqlUin4ggRCBOzcY38ebHngNV66W2w83D9gKkqwawRurYw0+VewHxEPXdamTj/LgUyUVJz7BMdZTISneVFM2lYwVL9+NWrEPEvde5Qpq5EzeaB3fpM22tZYVbECDEiQG95db5gv/9re/XUqdyGazyGblhyQCMDxAgmmuWuOGG27ASSedhOOPPx5XX301lixZgmKxiLVr1+LGG28UUpfcOPjgg/GrX/0K69atw7Rp03Dttddi586d0gRpwYIFuPfee/G2t70N2WwW06ZNk94WAoFHIsav0wlusryqp0QWKukat/JRKutS/g6VEz2g2FG6gkZpdRVHh4x9TC216Hy8rAeJX2+yIPfjsqio3qsonFNFY1ub0uJEdF+gIVNsPT09SCaTHrWov7/foyoR5LBw4UI88cQTWLFiBT7/+c9j8eLFOO2003DvvffixhtvjPWc//RP/4RjjjkGq1atwvLlyzF79mycddZZ0s/z7//+71i7di36+vpw9NFHx9oWAoFHMgZBcs71UmmeJw+VcnV3WwBZFUeZpCj0E3KnuWRRSbOyvMG8Muk9IIYKxK09JUmQ3CRY9l2fKsTf11lsrQlSQypImUwGy5Ytw9q1a3H22Wdbt69duxZnnnlmDbds/8CcOXNw/fXX4/rrr/e93y8Hz48VWb58ueMx3d3doaNJAKN3khvumDVr1mDNmjWO27761a86+iURCDJIxPiJWClfh6ynwx0vT3C8qaJmiJ+AKjkPraaVZJLql2q5O0+KckU5kuL+zGRVIJ7M8cqnCGS31Q1ZQuYX25SurYZTtwRpbGwMGzfafUY2bdqEDRs2oLu7G/PmzcPll1+O8847D8ceeyxOPPFE3HTTTdiyZQs+9alP1XCrCQRCIyGOglRUUDP42DiNHvm0hzTJKKud6FUUpFJZd/hQql1JptSsUTHNxX9m0gTHtbYsyXGn2GRsKFMutUqWz09xBEs6tlAfKba6JUiPP/44VqxYYV1nBunzzz8fN998M84991wMDg7i6quvxo4dO7B48WLcddddmD9/fq02mUAgNBgS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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjkAAAHACAYAAABAnnkhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABDs0lEQVR4nO3deXRU9d3H8c9NMjPZE8KSRQKGXVkEQSoIblQQFLdaqUUFt0pFeRS1FvUpQmuxVi21rq2C+mjVo6DVallEFisuoKGisiqLhURIIJmsk8zMff6YZCAkgSTMzJ3MvF/n3JO59/7une8M9zCf87vLzzBN0xQAAECEibG6AAAAgGAg5AAAgIhEyAEAABGJkAMAACISIQcAAEQkQg4AAIhIhBwAABCRCDkAACAiEXIAAEBEIuQAAICIFNUhZ82aNZo4caJycnJkGIbeeusty99v8eLFGjdunDp16iTDMLRhw4ag1gQAQKSK6pBTUVGhU045RY8//njYvF9FRYXOOOMMPfjggyGpCQCASBVndQFWGj9+vMaPH9/s+pqaGt133316+eWXVVJSogEDBugPf/iDzj777KC8nyRdffXVkqSdO3e26T0AAIBPVIecY7n22mu1c+dOvfrqq8rJydGbb76p888/Xxs3blTv3r2tLg8AABxFVJ+uOppvv/1Wr7zyil5//XWNHj1aPXv21J133qlRo0Zp4cKFVpcHAACOgZDTjC+++EKmaapPnz5KTk72T6tXr9a3334ryXdKyTCMo0633HKLxZ8EAIDoxOmqZni9XsXGxurzzz9XbGxsg3XJycmSpBNOOEGbNm066n46dOgQtBoBAEDzCDnNGDJkiDwej/bt26fRo0c32cZms6lfv34hrgwAALREVIec8vJybd++3T+/Y8cObdiwQRkZGerTp48mT56sa665Ro888oiGDBmioqIiffDBBxo4cKAmTJgQ0Pfr1q2bJOnAgQPavXu39u7dK0nasmWLJCkrK0tZWVnH83EBAIgqhmmaptVFWGXVqlU655xzGi2fMmWKnn/+edXW1up3v/udXnzxRe3Zs0cdO3bUiBEjNGfOHA0cODDg7ydJzz//vK699tpGbWbPnq3777+/1e8JAEC0iuqQAwAAIhd3VwEAgIhEyAEAABEp6i489nq92rt3r1JSUmQYhtXlAACAFjBNU2VlZcrJyVFM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EXIAAAiKNoWcioqKQNcRdbxVJZKkWluKtYUAABCh2hRyMjMzdd111+nf//53oOuJGvUhx21ncE4AAIKhTSHnlVdeUWlpqcaMGaM+ffrowQcf1N69ewNdW0Tb6eirhe5x2tthuNWlAAAQkdoUciZOnKhFixZp7969+uUvf6lXXnlF3bt314UXXqjFixfL7XYHus6Is8E+THPcU/TfE8ZbXQoAABHpuC487tixo26//Xb95z//0aOPPqr3339fl19+uXJycvSb3/xGlZWVgaoz4jjrh3RIsFlcCQAAkem4nnhcWFioF198UQsXLtTu3bt1+eWX6/rrr9fevXv14IMP6pNPPtGyZcsCVWtEsZXvVWc5lWa3uhIAACJTm0LO4sWLtXDhQi1dulQnn3yypk+frquuukrp6en+NoMHD9aQIUMCVWfEubVojh6L36YNJc9IOtHqcgAAiDhtCjnXXnutfvazn+mjjz7Saaed1mSbHj166N577z2u4iJZgqdckuRIzrC4EgAAIlObQk5BQYESExOP2iYhIUGzZ89uU1HRIMn0PWsoPqWDxZUAABCZ2hRy3G63nE5no+WGYcjhcMhu50KTozG9Xl/IMaTEVHpyAAAIhjaFnPT0dBmG0ez6rl27aurUqZo9e7ZiGGG7keqqCiUYHklSclpHi6sBACAytSnkPP/887r33ns1depUDR8+XKZpat26dXrhhRd03333af/+/Xr44YflcDh0zz33BLrmdq+8tFgJktxmjBKTeOIxAADB0KaQ88ILL+iRRx7RFVdc4V920UUXaeDAgXrmmWe0YsUKdevWTQ888AAhpwkVzgPqLKncSFQ6PV0AAARFm35hP/744yZvDx8yZIg+/vhjSdKoUaO0e/fu46suQjk9di10j9PSuHOtLgUAgIjVppDTtWtXPffcc42WP/fcc8rNzZUkFRcXq0MH7hxqSnFcF81xT9H/pf3C6lIAAIhYbTpd9fDDD+unP/2p/vWvf+m0006TYRhat26dNm/erDfeeEOStG7dOk2aNCmgxUYKZ5VvSIcUB0M6AAAQLG0KORdddJG2bt2qp59+Wlu2bJFpmho/frzeeustnXjiiZKkX/7yl4GsM6JUlR1QZ5UoI56eLgAAgqXVIae2tlZjx47VM888o3nz5gWjpojX/btXtC7+CX12YIKkkVaXAwBARGr1NTk2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ZBhGo2nz5s0hrLjlyksP+F8npXawsBIAAKKPpSHntdde02233aZ7771X+fn5Gj16tMaPH6/du3cfdbstW7aooKDAP/Xu3TtEFbdORWmx768Zrzib3eJqAACILpaGnEcffVTXX3+9brjhBp100kmaP3++cnNz9dRTTx11uy5duigrK8s/xcbGhqji1qkq8/XklBtJFlcCAED0sSzk1NTU6PPPP9fYsWMbLB87dqzWrl171G2HDBmi7OxsjRkzRitXrgxmmceluuygJKkyhhHIAQAINcvurioqKpLH41FmZmaD5ZmZmSosLGxym+zsbP31r3/V0KFD5XK59H//938aM2aMVq1apTPPPLPJbVwul1wul3/e6XQG7kMcQ7knTp95+6oyvqvyQvauAABACoNbyA3DaDBvmmajZfX69u2rvn37+udHjBih77//Xg8//HCzIWfevHmaM2dO4Apuhd3JA3V3zWyd26OLzrakAgAAopdlp6s6deqk2NjYRr02+/bta9S7czSnn366tm3b1uz6WbNmqbS01D99//33ba65tZxVPO0YAACrWBZy7Ha7hg4dquXLlzdYvnz5co0cObLF+8nPz1d2dnaz6x0Oh1JTUxtMoeKsrhu3KoFxqwAACDVLuxhmzpypq6++WsOGDdOIESP017/+Vbt379a0adMk+Xph9uzZoxdffFGSNH/+fJ144onq37+/ampq9NJLL2nRokVatGiRlR+jWadv/5OucvxLXx+8VtIAq8sBACCqWBpyJk2apOLiYs2dO1cFBQUaMGCA3nvvPXXv3l2SVFBQ0OCZOTU1Nbrzzju1Z88eJSQkqH///nr33Xc1YcIEqz7CUTmqi5RplGhHnGl1KQAARB3DNM2o+gV2Op1KS0tTaWlp0E9dbXjofA2u/FifDZit4ZfPDOp7AQAQydry+235sA6RzF5bJkmKTWRIBwAAQo2QE0QJnnJJkj053dpCAACIQoScIErw+kKOI5kRyAEACDVCThAlmRWSpPgUTlcBABBqPKUuSDwerzaZ3ZRmVqhTWierywEAIOoQcoKk3OXRFTWzJUlbMlr+BGcAABAYnK4KkvqnHcfbYuSIi7W4GgAAog8hJ0hKq3whJyWeIR0AALACp6uCZddafeq4WTu8vST92OpqAACIOoScIKktL1amUaISo9zqUgAAiEqcrgqS2oqDkiRXXIrFlQAAEJ0IOUHirSqRJNXaCDkAAFiBkBMkZrVTkuS2B3cQUAAA0DRCTpAY1aWSJC8hBwAASxBygiS2xteTo4Q0awsBACBKEXKCZL/StcXbVZ7kHKtLAQAgKhFyguTFxCkaV/OQintcbHUpAABEJUJOkJRVuyVJqQk88RgAACsQcoKkfuyqVIZ1AADAEjzxOEgWVs6Q1+6VvfYNSR2sLgcAgKhDyAkC0+tVnvlfxcaYKkpMsrocAACiEqergqCivFSxhilJSkrraHE1AABEJ0JOEJSXFkuSasw4xSckWlwNAADRiZATBFVOX8gpNxJlxPAVAwBgBX6Bg6CqzDcCeYWRbHElAABEL0JOENSUl0iSqmIJOQAAWIWQEwQVHmmzN1f7bSdYXQoAAFGLW8iDYHvK6Zpc8wdN6JulM6wuBgCAKEVPThA4q3jaMQAAViPkBIF/SAfGrQIAwDKEnCAYteMxLbPfpdNK/mV1KQAARC1CThCkVO9Rn5g9So1xWV0KAABRi5ATBLbaMklSbGK6tYUAABDFCDlB4PBUSJLikhh9HAAAq3ALeRAkeMolSfakdGsLAQBIkjwej2pra60uA8dgt9sVE8DhkAg5QZBk+kJOQgo9OQBgJdM0VVhYqJKSEqtLQQvExMQoLy9Pdrs9IPsj5ASY6fUq2ayQDCkhtaPV5QBAVKsPOF26dFFiYqIMw7C6JDTD6/Vq7969KigoULdu3QLyb0XICbDq6mrtNrOVqkqlpBFyAMAqHo/HH3A6duT/4/agc+fO2rt3r9xut2y243/WHCEnwJzuGI2reUgxhvRtSrrV5QBA1Kq/BicxMdHiStBS9aepPB5PQEIOd1cFWFnd045T4m10iwJAGOD/4vYj0P9WhJwAK61yS5JSE+gkAwDASoScAIvZ9W8tt9+l37ifsLoUAEA7VlhYqFtvvVU9evSQw+FQbm6uJk6cqBUrVkiSTjzxRBmGoVdffbXRtv3795dhGHr++ef9y+rbHz517dq1wXb5+fmaNGmSsrOz5XA41L17d1144YV65513ZJqmJGnnzp2N9lM/ffLJJ5Kk559/XoZh6Pzzz2+w/5KSEhmGoVWrVgXwm2oeISfAPM5C9Y7Zoxztt7oUAEA7tXPnTg0dOlQffPCBHnroIW3cuFFLlizROeeco+nTp/vb5ebmauHChQ22/eSTT1RYWKikpKRG+507d64KCgr8U35+vn/dP/7xD51++ukqLy/XCy+8oG+++Uavv/66LrnkEt13330qLS1tsK/333+/wb4KCgo0dOhQ//q4uDitWLFCK1euDNTX0mqcUwkwd2WJJMkVl2JtIQCAduvmm2+WYRj67LPPGoSV/v3767rrrvPPT548WX/605/0/fffKzc3V5K0YMECTZ48WS+++GKj/aakpCgrK6vR8oqKCl1//fW64IILtHjxYv/ynj17avjw4brhhhv8PTn1Onbs2OS+6iUlJemKK67Qr3/9a3366act//ABRE9OgJlVJZIkj52QAwDhxDRNVda4LZmODAhHc+DAAS1ZskTTp09vsjcmPT3d/zozM1Pjxo3TCy+8IEmqrKzUa6+91iAItcSyZctUXFysX/3qV822actFwffff782btyoN954o9XbBgI9OYFW7ZQkeeypFhcCADhcVa1HJ/9mqSXv/c3ccUq0t+wnd/v27TJNU/369WtR++uuu0533HGH7r33Xr3xxhvq2bOnBg8e3GTbu+++W/fdd59//ve//71mzJihrVu3SpL69u3rX7du3Tqdc845/vlXX31VF154oX9+5MiRjYZgKC0tVWxsrH8+JydH//M//6N7771Xl1xySYs+TyARcgIspsZ3ztKMT7O4EgBAe1Tf69PSnpMLLrhAN910k9asWaMFCxYctRfnrrvu0tSpU/3znTp1arbtoEGDtGHDBklS79695Xa7G6x/7bXXdNJJJzVYdnjAqXf33XfrmWee0YIFC3TFFVe04BMFDiEnwOJqfD05BiEHAMJKgi1W38wdZ9l7t1Tv3r1lGIY2bdrUot6PuLg4XX311Zo9e7Y+/fRTvfnmm8227dSpk3r16tXke0rSli1bdPrpp0uSHA5Hk23r5ebmHnV9vfT0dM2aNUtz5sxp0BMUClyTE2BOM1EFZoaU1Hw6BgCEnmEYSrTHWTK15nqWjIwMjRs3Tk888YQqKioarW9qsNHrrrtOq1ev1sUXX6wOHVo/OPTYsWOVkZGhP/zhD63etiVuvfVWxcTE6M9//nNQ9t8cenIC7LHE6covmqxneg09dmMAAJrw5JNPauTIkRo+fLjmzp2rQYMGye12a/ny5Xrqqae0adOmBu1POukkFRUVtXkIi+TkZD377LOaNGmSLrjgAs2YMUO9e/dWeXm5lixZIqnxqaji4mIVFhY2WJaenq74+PhG+4+Pj9ecOXMa3P4eCvTkBJizyjesQ2r88Y+5AQCITnl5efriiy90zjnn6I477tCAAQN03nnnacWKFXrqqaea3KZjx45KSEho83teeumlWrt2rRITE3XNNdeob9++Ovfcc/XBBx80uuhYkn784x8rOzu7wfTWW281u/8pU6aoR48eba6vLQyzNfe1RQCn06m0tDSVlpYqNTXwd0Cd9sD72l/m0rszRql/DtflAIBVqqurtWPHDuXl5TXZu4Dwc7R/s7b8fnO6KsAW1typartN6d43JBFyAACwCiEngFzVlRpg7JAMqTSx8QOcAABA6HBNTgCVlx7wv05OTbeuEAAAQMgJpEpnsSSpzExQbBydZAAAWImQE0BVZQclSRUGp6oAALAaISeAXOW+01WVMckWVwIAAAg5AVRT7hu3qjqWkAMAgNUIOQFUVetWgZmhCntHq0sBACDqcXVsAH2dfq6ucuXospNP0GlWFwMAQJSjJyeAnNW+IR1S4smOAIDgMgzjqMMorFq1SoZhNDmgZ6Ddf//9Gjx4cNDfp7UIOQFUVu2WJKUmMG4VAOD4FBYW6tZbb1WPHj3kcDiUm5uriRMnasWKFS3afuTIkSooKFBaWmCfvt9UuLrzzjtbXFco0eUQQGfuelwX2T/XQecvJPW1uhwAQDu1c+dOnXHGGUpPT9dDDz2kQYMGqba2VkuXLtX06dO1efPmY+7DbrcrKysrBNX6RjFPTg6/m27oyQmgzlXfaVjMVqUZFVaXAgBox26++WYZhqHPPvtMl19+ufr06aP+/ftr5syZ+uSTT/ztioqKdOmllyoxMVG9e/fW22+/7V935Omq4uJiXXnlleratasSExM1cOBAvfLKKw3e9+yzz9aMGTP0q1/9ShkZGcrKytL999/vX3/iiSdK8o1YbhiGf57TVVHA7i6XJMUlpVtbCACgeTUVzU+11a1oW9Wytq104MABLVmyRNOnT1dSUuOHy6anp/tfz5kzR1dccYW+/PJLTZgwQZMnT9aBAwcabSP5RvgeOnSo/vnPf+qrr77SL37xC1199dX69NNPG7R74YUXlJSUpE8//VQPPfSQ5s6dq+XLl0uS1q1bJ0lauHChCgoK/PPhyvLTVU8++aT++Mc/qqCgQP3799f8+fM1evToZtuvXr1aM2fO1Ndff62cnBz96le/0rRp00JYcfPiPb6QY0vqYHElAIBm/T6n+XW9x0qTXz80/8deUm1l0227j5KufffQ/PyBUmVx43b3l7aqvO3bt8s0TfXr1++YbadOnaorr7xSkvT73/9ef/nLX/TZZ5/p/PPPb9T2hBNO0J133umfv/XWW7VkyRK9/vrr+tGPfuRfPmjQIM2ePVuS1Lt3bz3++ONasWKFzjvvPHXu3FmSL2iF6lTY8bC0J+e1117TbbfdpnvvvVf5+fkaPXq0xo8fr927dzfZfseOHZowYYJGjx6t/Px83XPPPZoxY4YWLVoU4sqbluj1hZz4lAyLKwEAtFemaUryXeB7LIMGDfK/TkpKUkpKivbt29dkW4/HowceeECDBg1Sx44dlZycrGXLljX6zT18n5KUnZ3d7D7DnaU9OY8++qiuv/563XDDDZKk+fPna+nSpXrqqac0b968Ru2ffvppdevWTfPnz5cknXTSSVq/fr0efvhh/eQnPwll6U1KNiskQ0pIpicHAMLWPXubX2fENpy/a/tR2h7RT3DbxrbXdJjevXvLMAxt2rRJl1xyyVHb2mwN7+Y1DENer7fJto888oj+9Kc/af78+Ro4cKCSkpJ02223qaamps37DHeW9eTU1NTo888/19ixYxssHzt2rNauXdvkNh9//HGj9uPGjdP69etVW1sbtFpbwl1boyTDdy43KY0nHgNA2LInNT/Z4lvRNqFlbVspIyND48aN0xNPPKGKisbX9LT1uTcffvihLr74Yl111VU65ZRT1KNHD23btq3V+7HZbPJ4PG2qIdQsCzlFRUXyeDzKzMxssDwzM1OFhYVNblNYWNhke7fbraKioia3cblccjqdDaZgKCtzqtDsoArToeQ0TlcBANruySeflMfj0fDhw7Vo0SJt27ZNmzZt0mOPPaYRI0a0aZ+9evXS8uXLtXbtWm3atEk33XRTs7+3R3PiiSdqxYoVKiws1MGDB9tUS6hYfnfVkeccTdM86nnIpto3tbzevHnzlJaW5p9yc3OPs+KmVcYk6TzjGZ1mviib3RGU9wAARIe8vDx98cUXOuecc3THHXdowIABOu+887RixQo99dRTbdrn//7v/+rUU0/VuHHjdPbZZysrK+uYp8Oa8sgjj2j58uXKzc3VkCFD2lRLqBhmfUoIsZqaGiUmJur111/XpZde6l/+P//zP9qwYYNWr17daJszzzxTQ4YM0Z///Gf/sjfffFNXXHGFKisrG51HlHw9OS6Xyz/vdDqVm5ur0tJSpaamBvhTSV6vqZiYY18sBgAIrurqau3YsUN5eXmKj48/9gaw3NH+zZxOp9LS0lr1+21ZT47dbtfQoUP9997XW758uUaOHNnkNiNGjGjUftmyZRo2bFiTAUeSHA6HUlNTG0zBRMABACA8WHq6aubMmXr22We1YMECbdq0Sbfffrt2797tf+7NrFmzdM011/jbT5s2Tbt27dLMmTO1adMmLViwQM8991yD+/4BAAAki28hnzRpkoqLizV37lwVFBRowIABeu+999S9e3dJUkFBQYP79/Py8vTee+/p9ttv1xNPPKGcnBw99thjYXH7OAAACC+WXZNjlbac0wMAtD9ck9P+RMw1OQAAAMFEyAEARLQoO2HRrgX634qQAwCISPV33VZWNjPAJsJO/RATsbGxx2jZMpaPQg4AQDDExsYqPT3dP7hkYmJiiwa9hDW8Xq/279+vxMRExcUFJp4QcgAAESsrK0uS2u0o2tEmJiZG3bp1C1gYJeQAACKWYRjKzs5Wly5dLB/IGcdmt9sVExO4K2kIOQCAiBcbGxuw6zzQfnDhMQAAiEiEHAAAEJEIOQAAICJF3TU59Q8acjqdFlcCAABaqv53uzUPDIy6kFNWViZJys3NtbgSAADQWmVlZUpLS2tR26gboNPr9Wrv3r1KSUkJ+EOhnE6ncnNz9f333zP4ZyvwvbUe31nb8L21Dd9b2/C9td7RvjPTNFVWVqacnJwW32YedT05MTEx6tq1a1DfIzU1lQO6DfjeWo/vrG343tqG761t+N5ar7nvrKU9OPW48BgAAEQkQg4AAIhIhJwAcjgcmj17thwOh9WltCt8b63Hd9Y2fG9tw/fWNnxvrRfo7yzqLjwGAADRgZ4cAAAQkQg5AAAgIhFyAABARCLkBMiTTz6pvLw8xcfHa+jQofrwww+tLims3X///TIMo8GUlZVldVlhZ82aNZo4caJycnJkGIbeeuutButN09T999+vnJwcJSQk6Oyzz9bXX39tTbFh5Fjf29SpUxsdf6effro1xYaJefPm6bTTTlNKSoq6dOmiSy65RFu2bGnQhuOtsZZ8bxxvjT311FMaNGiQ/3k4I0aM0L/+9S//+kAda4ScAHjttdd022236d5771V+fr5Gjx6t8ePHa/fu3VaXFtb69++vgoIC/7Rx40arSwo7FRUVOuWUU/T44483uf6hhx7So48+qscff1zr1q1TVlaWzjvvPP/wJdHqWN+bJJ1//vkNjr/33nsvhBWGn9WrV2v69On65JNPtHz5crndbo0dO1YVFRX+NhxvjbXke5M43o7UtWtXPfjgg1q/fr3Wr1+vc889VxdffLE/yATsWDNx3IYPH25OmzatwbJ+/fqZv/71ry2qKPzNnj3bPOWUU6wuo12RZL755pv+ea/Xa2ZlZZkPPvigf1l1dbWZlpZmPv300xZUGJ6O/N5M0zSnTJliXnzxxZbU017s27fPlGSuXr3aNE2Ot5Y68nszTY63lurQoYP57LPPBvRYoyfnONXU1Ojzzz/X2LFjGywfO3as1q5da1FV7cO2bduUk5OjvLw8/exnP9N3331ndUntyo4dO1RYWNjg2HM4HDrrrLM49lpg1apV6tKli/r06aMbb7xR+/bts7qksFJaWipJysjIkMTx1lJHfm/1ON6a5/F49Oqrr6qiokIjRowI6LFGyDlORUVF8ng8yszMbLA8MzNThYWFFlUV/n70ox/pxRdf1NKlS/W3v/1NhYWFGjlypIqLi60urd2oP7449lpv/Pjxevnll/XBBx/okUce0bp163TuuefK5XJZXVpYME1TM2fO1KhRozRgwABJHG8t0dT3JnG8NWfjxo1KTk6Ww+HQtGnT9Oabb+rkk08O6LEWdQN0BsuRI5qbphnwUc4jyfjx4/2vBw4cqBEjRqhnz5564YUXNHPmTAsra3849lpv0qRJ/tcDBgzQsGHD1L17d7377ru67LLLLKwsPNxyyy368ssv9e9//7vROo635jX3vXG8Na1v377asGGDSkpKtGjRIk2ZMkWrV6/2rw/EsUZPznHq1KmTYmNjG6XLffv2NUqhaF5SUpIGDhyobdu2WV1Ku1F/NxrH3vHLzs5W9+7dOf4k3XrrrXr77be1cuVKde3a1b+c4+3omvvemsLx5mO329WrVy8NGzZM8+bN0ymnnKI///nPAT3WCDnHyW63a+jQoVq+fHmD5cuXL9fIkSMtqqr9cblc2rRpk7Kzs60upd3Iy8tTVlZWg2OvpqZGq1ev5thrpeLiYn3//fdRffyZpqlbbrlFixcv1gcffKC8vLwG6znemnas760pHG9NM01TLpcrsMdagC6KjmqvvvqqabPZzOeee8785ptvzNtuu81MSkoyd+7caXVpYeuOO+4wV61aZX733XfmJ598Yl544YVmSkoK39kRysrKzPz8fDM/P9+UZD766KNmfn6+uWvXLtM0TfPBBx8009LSzMWLF5sbN240r7zySjM7O9t0Op0WV26to31vZWVl5h133GGuXbvW3LFjh7ly5UpzxIgR5gknnBDV39svf/lLMy0tzVy1apVZUFDgnyorK/1tON4aO9b3xvHWtFmzZplr1qwxd+zYYX755ZfmPffcY8bExJjLli0zTTNwxxohJ0CeeOIJs3v37qbdbjdPPfXUBrcPorFJkyaZ2dnZps1mM3NycszLLrvM/Prrr60uK+ysXLnSlNRomjJlimmavtt6Z8+ebWZlZZkOh8M888wzzY0bN1pbdBg42vdWWVlpjh071uzcubNps9nMbt26mVOmTDF3795tddmWaur7kmQuXLjQ34bjrbFjfW8cb0277rrr/L+ZnTt3NseMGeMPOKYZuGONUcgBAEBE4pocAAAQkQg5AAAgIhFyAABARCLkAACAiETIAQAAEYmQAwAAIhIhBwAARCRCDgAAiEiEHACoYxiG3nrrLavLABAghBwAYWPq1Km65JJLrC4DQIQg5AAAgIhEyAHQLnzzzTeaMGGCkpOTlZmZqauvvlpFRUWSpGeeeUYnnHCCvF5vg20uuugiTZkyxT//zjvvaOjQoYqPj1ePHj00Z84cud3ukH4OAKFDyAEQ9goKCnTWWWdp8ODBWr9+vZYsWaIffvhBV1xxhSTppz/9qYqKirRy5Ur/NgcPHtTSpUs1efJkSdLSpUt11VVXacaMGfrmm2/0zDPP6Pnnn9cDDzxgyWcCEHyEHABh76mnntKpp56q3//+9+rXr5+GDBmiBQsWaOXKldq6dasyMjJ0/vnn6+9//7t/m9dff10ZGRkaM2aMJOmBBx7Qr3/9a02ZMkU9evTQeeedp9/+9rd65plnrPpYAIKMkAMg7H3++edauXKlkpOT/VO/fv0kSd9++60kafLkyVq0aJFcLpck6eWXX9bPfvYzxcbG+vcxd+7cBvu48cYbVVBQoMrKSms+GICgirO6AAA4Fq/Xq4kTJ+oPf/hDo3XZ2dmSpIkTJ8rr9erdd9/Vaaedpg8//FCPPvpog33MmTNHl112WaN9xMfHB694AJYh5AAIe6eeeqoWLVqkE088UXFxTf+3lZCQoMsuu0wvv/yytm/frj59+mjo0KEN9rFlyxb16tUrVGUDsBghB0BYKS0t1YYNGxosu+mmm/S3v/1NV155pe666y516tRJ27dv16uvvqq//e1v/lNSkydP1sSJE/X111/rqquuarCP3/zmN7rwwguVm5urn/70p4qJidGXX36pjRs36ne/+12oPh6AECLkAAgrq1at0pAhQxosmzJlij766CPdfffdGjdunFwul7p3767zzz9fMTGHLi0899xzlZGRoS1btujnP/95g32MGzdO//znPzV37lw99NBDstls6tevn2644YaQfC4AoWeYpmlaXQQAAECgcXcVAACISIQcAAAQkQg5AAAgIhFyAABARCLkAACAiETIAQAAEYmQAwAAIhIhBwAARCRCDgAAiEiEHAAAEJEIOQAAICIRcgAAQET6f9jJrBEJeu7UAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1762,71 +1850,100 @@ } ], "source": [ - "cmfgen_collisional_rates[0].sort_index().plot(logy=True,label=\"CMFGEN\",legend=True)\n", - "chianti_collisional_rates_full[0].sort_index().plot(logy=True,label=\"Chianti\",legend=True, ylabel=\"Coeff\")" + "cmfgen_levels_h.energy.plot(label=\"CMFGEN\", legend=True)\n", + "grouped_chianti.energy.plot(label=\"Chianti\", ls=\"--\", legend=True,xlabel=\"Level\",ylabel=\"Energy\")" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ - "chianti_atom_data_old = AtomData.from_hdf('/home/afullard/tardis-refdata/atom_data/kurucz_atom_chianti_many.h5')\n", - "chianti_atom_data_old.prepare_atom_data([1],'macroatom',[(1, 0)],[])\n", - "coll_matrix = chianti_atom_data_old.nlte_data.get_collision_matrix((1,0), temperature.value)" + "chianti_levels = grouped_chianti.set_index(chianti_atom_data.levels.loc[1, 0, :4].index)\n", + "chianti_levels_full = chianti_levels.reindex(chianti_atom_data.levels.index, fill_value=0)" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "matched_chianti_atom_data = chianti_atom_data\n", + "matched_chianti_atom_data.levels = chianti_levels_full" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "cmfgen_lines_h = cmfgen_atom_data.lines.loc[1, 0, :]\n", + "chianti_lines_h = chianti_atom_data.lines.loc[1, 0, :]" + ] + }, + { + "cell_type": "code", + "execution_count": 43, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_2973239/2336803656.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " chianti_lines_h[\"wavelength\"] = chianti_lines_h[\"wavelength\"].round(2)\n" + ] + } + ], + "source": [ + "chianti_lines_h[\"wavelength\"] = chianti_lines_h[\"wavelength\"].round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ { - "data": { - "image/png": "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ty5XX18/o/+ST5X9dGrsp1NjP50a+ym+9Qzoay5MACCNCAGQZtpFqFwux4MPPhjlcjl7lCnNfjo19tOpsZ9Ojf00flPuwgQAZo5pdyYEwJlDhABII0IApBEhANJMqwg9+uij0d7eHmeddVYsX7483njjjeyRppSenp4olUpjHs3Nzdljpdu+fXusXr06Wltbo1QqxUsvvTTm9aIooqenJ1pbW2P+/PmxatWq2LVrV86wib5tP91+++3HHV+XXnppzrCJent745JLLom6urpYuHBh3HDDDfHhhx+OWcYxdeqmTYSef/752LBhQzzwwAPxzjvvxBVXXBGdnZ2xZ8+e7NGmlAsvvDD27t07+nj//fezR0p38ODBWLZsWWzevPmErz/00EOxadOm2Lx5c+zcuTOam5vj2muvHb2P4UzxbfspIuK6664bc3y98srMu8djf39/rFu3Lt58883o6+uLw4cPR0dHRxw8eHB0GcfUOBTTxI9+9KPirrvuGvPc97///eIXv/hF0kRTz4MPPlgsW7Yse4wpLSKKF198cfTro0ePFs3NzcWvf/3r0ef+8Y9/FA0NDcXvfve7hAmnhm/up6Ioiq6uruL6669PmWcqGx4eLiKi6O/vL4rCMTVe0+JM6NChQ/H2229HR0fHmOc7Ojpix44dSVNNTbt3747W1tZob2+PW265JT7++OPskaa0gYGBGBoaGnNslcvluOqqqxxbJ7Bt27ZYuHBhXHDBBXHHHXfE8PBw9kjpRkZGIiKisbExIhxT4zUtIrRv3744cuRINDU1jXm+qakphoaGkqaaelasWBFPP/10vPrqq/HEE0/E0NBQrFy5Mvbv35892pT19fHj2Pp2nZ2d8cwzz8TWrVvj4Ycfjp07d8Y111wT1Wo1e7Q0RVFEd3d3XH755bF06dKIcEyN15S7i/bJfPOjHYqiOOHHPcxUnZ2do7++6KKL4rLLLovzzz8/nnrqqeju7k6cbOpzbH27m2++efTXS5cujYsvvjgWL14cf/zjH2PNmjWJk+VZv359vPfee/HnP//5uNccU6dmWpwJLViwIGbPnn3c/0UMDw8f938b/Ms555wTF110UezevTt7lCnr66sHHVvj19LSEosXL56xx9fdd98dL7/8crz++utjPn7GMTU+0yJC8+bNi+XLl0dfX9+Y5/v6+mLlypVJU0191Wo1Pvjgg2hpackeZcpqb2+P5ubmMcfWoUOHor+/37H1Lfbv3x+Dg4Mz7vgqiiLWr18fL7zwQmzdujXa29vHvO6YGp9p8+247u7uuO222+Liiy+Oyy67LB5//PHYs2dP3HXXXdmjTRn33HNPrF69OhYtWhTDw8Pxq1/9KiqVSnR1dWWPluqLL76Ijz76aPTrgYGBePfdd6OxsTEWLVoUGzZsiI0bN8aSJUtiyZIlsXHjxjj77LPj1ltvTZz6u3ey/dTY2Bg9PT1x0003RUtLS3zyySdx//33x4IFC+LGG29MnPq7t27dunj22Wdjy5YtUVdXN3rG09DQEPPnz49SqeSYGo/Ua/PG6be//W2xePHiYt68ecUPf/jD0Usi+aebb765aGlpKebOnVu0trYWa9asKXbt2pU9VrrXX3+9iIjjHl1dXUVR/POS2gcffLBobm4uyuVyceWVVxbvv/9+7tAJTraf/v73vxcdHR3FueeeW8ydO7dYtGhR0dXVVezZsyd77O/cifZRRBRPPvnk6DKOqVPnoxwASDMt3hMC4MwkQgCkESEA0ogQAGlECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABp/h/qGbbnQFWWsQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/afullard/tardis/tardis/plasma/detailed_balance/rates/collisional_rates.py:98: RuntimeWarning: divide by zero encountered in divide\n", + " (self.g_u / self.g_l)[np.newaxis].T\n", + "/home/afullard/tardis/tardis/plasma/detailed_balance/rates/collisional_rates.py:98: RuntimeWarning: invalid value encountered in divide\n", + " (self.g_u / self.g_l)[np.newaxis].T\n" + ] } ], "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.imshow(coll_matrix[:,:,0])" + "chianti_collisional_rates = get_chianti_collisional_rates(matched_chianti_atom_data, temperature, chianti_radiative_transitions)" ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 41, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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hbe3N2XLlqVr165s2bKFggUL8vLLL6f5PVi6dCnvvPMObdq0oUSJEtSoUYNXX32VPn36pNln//79NGnSBFdXV9zc3KhRowa7d+9Ofn7Lli00atQIZ2dn8uXLR8uWLVMETbPZzFtvvUX+/Pnx9vZm5MiRKY4fERHBiy++iJeXF25ubjz++OPs378/+fl/zj5Nnz6d4sWL4+Liwssvv0xSUhLjx4/H29sbLy+vO1Z1v9txRST3iYhJoNfUHQSduY6bkx1z+tYm0DcfrHwLdk3FEmwmQtVu1i71gSjc3I1hQHy0dR73uWC7ra0tY8aM4euvv+b8+fOptjl48CAtW7bk6aef5sCBA8yfP5/NmzczcOBAwDI25NChQ4SHhwOwYcMGChQowIYNGwBITExk69atNGrU6IG/pX/++ScxMTE0a9aMXr168fPPPxMVFZVm+6SkJH7++WeuXbuGvb39XY+fJ08e+vfvz5YtWwgLC0u1jbe3NytWrEj3df+rR48eFC1alF27dhEUFMTbb7+dXM++ffto2rQpFSpUYNu2bWzevJn27duTlJSU3H/WrFnkzZuXHTt2MH78eD766CPWrFkDWKY4b9u2LaGhoaxYsYKgoCCqV69O06ZNuXbtWvIxTpw4wcqVK/n999+ZN28e06dPp23btpw/f54NGzYwbtw43nvvPbZv335fxxWR3ONadDzdpmxn//kI8jnbM7dfHaoWdYff34adkwETPPkNVO1u7VIfmO6WupuEGBhT2Dqv/c5FcMh7X12eeuopqlatyogRI1I9I/Lpp5/SvXv35MGtZcqU4auvvqJRo0ZMmjSJihUr4unpyYYNG+jYsSPr16/njTfe4MsvvwRg165dxMbG8thjjz3w25o2bRpdu3bF1taWChUqULp0aebPn0/fvn1TtOvWrRu2trbExsaSlJRE/vz572iTln/G8pw+fRovL687np88eTI9evTA09OTKlWq8Nhjj9GpUyfq16+f5jHPnj3Lm2++mXzsMmXKJD83fvx4AgMDmThxYvK+ChUqpOhfuXJlRowYkdz3m2++Yd26dTRv3pw///yTgwcPEhYWhqOjIwCfffYZixcv5pdffuHFF18ELGd/pk+fjqurKwEBATRp0oSjR4+yYsUKbGxsKFeuHOPGjWP9+vXUqVPnno8rIrnDlag4ekzdzrHLNyng4sCcvrUp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", + "image/png": "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7rvIycmBv78/Dh48CHd3955rNREREVE7gqhuRjstVF5eDnNzc5SVlcHMzEzTzSEiIqIu6M7xu0/e+4mIiIiouxhqiIiISCsw1BAREZFWYKghIiIircBQQ0RERFqBoYaIiIi0AkMNERERaQWGGiIiItIKDDVERESkFRhqiIiISCsw1BAREZFWYKghIiIircBQQ0RERFqBoYaIiIi0AkMNERERaQWGGiIiItIKDDVERESkFRhqiIiISCsw1BAREZFWYKghIiIircBQQ0RERFqBoYaIiIi0AkMNERERaQWGGiIiItIKDDVERESkFRhqiIiISCsw1BAREZFWYKghIiIircBQQ0RERFqBoYaIiIi0AkMNERERaQWGGiIiItIKDDVERESkFRhqiIiISCsw1BAREZFWYKghIiIircBQQ0RERFqBoYaIiIi0AkMNERERaQWGGiIiItIKDDVERESkFRhqiIiISCsw1BAREZFWYKghIiIircBQQ0RERFqBoYaIiIi0AkMNERERaQWGGiIiItIKDDVERESkFRhqiIiISCsw1BAREZFWYKghIiIircBQQ0RERFqBoYaIiIi0AkMNERERaQWGGiIiItIKDDVERESkFRhqiIiISCsw1BAREZFWYKghIiIircBQQ0RERFqBoYaIiIi0Qp8MNQsXLoSlpSUefPBBpeW3bt3ClClTMGzYMAQEBOCHH37QUAuJiIior+mToWbFihX48ssvVZbr6Ohg8+bNSExMxLFjx/Diiy+iqqpKAy0kIiKivqZPhpqwsDCYmpqqLHd0dERgYCAAwM7ODlZWViguLu7l1hEREVFf1O1Qc+rUKcybNw9OTk4QBAF79+5VKbN161Z4enrCwMAAISEhOH36dE+0VcmFCxcgl8vh6ura43UTERFR/9PtUFNVVYURI0bg448/Vrt+9+7dWLlyJdasWYPY2FhMnDgRs2fPRkZGhqJMSEgI/P39VR7Z2dldakNRUREef/xxfPrpp91tPhEREWkpne5uMHv2bMyePbvD9R9++CGefvppPPPMMwCAzZs34/Dhw9i2bRvWr18PAIiJibnD5gJ1dXVYuHAhXn/9dYwbN67TcnV1dYrn5eXld7xPIiIi6vt6dExNfX09YmJiMHPmTKXlM2fORGRk5F3XL4oinnzySUydOhVLlizptOz69ethbm6uePA0FRERkXbr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", "text/plain": [ "
" ] @@ -1836,105 +1953,151 @@ } ], "source": [ - "plt.plot(coll_matrix[0,1,:],label=\"Old TARDIS scheme\")\n", - "plt.plot(chianti_collisional_rates.loc[1,0,1,0],label=\"New TARDIS scheme\")\n", - "plt.xlabel(\"Shell\")\n", - "plt.ylabel(\"Coeff\")\n", - "plt.legend()" + "chianti_collisional_rates.loc[1,0,0,1].plot(logy=True,label=\"Chianti exc\",legend=True)\n", + "chianti_collisional_rates.loc[1,0,1,0].plot(logy=True,label=\"Chianti deexc\",legend=True)\n", + "cmfgen_collisional_rates.loc[1,0,0,1].plot(logy=True,label=\"CMFGEN exc\",legend=True)\n", + "cmfgen_collisional_rates.loc[1,0,1,0].plot(logy=True,label=\"CMFGEN deexc\",legend=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compare Plasma module-style solver to reference data" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 46, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0.003541\n", - "1 0.004709\n", - "2 0.004400\n", - "3 0.002548\n", - "4 0.001518\n", - "5 0.005794\n", - "6 0.007756\n", - "7 0.007275\n", - "8 0.004203\n", - "9 0.002876\n", - "Name: (1, 0, 1, 0), dtype: float64" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(coll_matrix[0,1,:] - chianti_collisional_rates.loc[1,0,1,0]) / chianti_collisional_rates.loc[1,0,1,0]" + "import copy\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "from tardis.plasma.assembly.base import (\n", + " PlasmaSolverFactory,\n", + " convert_species_to_multi_index,\n", + ")\n", + "from tardis.plasma.properties.atomic import YgData, YgInterpolator\n", + "from tardis.plasma.properties.continuum_processes import (\n", + " CollDeexcRateCoeff,\n", + " CollExcRateCoeff,\n", + ")\n", + "from tardis.plasma.properties.general import BetaElectron\n", + "from tardis.plasma.properties.partition_function import (\n", + " ThermalLevelBoltzmannFactorLTE,\n", + ")\n", + "from tardis.plasma.properties.plasma_input import ContinuumInteractionSpecies\n", + "\n", + "\n", + "def legacy_cmfgen_collision_rate_plasma_solver(nlte_atomic_dataset, rad_field):\n", + " atom_data = copy.deepcopy(nlte_atomic_dataset)\n", + " # almost all settings are irrelevant for collisional strength data\n", + " number_densities = pd.DataFrame({1: [1] * len(temperature)}).T\n", + " time_explosion = 5 * u.day\n", + "\n", + " plasma_solver_factory = PlasmaSolverFactory(atom_data)\n", + "\n", + " # plasma_solver_factory.continuum_interaction_species = [\"He I\"]\n", + " plasma_solver_factory.line_interaction_type = \"macroatom\"\n", + " plasma_solver_factory.prepare_factory([1])\n", + " plasma_solver_factory.plasma_modules += [\n", + " YgData,\n", + " ContinuumInteractionSpecies,\n", + " CollExcRateCoeff,\n", + " CollDeexcRateCoeff,\n", + " YgInterpolator,\n", + " ThermalLevelBoltzmannFactorLTE,\n", + " BetaElectron,\n", + " ]\n", + " species_mindex = convert_species_to_multi_index([\"H I\"])\n", + " return plasma_solver_factory.assemble(\n", + " number_densities,\n", + " rad_field,\n", + " time_explosion,\n", + " continuum_interaction_species=species_mindex,\n", + " )" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "dilute_rad_field = dilute_planck_rad_field = DilutePlanckianRadiationField(\n", + " temperature, np.array([1] * len(temperature))\n", + " )\n", + "\n", + "legacy_solver = legacy_cmfgen_collision_rate_plasma_solver(cmfgen_atom_data, dilute_rad_field)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0 1.003542\n", - "1 1.004710\n", - "2 1.004401\n", - "3 1.002549\n", - "4 1.001519\n", - "5 1.005795\n", - "6 1.007757\n", - "7 1.007276\n", - "8 1.004205\n", - "9 1.002877\n", - "Name: (1, 0, 0, 1), dtype: float64" + "" ] }, - "execution_count": 43, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" + }, + { + "data": { + "image/png": "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qBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFk2TSoLF++HH/5y1+g1Wrh5eWFYcOGISUlxZYlERERkYTYNKjExsZi6tSp+PHHH7Fv3z6Ul5cjPDwcxcXFtiyLiIiIJEImhBC2LqJSTk4OvLy8EBsbiz59+vxpe71eD51Oh8LCQjg7O9+FComIiOh2NeT72+Eu1VQvhYWFAAA3N7ca15tMJphMJuvPer3+rtRFREREtiGZybRCCLzyyivo3bs3OnXqVGOb5cuXQ6fTWV9+fn53uUoiIiK6myRz6mfq1KnYtWsXjh49ihYtWtTYpqYRFT8/P576ISIiakKa3Kmf6dOnY8eOHTh8+HCtIQUAFAoFFArFXayMiIiIbMmmQUUIgenTp+Prr79GTEwMWrVqZctyiIiISGJsGlSmTp2Kzz77DN988w20Wi2ysrIAADqdDiqVypalERERkQTYdI6KTCarcfnGjRsxfvz4P92elycTERE1PU1mjopE5vESERGRREnm8mQiIiKimzGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFkMagQERGRZDGoEBERkWQxqBAREZFk2TyofPDBB2jVqhWUSiV69OiBI0eO2LokIiIikgibBpWt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "coll_matrix[1,0,:] / chianti_collisional_rates.loc[1,0,0,1]" + "legacy_solver.coll_exc_coeff.loc[1,0,0,1].plot(logy=False,label=\"TARDIS exc\",legend=True)\n", + "legacy_solver.coll_deexc_coeff.loc[1,0,0,1].plot(logy=False,label=\"TARDIS deexc\",legend=True)\n", + "reference_coeff[\"coll_exc_coeff\"].loc[1,0,0,1].plot(logy=False,label=\"reference exc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "reference_coeff[\"coll_deexc_coeff\"].loc[1,0,0,1].plot(logy=False,label=\"reference deexc\",legend=True,ylabel=\"Coeff\",xlabel=\"Shell\",ls=\"\", marker = '+')\n", + "cmfgen_collisional_rates.loc[1,0,0,1].plot(logy=False,label=\"TARDIS new exc\",legend=True)\n", + "cmfgen_collisional_rates.loc[1,0,1,0].plot(logy=False,label=\"TARDIS new deexc\",legend=True)" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "0 1.0\n", + "1 1.0\n", + "2 1.0\n", + "3 1.0\n", + "4 1.0\n", + "5 1.0\n", + "6 1.0\n", + "7 1.0\n", + "8 1.0\n", + "9 1.0\n", + "Name: (1, 0, 0, 1), dtype: float64" ] }, - "execution_count": 44, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHACAYAAABKwtdzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABi0ElEQVR4nO3dd3gU9cLF8e/sppMCoaRIC51QQ+9FIRRFURREBFHUi1cExILYK4jXgoqg3AuilysGRIoK0pQeFSJBpEk1lIQQSCGBtN19/0D2NYZgICSTZM/neeaBnf3N7JlE3eNUw+FwOBARERFxIRazA4iIiIiUNBUgERERcTkqQCIiIuJyVIBERETE5agAiYiIiMtRARIRERGXowIkIiIiLkcFSERERFyOCpCIiIi4HBUgERERcTkqQH9jw4YNDBgwgNDQUAzDYMmSJaXq8/7xj39gGAbTpk0r1lwiIiLliQrQ38jIyKBFixZMnz691H3ekiVL+PHHHwkNDS2BZCIiIuWHm9kBSrt+/frRr1+/At/Pzs7m2Wef5X//+x8pKSk0bdqUqVOn0qNHj2L5vIuOHz/OmDFjWLlyJTfeeONVfZaIiIirUgEqonvvvZcjR47w+eefExoayuLFi+nbty87d+6kfv36xfKZdrud4cOH88QTT9CkSZNi+QwREZHyTIfAiuDgwYPMnz+fhQsX0rVrV+rWrcvjjz9Oly5d+Pjjj4vtc6dOnYqbmxtjx44tts8QEREpz7QHqAh+/vlnHA4HDRo0yDM/KyuLypUrA3DkyBHCwsIuu56HH3640OcYxcTE8O677/Lzzz9jGMbVBRcREXFxKkBFYLfbsVqtxMTEYLVa87zn6+sLwHXXXceePXsuu55KlSoV+jM3btxIYmIiNWvWdM6z2Ww89thjTJs2jSNHjhR+A0RERFyUClARREREYLPZSExMpGvXrpcc4+7uTqNGja7ZZw4fPpxevXrlmdenTx+GDx/Ovffee80+R0REpDxTAfob6enpHDhwwPn68OHDxMbGEhgYSIMGDRg2bBgjRozgrbfeIiIigqSkJL777juaNWtG//79r+nn1axZk8qVKzsPr13k7u5OcHAwDRs2vPoNFRERcSEqQH9j27Zt9OzZ0/l6woQJANxzzz3MnTuXjz/+mFdffZXHHnuM48ePU7lyZTp27HhV5acwnyciIiJFZzgcDofZIURERERKki6DFxEREZejAiQiIiIuR+cAXYLdbufEiRP4+fnpXjsiIiJlhMPh4OzZs4SGhmKxXH4fjwrQJZw4cYIaNWqYHUNERESuwtGjR6levfplx6gAXYKfnx9w4Qfo7+9vchoREREpjLS0NGrUqOH8Hr8cFaBLuHjYy9/fXwVIRESkjCnM6Ss6CVpERERcjgqQiIiIuBxTC9CUKVNo27Ytfn5+VKtWjYEDB7Jv376/XW79+vW0bt0aLy8v6tSpw4cffphvzKJFiwgPD8fT05Pw8HAWL15cHJsgIiIiZZCp5wCtX7+ehx9+mLZt25Kbm8szzzxDZGQku3fvpkKFCpdc5vDhw/Tv358HHniAefPmsXnzZv75z39StWpVBg0aBEB0dDRDhgzhlVde4dZbb2Xx4sUMHjyYTZs20b59+5LcRBGRYmOz2cjJyTE7hkiJ8vDw+NtL3AujVD0K49SpU1SrVo3169fTrVu3S46ZOHEiy5YtY8+ePc55o0ePZseOHURHRwMwZMgQ0tLSWLFihXNM3759qVSpEvPnz//bHGlpaQQEBJCamqqToEWk1HE4HCQkJJCSkmJ2FJESZ7FYCAsLw8PDI997V/L9XaquAktNTQUgMDCwwDHR0dFERkbmmdenTx9mz55NTk4O7u7uREdH8+ijj+YbM23atEuuMysri6ysLOfrtLS0q9wCEZHid7H8VKtWDR8fH92wVVzGxRsVx8fHU7NmzSL9s19qCpDD4WDChAl06dKFpk2bFjguISGBoKCgPPOCgoLIzc0lKSmJkJCQAsckJCRccp1TpkzhpZdeKvpGiIgUM5vN5iw/lStXNjuOSImrWrUqJ06cIDc3F3d396teT6m5CmzMmDH88ssvhTpE9dfGd/Eo3p/nX2pMQU1x0qRJpKamOqejR49eaXwRkRJx8ZwfHx8fk5OImOPioS+bzVak9ZSKPUCPPPIIy5YtY8OGDX976+rg4OB8e3ISExNxc3Nz/t9QQWP+ulfoIk9PTzw9PYuwBSIiJUuHvcRVXat/9k3dA+RwOBgzZgxffvkl3333HWFhYX+7TMeOHVm9enWeeatWraJNmzbOXWEFjenUqdO1Cy8iIiJllqkF6OGHH2bevHl89tln+Pn5kZCQQEJCAufPn3eOmTRpEiNGjHC+Hj16NL///jsTJkxgz549zJkzh9mzZ/P44487x4wbN45Vq1YxdepU9u7dy9SpU1mzZg3jx48vyc0TEZGrVLt27QIvXLnIMAyWLFlSInnKi7lz51KxYkWzY5QKphagmTNnkpqaSo8ePQgJCXFOUVFRzjHx8fHExcU5X4eFhbF8+XLWrVtHy5YteeWVV3jvvfec9wAC6NSpE59//jkff/wxzZs3Z+7cuURFRekeQCIiJjt69CijRo0iNDQUDw8PatWqxbhx4zh9+vQ1/RzDMC47jRw50jk2MjISq9XKDz/8kG89I0eOdC7j5uZGzZo1eeihh0hOTs4zrnbt2s5x3t7e1K5dm8GDB/Pdd9/lGXfkyBEMwyA2NtY5b9GiRbRv356AgAD8/Pxo0qQJjz322DX9eUh+pp4DVJhbEM2dOzffvO7du/Pzzz9fdrnbb7+d22+//WqjFZtTZ7NISs+icYjuLyQiruXQoUN07NiRBg0aMH/+fMLCwti1axdPPPEEK1as4IcffrjsbVCuRHx8vPPvUVFRPP/883meNODt7Q1AXFwc0dHRjBkzhtmzZ9OhQ4d86+rbty8ff/wxubm57N69m/vuu4+UlJR8F+28/PLLPPDAA2RnZ3PkyBHmzZtHr169eOWVV3jmmWcumXPNmjXceeedTJ48mZtvvhnDMNi9ezdr1669Fj8GuYxScxWYK/j213g6TlnNlEWbzI4iIlLiHn74YTw8PFi1ahXdu3enZs2a9OvXjzVr1nD8+PECSwLA/v376datG15eXoSHh+c7z/OvgoODnVNAQACGYeSbB/Dxxx9z00038dBDDxEVFUVGRka+dXl6ehIcHEz16tWJjIxkyJAhrFq1Kt84Pz8/goODqVmzJt26dWPWrFk899xz+crXn3399dd06dKFJ554goYNG9KgQQMGDhzI+++/X+C2ZWdnM2bMGEJCQvDy8qJ27dpMmTLF+X5KSgoPPvggQUFBeHl50bRpU77++us861i5ciWNGzfG19eXvn375imMF38ujRs3xsvLi0aNGjFjxgznexf3Yi1YsICuXbvi7e1N27Zt+e2339i6dStt2rRxrvfUqVOFXm9JUwEqQe35hfXu47j35OscOpVudhwRKSccDgfnsnNLfLqSBwmcOXOGlStX8s9//tO59+Wi4OBghg0bRlRU1CXXabfbue2225yHqT788EMmTpx4TX5uH3/8MXfffTeNGjWiQYMGLFiw4LLLHDp0iG+//bbQ958ZN24cDoeDpUuXXvL94OBgdu3axa+//lro3O+99x7Lli1jwYIF7Nu3j3nz5lG7dm3gws+qX79+bNmyhXnz5rF7925ef/11rFarc/lz587x5ptv8t///pcNGzYQFxeX5zzaf//73zzzzDO89tpr7Nmzh8mTJ/Pcc8/xySef5Mnxwgsv8Oyzz/Lzzz/j5ubG0KFDefLJJ3n33XfZuHEjBw8e5Pnnn7/i9ZaUUnEZvKuoFFyXSkYSQZYz/OfHHYy+qbPZkUSkHDifYyP8+ZUl/rm7X+6Dj0fhvkb279+Pw+GgcePGl3y/cePGJCcnOx+J9Gdr1qxhz549HDlyxHmrlMmTJ9OvX78i5V+zZg3nzp2jT58+ANx9993Mnj2be++9N8+4r7/+Gl9fX2w2G5mZmQC8/fbbhfqMwMBAqlWrxpEjRy75/iOPPMLGjRtp1qwZtWrVokOHDkRGRjJs2LACb88SFxdH/fr16dKlC4ZhUKtWrTzb9NNPP7Fnzx4aNGgAQJ06dfIsn5OTw4cffkjdunWBC/fhe/nll53vv/LKK7z11lvcdtttwIVzb3fv3s1HH33EPffc4xz3+OOPO39248aNY+jQoaxdu5bOnS98t40aNSrPaSyFXW9J0R6gklSlHmcqtcDNsJO9YyF2e6l5DJuIiKkudUPbi/bs2UPNmjXz3CeuY8eORf7M2bNnM2TIENzcLpS4oUOH8uOPP+Y7XNWzZ09iY2P58ccfeeSRR+jTpw+PPPJIoT/ncjfirVChAt988w0HDhzg2WefxdfXl8cee4x27dpx7ty5Sy4zcuRIYmNjadiwIWPHjs1zOC42Npbq1as7y8+l+Pj4OMsPQEhICImJicCFZ3JePFHd19fXOb366qscPHgwz3qaN2/u/PvF++w1a9Ysz7yrWW9J0R6gEubb7m5YuYPrs75n2+/JtAu7Nif8iYjr8na3svvlPqZ8bmHVq1fPeYLvwIED872/d+9eKlWqRJUqVfK9d6nDYkW9Gd6ZM2dYsmQJOTk5zJw50znfZrMxZ84cpk6d6pxXoUIF6tWrB1w4/NSzZ09eeuklXnnllb/9nNOnT3Pq1Km/vc9d3bp1qVu3Lvfffz/PPPMMDRo0ICoqKt/eKIBWrVpx+PBhVqxYwZo1axg8eDC9evXiiy++yHd48VL+evjOMAznz9hutwMXDlf99crpPx9G++t6Lv4+/jrv4vquZL0lRQWohHm0uJ3cVZNoajnCtC3raRd2q9mRRKSMMwyj0IeizFK5cmV69+7NjBkzePTRR/N8USckJPC///2PESNGXLLYhIeHExcXx4kTJwgNDQUuPBi7KP73v/9RvXr1fPcRWrt2LVOmTOG1115z7hn6qxdeeIF+/frx0EMPOfMU5N1338VisVyy9BWkdu3a+Pj4XPKE7Iv8/f0ZMmQIQ4YM4fbbb6dv376cOXOG5s2bc+zYMX777bfL7gUqSFBQENdddx2HDh1i2LBhV7x8Sa+3KEr3vzHlkU8gqdV7Uvnoavz3f0lmzs14XcH/RYmIlFXTp0+nU6dO9OnTh1dffTXPZfDXXXcdr7322iWX69WrFw0bNmTEiBG89dZbpKWlXfaKscKYPXs2t99+e76Hb9eqVYuJEyfyzTffcMstt1xy2R49etCkSRMmT57M9OnTnfPPnj1LQkICOTk5HD58mHnz5vGf//yHKVOmOPcg/dWLL77IuXPn6N+/P7Vq1SIlJYX33nuPnJwcevfufcll3nnnHUJCQmjZsiUWi4WFCxcSHBxMxYoV6d69O926dWPQoEG8/fbb1KtXj71792IYBn379i3Uz+bFF19k7Nix+Pv7069fP7Kysti2bRvJyclMmDChUOsoyfVeLZ0DZIJKHS/c2bq/YyNrd8f/zWgRkfKhfv36bNu2jbp16zJkyBDq1q3Lgw8+SM+ePYmOji7wHkAWi4XFixeTlZVFu3btuP/++wssS4URExPDjh078txA9yI/Pz8iIyOZPXv2ZdcxYcIE/v3vf+d5ePbzzz9PSEgI9erVY/jw4aSmprJ27drLXrHWvXt3Dh06xIgRI2jUqBH9+vUjISGBVatW0bBhw0su4+vry9SpU2nTpg1t27blyJEjLF++HIvlwlf6okWLaNu2LUOHDiU8PJwnn3zyih4cev/99/Of//yHuXPn0qxZM7p3787cuXML9bgqM9Z7tQzHlVzH6CLS0tIICAggNTUVf/9iuGFhbhbnp9TD25bG28FTmTB69LX/DBEplzIzMzl8+DBhYWF4eXmZHUekxF3u34Er+f7WHiAzuHmS3WggAGHHv+Z0epa5eURERFyMCpBJAjpcOAzWx/ITK2IOmJxGRETEtagAmaV6G1J9auJjZJG4dZHZaURERFyKCpBZDAO3iKEAtE1dyYFEPRpDRESkpKgAmahCm7sA6GzZxeofYkxOIyIi4jpUgMxUqTanK7fGYjiw//KFHo0hIiJSQlSATObf/m4AemV/x4+HTpucRkRExDWoAJnMvdlt5BgeNLQc44ct35sdR0RExCWoAJnNuyJptS7c7rzywS85n134u3WKiIjI1VEBKgUqdRgOQD82sWbXcZPTiIiIK+rRowfjx483O0aJUQEqBSz1e3HOrRJVjTT2Ry81O46ISLEYOXIkhmHw+uuv55m/ZMmSSz4FvjjMnTsXwzAuO61btw6AY8eO4eHhQaNGjS65rj8v4+vrS4sWLZg7d26eMevWrXOOsVgsBAQEEBERwZNPPkl8fN5nQb744ou0bNnS+TojI4OJEydSp04dvLy8qFq1Kj169ODrr7++lj8Sl6UCVBpY3ckJvw2ABvHfkHg20+RAIiLFw8vLi6lTp5KcnGzK5w8ZMoT4+Hjn1LFjRx544IE88zp16gRcKEuDBw/m3LlzbN68+ZLr+/jjj4mPj2fHjh0MGTKEe++9l5UrV+Ybt2/fPk6cOMHWrVuZOHEia9asoWnTpuzcubPArKNHj2bJkiVMnz6dvXv38u233zJo0CBOn9YFM9eCClApEfDHYbBelm2s2LbP5DQiIsWjV69eBAcHM2XKlMuO27JlC926dcPb25saNWowduxYMjIyAHj//fdp1qyZc+zFPUgffPCBc16fPn2YNGlSvvV6e3sTHBzsnDw8PPDx8ck3z+Fw8PHHHzN8+HDuuuuuAp8OX7FiRYKDg6lbty5PP/00gYGBrFq1Kt+4atWqERwcTIMGDbjzzjvZvHkzVatW5aGHHirwZ/DVV1/x9NNP079/f2rXrk3r1q155JFHuOeeewpcZseOHfTs2RM/Pz/8/f1p3bo127Ztc76/efNmunfvjo+PD5UqVaJPnz55yqjdbufJJ58kMDCQ4OBgXnzxxTzrT01N5cEHH6RatWr4+/tz/fXXs2PHDuf7F/dizZkzh5o1a+Lr68tDDz2EzWbjjTfeIDg4mGrVqvHaa69d0XqLgwpQaRHSkpQKdfAyckjZ9oXZaUSkLHE4IDuj5CfHld+7zGq1MnnyZN5//32OHTt2yTE7d+6kT58+3Hbbbfzyyy9ERUWxadMmxowZA1w4V2XXrl0kJSUBsH79eqpUqcL69esByM3NZcuWLXTv3v0qf6Dw/fffc+7cOXr16sXw4cNZsGABZ8+eLXC8zWZjwYIFnDlzBnd3979dv7e3N6NHj2bz5s0kJiZeckxwcDDLly+/7Of+1bBhw6hevTpbt24lJiaGp556ypknNjaWG264gSZNmhAdHc2mTZsYMGAANtv/X3zzySefUKFCBX788UfeeOMNXn75ZVavXg2Aw+HgxhtvJCEhgeXLlxMTE0OrVq244YYbOHPmjHMdBw8eZMWKFXz77bfMnz+fOXPmcOONN3Ls2DHWr1/P1KlTefbZZ/nhhx+uaL3XmluxrVmujGHg0fou2PAq7c+uZl/CkzQM9jM7lYiUBTnnYHJoyX/u0yfAo8IVL3brrbfSsmVLXnjhhUvuWfnXv/7FXXfd5Twht379+rz33nt0796dmTNn0rRpUypXrsz69esZNGgQ69at47HHHuOdd94BYOvWrWRmZtKlS5er3rTZs2dz5513YrVaadKkCfXq1SMqKor7778/z7ihQ4ditVrJzMzEZrMRGBiYb0xBLp5bdOTIEapVq5bv/VmzZjFs2DAqV65MixYt6NKlC7fffjudO3cucJ1xcXE88cQTznXXr1/f+d4bb7xBmzZtmDFjhnNekyZN8izfvHlzXnjhBeey06dPZ+3atfTu3Zvvv/+enTt3kpiYiKenJwBvvvkmS5Ys4YsvvuDBBx8ELuxFmjNnDn5+foSHh9OzZ0/27dvH8uXLsVgsNGzYkKlTp7Ju3To6dOhQ6PVea9oDVIr4tB6KHYMOlj2s/eEns+OIiBSbqVOn8sknn7B79+5878XExDB37lx8fX2dU58+fbDb7Rw+fBjDMOjWrRvr1q0jJSWFXbt2MXr0aGw2G3v27GHdunW0atUKX1/fq8qWkpLCl19+yd133+2cd/fddzNnzpx8Y9955x1iY2NZvXo1LVu25J133qFevXqF+hzHH3vQCjoBvFu3bhw6dIi1a9cyaNAgdu3aRdeuXXnllVcKXOeECRO4//776dWrF6+//joHDx50vndxD9DlNG/ePM/rkJAQ5x6qmJgY0tPTqVy5cp7fzeHDh/N8Tu3atfHz+///gQ8KCiI8PByLxZJn3pWu91rTHqDSJKA6yVXbU/nUD1h3LsR28/VYLSVzZYSIlGHuPhf2xpjxuVepW7du9OnTh6effpqRI0fmec9ut/OPf/yDsWPH5luuZs2awIXDYLNmzWLjxo20aNGCihUr0q1bN9avX8+6devo0aPHVWf77LPPyMzMpH379s55DocDu93O7t27CQ8Pd84PDg6mXr161KtXj4ULFxIREUGbNm3yjCnInj17gAuFoSDu7u507dqVrl278tRTT/Hqq6/y8ssvM3HiRDw8PPKNf/HFF7nrrrv45ptvWLFiBS+88AKff/45t956K97e3n+b6a+H7wzDwG63Axd+LyEhIc6r5P6sYsWKl13HtVjvtaYCVMr4dxgOX/1Ar5x1RB9IokuDqmZHEpHSzjCu6lCU2V5//XVatmxJgwYN8sxv1aoVu3btuuyelB49ejBu3Di++OILZ9np3r07a9asYcuWLYwbN+6qc82ePZvHHnssXzEbO3Ysc+bM4c0337zkcvXq1WPQoEFMmjSJpUsvf0uT8+fPM2vWLLp160bVqoX/73x4eDi5ublkZmZesgABNGjQgAYNGvDoo48ydOhQPv74Y2699VaaN2/O2rVreemllwr9eX/WqlUrEhIScHNzu2xpKy3r/Ts6BFbKuDe9hWzDk7qWeLZtWW12HBGRYtOsWTOGDRvG+++/n2f+xIkTiY6O5uGHHyY2Npb9+/ezbNkyHnnkEeeYi+cB/e9//3MWoB49erBkyRLOnz9/1ef/xMbG8vPPP3P//ffTtGnTPNPQoUP59NNPycnJKXD5xx57jK+++irPlVcAiYmJJCQksH//fj7//HM6d+5MUlISM2fOLHBdPXr04KOPPiImJoYjR46wfPlynn76aXr27Im/v3++8efPn2fMmDGsW7eO33//nc2bN7N161YaN24MwKRJk9i6dSv//Oc/+eWXX9i7dy8zZ850nkz+d3r16kXHjh0ZOHAgK1eu5MiRI2zZsoVnn3023/ZeieJa799RASptPP04G9YXgKqHl3AuO9fkQCIixeeVV15xngtzUfPmzVm/fj379++na9euRERE8NxzzxESEuIcYxiG8yqvrl27Ope7eKPBSxWEwpg9ezbh4eGXvPnhwIEDOXPmDF999VWByzdr1oxevXrx/PPP55nfsGFDQkNDad26Na+//jq9evXi119/veyhsj59+vDJJ58QGRlJ48aNeeSRR+jTpw8LFiy45Hir1crp06cZMWIEDRo0YPDgwfTr18+5x6dBgwasWrWKHTt20K5dOzp27MjSpUtxcyvcwSDDMFi+fDndunXjvvvuc17Sf+TIEYKCggq1jpJc799+ruOv/+QJaWlpBAQEkJqaetX/EhWF48BajHm3kezwZf3NGxnYuk6JZxCR0ikzM5PDhw8TFhaGl5eX2XFEStzl/h24ku9v7QEqhYw6PUj3qEIlI53DejSGiIjINacCVBpZrNia3A5A45PfcDJNj8YQERG5lkwtQBs2bGDAgAGEhoZiGAZLliy57PiLD9L76/TnGzkV9KC7zMyyVSIC2l94NMb1lp/5dmv++2SIiIjI1TO1AGVkZNCiRQumT59eqPHvvvtungfWHT16lMDAQO6444484/z9/fOMi4+PL3vHyoObcsavIR6GjdRtC81OIyIiUq6Yeh+gfv360a9fv0KPDwgIICAgwPl6yZIlJCcnc++99+YZZxgGwcHB1yynWbxb3wXrXqBzxmp2n5hEeGjJn5AtIqWTrl8RV3Wt/tkv0+cAzZ49m169elGrVq0889PT06lVqxbVq1fnpptuYvv27ZddT1ZWFmlpaXmm0sC79Z3YsdDasp910dFmxxGRUuDiHXXPnTtnchIRc2RnZwMXLvsvijJ7J+j4+HhWrFjBZ599lmd+o0aNmDt3Ls2aNSMtLY13332Xzp07s2PHjjwPhfuzKVOmXPWdMYuVXzBngjtTJWEj7rsWkjuwN27WMt1ZRaSIrFYrFStWdD5HycfHp8BnSYmUN3a7nVOnTuHj41Po+xcVpNTcB8gwDBYvXszAgQMLNX7KlCm89dZbnDhxosDbgcOFH1arVq3o1q0b77333iXHZGVlkZWV5XydlpZGjRo1TLsP0J/lxkbhtuRB4uxVOTxsC90b5n9isIi4FofDQUJCAikpKWZHESlxFouFsLCwS373X8l9gMrkHiCHw8GcOXMYPnz4ZcsPXPhBtW3blv379xc4xtPTE09Pz2sd85pwCx9A1jJvanKKxZtX0L3hPWZHEhGTGYZBSEgI1apVu+xjGUTKIw8PjzxPlr9aZbIArV+/ngMHDjBq1Ki/HetwOIiNjaVZs2YlkKwYePiQXvcmPPcvJOTIEtKzhuHrWSZ/bSJyjVmt1iKfByHiqkw9oSQ9PZ3Y2FhiY2MBOHz4MLGxscTFxQEXHtw2YsSIfMvNnj2b9u3b07Rp03zvvfTSS6xcuZJDhw4RGxvLqFGjiI2NZfTo0cW6LcUpsOOFewL1NX5g1Y7fTU4jIiJS9plagLZt20ZERAQREREATJgwgYiICOdD5OLj451l6KLU1FQWLVpU4N6flJQUHnzwQRo3bkxkZCTHjx9nw4YNtGvXrng3phgZtbty1jMIf+McR39YZHYcERGRMq/UnARdmpj9MNRLSfv6Wfy3vc8aWyvCH1tOaEVvsyOJiIiUKnoYajnk/8ejMbpbdrDyp50mpxERESnbVIDKiqoNORPQBHfDxrmYBboLrIiISBGoAJUh3m3vBqDL+bXsOlE67lYtIiJSFqkAlSHeEYOxYaWF5RDrN28yO46IiEiZpQJUllSowpnQ7gB471lIjs1uciAREZGySQWojKnU8cJ9kfrYN7Dxt5MmpxERESmbVIDKGLdG/ci0+nKdcZqdm5ebHUdERKRMUgEqa9y9yKh/MwDV45aSlqnnAImIiFwpFaAy6OKjMfoYP7Iq9pDJaURERMoeFaAyyKjZkVSv6/A1MjmhR2OIiIhcMRWgssgwsLQYAkCL0ys4euacyYFERETKFhWgMsqv3R83RbTsZPWPO0xOIyIiUraoAJVVleuSVKklVsNBVmyUHo0hIiJyBVSAyjDfP/YCdT//HTuOpZqcRkREpOxQASrDvFoMItdwJ9zyO1s2fW92HBERkTJDBags8wkk+bqeAPjuW0R2rh6NISIiUhgqQGVcYKd7AOjr2MiGvfEmpxERESkbVIDKOGuDSM65BVDNSGHPlq/MjiMiIlImqACVdW4eZDYYCEDNY1+Rek6PxhAREfk7KkDlwMXDYJHGT6zcfsDkNCIiIqWfClB5cF0rUrxr4W1kk/jjArPTiIiIlHoqQOWBYeDWaigAEckriTutR2OIiIhcjgpQOeHb5i4AOlp2s/qHGJPTiIiIlG4qQOVFpVqcqtwWi+EgV4/GEBERuSwVoHLEv8NwAK7P+o6ff082OY2IiEjppQJUjng2u5Ucw4P6luP8sHmt2XFERERKLRWg8sTLn5SakQBU3L+IrFybyYFERERKJxWgciaw0wgA+jg2s273CZPTiIiIlE4qQOWMtd4NZLhVooqRxm+bl5gdR0REpFRSASpvrG5kNR4EQN34r0jOyDY5kIiISOmjAlQOXTwMdoPxMytj9pqcRkREpPRRASqPgptzpkI9PI0czmxdaHYaERGRUsfUArRhwwYGDBhAaGgohmGwZMmSy45ft24dhmHkm/buzbuXY9GiRYSHh+Pp6Ul4eDiLFy8uxq0ohQwDjz8ejdE6dRWHkzJMDiQiIlK6mFqAMjIyaNGiBdOnT7+i5fbt20d8fLxzql+/vvO96OhohgwZwvDhw9mxYwfDhw9n8ODB/Pjjj9c6fqnm2/Yu7Bi0t+zluy2ute0iIiJ/x83MD+/Xrx/9+vW74uWqVatGxYoVL/netGnT6N27N5MmTQJg0qRJrF+/nmnTpjF//vyixC1b/ENJqtqBaqeicfwShf2mnlgshtmpRERESoUyeQ5QREQEISEh3HDDDXz//fd53ouOjiYyMjLPvD59+rBly5YC15eVlUVaWlqeqTyo2OGPk6Gzv2fbkTMmpxERESk9ylQBCgkJYdasWSxatIgvv/yShg0bcsMNN7BhwwbnmISEBIKCgvIsFxQUREJCQoHrnTJlCgEBAc6pRo0axbYNJcmj6c1kG16EWU4Ss3ml2XFERERKDVMPgV2phg0b0rBhQ+frjh07cvToUd588026devmnG8YeQ/1OByOfPP+bNKkSUyYMMH5Oi0trXyUIE9fUsL6Uu3QEiodXExmzhC83K1mpxIRETFdmdoDdCkdOnRg//79ztfBwcH59vYkJibm2yv0Z56envj7++eZyosqnUYC0Nexme9/PWZuGBERkVKizBeg7du3ExIS4nzdsWNHVq9enWfMqlWr6NSpU0lHKxUsdbpx1r0qFY0MDkcvMjuOiIhIqWDqIbD09HQOHDjgfH348GFiY2MJDAykZs2aTJo0iePHj/Ppp58CF67wql27Nk2aNCE7O5t58+axaNEiFi36/y/2cePG0a1bN6ZOncott9zC0qVLWbNmDZs2bSrx7SsVLFZym94O22dSL+EbTqc/TGVfT7NTiYiImMrUPUDbtm0jIiKCiIgIACZMmEBERATPP/88APHx8cTFxTnHZ2dn8/jjj9O8eXO6du3Kpk2b+Oabb7jtttucYzp16sTnn3/Oxx9/TPPmzZk7dy5RUVG0b9++ZDeuFKn0x9VgPYztrNq62+Q0IiIi5jMcDofD7BClTVpaGgEBAaSmppab84FOv9Weymf38mGFhxj9xOtmxxEREbnmruT7u8yfAySF49n6LgDan13NgcR0k9OIiIiYSwXIRfi2vhMbFiIsB1h3mZtCioiIuAIVIFfhF8TpoK4AuO1cgN2uI58iIuK6VIBcSMWOdwPQK/d7fjyUZHIaERER86gAuRCPJgPItFSgupFE7OblZscRERExjQqQK3H35mydGwGodmgJ57NtJgcSERExhwqQi6nc6cI9gXoTzdpffzc5jYiIiDlUgFyMpXZnUj1D8DfOE7flC7PjiIiImEIFyNVYLDiaDQagUeJyTp3NMjmQiIhIyVMBckEVOwwHoJuxg1U/7TQ5jYiISMlTAXJFVeqTFNAUN8NORsznZqcREREpcSpALsqnzYV7AnVMX82+hLMmpxERESlZKkAuyqfVYGxYaWY5wobNG8yOIyIiUqJUgFxVhcokhfYAwHPXQmx6NIaIiLgQFSAXFnjxnkC29UTvTzQ5jYiISMlRAXJh7o36cc7qR4hxhp2bvzY7joiISIlRAXJlbp5k1LsZgJDfl3AuO9fkQCIiIiVDBcjFVel88dEYP7JmxyGT04iIiJQMFSAXZ9RoT4pXdSoYWRyPXmh2HBERkRKhAuTqDAOaDwGgadIKTqZlmhxIRESk+KkAifPRGJ2MX1n943aT04iIiBQ/FSCBwDASK0VgNRxkxkSZnUZERKTYqQAJAL5tLzwao8u5New+nmpyGhERkeKlAiQA+EQMIsdwp5HlKFu2fG92HBERkWKlAiQXeFfi9HXXX/jrnoXk2uwmBxIRESk+KkDiVLnTPQBE2jayef9Jk9OIiIgUHxUgcXJvGEmGW0WqGqns3bTU7DgiIiLFRgVI/p/VnXMNBgJwXdxS0rP0aAwRESmfVIAkjyqdLxwG62VsZc32AyanERERKR4qQJKHERrBGe/aeBk5nPxB9wQSEZHySQVI8jIMLC2HAtD8zLfEp543OZCIiMi1pwIk+VRsPwyAjpbdrIneZnIaERGRa8/UArRhwwYGDBhAaGgohmGwZMmSy47/8ssv6d27N1WrVsXf35+OHTuycuXKPGPmzp2LYRj5psxMPeSz0CrW4GTldgDkbP8ch8NhciAREZFry9QClJGRQYsWLZg+fXqhxm/YsIHevXuzfPlyYmJi6NmzJwMGDGD79rwP8PT39yc+Pj7P5OXlVRybUG75t7/wgNTu59eyS4/GEBGRcsbNzA/v168f/fr1K/T4adOm5Xk9efJkli5dyldffUVERIRzvmEYBAcHX6uYLsm7xa1kr3icupZ4/r1pNU3vvMPsSCIiItdMmT4HyG63c/bsWQIDA/PMT09Pp1atWlSvXp2bbrop3x6iv8rKyiItLS3P5PI8/ThTMxIA/32L9GgMEREpV8p0AXrrrbfIyMhg8ODBznmNGjVi7ty5LFu2jPnz5+Pl5UXnzp3Zv39/geuZMmUKAQEBzqlGjRolEb/Uq9JpBAC97RvZtPeEyWlERESunTJbgObPn8+LL75IVFQU1apVc87v0KEDd999Ny1atKBr164sWLCABg0a8P777xe4rkmTJpGamuqcjh49WhKbUOq51bues26VCTTS2bd5sdlxRERErpkyWYCioqIYNWoUCxYsoFevXpcda7FYaNu27WX3AHl6euLv759nEsDqRmaj2wCodWwZaZk5JgcSERG5NspcAZo/fz4jR47ks88+48Ybb/zb8Q6Hg9jYWEJCQkogXflTpfOFw2A9jZ9Z8/Nek9OIiIhcG6ZeBZaens6BA///vKnDhw8TGxtLYGAgNWvWZNKkSRw/fpxPP/0UuFB+RowYwbvvvkuHDh1ISEgAwNvbm4CAAABeeuklOnToQP369UlLS+O9994jNjaWDz74oOQ3sBwwQpqTVKE+VTL2c/qHKOjUzOxIIiIiRWbqHqBt27YRERHhvIR9woQJRERE8PzzzwMQHx9PXFycc/xHH31Ebm4uDz/8MCEhIc5p3LhxzjEpKSk8+OCDNG7cmMjISI4fP86GDRto165dyW5cOeLe6sKjMSJSVnIs+ZzJaURERIrOcOg2v/mkpaUREBBAamqqzgcCSIvH/nY4Fux82nYJI27saXYiERGRfK7k+7vMnQMkJvAPIbFqBwAcO/RoDBERKftUgKRQKna4cDJ0j8zv2HE0xdwwIiIiRaQCJIXi1exmsgwvalkS2bZxhdlxREREikQFSArHowLJtS88t63igS/JztWjMUREpOxSAZJCq9p5JAC97ZvZuOeYuWFERESKQAVICs1apxtp7tUIMM5xaPMXZscRERG5aipAUngWC9lN7gAg7MTXpJ7TozFERKRsUgGSK3LxCfHdjVjWbNtlchoREZGrowIkV6ZaI075NcbdsJG89XOz04iIiFwVFSC5Yp6thwHQLvVb1u9LNDmNiIjIlVMBkivm33YoOYYHzS2H+X7JbHJsuiReRETKFhUguXIVqmDr+AgAozJmM3/zbyYHEhERuTIqQHJVvHo8xjnPatSwnCLlu2kkZ2SbHUlERKTQVIDk6nhUwKv/awCMcnzJf5ZvNjmQiIhI4akAyVWzNL+DtKqtqGBkUfeXN9mXcNbsSCIiIoWiAiRXzzDwH/gWALdZN/HZokU4HA6TQ4mIiPw9FSApmutakd74TgBuPfkea3YnmBxIRETk76kASZH59n+ZLIsPLS0H2bp0Jlm5NrMjiYiIXJYKkBSdXxB0fwKAUVmf8L/1ekSGiIiUbipAck14dn6YdJ8aBBkp2Da8xamzWWZHEhERKZAKkFwbbp74DJgKwAi+Zs5X35scSEREpGAqQHLNWBr1Jy20C55GLi32vMmvx1PNjiQiInJJKkBy7fxxWbwNC32tW/nyi//psngRESmVCl2AAgMDSUpKAuC+++7j7Fnd9E4uoVojzre8D4DBp2ewYscxkwOJiIjkV+gClJ2dTVpaGgCffPIJmZmZxRZKyjbfPs9y3i2ARpaj7P76PTJzdFm8iIiULm6FHdixY0cGDhxI69atcTgcjB07Fm9v70uOnTNnzjULKGWQdyWsNzwHKx9nVM5nfLp2CA/2bWN2KhEREadC7wGaN28e/fv3Jz09HYDU1FSSk5MvOYl4tLuXVP8GVDLS8dnyBgmp2mMoIiKlh+G4irNUw8LC2LZtG5UrVy6OTKZLS0sjICCA1NRU/P39zY5TZjkOrcP49BZyHRbeqjObiffcZnYkEREpx67k+/uqToLu2bMnHh4eRUsp5Z5RpweptfviZtjpfOBNfv79jNmRREREAJ0ELcUs4ObXyTE86GLdxbeL5mC367J4ERExn06CluIVGEZ224dw/+ldhqV8xLKY2xjYto7ZqURExMVd1UnQhmHoJGgptAo3PEmGRxVqWRI59u1bZGTlmh1JRERcXKELUFBQEK+//joLFy6kZs2a/Pe//2Xx4sWXnAprw4YNDBgwgNDQUAzDYMmSJX+7zPr162ndujVeXl7UqVOHDz/8MN+YRYsWER4ejqenJ+Hh4VeUSYqBpy/ufV8BYGTuF/x39Y8mBxIREVd3VY/COHz4sPMKsKKcC5SRkUGLFi2YPn16oT+3f//+dO3ale3bt/P0008zduxYFi1a5BwTHR3NkCFDGD58ODt27GD48OEMHjyYH3/Ul66ZPFreSUpgC3yNTKr+NJWjZ86ZHUlERFzYVV0Gb7fbee211/jwww85efIkv/32G3Xq1OG5556jdu3ajBo16sqDGAaLFy9m4MCBBY6ZOHEiy5YtY8+ePc55o0ePZseOHURHRwMwZMgQ0tLSWLFihXNM3759qVSpEvPnzy9UFl0GXzwcR7dizO4FwNQaM5k46i6TE4mISHlSLJfB/9mrr77K3LlzeeONN/JcDt+sWTP+85//XM0qCyU6OprIyMg88/r06cO2bdvIycm57JgtW7YUuN6srCzS0tLyTHLtGTXaktLgdgB6//4WPx5MMjmRiIi4qqsqQJ9++imzZs1i2LBhWK1W5/zmzZuzd+/eaxburxISEggKCsozLygoiNzcXOc9igoak5CQUOB6p0yZQkBAgHOqUaPGtQ8vAFS86VWyLN60shxg/aIZ2HRZvIiImOCqCtDx48epV69evvl2u925J6a4GIaR5/XFI3h/nn+pMX+d92eTJk0iNTXVOR09evQaJpY8/EPI7TwBgBEZc1j8wz6TA4mIiCu6qgLUpEkTNm7cmG/+woULiYiIKHKoggQHB+fbk5OYmIibm5vzpOyCxvx1r9CfeXp64u/vn2eS4lOh21jSvKsTbCSTsvoN0jKLtzSLiIj81VUVoBdeeIExY8YwdepU7HY7X375JQ888ACTJ0/m+eefv9YZnTp27Mjq1avzzFu1ahVt2rTB3d39smM6depUbLnkCrl74X3T6wAMty/jvys2mBxIRERczVUVoAEDBhAVFcXy5csxDIPnn3+ePXv28NVXX9G7d+9Cryc9PZ3Y2FhiY2OBC5e5x8bGEhcXB1w4NDVixAjn+NGjR/P7778zYcIE9uzZw5w5c5g9ezaPP/64c8y4ceNYtWoVU6dOZe/evUydOpU1a9Ywfvz4q9lUKSbu4TdxJqgjnkYOdbZP5XBShtmRRETEhVzVZfDXyrp16+jZs2e++ffccw9z585l5MiRHDlyhHXr1jnfW79+PY8++ii7du0iNDSUiRMnMnr06DzLf/HFFzz77LMcOnSIunXr8tprr3HbbYV/Erkugy8ZjpO7cMzsggU7/wp+kydGP2B2JBERKcOu5Pu7SAUoJiaGPXv2YBgG4eHhxXr+T0lSASo5KV+MpeKvn7DHXpOkYavo2jDE7EgiIlJGFft9gBITE7n++utp27YtY8eOZcyYMbRu3ZobbriBU6dOXVVocU0V+7/IeasfjS1x/Lz4XXJtdrMjiYiIC7iqAvTII4+QlpbGrl27OHPmDMnJyfz666+kpaUxduzYa51RyjOfQOj5DADDz/+XLzb/anIgERFxBVdVgL799ltmzpxJ48aNnfPCw8P54IMP8jyCQqQwvDs+QIpvXQKNdGzfTSHlXLbZkUREpJy7qgJkt9udl53/mbu7O3a7DmHIFbK64XfLmwAMcXzL/75aZXIgEREp766qAF1//fWMGzeOEydOOOcdP36cRx99lBtuuOGahRPXYa1/Paer98LNsNNs11T2J+h5bCIiUnyuqgBNnz6ds2fPUrt2berWrUu9evUICwvj7NmzvP/++9c6o7iIyre+QQ7udLP8wrIvPsbEOzSIiEg5V6TL4FevXs3evXtxOByEh4fTq1eva5nNNLoM3jypy54m4OcPOGwP4vDgtVzfVA+mFRGRwim2y+C/++47wsPDSUu7cHiid+/ePPLII4wdO5a2bdsW+IwwkcIK6DOJdPfKhFlOsm/Zm2Tn6pwyERG59q6oAE2bNo0HHnjgkq0qICCAf/zjH7z99tvXLJy4IE8/rL1fBODurCgWrosxN4+IiJRLV1SAduzYQd++fQt8PzIykpgYfWFJ0Xi3uZszAU3wM87jtXEySelZZkcSEZFy5ooK0MmTJy95+ftFbm5uuhO0FJ3FQsBt7wBwK98zf8kykwOJiEh5c0UF6LrrrmPnzp0Fvv/LL78QEqJnOUnRWWu1J6nOQCyGgw6/vcGu4ylmRxIRkXLkigpQ//79ef7558nMzMz33vnz53nhhRe46aabrlk4cW1VBk4hy/CireU31iycqcviRUTkmrmiy+BPnjxJq1atsFqtjBkzhoYNG2IYBnv27OGDDz7AZrPx888/ExQUVJyZi50ugy89UldOJiB6KiccgewcuJY+EXXMjiQiIqXUlXx/X/F9gH7//XceeughVq5c6fw/csMw6NOnDzNmzKB27dpXHby0UAEqRXLOk/pmBAFZ8cxxG8JdE2fi5W41O5WIiJRCxVqALkpOTubAgQM4HA7q169PpUqVripsaaQCVLpk/fIlnl/eS6bDnQUdFjOiX1ezI4mISClUbDdC/LNKlSrRtm1b2rVrV67Kj5Q+ns1u5VSVtngZOVT94TVOpuU/B01ERORKXHUBEikxhkHl297GhoV+RjRfLIoyO5GIiJRxKkBSJlhCm5Pc6C4Aehx+i9jfT5ucSEREyjIVICkzqgx4iXMWX5pYfmfLF9N0WbyIiFw1FSApOypUIbfrRAAGp81l+da9JgcSEZGySgVIyhT/bg9xxrs2VYw0Ur99jXPZuWZHEhGRMkgFSMoWqzu+t/wLgDtsy4la8Z3JgUREpCxSAZIyx6NRJCeDe+Bu2AiLmczxlPNmRxIRkTJGBUjKpGq3v0kubvSwbGfpgo/NjiMiImWMCpCUSUaV+iQ3HwVAn2Pvse1ggsmJRESkLFEBkjKrav9nOOtWibqWeLYv+hd2uy6LFxGRwlEBkrLLKwBueAGAIRmf8dWWHSYHEhGRskIFSMo0v/b3cMqvMf7GOWxrX+VsZo7ZkUREpAxQAZKyzWKh4m1vAzDQvoaFX68wOZCIiJQFKkBS5rmHdSKh5k1YDAdNf5nM70npZkcSEZFSTgVIyoWg214ny/CknWUP3y740Ow4IiJSyplegGbMmEFYWBheXl60bt2ajRs3Fjh25MiRGIaRb2rSpIlzzNy5cy85JjMzsyQ2R0xiVKzB2TZjALjx5Ex+2HvU5EQiIlKamVqAoqKiGD9+PM888wzbt2+na9eu9OvXj7i4uEuOf/fdd4mPj3dOR48eJTAwkDvuuCPPOH9//zzj4uPj8fLyKolNEhNV6f04Ke5BVDeS+G3JZHJtdrMjiYhIKWVqAXr77bcZNWoU999/P40bN2batGnUqFGDmTNnXnJ8QEAAwcHBzmnbtm0kJydz77335hlnGEaeccHBwSWxOWI2Dx/c+r4KwB3nv2Dphq0mBxIRkdLKtAKUnZ1NTEwMkZGReeZHRkayZcuWQq1j9uzZ9OrVi1q1auWZn56eTq1atahevTo33XQT27dvv+x6srKySEtLyzNJ2eTb6g4SKrbC28jGZ/1LpJ7TZfEiIpKfaQUoKSkJm81GUFBQnvlBQUEkJPz9Yw3i4+NZsWIF999/f575jRo1Yu7cuSxbtoz58+fj5eVF586d2b9/f4HrmjJlCgEBAc6pRo0aV7dRYj7DoPLt72DHoB+b+XLpF2YnEhGRUsj0k6ANw8jz2uFw5Jt3KXPnzqVixYoMHDgwz/wOHTpw991306JFC7p27cqCBQto0KAB77//foHrmjRpEqmpqc7p6FGdQFuWuVdvycm6gwFou2cqB05qj56IiORlWgGqUqUKVqs1396exMTEfHuF/srhcDBnzhyGDx+Oh4fHZcdaLBbatm172T1Anp6e+Pv755mkbAu59TXOGT40tRxm/YJpZscREZFSxrQC5OHhQevWrVm9enWe+atXr6ZTp06XXXb9+vUcOHCAUaNG/e3nOBwOYmNjCQkJKVJeKWN8q3K+0+MA3Jz0bzbsPGhyIBERKU1MPQQ2YcIE/vOf/zBnzhz27NnDo48+SlxcHKNHjwYuHJoaMWJEvuVmz55N+/btadq0ab73XnrpJVauXMmhQ4eIjY1l1KhRxMbGOtcprqNyz0c47VWTqkYaJ5a9Qo4uixcRkT+4mfnhQ4YM4fTp07z88svEx8fTtGlTli9f7ryqKz4+Pt89gVJTU1m0aBHvvvvuJdeZkpLCgw8+SEJCAgEBAURERLBhwwbatWtX7NsjpYybB94DpsLCodyWvYwlazdwR2QPs1OJiEgpYDgcDofZIUqbtLQ0AgICSE1N1flA5cCJD24k9NQmvqc1zR9fQWVfT7MjiYhIMbiS72/TrwITKW5Bd7xDLlZ6EsOyRf81O46IiJQCKkBS7lmrNSAxfCQAXQ6+zZ5jp80NJCIiplMBEpcQOuB5zlorUt9ynB8X/Asd+RURcW0qQOIavCuS0/0ZAG5N/YTvft5jciARETGTCpC4jMAuozjp04AA4xxpK14iK9dmdiQRETGJCpC4DosV/1vfAuDmnJUs/XaVyYFERMQsKkDiUrzrd+NoaF+shoPaW18mMfW82ZFERMQEKkDicq67/Q2y8KCdsZtvv5hldhwRETGBCpC4HEtgLU63vPBolJ5x77PzSMLfLCEiIuWNCpC4pND+T5HsVpUaxil+WfianhMmIuJiVIDENXlUgN4vAzAofT4fzP0vNrvuDSQi4ipUgMRlVWo3lKTQnngZOYyKm8iMeQuwqwSJiLgEFSBxXYZBlXvnc7pKO/yM8ww/+CgfLViqu0SLiLgAFSBxbe7eVH7gS05XaklFI4M79jzCnCXfmp1KRESKmQqQiKcflR9cymn/xlQx0rgpdjTzln9vdioRESlGKkAiAN4VqTx6OWcq1CPISKHHj/ezYM0Ws1OJiEgxUQESucgnkMDRyznjVZPqRhJtN4xk6cYYs1OJiEgxUAES+TO/ICo9tIJkz1DCLCdpvHo4K37caXYqERG5xlSARP7CCKhOxX8sJ9W9Kg0sx6n5zTC+277P7FgiInINqQCJXIIRGIbfA8s5a61EE8vvVF48lM27DpkdS0RErhEVIJECWKo1wHvUV6Rb/GlhOYjHgqFs/e2Y2bFEROQaUAESuQy30GZ43ruUc4YPbY295PxvKDsO6+GpIiJlnQqQyN9wr9EK64hFZBpedDJ+IeWTu9hzLMnsWCIiUgQqQCKF4BnWCcfQz8nCg+7EcGz23Rw8mWJ2LBERuUoqQCKF5N2gJ7l3/Jcc3OjtiGbvR/dw9HS62bFEROQqqACJXIEKTfpy/pb/YMPCjfZ1xMy8l4SU82bHEhGRK6QCJHKF/CNuJb3/B9gxGJi7ik0fPEDS2UyzY4mIyBVQARK5CgHt7iKl11sA3J7zFas/GEvquRyTU4mISGGpAIlcpcAuo0jq9hoAQzOj+Gr6BNKzck1OJSIihaECJFIEVa4fQ2KHZwG4+9ynLJo+ifPZNpNTiYjI31EBEimian2f4GSrCQDcc3YWUTNfJCtXJUhEpDRTARK5BoIGPE9809EAjEx+j89mTSXXZjc5lYiIFMT0AjRjxgzCwsLw8vKidevWbNy4scCx69atwzCMfNPevXvzjFu0aBHh4eF4enoSHh7O4sWLi3szxNUZBiGDXudEwxEAjDj5Bv+d/S42u8PkYCIicimmFqCoqCjGjx/PM888w/bt2+natSv9+vUjLi7ussvt27eP+Ph451S/fn3ne9HR0QwZMoThw4ezY8cOhg8fzuDBg/nxxx+Le3PE1RkGoUPe5XjY7VgNB3cff4V5n36Iw6ESJCJS2hgOE//r3L59e1q1asXMmTOd8xo3bszAgQOZMmVKvvHr1q2jZ8+eJCcnU7FixUuuc8iQIaSlpbFixQrnvL59+1KpUiXmz59fqFxpaWkEBASQmpqKv7//lW2UiN3GsTkjqH7sa7Icbixs8BbD7roHwzDMTiYiUq5dyfe3aXuAsrOziYmJITIyMs/8yMhItmzZctllIyIiCAkJ4YYbbuD777/P8150dHS+dfbp0+ey68zKyiItLS3PJHLVLFaq3/sJx4J74WnkMui3J1jwxedmpxIRkT8xrQAlJSVhs9kICgrKMz8oKIiEhIRLLhMSEsKsWbNYtGgRX375JQ0bNuSGG25gw4YNzjEJCQlXtE6AKVOmEBAQ4Jxq1KhRhC0TAaxuVL9/PseqdMXbyObGX8ezaNkSs1OJiMgf3MwO8NfDAg6Ho8BDBQ0bNqRhw4bO1x07duTo0aO8+eabdOvW7arWCTBp0iQmTJjgfJ2WlqYSJEXn5kH1fyzk2AcDqJ6ylV4xD/GVhycD+vYzO5mIiMszbQ9QlSpVsFqt+fbMJCYm5tuDczkdOnRg//79ztfBwcFXvE5PT0/8/f3zTCLXhLs31R9awnG/FgQY5+gU/QDf/uWwrYiIlDzTCpCHhwetW7dm9erVeeavXr2aTp06FXo927dvJyQkxPm6Y8eO+da5atWqK1qnyDXl6UvoP5dxwqcxlY2ztFo3ku82X/48NxERKV6mHgKbMGECw4cPp02bNnTs2JFZs2YRFxfH6NEXbig3adIkjh8/zqeffgrAtGnTqF27Nk2aNCE7O5t58+axaNEiFi1a5FznuHHj6NatG1OnTuWWW25h6dKlrFmzhk2bNpmyjSIAhndFQsYsJ/69XoRkHqTRqrvZ6PEFXdu2MjuaiIhLMrUADRkyhNOnT/Pyyy8THx9P06ZNWb58ObVq1QIgPj4+zz2BsrOzefzxxzl+/Dje3t40adKEb775hv79+zvHdOrUic8//5xnn32W5557jrp16xIVFUX79u1LfPtE/szwCSTonys4Ob0Xodlx5H49hJ88FtOuRVOzo4mIuBxT7wNUWuk+QFKccpOPkfxBL6rmxnPQEUranUuJaNzA7FgiImVembgPkIircqtUHf/RKzhtrUpd4wQ+n9/OrgNHzI4lIuJSVIBETOBZJQzfB5eTbKlEQ+N3mHcbv/1+zOxYIiIuQwVIxCSeQQ3wvO9r0gx/mnCQcx8P4vCJRLNjiYi4BBUgERP5VG+KMWIJ6UYFWrKX0/++jWOJp82OJSJS7qkAiZjML6w1uUMXcg4v2jh2cvTDOziZrOfRiYgUJxUgkVKgYoPOnL9jPll40NEew74PhnA6LcPsWCIi5ZYKkEgpUbnJ9aTdMpds3OiWu4Ud0+8iNSPT7FgiIuWSCpBIKVI14kZO9/83uVi5PnsdP70/gozMHLNjiYiUOypAIqVMSLvbSLjhPWwY9M5cyYb37yczO9fsWCIi5YoKkEgpVL3r3Rzv9iYA/TKWsHb6P8nOsZmcSkSk/FABEimlal5/P4c7vArAjWlRfDvzMXJtdpNTiYiUDypAIqVYWN9HONjqaQBuPvMxyz96Grtdj+8TESkqFSCRUq7uzRM50HQ8ADcnzuTr2S+jZxiLiBSNCpBIGVBv0Iv81uBBAG4+/jZff/IvlSARkSJQARIpCwyDBkPf4LfadwPQ//Bkls//wORQIiJllwqQSFlhGDS4Zzr7rhuE1XDQZ99zrPziP2anEhEpk1SARMoSw6DhqP+wL+hG3Aw7PXZOZO2y/5mdSkSkzFEBEilrLBYaPvgp+wKvx9PIpXPMONav/NLsVCIiZYoKkEhZZHWjwT8/Z19AZ7yMHNpsGc2m778xO5WISJmhAiRSRhlunjQYs4j9vm2oYGTRct19fDPrWVLO6inyIiJ/RwVIpAwz3L2pM2YpB31b42tkcuOJ9zn9VjvWfrMAm26YKCJSIBUgkTLO6uVL3QlrONhxCimGP3U5xg1bHyD69Zv4dfcus+OJiJRKKkAi5YHFQt0+/6TCYzvYXf1ObA6DLtmbqBPVkxUzHicpJc3shCIipYoKkEg54u4bSPj9H5E6Yi2HfJrjY2TRL/HfZExry5qln+phqiIif1ABEimHAuu2ps4TGzjUbRqnjUBqkUCv7Y+wbUokO3ZsNzueiIjpVIBEyivDoM7191LxyR3sChtJDlY65G6l0Ze9WfX+IySePmN2QhER06gAiZRzVm9/mtzzLhn3bWS/b1s8jRwiT39K7nttWfPFR+Tk2syOKCJS4lSARFxExZpNqP/Yag7f8BGJlqqEGkn0+vVJdk7pyfaYH8yOJyJSolSARFyJYRDW9U6qTNzBrvqjycKdVrYdNF3WnzXvPkD8yUSzE4qIlAgVIBEXZPGsQJNhU8l6MJq9AV1wN2z0Sl6A24y2rP78PbJycs2OKCJSrFSARFyYf2h9Gj36DXF9P+WE9TqqGin03vscv03pwrYf1pkdT0Sk2KgAiQg1O9xCyFM/s6vxeM7jSTP7HiJWDOT7t4dz/MRxs+OJiFxzphegGTNmEBYWhpeXF61bt2bjxo0Fjv3yyy/p3bs3VatWxd/fn44dO7Jy5co8Y+bOnYthGPmmzMzM4t4UkTLNcPeiyZCXsP3zJ3ZV6oXVcNAzbRk+H7VnzbypZGZlmx1RROSaMbUARUVFMX78eJ555hm2b99O165d6devH3FxcZccv2HDBnr37s3y5cuJiYmhZ8+eDBgwgO3b897Yzd/fn/j4+DyTl5dXSWySSJnnW602TcYt4ujNURx1q0Ul4yy9Dkzm8NSO/LhxFQ6HHrIqImWf4TDxv2bt27enVatWzJw50zmvcePGDBw4kClTphRqHU2aNGHIkCE8//zzwIU9QOPHjyclJeWqc6WlpREQEEBqair+/v5XvR6Rss6Rm83uZW9T65d38eUcABsq9KHWkH9Rq2Ytk9OJiOR1Jd/fpu0Bys7OJiYmhsjIyDzzIyMj2bJlS6HWYbfbOXv2LIGBgXnmp6enU6tWLapXr85NN92Ubw/RX2VlZZGWlpZnEhEw3DxocttTGGNj2Fn1RgC6Zayk0uwOrJ37Eud0aFlEyijTClBSUhI2m42goKA884OCgkhISCjUOt566y0yMjIYPHiwc16jRo2YO3cuy5YtY/78+Xh5edG5c2f2799f4HqmTJlCQECAc6pRo8bVbZRIOVUhMJRmD3/G8UFLOexeH3/jHDcceZv4qW2JXrtUh8VEpMwx/SRowzDyvHY4HPnmXcr8+fN58cUXiYqKolq1as75HTp04O6776ZFixZ07dqVBQsW0KBBA95///0C1zVp0iRSU1Od09GjR69+g0TKseua9aD2Uz+wq/XLpOJLXUccHTeOIPqNgRw+tM/seCIihWZaAapSpQpWqzXf3p7ExMR8e4X+KioqilGjRrFgwQJ69ep12bEWi4W2bdtedg+Qp6cn/v7+eSYRuTTD6kaTAePwfDSWHcGDsDsMOp1fR7VPuvLdfyaRnpFhdkQRkb9lWgHy8PCgdevWrF69Os/81atX06lTpwKXmz9/PiNHjuSzzz7jxhtv/NvPcTgcxMbGEhISUuTMIvL/vAKq0mL0HE7e+S0HPJtQwcji+mMzOP2vNmxZGaXDYiJSqrmZ+eETJkxg+PDhtGnTho4dOzJr1izi4uIYPXo0cOHQ1PHjx/n000+BC+VnxIgRvPvuu3To0MG598jb25uAgAAAXnrpJTp06ED9+vVJS0vjvffeIzY2lg8++MCcjRQp50Iad4BGm9n97b8J/uk1ajlOUCv6QX76eS6Bt/2Leg2bmh1RRCQfU88BGjJkCNOmTePll1+mZcuWbNiwgeXLl1Or1oXLa+Pj4/PcE+ijjz4iNzeXhx9+mJCQEOc0btw455iUlBQefPBBGjduTGRkJMePH2fDhg20a9euxLdPxGUYBuH9HqTCY7HEVh9GrsNCu6wtVP+sB+s+fJRUXVkpIqWMqfcBKq10HyCRojl5cDvJXzxKo/MXbkFxnGocbvMMnfqNwGI1/doLESmnysR9gESk/AqqG0GjJ79nT9fpnDSqcB2JdNk2jtipvdj3689mxxMRUQESkWJiGDS+YTiVnojl51qjyHa40So7hrCFvVj/wUMkJ58xO6GIuDAVIBEpVh4+frS6923S7tvErgod8DBsdD/1GTnvtmLT4pnYbHazI4qIC1IBEpESUaVWY5o8sZJ91/+bE5YQqpFMlx1PsWdKV/bEFu7xNyIi14oKkIiUqIbdBlNt4s/8XPdhzuNB09xfabC4P5veu4/TSYlmxxMRF6ECJCIlzs3Th1bDJ3PugR/Y4d8Dq+Ggy5lFML01m+a/wZnTSWZHFJFyTpfBX4IugxcpWft/+BrP1U9R03bhOXxZDjd2eUWQUacfdbvcQeh1NU1OKCJlwZV8f6sAXYIKkEjJs+VkE7voDYJ++4zq9uP/P99hsMc9nDM1I7muw2Dq1G9cqAcmi4jrUQEqIhUgERM5HCQcjOV49EIqxq2ibk7eBxnvt4QRH9KLym1uo3HzDrqxoog4qQAVkQqQSOmRfOIgRzYtwPvQCuqf/wWr8f//yTpKMIer9sSv5a00aXcDHu6mPt5QREymAlREKkAipVN68kkOblyI5bdvaHB2K55GjvO9U1RkX8VueDS9mSadbqSCj4+JSUXEDCpARaQCJFL6ZZ9LY/+WJeT8uox6KZvx5ZzzvTSHD7t8O2JveBONu95KYKVKJiYVkZKiAlREKkAiZYs9J4uDPy0nPXYJNZPWUdmR4nwv0+HOTq/WnK/bj3pdbic0tLp5QUWkWKkAFZEKkEjZ5bDlcvSXDSRtW0RI/BpC7AnO93IdFna5NyWlZiQ1Og8mrE4DXVEmUo6oABWRCpBIOeFwkLA/hhM/LCQwbhW1cw/leXuvpR4Job2o2vZ2Gjdrg8WiMiRSlqkAFZEKkEj5lHxsH0c2L6DCoW+pl7kLy5+uKDvMdfxe7Xr8I26laZseeLhbTUwqIldDBaiIVIBEyr+MMyc4uHEBbr99Q/30GNwNm/O9BCrzW8VueDa7haad+lHB28vEpCJSWCpARaQCJOJastOTObD5S3J3f0W91Gh8yHS+l+zwZbdfJxyNbiK8y0ACKwaYmFRELkcFqIhUgERcly37PId/+pr02KXUTlpPRdKc751zeLLTuw2Z9fpTv8vthAYHm5hURP5KBaiIVIBEBMBhyyFux3ec2baY6xLWUM1+yvlejsPKrx7NSanZh5qd76BOWF1dUSZiMhWgIlIBEpF8HA4S9v1Awg9fUPnYKmrkxjnfsjsMdlsbkHhdb4La307j8Ja6okzEBCpARaQCJCJ/50zcbo5uicL30LfUzd6b570DRk2OVumGNaQZfjWaEFqnKdUCK2oPkUgxUwEqIhUgEbkSGUlxHNq4APf9y6mbEZvnijK4sIfoBFVI8KhFul8YjsoN8AltTLWwZlSvXgN3N11yL3ItqAAVkQqQiFytrLOnObR5EdkHN1Ah7RDVsn7Hn/QCx6c4KnDcWp3kCmHkVKqHR1AjKtVqSvU6jfD38S7B5CJlnwpQEakAicg143CQlZZI4qFfSI3bRW7iPjxSDhJ4/gjVbIl5bsb4Z9kOK8eMEE551SIzoC5G1Yb4VQ8npG4zgqpU0eE0kUtQASoiFSARKQmO7HMkxe3h9OGdnI/fg/XMAfwzDhOccxQvsgtcLsERSIJHDc761sEeWA/vkMZUCWtG9Zp1dQdrcWkqQEWkAiQiprLbOXvqCImHdnL22C4cp37DJ+0QVbN+J/BPT7r/q3SHF8es1Un2rk12pbq4BTWiYo0mVK/bhAA/35LLL2ISFaAiUgESkdIq++wZTh7eScrRXeQk7MUj+QCVzh8hKDceN8N+yWVyHRaOG0Gc8qzJOf+6GFUa4Fs9nKC6zQiuFqJL9qXcUAEqIhUgESlrHLlZnD66j6TDOzkXvxdL0m/4pR8mOCeOCpwvcLnTDn9OuNckzTcMW2A9vIIbU6V2U0JrN8DLw70Et0Ck6FSAikgFSETKDYeDjNPHSDj0C2eP7caW+Bs+qQepnPk71RxJBS6W6XDnqPU6UrxqkO1ZGbtXRfCuhKVCIG4VKuPpXwWfgCpUCKiKf6Uq+Pp468RsMZ0KUBGpAImIK8g5l8rJw7tIjttFVsJePJL3UzHjCMG243iQe0XrSnd4k2r4kWHx47ybP9nu/uR4VMTuVQm8K2L4VMbDNxBPvyp4B1ShQsWq+AdWpYK3ipNcOypARaQCJCKuzGHL4czxAyQe3sn5hP3YzyVjZCZjzUzGPTsVr9xUvG1n8bWfxZ+MIn1WusOLs4YvGRY/zrkFkOUeQK5HAHbPiuBTCcOnMu6+gXj5V8HLrzIVKlUloFI1fHx8VJwknyv5/nYroUwFmjFjBv/617+Ij4+nSZMmTJs2ja5duxY4fv369UyYMIFdu3YRGhrKk08+yejRo/OMWbRoEc899xwHDx6kbt26vPbaa9x6663FvSkiIuWCYXWncs3GVK7Z+O8H23LJTD9DWnIiGSlJZKYlkX32NLnpp3GcOwPnk7FmpeKenYJnbhoVbGlUsJ/Fz5GBxXDga2TiSybYkyCbC1MhOlWGw5Ozf9rjlOnmT65nRWyeFTF8ArH4VHIeqvMOqIJPQGU8vSrg4emFh5cPHu7uKlAuztQCFBUVxfjx45kxYwadO3fmo48+ol+/fuzevZuaNWvmG3/48GH69+/PAw88wLx589i8eTP//Oc/qVq1KoMGDQIgOjqaIUOG8Morr3DrrbeyePFiBg8ezKZNm2jfvn1Jb6KISPlmdcMroBpeAdWuaDGHLZfz6SmcTUkkI/kU59NOkXP2DDnpp7GfT8Y4//97nDxz0/CxpeFrP4ufIx2r4aCCkUUFsvIWp3OF//xch4Us3Mkx3MnGgxzDnVzcybF4YDPcyTU8sFkuTHaLBzarJw6LBw6rBw43TxxWT3DzBKsnhrsnhpsnFjcvDHcvrO6eWDy8sLp7YfXwxs3DCzcPT9w8vHH39MLd0wd3T288vbzx9PDEsFiu6Gcn14aph8Dat29Pq1atmDlzpnNe48aNGThwIFOmTMk3fuLEiSxbtow9e/Y4540ePZodO3YQHR0NwJAhQ0hLS2PFihXOMX379qVSpUrMnz+/ULl0CExEpHRy2G2cP5vM2eRTZKScIjMtiaz009jST2PLOIORmYI1K+XCHqecvMWpoNsEmC3L4f6nMnahfOUY7tgMD3It7s4iZrN4Yrd44DAsOAwrGBb44+8OiwWDi3+3YhgWHIYFDCtY/vjTsILF+OPPi2OsGBYrhuVPfzcsf7x/YT6W/x+D4YZhtWKxGBiGG1isWCwWDIsbhsWCxWIFqxXLH8s4/7RaMSxuWCwGFqsbhsUNDy9vqgTn39lRFGXiEFh2djYxMTE89dRTeeZHRkayZcuWSy4THR1NZGRknnl9+vRh9uzZ5OTk4O7uTnR0NI8++mi+MdOmTSswS1ZWFllZWc7XaWlpV7g1IiJSEgyLFZ+AC1egQSEO0f2JPTeH7Kxz5GRnkn3+PDk5meRkniM3J5PcrExs2ZnkZmdizzmPLScLe04WjpxM7LkX/sR24U/Dlg22bCy2C3+32LKw2LOx2HOw2rOw2nNws2fh5sjB3ZF94U9y8CAHD0cOHkbeE8w9jRw8yfn/GY4/JoC8z9UtV/a5NaLKsz+a9vmmFaCkpCRsNhtBQUF55gcFBZGQkHDJZRISEi45Pjc3l6SkJEJCQgocU9A6AaZMmcJLL710lVsiIiJlgcXNHS+3ALwqBEAl83I47DZysrPIyjxHTtZ5crIyL/yZfbGEnceWnYktJxNbTha27PM4cv+/jBl2Gw67DRw2cDjA+Xf7hT/tduffjT+NMRw2wI5hv/ieHQP7hfdwYFyc96f3Lry+8HeLwwY4sDhsf7znwIINi8OO8cd8Cxf/bsfChfVasOeZrH+Mz7V4mPdLoBScBP3Xk9AcDsdlT0y71Pi/zr/SdU6aNIkJEyY4X6elpVGjRo2/Dy8iInKFDIv1wonYXj5mRzFVE5M/37QCVKVKFaxWa749M4mJifn24FwUHBx8yfFubm5Urlz5smMKWieAp6cnnp6eV7MZIiIiUgaZduq5h4cHrVu3ZvXq1Xnmr169mk6dOl1ymY4dO+Ybv2rVKtq0aYO7u/tlxxS0ThEREXE9ph4CmzBhAsOHD6dNmzZ07NiRWbNmERcX57yvz6RJkzh+/DiffvopcOGKr+nTpzNhwgQeeOABoqOjmT17dp6ru8aNG0e3bt2YOnUqt9xyC0uXLmXNmjVs2rTJlG0UERGR0sfUAjRkyBBOnz7Nyy+/THx8PE2bNmX58uXUqlULgPj4eOLi4pzjw8LCWL58OY8++igffPABoaGhvPfee857AAF06tSJzz//nGeffZbnnnuOunXrEhUVpXsAiYiIiJMehXEJug+QiIhI2XMl39+6/aSIiIi4HBUgERERcTkqQCIiIuJyVIBERETE5agAiYiIiMtRARIRERGXowIkIiIiLkcFSERERFyOCpCIiIi4HFMfhVFaXbw5dlpamslJREREpLAufm8X5iEXKkCXcPbsWQBq1KhhchIRERG5UmfPniUgIOCyY/QssEuw2+2cOHECPz8/DMO4putOS0ujRo0aHD16VM8ZKwX0+yhd9PsoXfT7KH30O7k8h8PB2bNnCQ0NxWK5/Fk+2gN0CRaLherVqxfrZ/j7++sf3lJEv4/SRb+P0kW/j9JHv5OC/d2en4t0ErSIiIi4HBUgERERcTkqQCXM09OTF154AU9PT7OjCPp9lDb6fZQu+n2UPvqdXDs6CVpERERcjvYAiYiIiMtRARIRERGXowIkIiIiLkcFqATNmDGDsLAwvLy8aN26NRs3bjQ7ksuaMmUKbdu2xc/Pj2rVqjFw4ED27dtndizhwu/GMAzGjx9vdhSXdvz4ce6++24qV66Mj48PLVu2JCYmxuxYLik3N5dnn32WsLAwvL29qVOnDi+//DJ2u93saGWaClAJiYqKYvz48TzzzDNs376drl270q9fP+Li4syO5pLWr1/Pww8/zA8//MDq1avJzc0lMjKSjIwMs6O5tK1btzJr1iyaN29udhSXlpycTOfOnXF3d2fFihXs3r2bt956i4oVK5odzSVNnTqVDz/8kOnTp7Nnzx7eeOMN/vWvf/H++++bHa1M01VgJaR9+/a0atWKmTNnOuc1btyYgQMHMmXKFBOTCcCpU6eoVq0a69evp1u3bmbHcUnp6em0atWKGTNm8Oqrr9KyZUumTZtmdiyX9NRTT7F582btpS4lbrrpJoKCgpg9e7Zz3qBBg/Dx8eG///2vicnKNu0BKgHZ2dnExMQQGRmZZ35kZCRbtmwxKZX8WWpqKgCBgYEmJ3FdDz/8MDfeeCO9evUyO4rLW7ZsGW3atOGOO+6gWrVqRERE8O9//9vsWC6rS5curF27lt9++w2AHTt2sGnTJvr3729ysrJNzwIrAUlJSdhsNoKCgvLMDwoKIiEhwaRUcpHD4WDChAl06dKFpk2bmh3HJX3++ef8/PPPbN261ewoAhw6dIiZM2cyYcIEnn76aX766SfGjh2Lp6cnI0aMMDuey5k4cSKpqak0atQIq9WKzWbjtddeY+jQoWZHK9NUgErQX58s73A4rvnT5uXKjRkzhl9++YVNmzaZHcUlHT16lHHjxrFq1Sq8vLzMjiOA3W6nTZs2TJ48GYCIiAh27drFzJkzVYBMEBUVxbx58/jss89o0qQJsbGxjB8/ntDQUO655x6z45VZKkAloEqVKlit1nx7exITE/PtFZKS9cgjj7Bs2TI2bNhA9erVzY7jkmJiYkhMTKR169bOeTabjQ0bNjB9+nSysrKwWq0mJnQ9ISEhhIeH55nXuHFjFi1aZFIi1/bEE0/w1FNPceeddwLQrFkzfv/9d6ZMmaICVAQ6B6gEeHh40Lp1a1avXp1n/urVq+nUqZNJqVybw+FgzJgxfPnll3z33XeEhYWZHcll3XDDDezcuZPY2Fjn1KZNG4YNG0ZsbKzKjwk6d+6c77YQv/32G7Vq1TIpkWs7d+4cFkver2ur1arL4ItIe4BKyIQJExg+fDht2rShY8eOzJo1i7i4OEaPHm12NJf08MMP89lnn7F06VL8/Pyce+cCAgLw9vY2OZ1r8fPzy3fuVYUKFahcubLOyTLJo48+SqdOnZg8eTKDBw/mp59+YtasWcyaNcvsaC5pwIABvPbaa9SsWZMmTZqwfft23n77be677z6zo5Vpugy+BM2YMYM33niD+Ph4mjZtyjvvvKNLrk1S0LlXH3/8MSNHjizZMJJPjx49dBm8yb7++msmTZrE/v37CQsLY8KECTzwwANmx3JJZ8+e5bnnnmPx4sUkJiYSGhrK0KFDef755/Hw8DA7XpmlAiQiIiIuR+cAiYiIiMtRARIRERGXowIkIiIiLkcFSERERFyOCpCIiIi4HBUgERERcTkqQCIiIuJyVIBERETE5agAiUi5ZBgGS5YsKdI6evTowfjx452va9eurbtTi5QTKkAiUiYlJibyj3/8g5o1a+Lp6UlwcDB9+vQhOjra7GgiUgboYagiUiYNGjSInJwcPvnkE+rUqcPJkydZu3YtZ86cMTuaiJQB2gMkImVOSkoKmzZtYurUqfTs2ZNatWrRrl07Jk2axI033ugcl5SUxK233oqPjw/169dn2bJledaze/du+vfvj6+vL0FBQQwfPpykpKSS3hwRMYEKkIiUOb6+vvj6+rJkyRKysrIKHPfSSy8xePBgfvnlF/r378+wYcOce4ji4+Pp3r07LVu2ZNu2bXz77becPHmSwYMHl9RmiIiJVIBEpMxxc3Nj7ty5fPLJJ1SsWJHOnTvz9NNP88svv+QZN3LkSIYOHUq9evWYPHkyGRkZ/PTTTwDMnDmTVq1aMXnyZBo1akRERARz5szh+++/57fffjNjs0SkBKkAiUiZNGjQIE6cOMGyZcvo06cP69ato1WrVsydO9c5pnnz5s6/V6hQAT8/PxITEwGIiYnh+++/d+5N8vX1pVGjRgAcPHiwRLdFREqeToIWkTLLy8uL3r1707t3b55//nnuv/9+XnjhBUaOHAmAu7t7nvGGYWC32wGw2+0MGDCAqVOn5ltvSEhIsWcXEXOpAIlIuREeHl7oe/+0atWKRYsWUbt2bdzc9J9CEVejQ2AiUuacPn2a66+/nnnz5vHLL79w+PBhFi5cyBtvvMEtt9xSqHU8/PDDnDlzhqFDh/LTTz9x6NAhVq1axX333YfNZivmLRARs+l/e0SkzPH19aV9+/a88847HDx4kJycHGrUqMEDDzzA008/Xah1hIaGsnnzZiZOnEifPn3IysqiVq1a9O3bF4tF/28oUt4ZDofDYXYIERERkZKk/80RERERl6MCJCIiIi5HBUhERERcjgqQiIiIuBwVIBEREXE5KkAiIiLiclSARERExOWoAImIiIjLUQESERERl6MCJCIiIi5HBUhERERcjgqQiIiIuJz/A2dOIVoVrsEDAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "plt.plot(coll_matrix[1,0,:],label=\"Old TARDIS scheme\")\n", - "plt.plot(chianti_collisional_rates.loc[1,0,0,1],label=\"New TARDIS scheme\")\n", - "plt.xlabel(\"Shell\")\n", - "plt.ylabel(\"Coeff\")\n", - "plt.legend()" + "legacy_solver.coll_exc_coeff.loc[1,0,0,1] / cmfgen_collisional_rates.loc[1,0,0,1]" ] }, { From 072b7b079adb02740421fd80546686948fb11db3 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Mon, 7 Oct 2024 14:38:52 -0400 Subject: [PATCH 113/118] Remove irrelevant change --- .../plasma/construction_simple_plasma.ipynb | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/docs/physics/plasma/construction_simple_plasma.ipynb b/docs/physics/plasma/construction_simple_plasma.ipynb index a8719bb41cc..10b53802885 100644 --- a/docs/physics/plasma/construction_simple_plasma.ipynb +++ b/docs/physics/plasma/construction_simple_plasma.ipynb @@ -109,42 +109,6 @@ "plasma_solver_factory.setup_factory()\n" ] }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "SCRUN MAGIC\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [] - }, { "cell_type": "code", "execution_count": 36, From 7be9ed6b157d01225e7a89cc848df8eae935724c Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Mon, 7 Oct 2024 14:47:47 -0400 Subject: [PATCH 114/118] Corrected changes to the plasma solver factory --- tardis/plasma/assembly/base.py | 669 ++------------------------------- 1 file changed, 25 insertions(+), 644 deletions(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 05820476fbe..2cf73b4cf44 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -55,81 +55,24 @@ def map_species_from_string(species): return [species_string_to_tuple(spec) for spec in species] -class PlasmaSolverFactory: - """Factory class for creating plasma solvers. - - atom_data : object - Object containing atomic data. - selected_atomic_numbers : list - List of selected atomic numbers. - - Attributes - ---------- - excitation_analytical_approximation : str - Analytical approximation for excitation (default: "lte"). - ionization_analytical_approximation : str - Analytical approximation for ionization (default: "lte"). - nebular_ionization_delta_treatment : tuple - Species to use for the delta_treatment in nebular ionization ML93 (default: ()). - link_t_rad_t_electron : float - Link between t_rad and t_electron (default: 1.0). - radiative_rates_type : str - Type of radiative rates (default: "dilute-blackbody"). - delta_treatment : float or None - Delta treatment (default: None). - legacy_nlte_species : list - List of legacy non-LTE species (default: []). - nlte_excitation_species : list - List of non-LTE excitation species (default: []). - nlte_ionization_species : list - List of non-LTE ionization species (default: []). - nlte_solver : str - Non-LTE solver (default: "lu"). - Helium treatment options (default: "none"). - heating_rate_data_file : str - Heating rate data file (default: "none"). - continuum_interaction_species : list - List of continuum interaction species (default: []). - enable_adiabatic_cooling : bool - Flag for enabling adiabatic cooling (default: False). - enable_two_photon_decay : bool - Flag for enabling two-photon decay (default: False). - line_interaction_type : str - Type of line interaction (default: "scatter"). - plasma_modules : list - List of plasma modules (default: []). - kwargs : dict - Additional keyword arguments (default: {}). - property_kwargs : dict - Additional keyword arguments for properties (default: {}). - - Methods - ------- - parse_plasma_config(plasma_config) - continuum_interaction_species_multi_index() - Get the continuum interaction species as a multi-index. - setup_factory(config) - setup_helium_treatment() - setup_legacy_nlte(nlte_config) - Set up the non-LTE properties for the legacy species. - setup_analytical_approximations() - Set up the analytical approximations for excitation and ionization. - initialize_j_blues(dilute_planckian_radiation_field, lines_df) - Initialize j_blues. - """ +def convert_species_to_multi_index(species_strs): + return pd.MultiIndex.from_tuples( + map_species_from_string(species_strs), + names=["atomic_number", "ion_number"], + ) + +class PlasmaSolverFactory: ## Analytical Approximations excitation_analytical_approximation: str = "lte" ionization_analytical_approximation: str = "lte" - nebular_ionization_delta_treatment: ( - tuple - ) = () # species to use for the delta_treatment in nebular ionization ML93 + nebular_ionization_delta_treatment: tuple # species to use for the delta_treatment in nebular ionization ML93 link_t_rad_t_electron: float = 1.0 radiative_rates_type: str = "dilute-blackbody" - delta_treatment: float | None = None + delta_treatment = None ## Statistical Balance Solver legacy_nlte_species: list = [] @@ -155,26 +98,19 @@ class PlasmaSolverFactory: kwargs: dict = {} property_kwargs: dict = {} - def __init__(self, atom_data, selected_atomic_numbers, config=None) -> None: - self.plasma_modules = [] - self.kwargs = {} - self.property_kwargs = {} - + def __init__( + self, + atom_data, + config=None, + ) -> None: if config is not None: self.parse_plasma_config(config.plasma) self.atom_data = atom_data - self.atom_data.prepare_atom_data( - selected_atomic_numbers, - line_interaction_type=self.line_interaction_type, - continuum_interaction_species=self.continuum_interaction_species_multi_index, - nlte_species=self.legacy_nlte_species, - ) @property def continuum_interaction_species_multi_index(self): - return pd.MultiIndex.from_tuples( - map_species_from_string(self.continuum_interaction_species), - names=["atomic_number", "ion_number"], + return convert_species_to_multi_index( + self.continuum_interaction_species ) def parse_plasma_config(self, plasma_config): @@ -218,7 +154,7 @@ def parse_plasma_config(self, plasma_config): plasma_config.continuum_interaction.enable_two_photon_decay ) - def setup_factory(self, config=None): + def prepare_factory(self, selected_atomic_numbers, config=None): """ Set up the plasma factory. @@ -227,6 +163,13 @@ def setup_factory(self, config=None): config : object, optional Configuration object containing plasma settings (default: None). """ + self.atom_data.prepare_atom_data( + selected_atomic_numbers, + line_interaction_type=self.line_interaction_type, + continuum_interaction_species=self.continuum_interaction_species_multi_index, + nlte_species=self.legacy_nlte_species, + ) + self.check_continuum_interaction_species() self.plasma_modules = basic_inputs + basic_properties @@ -590,6 +533,7 @@ def assemble( dilute_planckian_radiation_field, time_explosion, electron_densities=None, + **kwargs, ): """ Assemble the plasma based on the provided parameters and settings. @@ -615,569 +559,6 @@ def assemble( ValueError If an error occurs during assembly. """ - assert len(dilute_lte_excitation_properties.temperature) == len( - number_densities.columns - ) - j_blues = self.initialize_j_blues( - dilute_planckian_radiation_field, self.atom_data.lines - ) - plasma_solver_settings = PlasmaSolverSettings( - RADIATIVE_RATES_TYPE=self.radiative_rates_type - ) - - kwargs = dict( - time_explosion=time_explosion, - dilute_planckian_radiation_field=dilute_planckian_radiation_field, - number_density=number_densities, - link_t_rad_t_electron=self.link_t_rad_t_electron, - atomic_data=self.atom_data, - j_blues=j_blues, - continuum_interaction_species=self.continuum_interaction_species_multi_index, - nlte_ionization_species=self.nlte_ionization_species, - nlte_excitation_species=self.nlte_excitation_species, - ) - - if len(self.continuum_interaction_species) > 0: - initial_continuum_properties = self.initialize_continuum_properties( - dilute_planckian_radiation_field - ) - kwargs.update( - gamma=initial_continuum_properties.photo_ionization_rate_coefficient, - bf_heating_coeff_estimator=None, - stim_recomb_cooling_coeff_estimator=None, - alpha_stim_factor=initial_continuum_properties.stimulated_recombination_rate_factor, - ) - - if electron_densities is not None: - electron_densities = pd.Series(electron_densities.cgs.value) - self.setup_electron_densities(electron_densities) - kwargs["helium_treatment"] = self.helium_treatment - return BasePlasma( - plasma_properties=self.plasma_modules, - property_kwargs=self.property_kwargs, - plasma_solver_settings=plasma_solver_settings, - **kwargs, - ) - - -import logging - -import numpy as np -import pandas as pd -from astropy import units as u - -from tardis.plasma import BasePlasma -from tardis.plasma.base import PlasmaSolverSettings -from tardis.plasma.exceptions import PlasmaConfigError -from tardis.plasma.properties import ( - HeliumNumericalNLTE, - IonNumberDensity, - IonNumberDensityHeNLTE, - LevelBoltzmannFactorNLTE, - MarkovChainTransProbsCollector, - RadiationFieldCorrection, - StimulatedEmissionFactor, -) -from tardis.plasma.properties.base import TransitionProbabilitiesProperty -from tardis.plasma.properties.level_population import LevelNumberDensity -from tardis.plasma.properties.nlte_rate_equation_solver import ( - NLTEPopulationSolverLU, - NLTEPopulationSolverRoot, -) -from tardis.plasma.properties.property_collections import ( - adiabatic_cooling_properties, - basic_inputs, - basic_properties, - continuum_interaction_inputs, - continuum_interaction_properties, - dilute_lte_excitation_properties, - helium_lte_properties, - helium_nlte_properties, - helium_numerical_nlte_properties, - lte_excitation_properties, - lte_ionization_properties, - macro_atom_properties, - nebular_ionization_properties, - nlte_lu_solver_properties, - nlte_properties, - nlte_root_solver_properties, - non_nlte_properties, - two_photon_properties, -) -from tardis.plasma.properties.rate_matrix_index import NLTEIndexHelper -from tardis.transport.montecarlo.estimators.continuum_radfield_properties import ( - DiluteBlackBodyContinuumPropertiesSolver, -) -from tardis.util.base import species_string_to_tuple - -logger = logging.getLogger(__name__) - - -def map_species_from_string(species): - return [species_string_to_tuple(spec) for spec in species] - - -def convert_species_to_multi_index(species_strs): - return pd.MultiIndex.from_tuples( - map_species_from_string(species_strs), - names=["atomic_number", "ion_number"], - ) - - -class PlasmaSolverFactory: - - ## Analytical Approximations - excitation_analytical_approximation: str = "lte" - ionization_analytical_approximation: str = "lte" - nebular_ionization_delta_treatment: tuple # species to use for the delta_treatment in nebular ionization ML93 - - link_t_rad_t_electron: float = 1.0 - - radiative_rates_type: str = "dilute-blackbody" - - delta_treatment = None - - ## Statistical Balance Solver - legacy_nlte_species: list = [] - - nlte_excitation_species: list = [] - nlte_ionization_species: list = [] - nlte_solver: str = "lu" - - ## Helium Treatment options - helium_treatment: str = "none" - heating_rate_data_file: str = "none" - - ## Continuum Interaction - continuum_interaction_species: list = [] - enable_adiabatic_cooling: bool = False - enable_two_photon_decay: bool = False - - ## Opacities - line_interaction_type: str = "scatter" - - ## Assembly properties - plasma_modules: list = [] - kwargs: dict = {} - property_kwargs: dict = {} - - def __init__( - self, - atom_data, - config=None, - ) -> None: - if config is not None: - self.parse_plasma_config(config.plasma) - self.atom_data = atom_data - - @property - def continuum_interaction_species_multi_index(self): - return convert_species_to_multi_index( - self.continuum_interaction_species - ) - - def parse_plasma_config(self, plasma_config): - """ - Parse the plasma configuration. - - Parameters - ---------- - plasma_config : PlasmaConfig - The plasma configuration object containing the plasma parameters. - - Returns - ------- - None - """ - self.continuum_interaction_species = ( - plasma_config.continuum_interaction.species - ) - self.set_nlte_species_from_string(plasma_config.nlte.species) - self.line_interaction_type = plasma_config.line_interaction_type - self.link_t_rad_t_electron = plasma_config.link_t_rad_t_electron - - self.excitation_analytical_approximation = plasma_config.excitation - self.ionization_analytical_approximation = plasma_config.ionization - self.delta_treatment = plasma_config.get("delta_treatment", None) - - self.helium_treatment = plasma_config.helium_treatment - self.heating_rate_data_file = plasma_config.heating_rate_data_file - - self.nlte_ionization_species = plasma_config.nlte_ionization_species - self.nlte_excitation_species = plasma_config.nlte_excitation_species - - self.nlte_solver = plasma_config.nlte_solver - - self.radiative_rates_type = plasma_config.radiative_rates_type - - self.enable_adiabatic_cooling = ( - plasma_config.continuum_interaction.enable_adiabatic_cooling - ) - self.enable_two_photon_decay = ( - plasma_config.continuum_interaction.enable_two_photon_decay - ) - - def prepare_factory(self, selected_atomic_numbers, config=None): - """ - Set up the plasma factory. - - Parameters - ---------- - config : object, optional - Configuration object containing plasma settings (default: None). - """ - self.atom_data.prepare_atom_data( - selected_atomic_numbers, - line_interaction_type=self.line_interaction_type, - continuum_interaction_species=self.continuum_interaction_species_multi_index, - nlte_species=self.legacy_nlte_species, - ) - - self.check_continuum_interaction_species() - - self.plasma_modules = basic_inputs + basic_properties - - self.setup_analytical_approximations() - self.property_kwargs[RadiationFieldCorrection] = dict( - delta_treatment=self.delta_treatment - ) - if (config is not None) and len(self.legacy_nlte_species) > 0: - self.setup_legacy_nlte(config.plasma.nlte) - else: - self.plasma_modules += non_nlte_properties - - if self.line_interaction_type in ("downbranch", "macroatom") and ( - len(self.continuum_interaction_species) == 0 - ): - self.plasma_modules += macro_atom_properties - - self.setup_helium_treatment() - - if len(self.continuum_interaction_species) > 0: - self.setup_continuum_interactions() - - def setup_helium_treatment(self): - """ - Set up the helium treatment for the plasma assembly. - - Parameters - ---------- - helium_treatment : str - The type of helium treatment to be used. Possible values are: - - "recomb-nlte": Use recombination NLTE treatment for helium. - - "numerical-nlte": Use numerical NLTE treatment for helium. - - heating_rate_data_file : str or None - The path to the heating rate data file. Required when using - "numerical-nlte" helium treatment. - - Raises - ------ - PlasmaConfigError - If the helium NLTE treatment is incompatible with the NLTE ionization - and excitation treatment. - - If the heating rate data file is not specified when using - "numerical-nlte" helium treatment. - """ - if ( - self.helium_treatment == "recomb-nlte" - or self.helium_treatment == "numerical-nlte" - ) and ( - len(self.nlte_ionization_species + self.nlte_excitation_species) > 0 - ): - # Prevent the user from using helium NLTE treatment with - # NLTE ionization and excitation treatment. This is because - # the helium_nlte_properties could overwrite the NLTE ionization - # and excitation ion number and electron densities. - # helium_numerical_nlte_properties is also included here because - # it is currently in the same if else block, and thus may block - # the addition of the components from the else block. - raise PlasmaConfigError( - "Helium NLTE treatment is incompatible with the NLTE ionization and excitation treatment." - ) - - # TODO: Disentangle these if else block such that compatible components - # can be added independently. - if self.helium_treatment == "recomb-nlte": - self.plasma_modules += helium_nlte_properties - elif self.helium_treatment == "numerical-nlte": - self.plasma_modules += helium_numerical_nlte_properties - if self.heating_rate_data_file in ["none", None]: - raise PlasmaConfigError("Heating rate data file not specified") - self.property_kwargs[HeliumNumericalNLTE] = dict( - heating_rate_data_file=self.heating_rate_data_file - ) - else: - # If nlte ionization species are present, we don't want to add the - # IonNumberDensity from helium_lte_properties, since we want - # to use the IonNumberDensity provided by the NLTE solver. - if ( - len(self.nlte_ionization_species + self.nlte_excitation_species) - > 0 - ): - self.plasma_modules.append(LevelNumberDensity) - else: - self.plasma_modules += helium_lte_properties - - def setup_legacy_nlte(self, nlte_config): - """ - Set up the non-LTE (NLTE) properties for the legacy species. - - Parameters - ---------- - nlte_config : dict - A dictionary containing the NLTE configuration. - """ - self.plasma_modules += nlte_properties - self.plasma_modules.append( - LevelBoltzmannFactorNLTE.from_config(nlte_config) - ) - self.property_kwargs[StimulatedEmissionFactor] = dict( - nlte_species=self.legacy_nlte_species - ) - - def setup_analytical_approximations(self): - """ - Setup the analytical approximations for excitation and ionization. - - Returns - ------- - None - """ - if self.excitation_analytical_approximation == "lte": - self.plasma_modules += lte_excitation_properties - elif self.excitation_analytical_approximation == "dilute-lte": - self.plasma_modules += dilute_lte_excitation_properties - else: - raise PlasmaConfigError( - f'Invalid excitation analytical approximation. Configured as {self.excitation_analytical_approximation} but needs to be either "lte" or "dilute-lte"' - ) - - if self.ionization_analytical_approximation == "lte": - self.plasma_modules += lte_ionization_properties - elif self.ionization_analytical_approximation == "nebular": - self.plasma_modules += nebular_ionization_properties - else: - raise PlasmaConfigError( - f'Invalid excitation analytical approximation. Configured as {self.ionization_analytical_approximation} but needs to be either "lte" or "nebular"' - ) - - def initialize_j_blues(self, dilute_planckian_radiation_field, lines_df): - if (self.radiative_rates_type == "dilute-blackbody") or ( - self.radiative_rates_type == "detailed" - ): - j_blues = pd.DataFrame( - dilute_planckian_radiation_field.calculate_mean_intensity( - lines_df.nu.values - ), - index=lines_df.index, - ) - - elif self.radiative_rates_type == "blackbody": - planckian_rad_field = ( - dilute_planckian_radiation_field.to_planckian_radiation_field() - ) - j_blues = pd.DataFrame( - planckian_rad_field.calculate_mean_intensity( - lines_df.nu.values - ), - index=lines_df.index, - ) - - else: - raise ValueError( - f"radiative_rates_type type unknown - {self.radiative_rates_type}" - ) - - return j_blues - - def set_continuum_interaction_species_from_string( - self, continuum_interaction_species - ): - """ - Set the continuum interaction species from a list of species strings. - - Parameters - ---------- - continuum_interaction_species : list of str - List of species strings representing the continuum interaction species. - - Returns - ------- - None - """ - self.continuum_interaction_species = [ - species_string_to_tuple(species) - for species in continuum_interaction_species - ] - - def check_continuum_interaction_species(self): - """ - Check if all continuum interaction species belong to atoms that have been specified in the configuration. - - Raises - ------ - PlasmaConfigError: If not all continuum interaction species belong to specified atoms. - """ - continuum_atoms = ( - self.continuum_interaction_species_multi_index.get_level_values( - "atomic_number" - ) - ) - - continuum_atoms_in_selected_atoms = np.all( - continuum_atoms.isin(self.atom_data.selected_atomic_numbers) - ) - - if not continuum_atoms_in_selected_atoms: - raise PlasmaConfigError( - "Not all continuum interaction species " - "belong to atoms that have been specified " - "in the configuration." - ) - - def set_nlte_species_from_string(self, nlte_species): - """ - Sets the non-LTE species from a string representation. - - Parameters - ---------- - nlte_species : str - A string representation of the non-LTE species. - - Returns - ------- - None - This method does not return anything. - """ - self.legacy_nlte_species = map_species_from_string(nlte_species) - - def setup_continuum_interactions(self): - """ - Set up continuum interactions for the plasma assembly. - - Raises - ------ - PlasmaConfigError: If the line_interaction_type is not "macroatom". - PlasmaConfigError: If an NLTE ionization species is not in the continuum species. - PlasmaConfigError: If an NLTE excitation species is not in the continuum species. - PlasmaConfigError: If the NLTE solver type is unknown. - """ - if self.line_interaction_type != "macroatom": - raise PlasmaConfigError( - "Continuum interactions require line_interaction_type " - f"macroatom (instead of {self.line_interaction_type})." - ) - - self.plasma_modules += continuum_interaction_properties - self.plasma_modules += continuum_interaction_inputs - - if self.enable_adiabatic_cooling: - self.plasma_modules += adiabatic_cooling_properties - - if self.enable_two_photon_decay: - self.plasma_modules += two_photon_properties - - transition_probabilities_outputs = [ - plasma_property.transition_probabilities_outputs - for plasma_property in self.plasma_modules - if issubclass(plasma_property, TransitionProbabilitiesProperty) - ] - transition_probabilities_outputs = [ - item - for sublist in transition_probabilities_outputs - for item in sublist - ] - - self.property_kwargs[MarkovChainTransProbsCollector] = { - "inputs": transition_probabilities_outputs - } - if len(self.nlte_ionization_species + self.nlte_excitation_species) > 0: - if self.nlte_ionization_species: - nlte_ionization_species = self.nlte_ionization_species - for species in nlte_ionization_species: - if species not in self.continuum_interaction_species: - raise PlasmaConfigError( - f"NLTE ionization species {species} not in continuum species." - ) - if self.nlte_excitation_species: - nlte_excitation_species = self.nlte_excitation_species - for species in nlte_excitation_species: - if species not in self.continuum_interaction_species: - raise PlasmaConfigError( - f"NLTE excitation species {species} not in continuum species." - ) - self.property_kwargs[NLTEIndexHelper] = { - "nlte_ionization_species": self.nlte_ionization_species, - "nlte_excitation_species": self.nlte_excitation_species, - } - if self.nlte_solver == "lu": - self.plasma_modules += nlte_lu_solver_properties - logger.warning( - "LU solver will be inaccurate for NLTE excitation, proceed with caution." - ) - elif self.nlte_solver == "root": - self.plasma_modules += nlte_root_solver_properties - else: - raise PlasmaConfigError( - f"NLTE solver type unknown - {self.nlte_solver}" - ) - - def setup_electron_densities(self, electron_densities): - if self.helium_treatment == "numerical-nlte": - self.property_kwargs[IonNumberDensityHeNLTE] = dict( - electron_densities=electron_densities - ) - elif ( - len(self.nlte_ionization_species + self.nlte_excitation_species) > 0 - ) and self.nlte_solver == "root": - self.property_kwargs[NLTEPopulationSolverRoot] = dict( - electron_densities=electron_densities - ) - elif ( - len(self.nlte_ionization_species + self.nlte_excitation_species) > 0 - ) and self.nlte_solver == "lu": - self.property_kwargs[NLTEPopulationSolverLU] = dict( - electron_densities=electron_densities - ) - else: - self.property_kwargs[IonNumberDensity] = dict( - electron_densities=electron_densities - ) - - def initialize_continuum_properties(self, dilute_planckian_radiation_field): - """ - Initialize the continuum properties of the plasma. - - Parameters - ---------- - dilute_planckian_radiation_field : DilutePlanckianRadiationField - The dilute Planckian radiation field. - - Returns - ------- - initial_continuum_properties : `~tardis.plasma.properties.ContinuumProperties` - The initial continuum properties of the plasma. - """ - t_electrons = dilute_planckian_radiation_field.temperature.to(u.K).value - - initial_continuum_solver = DiluteBlackBodyContinuumPropertiesSolver( - self.atom_data - ) - initial_continuum_properties = initial_continuum_solver.solve( - dilute_planckian_radiation_field, t_electrons - ) - return initial_continuum_properties - - def assemble( - self, - number_densities, - dilute_planckian_radiation_field, - time_explosion, - electron_densities=None, - **kwargs, - ): j_blues = self.initialize_j_blues( dilute_planckian_radiation_field, self.atom_data.lines ) From 571356d48ebfb01434387c3081a10530f4ca4249 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Tue, 8 Oct 2024 11:02:10 -0400 Subject: [PATCH 115/118] Partially fixes tests --- .../tests/test_collisional_transitions.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py index 752ac9e6db3..9b5d80ea574 100644 --- a/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py +++ b/tardis/plasma/detailed_balance/tests/test_collisional_transitions.py @@ -75,8 +75,9 @@ def new_chianti_atomic_dataset(tardis_regression_path): @pytest.fixture def legacy_chianti_collision_rate_plasma_solver(atomic_dataset): - atomic_dataset.prepare_atom_data([1], "macroatom", [(1, 0)], []) - return atomic_dataset.nlte_data.get_collision_matrix( + atom_data = copy.deepcopy(atomic_dataset) + atom_data.prepare_atom_data([1], "macroatom", [(1, 0)], []) + return atom_data.nlte_data.get_collision_matrix( (1, 0), np.array([10000, 20000]) ) @@ -97,7 +98,7 @@ def test_legacy_cmfgen_collisional_strengths( ] # This is testing againt the old setup - radiative_transitions = nlte_atomic_dataset.lines.loc[ + radiative_transitions = atom_data.lines.loc[ (1, 0, slice(None), slice(None)), : ] @@ -122,19 +123,18 @@ def test_thermal_collision_rates( nlte_atomic_dataset, regression_data, ): - radiative_transitions = nlte_atomic_dataset.lines.loc[ + atom_data = copy.deepcopy(nlte_atomic_dataset) + radiative_transitions = atom_data.lines.loc[ (1, 0, slice(None), slice(None)), : ] - collision_strengths = nlte_atomic_dataset.yg_data.loc[ + collision_strengths = atom_data.yg_data.loc[ (1, 0, slice(None), slice(None)), : ] - collision_strengths_temperatures = ( - nlte_atomic_dataset.collision_data_temperatures - ) + collision_strengths_temperatures = atom_data.collision_data_temperatures therm_coll_rate_solver = ThermalCollisionalRateSolver( - nlte_atomic_dataset.levels, + atom_data.levels, radiative_transitions, collision_strengths_temperatures, collision_strengths, From 35f09c26f74d41195e1a6fb367c73c3ad054a75a Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Tue, 8 Oct 2024 13:46:46 -0400 Subject: [PATCH 116/118] Slightly dirty fix for electron densities not refreshing properly --- tardis/plasma/assembly/base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tardis/plasma/assembly/base.py b/tardis/plasma/assembly/base.py index 2cf73b4cf44..f661a394b68 100644 --- a/tardis/plasma/assembly/base.py +++ b/tardis/plasma/assembly/base.py @@ -590,7 +590,8 @@ def assemble( if electron_densities is not None: electron_densities = pd.Series(electron_densities.cgs.value) - self.setup_electron_densities(electron_densities) + + self.setup_electron_densities(electron_densities) plasma_assemble_kwargs["helium_treatment"] = self.helium_treatment plasma_assemble_kwargs.update(kwargs) return BasePlasma( From 30c89cc86b01d468d11e13a334b04db5e127076a Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Wed, 9 Oct 2024 15:20:11 -0400 Subject: [PATCH 117/118] Fix NLTE tests by passing electron densities as an option input to the population solvers --- .../properties/nlte_rate_equation_solver.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tardis/plasma/properties/nlte_rate_equation_solver.py b/tardis/plasma/properties/nlte_rate_equation_solver.py index c15a46bf196..c8629ce9591 100644 --- a/tardis/plasma/properties/nlte_rate_equation_solver.py +++ b/tardis/plasma/properties/nlte_rate_equation_solver.py @@ -24,6 +24,14 @@ class NLTEPopulationSolverRoot(ProcessingPlasmaProperty): outputs = ("ion_number_density", "electron_densities") + def __init__( + self, + plasma_parent, + electron_densities=None, + ): + super().__init__(plasma_parent) + self._electron_densities = electron_densities + def calculate( self, gamma, @@ -169,6 +177,14 @@ def calculate( class NLTEPopulationSolverLU(ProcessingPlasmaProperty): outputs = ("ion_number_density", "electron_densities") + def __init__( + self, + plasma_parent, + electron_densities=None, + ): + super().__init__(plasma_parent) + self._electron_densities = electron_densities + def calculate( self, gamma, From 71cc4564b5ed3d5031653ea894f6c3821156ae90 Mon Sep 17 00:00:00 2001 From: Andrew Fullard Date: Mon, 14 Oct 2024 10:49:32 -0400 Subject: [PATCH 118/118] Ruff formatting --- .../plasma/detailed_balance/comparison.ipynb | 10 +++++----- docs/physics/plasma/detailed_balance/rates.ipynb | 13 ++++++++----- tardis/plasma/detailed_balance/rates/__init__.py | 9 ++++----- .../detailed_balance/rates/collision_strengths.py | 2 +- .../detailed_balance/rates/collisional_rates.py | 11 ++++++----- .../detailed_balance/rates/radiative_rates.py | 2 -- .../plasma/properties/nlte_rate_equation_solver.py | 10 ++++------ 7 files changed, 28 insertions(+), 29 deletions(-) diff --git a/docs/physics/plasma/detailed_balance/comparison.ipynb b/docs/physics/plasma/detailed_balance/comparison.ipynb index 40c6132affb..f15ceb6145c 100644 --- a/docs/physics/plasma/detailed_balance/comparison.ipynb +++ b/docs/physics/plasma/detailed_balance/comparison.ipynb @@ -35,6 +35,8 @@ } ], "source": [ + "from astropy import units as u\n", + "\n", "from tardis.io.atom_data import AtomData\n", "from tardis.plasma.detailed_balance.rates import (\n", " RadiativeRatesSolver,\n", @@ -42,11 +44,9 @@ " UpsilonRegemorterSolver,\n", ")\n", "from tardis.plasma.radiation_field import (\n", + " DilutePlanckianRadiationField,\n", " PlanckianRadiationField,\n", - " DilutePlanckianRadiationField\n", - ")\n", - "\n", - "from astropy import units as u" + ")\n" ] }, { @@ -55,8 +55,8 @@ "metadata": {}, "outputs": [], "source": [ - "from tardis.model.base import SimulationState\n", "from tardis.io.configuration.config_reader import Configuration\n", + "from tardis.model.base import SimulationState\n", "\n", "config = Configuration.from_yaml(\"test_continuum_template_wkerzen_rate_coeffs.yml\")" ] diff --git a/docs/physics/plasma/detailed_balance/rates.ipynb b/docs/physics/plasma/detailed_balance/rates.ipynb index d9c6b6ff080..af411014a63 100644 --- a/docs/physics/plasma/detailed_balance/rates.ipynb +++ b/docs/physics/plasma/detailed_balance/rates.ipynb @@ -50,15 +50,18 @@ } ], "source": [ - "import numpy as np\n", + "from astropy import constants as const\n", "from astropy import units as u\n", "\n", "from tardis.io.atom_data import AtomData\n", - "from tardis.plasma.detailed_balance.rates import RadiativeRatesSolver, UpsilonRegemorterSolver, ThermalCollisionalRateSolver\n", + "from tardis.plasma.detailed_balance.rates import (\n", + " RadiativeRatesSolver,\n", + " ThermalCollisionalRateSolver,\n", + " UpsilonRegemorterSolver,\n", + ")\n", "from tardis.plasma.radiation_field import (\n", " PlanckianRadiationField,\n", - ")\n", - "from astropy import constants as const" + ")\n" ] }, { @@ -1394,7 +1397,7 @@ ], "metadata": { "kernelspec": { - "display_name": "tardis-devel", + "display_name": "tardis", "language": "python", "name": "python3" }, diff --git a/tardis/plasma/detailed_balance/rates/__init__.py b/tardis/plasma/detailed_balance/rates/__init__.py index 2a9040877a9..b4101b7d28c 100644 --- a/tardis/plasma/detailed_balance/rates/__init__.py +++ b/tardis/plasma/detailed_balance/rates/__init__.py @@ -1,11 +1,10 @@ -from tardis.plasma.detailed_balance.rates.radiative_rates import ( - RadiativeRatesSolver, -) from tardis.plasma.detailed_balance.rates.collision_strengths import ( - UpsilonRegemorterSolver, UpsilonCMFGENSolver, + UpsilonRegemorterSolver, ) - from tardis.plasma.detailed_balance.rates.collisional_rates import ( ThermalCollisionalRateSolver, ) +from tardis.plasma.detailed_balance.rates.radiative_rates import ( + RadiativeRatesSolver, +) diff --git a/tardis/plasma/detailed_balance/rates/collision_strengths.py b/tardis/plasma/detailed_balance/rates/collision_strengths.py index d34b58661c9..1d861343469 100644 --- a/tardis/plasma/detailed_balance/rates/collision_strengths.py +++ b/tardis/plasma/detailed_balance/rates/collision_strengths.py @@ -1,8 +1,8 @@ import numpy as np import pandas as pd from astropy import units as u +from scipy.interpolate import PchipInterpolator, splev, splrep from scipy.special import exp1 -from scipy.interpolate import PchipInterpolator, splrep, splev from tardis import constants as const diff --git a/tardis/plasma/detailed_balance/rates/collisional_rates.py b/tardis/plasma/detailed_balance/rates/collisional_rates.py index c5fc5c1638c..32ae38dbfae 100644 --- a/tardis/plasma/detailed_balance/rates/collisional_rates.py +++ b/tardis/plasma/detailed_balance/rates/collisional_rates.py @@ -4,8 +4,8 @@ from tardis import constants as const from tardis.plasma.detailed_balance.rates.collision_strengths import ( - UpsilonCMFGENSolver, UpsilonChiantiSolver, + UpsilonCMFGENSolver, UpsilonRegemorterSolver, ) @@ -89,10 +89,11 @@ def solve(self, temperatures_electron): / (temperatures_electron * const.k_B), ).value collision_rates_coeff_lu = ( - BETA_COLL / np.sqrt(temperatures_electron) * boltzmann_factor - ).to( - "cm3 / s" - ).value * thermal_all_collision_strengths # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 + (BETA_COLL / np.sqrt(temperatures_electron) * boltzmann_factor) + .to("cm3 / s") + .value + * thermal_all_collision_strengths + ) # see formula A2 in Przybilla, Butler 2004 - Apj 609, 1181 collision_rates_coeff_ul = ( (self.g_u / self.g_l)[np.newaxis].T diff --git a/tardis/plasma/detailed_balance/rates/radiative_rates.py b/tardis/plasma/detailed_balance/rates/radiative_rates.py index f6da37d4048..ab6fb22b444 100644 --- a/tardis/plasma/detailed_balance/rates/radiative_rates.py +++ b/tardis/plasma/detailed_balance/rates/radiative_rates.py @@ -3,11 +3,9 @@ class RadiativeRatesSolver: - einstein_coefficients: pd.DataFrame def __init__(self, einstein_coefficients): - # Ensuring the right columns are present assert einstein_coefficients.index.names == [ "atomic_number", diff --git a/tardis/plasma/properties/nlte_rate_equation_solver.py b/tardis/plasma/properties/nlte_rate_equation_solver.py index c8629ce9591..8ba8c10f098 100644 --- a/tardis/plasma/properties/nlte_rate_equation_solver.py +++ b/tardis/plasma/properties/nlte_rate_equation_solver.py @@ -146,9 +146,7 @@ def calculate( ), jac=True, ) - assert ( - solution.success - ), "No solution for NLTE population equation found or solver takes too long to converge" + assert solution.success, "No solution for NLTE population equation found or solver takes too long to converge" ( ion_number_density[shell], electron_densities[shell], @@ -733,9 +731,9 @@ def calculate_rate_matrix( total_coll_ion_coefficients.loc[(atomic_number,)], total_coll_recomb_coefficients.loc[(atomic_number,)], ) - rate_matrix.loc[ - (atomic_number, slice(None)), (atomic_number) - ] = rate_matrix_block + rate_matrix.loc[(atomic_number, slice(None)), (atomic_number)] = ( + rate_matrix_block + ) charge_conservation_row = calculate_charge_conservation_row(atomic_numbers) if set_charge_conservation: