# Configuration WaveDiff uses a set of YAML and INI configuration files to control each pipeline task. This section provides a high-level overview of the configuration system, followed by detailed explanations of each file. ## Overview of Workflows WaveDiff consists of three CLI tasks, configured by passing a configuration file to the `wavediff` command (e.g., `wavediff -c configs.yaml -o output/`): | Task | Purpose | |------|---------| | `training` | Trains a PSF model using the provided dataset and hyperparameters. | | `metrics` | Evaluates model performance using multiple metrics, optionally comparing against a ground-truth model. | | `plotting` | Generates figures summarising the results from the metrics pipeline. | WaveDiff also provides two standalone Python APIs used outside the `wavediff` CLI: | Component | Purpose | |-----------|---------| | `sims` | Provides classes and methods for simulating monochromatic, polychromatic, and spatially-varying PSFs
for generating custom datasets. | | `inference` | Provides classes and methods for inferring PSFs as a function of position and SED from a trained PSF
model. | ## Configuration File Structure WaveDiff expects configuration files under the `config/` directory. **Configuration filenames are flexible** — you can name them as you wish (e.g., `training_euclid_v2.yaml`, `my_metrics.yaml`) as long as you reference them correctly in `configs.yaml` or command-line arguments. The filenames shown below are conventional defaults used in documentation examples. The files required depend on which task or component you are running: ``` config/ ├── configs.yaml # Master configuration (all CLI tasks) ├── data_config.yaml # Dataset paths (training task only) ├── logging.conf # Logging configuration (all CLI tasks) ├── training_config.yaml # Training task ├── metrics_config.yaml # Metrics task ├── plotting_config.yaml # Plotting task └── inference_config.yaml # Inference API ``` | Task / Component | Required | Optional | |---------------|--------------|---------| | `training` | `configs.yaml`, `data_config.yaml` ,
`logging.conf`, `training_config.yaml` | `metrics_config.yaml`
(_triggers post-training metrics_) | | `metrics` | `configs.yaml`, `logging.conf`,
`metrics_config.yaml` | `plotting_config.yaml`
(_triggers post-metrics plotting_) | | `plotting` | `configs.yaml`, `logging.conf`,
`plotting_config.yaml`| — | | `inference` | `inference_config.yaml` | `data_config.yaml` | **Notes:** - **Configuration filenames are flexible.** The names shown above (e.g., `training_config.yaml`) are conventional defaults. You may use any filename as long as you reference it correctly in `configs.yaml` or via command-line arguments. - **Keys and section names within configuration files must be preserved.** While you can rename files, the internal YAML structure (keys like `model_params`, `training`, etc.) must remain unchanged, as the software depends on them. - The metrics and plotting tasks retrieve dataset paths from the trained model's configuration and do not require `data_config.yaml`. - When `metrics_config.yaml` is specified as optional for the `training` task, metrics evaluation runs automatically after training completes. - When `plotting_config.yaml` is specified as optional for the `metrics` task, plots are generated automatically after metrics evaluation completes. - `logging.conf` uses standard INI syntax and configures logging behaviour for all CLI tasks. Each of the configuration files is described in detail below. (data_config)= ## Data Configuration ### 1. Purpose Specifies the training and test datasets used by the training CLI task. ### 2. Key Fields Both `data.training` and `data.test` share the same structure: | Field | Required | Description | |-----------|--------------|--------------| | `data_dir` | Yes | Path to the directory containing the dataset. | | `file` | Yes | Filename of the dataset (`.npy`). | ### 3. Notes - The default dataset bundled with WaveDiff can be used by pointing `data_dir` to its installation directory. - The `metrics` and `plotting` tasks retrieve dataset paths automatically from the trained model's configuration file and do not require this file. - This file is optional for the `inference` API; see [inference_config.yaml](inference_config) if you need to supply prior information for inference. ### 4. Example ```yaml data: training: data_dir: path/to/training/data file: train.npy test: data_dir: path/to/test/data file: test.npy ``` (training_config)= ## Training Configuration ### 1. Purpose Controls the training pipeline, including model selection, hyperparameters, optional post-training metrics evaluation, and data loading behaviour. ### 2. General Notes - **All required parameters must be specified.** There is currently no default configuration — missing values will prevent the model from being instantiated. - **Optional fields:** - `metrics_config` — trigger metrics evaluation after training completes - `multi_cycle_params.save_all_cycles`— defaults to `False` - Some parameters are specific to the physical PSF model and may be ignored by simpler model types. - An example training configuration file is provided in the repository root (`config/training_config.yaml`). Copy and adapt this template for your own runs. - **Fraction notation**: Fields like `reference_shifts` accept fraction strings (e.g., "`-1/3`") which are automatically converted to floats. You can also use decimal values directly (e.g., `-0.333`). - Every field in the YAML file includes an inline comment. If any descriptions remain unclear or unexpected behavior occurs, please open a [GitHub issue](https://github.com/CosmoStat/wf-psf/issues/new). **Note on example values**: The parameter values shown below correspond to a typical Euclid-like WaveDiff training run. Adapt `model_name`, telescope dimensions, pixel/field coordinates, and SED settings to match your instrument and dataset. ### 3. Top-Level Training Parameters `training` ```yaml training: # ID name for this run (used in output filenames and logs) id_name: run_001 # Path to data configuration file data_config: data_config.yaml # Load dataset on initialization (True) or manually later (False) load_data_on_init: True # Optional: path to metrics configuration to run after training metrics_config: ``` ### 4. Model Parameters Controls PSF model type, geometry, oversampling, and physical corrections. `training.model_params` ```yaml model_params: # Model type. Options: 'poly', 'physical_poly' model_name: physical_poly # Number of wavelength bins for polychromatic reconstruction n_bins_lda: 8 # Downsampling rate to match telescope pixel sampling output_Q: 3 # Oversampling rate of OPD/WFE PSF model oversampling_rate: 3 # Pixel PSF postage stamp size output_dim: 32 # OPD/Wavefront space dimensions pupil_diameter: 256 # Physical correction switches use_prior: False correct_centroids: True add_ccd_misalignments: False # Centroid correction parameters sigma_centroid_window: 2.5 # Std dev of centroiding window reference_shifts: [-0.333, -0.333] # Reference pixel shifts (Euclid default: -1/3, -1/3) # Obscuration geometry obscuration_rotation_angle: 0 # Rotation in degrees (multiples of 90); counterclockwise # CCD misalignments input file path ccd_misalignments_input_path: /path/to/ccd_misalignments_file.txt # Sample weighting based on noise standard deviation use_sample_weights: True # Sample weight sigmoid function parameters sample_weights_sigmoid: apply_sigmoid: False # Enable sigmoid weighting transform sigmoid_max_val: 5.0 # Maximum sample weight value sigmoid_power_k: 1.0 # Sigmoid steepness (higher = steeper) # Interpolation settings for physical-poly model interpolation_type: None interpolation_args: None # Spectral energy distribution (SED) parameters sed_interp_pts_per_bin: 0 sed_extrapolate: True sed_interp_kind: linear sed_sigma: 0 # Field and pixel coordinates x_lims: [0.0, 1000.0] y_lims: [0.0, 1000.0] pix_sampling: 12 # Pixel size in microns # Telescope parameters tel_diameter: 1.2 # Aperture diameter in meters tel_focal_length: 24.5 # Focal length in meters euclid_obsc: True # Use Euclid-specific obscuration mask (set False for other instruments) LP_filter_length: 3 # Low-pass filter kernel size for obscurations ``` ### 5. Parametric Model Hyperparameters `training.model_params.param_hparams` ```yaml param_hparams: random_seed: 3877572 l2_param: 0.0 # L2 regularization weight for OPD/WFE n_zernikes: 15 # Number of Zernike polynomials d_max: 2 # Maximum polynomial degree save_optim_history_param: True ``` ### 6. Non-Parametric Model Hyperparameters `training.model_params.nonparam_hparams` ```yaml nonparam_hparams: d_max_nonparam: 5 num_graph_features: 0 l1_rate: 1.0e-8 project_dd_features: False reset_dd_features: False save_optim_history_nonparam: True ``` ### 7. Training Hyperparameters Controls batch size, loss function, optimizer selection, and multi-cycle learning. `training.training_hparams` ```yaml training_hparams: batch_size: 32 # Number of samples per training batch loss: 'mask_mse' # Loss function. Options: 'mask_mse', 'mse' optimizer: name: 'rectified_adam' # Options: 'adam', 'rectified_adam' multi_cycle_params: total_cycles: 2 cycle_def: complete # Options: 'parametric', 'non-parametric', 'complete' save_all_cycles: False # If True, saves checkpoints for all cycles; otherwise only saved_cycle saved_cycle: cycle2 # Which cycle checkpoint to retain learning_rate_params: [1.0e-2, 1.0e-2] # Per-cycle learning rate for parametric model learning_rate_non_params: [1.0e-1, 1.0e-1] # Per-cycle learning rate for non-parametric model n_epochs_params: [20, 20] # Per-cycle epochs for parametric model n_epochs_non_params: [100, 120] # Per-cycle epochs for non-parametric model ``` **Optimizer Notes:** - `rectified_adam` requires tensorflow-addons to be installed manually. - If TensorFlow Addons is not installed and `rectified_adam` is requested, WaveDiff will raise a runtime error with installation instructions. - Standard workflows (`training`, `metrics`, `plotting`) run without TensorFlow Addons. (metrics_config)= ## Metrics Configuration ### 1. Purpose Defines how a trained PSF model is evaluated. This configuration specifies which metrics to compute, which model weights to use, and how ground truth stars are obtained. It allows you to: - Select a fully trained PSF model or a checkpoint for evaluation. - Specify which training cycle's weights to evaluate. - Compute Polychromatic, Monochromatic, OPD, and Weak Lensing Shape metrics. - Use precomputed ground truth stars from the dataset if available, or automatically generate them from the configured ground truth model. - Optionally produce plots of the computed metrics via a plotting configuration file. ### 2. General Notes - WaveDiff automatically searches the dataset used for training. If the dataset contains `stars`, `SR_stars`, or `super_res_stars` fields, these are used as the ground truth for metrics evaluation. - If precomputed ground truth stars are not found in the dataset, WaveDiff regenerates them using the `ground_truth_model` parameters. **All required fields in `model_params` must be specified**; leaving them empty will prevent the metrics pipeline from running (see [Ground Truth Model Parameters](section-ground-truth-model) for details). - Metrics evaluation can be run independently of training by specifying both `trained_model_path` and `trained_model_config` to point to a previously trained model. - Metrics defined in [Metrics Overview table](metrics-table) are selectively computed according to their boolean flags. The Polychromatic Pixel Reconstruction metric is always computed. - The `plotting_config` parameter triggers plotting of the metrics results if a valid configuration file is provided. If left empty, metrics are computed without generating plots (see [Plotting Configuration](section-plotting-config)). - Batch size and other evaluation hyperparameters can be set under `metrics_hparams` (see [Evaluation Hyperparameters](section-evaluation-hyperparameters)) (section-metrics-overview)= ### 3. Metrics Overview (metrics-table)= | Metric type | Description | Relevant v3.0 Flag | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | | Polychromatic Pixel Reconstruction | Computes absolute and relative RMSE of pixel residuals between the trained polychromatic PSF model and test data at low- and super-pixel resolution. | `eval_train_shape_results_dict`, `eval_test_shape_results_dict` | | Monochromatic Pixel Reconstruction | Computes absolute and relative RMSE of pixel residuals as a function of wavelength between a monochromatic PSF model and test data. | `eval_mono_metric` | | Optical Path Differences (OPD) | Computes absolute and relative RMSE of residuals between predicted OPD maps and ground truth OPD. | `eval_opd_metric` | | Weak Lensing Shape Metrics | Second-order moments-based metrics for PSF ellipticity and size at super-pixel resolution using [GalSim HSM](https://galsim-developers.github.io/GalSim/_build/html/hsm.html). | `eval_train_shape_results_dict`, `eval_test_shape_results_dict` | **Notes:** - Metrics requiring ground truth (Monochromatic, OPD) are valid only on simulated datasets. - RMSE may be less reliable for noisy stars (e.g., real data). Alternative formulations are in development. - Super-resolution is required for Weak Lensing Shape metrics on undersampled PSFs (e.g., Euclid observations). ### 4. Top-Level Configuration Parameters `metrics` ```yaml metrics: model_save_path: saved_training_cycle: 2 trained_model_path: trained_model_config: eval_mono_metric: True eval_opd_metric: True eval_train_shape_results_dict: False eval_test_shape_results_dict: False plotting_config: ``` **Parameter descriptions:** - `model_save_path`: Specifies which weights to load. Options: `psf_model` (final trained weights) or `checkpoint` (intermediate checkpoint). - `saved_training_cycle`: Which training cycle to evaluate (e.g., `1`, `2`, ...). - `trained_model_path`: Absolute path to the parent directory of a previously trained model. Leave empty if running `training` + `metrics` sequentially in the same workflow. - `trained_model_config`: Filename of the training configuration (located in `/config/`). - `eval_mono_metric`: If `True`, computes the monochromatic pixel reconstruction metric. Requires `ground_truth_model` to be configured (see [Ground Truth Model Parameters](section-ground-truth-model)). - `eval_opd_metric`: If `True`, computes the optical path difference (OPD) metric. Requires `ground_truth_model` to be configured. - `eval_train_shape_results_dict`: If `True`, computes Weak Lensing Shape metrics on the training dataset. - `eval_test_shape_results_dict`: If `True`, computes Weak Lensing Shape metrics on the test dataset. - `plotting_config`: Optional filename of a plotting configuration (e.g., `plotting_config.yaml`) to automatically generate plots after metrics evaluation. Leave empty to skip plotting. **Notes:** - The Polychromatic Pixel Reconstruction metric is **always computed** regardless of flag settings. - All other metrics (`eval_mono_metric`, `eval_opd_metric`, `eval_train_shape_results_dict`, `eval_test_shape_results_dict`) are only computed when their respective flags are set to `True`. (section-ground-truth-model)= ### 5. Ground Truth Model Parameters Specifies parameters for generating ground truth PSFs when precomputed stars are not available in the dataset. This configuration includes a subset of the training parameters — only those needed to simulate ground truth PSFs for comparison. `metrics.ground_truth_model` ```yaml ground_truth_model: model_params: model_name: n_bins_lda: 20 output_Q: 3 oversampling_rate: 3 output_dim: 32 pupil_diameter: 256 LP_filter_length: 2 use_prior: False correct_centroids: False sigma_centroid_window: 2.5 reference_shifts: [-0.333, -0.333] obscuration_rotation_angle: 0 add_ccd_misalignments: False ccd_misalignments_input_path: interpolation_type: None sed_interp_pts_per_bin: 0 sed_extrapolate: True sed_interp_kind: linear sed_sigma: 0 x_lims: [0.0, 1000.0] y_lims: [0.0, 1000.0] param_hparams: random_seed: 3877572 l2_param: 0.0 n_zernikes: 45 d_max: 2 save_optim_history_param: True nonparam_hparams: d_max_nonparam: 5 num_graph_features: 10 l1_rate: 1.0e-8 project_dd_features: False reset_dd_features: False save_optim_history_nonparam: True ``` **Notes:** - **All fields shown above are required.** Do not leave them empty. Even if the dataset contains precomputed ground truth stars, omitting these fields will prevent the metrics pipeline from running. - This configuration uses a subset of the training parameters — telescope geometry (`tel_diameter`, `tel_focal_length`, `pix_sampling`) and sample weighting (`use_sample_weights`, `sample_weights_sigmoid`) are not required for metrics evaluation, as these are only needed during model training. - Ground truth model parameters should match the simulation settings used to generate your dataset for meaningful comparison. - Future releases may allow optional instantiation of `ground_truth_model` when precomputed stars are available in the dataset. (section-evaluation-hyperparameters)= ### 6. Evaluation Hyperparameters `metrics.metrics_hparams` ```yaml metrics_hparams: batch_size: 16 opt_stars_rel_pix_rmse: False l2_param: 0.0 output_Q: 1 output_dim: 64 # Optimizer configuration for metrics evaluation optimizer: name: 'adam' # Fixed to Adam for metrics evaluation learning_rate: 1.0e-2 beta_1: 0.9 beta_2: 0.999 epsilon: 1.0e-7 amsgrad: False ``` **Parameter descriptions:** - `batch_size`: Number of samples processed per batch during evaluation. - `opt_stars_rel_pix_rmse`: (_optional individual star RMSE_) If `True`, saves the relative pixel RMSE for each individual star in the test dataset in addition to the mean across the field of view. - `l2_param`: L2 loss weight for the OPD metric. - `output_Q`: Downsampling rate from the high-resolution pixel modeling space to the resolution at which PSF shapes are measured. Recommended value: `1`. - `output_dim`: Pixel dimension of the PSF postage stamp. Should be large enough to contain most of the PSF signal. The required size depends on the `output_Q` value used. Recommended value: `64` or higher. - `optimizer`: Optimizer configuration for metrics evaluation. Unlike training, metrics evaluation always uses the standard Adam optimizer. - `name`: Fixed to `'adam'` (no other optimizers supported for metrics). - `learning_rate`: Learning rate for optimizer. - `beta_1, beta_2`: Exponential decay rates for moment estimates. - `epsilon`: Small constant for numerical stability. - `amsgrad`: If `True`, uses AMSGrad variant of Adam. (section-plotting-config)= ## Plotting Configuration The `plotting_config.yaml` file defines how WaveDiff generates diagnostic plots from the metrics produced during model evaluation. While the plotting routines are mostly pre-configured internally, this file allows you to combine and compare metrics from multiple training runs, or simply visualize the results of the most recent `metrics` pipeline execution. ### 1. Purpose This configuration controls how metric outputs from one or more WaveDiff runs are located and aggregated for plotting. It enables users to: - Specify where metrics outputs are stored, - Select which runs to include in joint plots, - Associate each run with its corresponding `metrics_config.yaml`, - Optionally display plots interactively during execution. ### 2. General Notes - All plotting styles and figure settings are hard-coded and do not require user modification. - If the plotting task is executed immediately after a metrics evaluation run, all fields except `plot_show` may be left empty—the pipeline will automatically locate the outputs of the active run. - When plotting results from multiple runs, the entries in `metrics_dir` and `metrics_config` must appear **row-aligned**, with each position referring to the same run. - If any descriptions are unclear, or if you encounter unexpected behavior, please open a [GitHub issue](). ### 3. Configuration Structure `plotting_params` ```yaml plotting_params: # Path to the parent folder containing WaveDiff output directories metrics_output_path: /path/to/wf-outputs/ # List of output directories whose metrics should be plotted # Leave commented/empty if plotting immediately after a metrics run metrics_dir: # - wf-outputs-xxxxxxxxxxxxxxxxxxx1 # - wf-outputs-xxxxxxxxxxxxxxxxxxx2 # List of metrics config filenames corresponding to each directory # Leave commented/empty if plotting immediately after a metrics run metrics_config: # - metrics_config_1.yaml # - metrics_config_2.yaml # If True, plots are shown interactively during execution plot_show: False ``` **Parameter descriptions:** - `metrics_output_path`: Absolute path to the parent directory containing WaveDiff output folders (e.g., `/home/user/wf-outputs/`). Can be left as `` placeholder if plotting immediately after a metrics run. - `metrics_dir`: List of output directory names (e.g., `wf-outputs-xxxxxxxxxxxxxxxxxxx1`) whose metrics should be included in plots. **Leave empty or commented out if plotting immediately after a metrics run** — WaveDiff will automatically locate the current run's outputs. - `metrics_config`: List of `metrics_config.yaml` filenames corresponding to each directory in `metrics_dir`. Each entry should match the config file in `/config/`. Must be row-aligned with `metrics_dir`. **Leave empty or commented out if plotting immediately after a metrics run.** - `plot_show`: If `True`, displays plots interactively during execution. If `False`, plots are saved to disk without display. ### 4. Example Directory Structure Below is an example of three WaveDiff runs stored under a single parent directory: ``` wf-outputs/ ├── wf-outputs-xxxxxxxxxxxxxxxxxxx1 │ ├── config │ │ ├── data_config.yaml │ │ └── metrics_config_200.yaml │ ├── metrics │ │ └── metrics-poly-coherent_euclid_200stars.npy ├── wf-outputs-xxxxxxxxxxxxxxxxxxx2 │ ├── config │ │ ├── data_config.yaml │ │ └── metrics_config_500.yaml │ ├── metrics │ │ └── metrics-poly-coherent_euclid_500stars.npy ├── wf-outputs-xxxxxxxxxxxxxxxxxxx3 │ ├── config │ │ ├── data_config.yaml │ │ └── metrics_config_1000.yaml │ ├── metrics │ │ └── metrics-poly-coherent_euclid_1000stars.npy ``` ### 5. Plotting Multiple Runs To jointly plot metrics from the three runs shown above, the `plotting_config.yaml` would be: ```yaml plotting_params: metrics_output_path: /path/to/wf-outputs/ metrics_dir: - wf-outputs-xxxxxxxxxxxxxxxxxxx1 - wf-outputs-xxxxxxxxxxxxxxxxxxx2 - wf-outputs-xxxxxxxxxxxxxxxxxxx3 metrics_config: - metrics_config_200.yaml - metrics_config_500.yaml - metrics_config_1000.yaml plot_show: False ``` This configuration instructs the plotting pipeline to load the metrics from each listed run and include them together in summary plots. (inference_config)= ## Inference Configuration ### 1. Purpose Configures the WaveDiff inference API for generating polychromatic PSFs from a trained model, given a set of source positions and SEDs. Unlike the CLI tasks, the inference API is designed for external use: users are expected to load their own positions and SEDs programmatically and interact with the API directly. ### 2. Key Fields `inference` | Field | Required | Description | |---------------|--------------|---------| | `batch_size` | Yes | Number of PSFs to process per batch. | | `cycle` | Yes | Training cycle checkpoint to load (e.g. `2`).
WaveDiff training typically runs two cycles.| `inference.configs` | Field | Required | Description | |---------------|--------------|---------| | `trained_model_path` | Yes | Absolute path to the directory containing the trained
model. | | `model_subdir` | Yes | Subdirectory name within `trained_model_path`
containing the model weights (e.g. model). | |`trained_model_config_path` | Yes | Path to the training configuration file used to train the
model, relative to `trained_model_path`. | | `data_config_path` | No. | Path to a data configuration file supplying prior
information (e.g. a Phase Diversity calibration prior)
relevant to the inference context. This may differ
from the data configuration used during training. Leave
blank if no external prior is required. `inference.model_params` These fields are optional. Any field left blank inherits its value from the trained model configuration file. Populated fields override the corresponding `model_params` values from the training config. | Field | Required | Description | |---------------|--------------|---------| | `n_bins_lda` | inherited | Number of wavelength bins used to reconstruct polychromatic PSFs.| | `output_Q` | inherited | Downsampling rate to match the oversampled model to the telescope's
native sampling. | | `output_dim` | inherited | Pixel dimension of the output PSF postage stamp. | | `correct_centroids` | False | If `True`, applies centroid error correction within the PSF model during inference.. | | `add_ccd_misalignments` | False | If `True`, incorporates CCD misalignment corrections into
the PSF model during inference. Required data is retrieved
from the trained model configuration file. | ### 3. Example ```yaml inference: batch_size: 16 cycle: 2 configs: trained_model_path: /path/to/trained/model/ model_subdir: model trained_model_config_path: config/training_config.yaml data_config_path: model_params: n_bins_lda: 8 output_Q: 1 output_dim: 64 correct_centroids: False add_ccd_misalignments: True ``` ### 4. Notes - `trained_model_config_path` is relative to `trained_model_path`, not to the working directory. - All `model_params` fields are optional; omitting them inherits values from the training configuration. - Only populate fields where you explicitly want to override the trained model's parameters. - `data_config_path` is intended for cases where inference is performed in a different data context than training, for example using an updated or alternative prior. Leave blank if the trained model's own configuration is sufficient. - `correct_centroids` and `add_ccd_misalignments` are independent model behaviour flags that modify PSF model computation during inference. Both retrieve their required data from the trained model configuration file — no additional configuration is required to enable them. (master_config_file)= ## Master Configuration ### 1. Purpose The `configs.yaml` file is the master controller for WaveDiff CLI tasks. It defines **which pipeline tasks** should be executed (`training`, `metrics`, `plotting`) and in which order. Each task entry points to a dedicated YAML configuration file, allowing WaveDiff to run multiple jobs sequentially from a single entry point. Each task points to a dedicated YAML configuration file—allowing WaveDiff to run multiple jobs sequentially using a single entry point. ### 2. General Notes `configs.yaml` may contain any combination of the three CLI task types: - `training` - `metrics` - `plotting` -Tasks always execute **in the order they appear** in the file. - The current release runs all jobs sequentially on a single GPU. - Parallel multi-GPU execution is planned for a future version. - For questions or feedback, please open a [GitHub issue](). ### 3. Example: Multiple Training Runs To launch a sequence of training runs (models 1…n), list each task and its corresponding configuration file: `configs.yaml` ```yaml --- training_conf_1: training_config_1.yaml training_conf_2: training_config_2.yaml ... training_conf_n: training_config_n.yaml ``` WaveDiff will execute each training task sequentially and organize outputs as: ``` wf-outputs-xxxxxxxxxxxxxxxxxxx1/ ├── checkpoint/ │ ├── checkpoint_callback_poly-coherent_euclid_200stars_1_cycle1.* │ ├── ... │ ├── checkpoint_callback_poly-coherent_euclid_200stars_n_cycle1.* ├── config/ │ ├── configs.yaml │ ├── data_config.yaml │ ├── training_config_1.yaml │ ├── ... │ └── training_config_n.yaml ├── optim-hist/ ├── plots/ └── psf_model/ ├── psf_model_poly-coherent_euclid_200stars_1_cycle1.* ├── ... └── psf_model_poly-coherent_euclid_200stars_n_cycle1.* ``` ### 4. Example: Training + Metrics + Plotting To evaluate metrics and generate plots after each training run, include metrics and plotting tasks in `configs.yaml`: ``` training_conf_1: training_config_1.yaml metrics_conf_1: metrics_config_1.yaml plotting_conf_1: plotting_config_1.yaml training_conf_2: training_config_2.yaml metrics_conf_2: metrics_config_2.yaml plotting_conf_2: plotting_config_2.yaml ... ``` Required configuration files: ``` config/ ├── configs.yaml ├── data_config.yaml ├── training_config_1.yaml ├── metrics_config_1.yaml ├── plotting_config_1.yaml ├── training_config_2.yaml ├── metrics_config_2.yaml ├── plotting_config_2.yaml └── ... ``` **Note:** Current WaveDiff versions generate one plot per metric per model. Creating combined comparison plots across multiple runs requires a separate plotting-only run (see [Plot Configuration](section-plotting-config)). Automatic combined plots may be supported in a future release.