Source code for GUIBRUSHR.Retrieval.ModelCalculation.Classes.SpeciesMolec

"""
Module containing the SpeciesMolec class for handling molecular species data.

This module defines the SpeciesMolec class which manages various molecular
species properties including opacity, isotopes, condensed molecules, and
composition calculations for atmospheric modeling.
"""
import re

from numpy import array, append

from GUIBRUSHR.General_Constants.FunctionsAndConstants.Constant_Variables import ConstantVariables


[docs] class SpeciesMolec: """ Class for managing molecular species data and composition. This class handles the initialization and management of various molecular species properties including continuum opacity, line species, isotopes, condensed molecules, and Rayleigh scattering species. It also manages the composition calculation based on initial parameters or manual input. """
[docs] def __init__( self, continum_opacity, line_species, line_species_isotope, line_species_complete_name_hr, line_species_complete_name_lr, list_condensed_molecules, rayleigh_species, mass_vector, start_molecs, initial_params=None, manual_model_composition=None, ): """ Initialize the SpeciesMolec instance. Args: continum_opacity: Continuum opacity data for the species line_species: Line species data line_species_isotope: Isotope information for line species line_species_complete_name_hr: Complete HR names of line species line_species_complete_name_lr: Complete LR names of line species list_condensed_molecules: List of condensed molecular species rayleigh_species: Rayleigh scattering species data mass_vector: Vector containing mass information start_molecs: Starting index for molecular parameters initial_params: Initial parameter array (default: None) manual_model_composition: Manual composition override (default: None) """ # Handle default mutable argument if initial_params is None: initial_params = [] # Store input parameters as instance attributes self.continum_opacity = continum_opacity self.line_species = line_species self.line_species_isotope = line_species_isotope self.line_species_complete_name_hr = line_species_complete_name_hr self.line_species_complete_name_lr = line_species_complete_name_lr self.list_condensed_molecules = list_condensed_molecules self.rayleigh_species = rayleigh_species self.mass_vector = mass_vector self.start_molecs = start_molecs # Configure molecular parameter handling # Skip H2, He (and potentially H-, H, e- based on comments) self.skip_molec_param_array = 2 # Check if H- (hydrogen minus) is included in continuum opacity self.include_h_m = "H-" in continum_opacity # Initialize composition based on available data self._initialize_composition(initial_params, manual_model_composition)
def _initialize_composition(self, initial_params, manual_model_composition): """ Initialize the molecular composition. This method sets up the composition dictionary either from initial parameters or from a manually provided composition. Args: initial_params: Array of initial parameters manual_model_composition: Manual composition override """ if manual_model_composition is None: # Extract molecular and condensate arrays from initial parameters array_molecules = array( initial_params[self.start_molecs:ConstantVariables.start_elements] ) array_condensate = array( initial_params[ConstantVariables.start_condensed_molecs:] ) # Create composition dictionary from parameter objects # Note: This won't be defined for manual_model scenarios self.composition = { param.name: param.get_starting_value() for param in append(array_molecules, array_condensate) if param is not None } else: # Use manually provided composition self.composition = manual_model_composition