Source code for GUIBRUSHR.Retrieval.ModelCalculation.Classes.ParamForModel
"""
Parameter model class for atmospheric retrieval calculations.
This module contains the ParamForModel class which manages individual parameters
used in atmospheric retrieval models, including molecular species parameters,
atmospheric properties, and their constraints.
"""
[docs]
class ParamForModel:
"""
Manages individual parameters for atmospheric retrieval models.
This class handles the storage, validation, and manipulation of individual
parameters used in atmospheric retrieval calculations. It supports both
fixed and variable parameters, molecular species handling, and boundary
checking for retrieval algorithms.
Attributes:
name: Parameter name
status: Whether parameter is variable (True) or fixed (False)
scale: Parameter scaling factor
constant_vmr: Whether volume mixing ratio is constant
range_min: Minimum allowed parameter value
range_max: Maximum allowed parameter value
isotope: Isotope information
is_molec: Whether parameter represents a molecular species
molec_formula: Molecular formula if applicable
mass: Molecular mass if applicable
name_for_list_molec: Name used in molecular species lists
starting_value_fixed: Fixed starting value
starting_value_fixed_arr: Array of fixed starting values
starting_value_variable: Variable starting value
starting_value_variable_arr: Array of variable starting values
value_in_retrieval: Current value during retrieval
value_arr_in_retrieval: Array of values during retrieval
sigma_prior: Prior uncertainty
sigma_prior_arr: Array of prior uncertainties
"""
[docs]
def __init__(
self,
name,
status,
scale,
constant_vmr,
range_min,
range_max,
is_molec,
molec_formula,
mass,
name_for_list_molec,
isotope,
):
"""
Initialize the ParamForModel object.
Args:
name: Parameter name
status: Parameter status (True for variable, False for fixed)
scale: Scaling factor for the parameter
constant_vmr: Whether volume mixing ratio is constant
range_min: Minimum allowed parameter value
range_max: Maximum allowed parameter value
is_molec: Whether parameter represents a molecular species
molec_formula: Molecular formula (if molecular species)
mass: Molecular mass (if molecular species)
name_for_list_molec: Name for molecular species lists
isotope: Isotope information
"""
# Basic parameter properties
self.name = name
self.status = status
self.scale = scale
self.constant_vmr = constant_vmr
self.range_min = range_min
self.range_max = range_max
self.isotope = isotope
# Starting values for fixed parameters
self.starting_value_fixed = None
self.starting_value_fixed_arr = []
# Starting values for variable parameters
self.starting_value_variable = None
self.starting_value_variable_arr = []
# Values during retrieval process
self.value_in_retrieval = None
self.value_arr_in_retrieval = []
# Prior uncertainty information
self.sigma_prior = None
self.sigma_prior_arr = []
# Molecular species properties
self.is_molec = is_molec
self.molec_formula = molec_formula
self.mass = mass
self.name_for_list_molec = name_for_list_molec
# STARTING VALUE MANAGEMENT METHODS
[docs]
def update_starting_value(self, value, sigma):
"""
Update the starting value and prior uncertainty for the parameter.
Args:
value: New starting value
sigma: Prior uncertainty (sigma)
"""
if self.status:
# Parameter is variable - update variable starting value
self.starting_value_variable = value
else:
# Parameter is fixed - update fixed starting value
self.starting_value_fixed = value
# Update prior uncertainty
self.sigma_prior = sigma
[docs]
def get_starting_value(self):
"""
Get the current starting value based on parameter status.
Returns:
Starting value (variable if status=True, fixed if status=False)
"""
if self.status:
return self.starting_value_variable
else:
return self.starting_value_fixed
[docs]
def get_starting_value_arr(self):
"""
Get the starting value array based on parameter status.
Returns:
Starting value array (variable if status=True, fixed if status=False)
"""
if self.status:
return self.starting_value_variable_arr
else:
return self.starting_value_fixed_arr
# ARRAY MANAGEMENT METHODS
[docs]
def append_elem(self, value, sigma):
"""
Append a value and sigma to the appropriate arrays.
Args:
value: Value to append
sigma: Sigma value to append
"""
if self.status:
# Parameter is variable - append to variable array
self.starting_value_variable_arr.append(value)
else:
# Parameter is fixed - append to fixed array
self.starting_value_fixed_arr.append(value)
# Always append sigma to sigma array
self.sigma_prior_arr.append(sigma)
# RETRIEVAL VALUE MANAGEMENT METHODS
[docs]
def get_retrieval_value(self):
"""
Get the current retrieval value based on parameter status.
Returns:
Retrieval value (variable if status=True, fixed starting value if status=False)
"""
if self.status:
return self.value_in_retrieval
else:
return self.starting_value_fixed
[docs]
def get_retrieval_value_arr(self):
"""
Get the retrieval value array based on parameter status.
Returns:
Retrieval value array (variable if status=True, fixed starting array if status=False)
"""
if self.status:
return self.value_arr_in_retrieval
else:
return self.starting_value_fixed_arr
# VALIDATION METHODS
[docs]
def boundaries_check(self):
"""
Check if parameter values are within specified boundaries.
Returns:
True if all values are within boundaries, False otherwise
"""
cond = True
if self.status:
# Check boundaries for variable parameters
if self.starting_value_variable is None:
# Check array values if single value is not set
for elem in self.value_arr_in_retrieval:
cond = cond and (self.range_min <= elem <= self.range_max)
else:
# Check single retrieval value
cond = self.range_min <= self.value_in_retrieval <= self.range_max
return cond
else:
# Fixed parameters always pass boundary check
return cond
# MOLECULAR SPECIES METHODS
[docs]
def is_molec_func(self):
"""
Check if parameter represents a molecular species.
Returns:
True if parameter is a molecular species, False otherwise
"""
return self.is_molec
[docs]
def molec_and_full_name(self):
"""
Get molecular formula and full parameter name.
Returns:
Tuple containing (molecular_formula, parameter_name)
"""
return self.molec_formula, self.name
[docs]
def is_VMR_costant(self):
"""
Check if volume mixing ratio is constant.
Returns:
True if VMR is constant, False otherwise
"""
return self.constant_vmr
[docs]
def get_mass(self):
"""
Get the molecular mass.
Returns:
Molecular mass value
"""
return self.mass
# UNCERTAINTY METHODS
[docs]
def get_sigma_prior(self):
"""
Get the prior uncertainty (sigma) value or array.
Returns:
Sigma array if starting_value_variable is None, single sigma value otherwise
"""
if self.starting_value_variable is None:
return self.sigma_prior_arr
else:
return self.sigma_prior