Source code for pleiades.sammy.fitting.config

from typing import Optional

from pydantic import BaseModel, Field

from pleiades.experimental.models import PhysicsParameters
from pleiades.nuclear.isotopes.manager import IsotopeManager
from pleiades.nuclear.models import nuclearParameters
from pleiades.sammy.data.options import SammyData
from pleiades.sammy.fitting.options import FitOptions
from pleiades.utils.logger import loguru_logger

logger = loguru_logger.bind(name=__name__)


[docs] class FitConfig(BaseModel): """Container for fit parameters including nuclear and physics parameters. Attributes: nuclear_params (nuclearParameters): Nuclear parameters used in SAMMY calculations. physics_params (PhysicsParameters): Physics parameters including energy, normalization, and broadening. """ fit_title: str = Field(description="Title of fitting run", default="SAMMY Fit") tolerance: Optional[float] = Field(default=None, description="Tolerance for chi-squared convergence") max_iterations: int = Field(description="Maximum number of iterations", default=1) i_correlation: int = Field(description="Correlation matrix interval", default=50) max_cpu_time: Optional[float] = Field(default=None, description="Maximum CPU time allowed") max_wall_time: Optional[float] = Field(default=None, description="Maximum wall time allowed") max_memory: Optional[float] = Field(default=None, description="Maximum memory allowed") max_disk: Optional[float] = Field(default=None, description="Maximum disk space allowed") iptdop: Optional[int] = Field( default=None, description="Grid enhancement for Doppler broadening (Card Set 2 IPTDOP)" ) iptwid: Optional[int] = Field(default=None, description="Grid enhancement for resonance tails (Card Set 2 IPTWID)") ixxchn: Optional[int] = Field(default=None, description="Special channel skip or ENDF ZA (Card Set 2 IXXCHN)") ndigit: Optional[int] = Field(default=None, description="Digits for compact covariance output (Card Set 2 NDIGIT)") idropp: Optional[int] = Field( default=None, description="Percent threshold for zeroing covariances (Card Set 2 IDROPP)" ) matnum: Optional[int] = Field(default=None, description="ENDF material number (Card Set 2 MATNUM)") nuclear_params: nuclearParameters = Field( default_factory=nuclearParameters, description="Nuclear parameters used in SAMMY calculations" ) physics_params: PhysicsParameters = Field( default_factory=PhysicsParameters, description="Physics parameters used in SAMMY calculations" ) data_params: SammyData = Field(default_factory=SammyData, description="Data parameters used in SAMMY calculations") options_and_routines: FitOptions = Field( default_factory=FitOptions, description="Fit options used in SAMMY calculations" )
[docs] def append_isotope_from_string(self, isotope_string: str) -> None: isotope_info = IsotopeManager().get_isotope_parameters_from_isotope_string(isotope_string) if isotope_info: logger.info(f"Appending Isotope {isotope_string} to isotope list in nuclear parameters.") self.nuclear_params.isotopes.append(isotope_info) else: logger.error(f"Could not append Isotope {isotope_string}.")