Source code for GUIBRUSHR.Retrieval.main
#!/usr/bin/env python3
"""
Main script for running atmospheric retrieval using MCMC sampling.
This script serves as the entry point for performing atmospheric retrieval
analysis on exoplanet spectra. It initializes a ModelData object with the
provided parameters and runs Monte Carlo Markov Chain (MCMC) sampling using
the exofast_demc algorithm.
Usage:
python main.py <path_params> <path_df> <table_output_file> <id_process> <path_default> <moresteps>
Args:
path_params: Path to parameter configuration file
path_df: Path to dataframe file containing observational data
table_output_file: Path for output table file
id_process: Process ID for parallel execution
path_default: Default working directory path
moresteps: Boolean string ("True"/"False") to continue from previous run
Author: GUIBRUSHR Team
License: [License information if available]
"""
import os
import time
import sys
# Configure threading for numerical libraries
os.environ["OMP_NUM_THREADS"] = "1"
os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["MKL_NUM_THREADS"] = "1" # export MKL_NUM_THREADS=6
os.environ["VECLIB_MAXIMUM_THREADS"] = "1" # export VECLIB_MAXIMUM_THREADS=4
os.environ["NUMEXPR_NUM_THREADS"] = "1" # export NUMEXPR_NUM_THREADS=6
[docs]
def parse_command_line_arguments():
"""
Parse and validate command line arguments.
Returns
-------
tuple
A tuple containing (path_params, path_df, table_output_file,
id_process, path_default, moresteps_bool)
Raises
------
SystemExit
If incorrect number of arguments provided
"""
if len(sys.argv) != 7:
print(f"Usage: {sys.argv[0]} <path_params> <path_df> <table_output_file> "
f"<id_process> <path_default> <moresteps>")
sys.exit(1)
# Extract command line arguments
path_params = sys.argv[1]
path_df = sys.argv[2]
table_output_file = sys.argv[3]
id_process = sys.argv[4]
path_default = sys.argv[5]
moresteps_str = sys.argv[6]
# Convert moresteps string to boolean
moresteps_bool = moresteps_str == "True"
return (path_params, path_df, table_output_file,
id_process, path_default, moresteps_bool)
[docs]
def create_model_object(path_params, path_df, id_process, table_output_file, path_default):
"""
Create and configure the ModelData object for retrieval.
This function initializes the ModelData object with all necessary
parameters for atmospheric retrieval analysis.
Parameters
----------
path_params : str
Path to parameter configuration file
path_df : str
Path to dataframe file containing observational data
id_process : str
Process ID for parallel execution
table_output_file : str
Path for output table file
path_default : str
Default working directory path
Returns
-------
ModelData.ModelData
Configured ModelData object ready for retrieval
"""
from GUIBRUSHR.Retrieval.ModelCalculation import ModelData
model_obj = ModelData.ModelData(
path_params=path_params,
path_df=path_df,
id_process=id_process,
table_output_file=table_output_file,
model_type="Retrieval",
lbl_sampling_hr=None,
lbl_sampling_lr=None,
range_min=None,
range_max=None,
nlayers=None,
manual_model_obj=None,
load_new_opacities=True,
path_default=path_default,
)
return model_obj
[docs]
def setup_output_directory(model_obj):
"""
Create the output directory for retrieval results.
Parameters
----------
model_obj : ModelData.ModelData
The model object containing path information
"""
output_dir = model_obj.retrieval_data.path_results
os.system(f"mkdir -p {output_dir}")
[docs]
def run_mcmc_sampling(model_obj, moresteps):
"""
Execute Monte Carlo Markov Chain sampling using exofast_demc.
Parameters
----------
model_obj : ModelData.ModelData
The configured model object
moresteps : bool
Whether to continue from a previous run
Returns
-------
tuple
A tuple containing (parameters, chi2_values) from the MCMC sampling
"""
# Run MONTECARLO sampling using exofast_demc algorithm
from GUIBRUSHR.Retrieval.ExofastMCMC import exofast_demc
parameters, chi2_values = exofast_demc.likelihood(model_obj, moresteps=moresteps)
return parameters, chi2_values
[docs]
def cleanup_and_report_timing(model_obj, start_time):
"""
Clean up resources and report execution timing.
Parameters
----------
model_obj : ModelData.ModelData
The model object to clean up
start_time : float
The start time from time.time()
"""
# Clean up model object to free memory
del model_obj
# Calculate and report execution time
end_time = time.time()
serial_time = end_time - start_time
print(f"Serial took {serial_time:.1f} seconds")
[docs]
def main():
"""
Main function orchestrating the atmospheric retrieval process.
This function coordinates the entire retrieval workflow:
1. Set up environment paths
2. Parse command line arguments
3. Create and configure the model object
4. Run MCMC sampling
5. Clean up and report results
"""
# Setup paths from command line arguments
path_default = sys.argv[5]
sys.path.append(path_default)
os.chdir(path_default)
# Parse command line arguments
(path_params, path_df, table_output_file,
id_process, path_default, moresteps) = parse_command_line_arguments()
# Record start time for performance measurement
start_time = time.time()
# Create and configure the model object
model_obj = create_model_object(
path_params, path_df, id_process, table_output_file, path_default
)
# Set up output directory
setup_output_directory(model_obj)
# Run MCMC sampling
_, _ = run_mcmc_sampling(model_obj, moresteps)
# Clean up and report timing
cleanup_and_report_timing(model_obj, start_time)
if __name__ == "__main__":
main()