Configuration System¶
examples/config_example.py demonstrates pyAVS’s configuration system
(PyAVSConfig, ConfigManager):
getting/modifying/validating an analysis configuration, saving and reloading it from a JSON
file, deriving function-specific keyword-argument dictionaries (for
AVSComposer, filter computation, population code
saving), and generating the parameter-signature string pyAVS uses to organize derivative
outputs on disk (see pyavs.utils.derivatives.generate_parameter_signature()).
This is the same configuration object driving the real, config-based analysis script in Source Reconstruction Examples.
#!/usr/bin/env python3
"""
Example of using the pyAVS configuration system.
This script demonstrates how to use the new configuration system for
managing analysis parameters, processing settings, and paths.
"""
import sys
from pathlib import Path
# Add pyavs to path if not installed
sys.path.insert(0, str(Path(__file__).parent.parent))
from pyavs.config import get_config, load_config, save_config
def main():
"""Demonstrate configuration system usage."""
print("=== pyAVS Configuration System Example ===\n")
# 1. Get default configuration
print("1. Loading default configuration:")
config = get_config()
print(f" Subject ID: {config.analysis.subject_id}")
print(f" Event type: {config.analysis.event_type}")
print(f" Sampling rate: {config.processing.resample_freq}")
print(f" Data path: {config.paths.data_path}")
# 2. Modify configuration programmatically
print("\n2. Modifying configuration:")
config.analysis.subject_id = 5
config.analysis.sessions = [1, 2, 3]
config.analysis.event_type = "fixation"
config.processing.resample_freq = 1000
config.processing.filter_params['l_freq'] = 0.2
config.processing.filter_params['h_freq'] = 200.0
print(f" Subject ID: {config.analysis.subject_id}")
print(f" Sessions: {config.analysis.sessions}")
print(f" Event type: {config.analysis.event_type}")
print(f" Sampling rate: {config.processing.resample_freq}")
print(f" Filter params: {config.processing.filter_params}")
# 3. Validate configuration
print("\n3. Validating configuration:")
try:
config.validate()
print(" Configuration is valid!")
except Exception as e:
print(f" Configuration error: {e}")
# 4. Save configuration to file
print("\n4. Saving configuration to file:")
config_file = Path(__file__).parent / "my_analysis_config.json"
save_config(config_file, config=config)
print(f" Saved to: {config_file}")
# 5. Load configuration from file
print("\n5. Loading configuration from file:")
loaded_config = load_config(config_file)
print(f" Loaded subject ID: {loaded_config.analysis.subject_id}")
print(f" Loaded sessions: {loaded_config.analysis.sessions}")
# 6. Get parameters for specific functions
print("\n6. Getting function-specific parameters:")
# Parameters for filter computation
filter_kwargs = config.get_filter_kwargs()
print(" Filter kwargs:")
for key, value in filter_kwargs.items():
print(f" {key}: {value}")
# Parameters for population codes saving
pop_kwargs = config.get_population_codes_kwargs()
print("\n Population codes kwargs:")
for key, value in pop_kwargs.items():
print(f" {key}: {value}")
# Parameters for composer initialization
composer_kwargs = config.get_composer_kwargs()
print("\n Composer kwargs:")
for key, value in composer_kwargs.items():
print(f" {key}: {value}")
# 7. Parameter signature for consistent storage
print("\n7. Parameter signature for storage:")
from pyavs.utils.derivatives import generate_parameter_signature
sig_dict = config.get_parameter_signature_dict()
param_signature = generate_parameter_signature(**sig_dict)
print(f" Parameter signature: {param_signature}")
print("\n=== Configuration system example completed! ===")
if __name__ == '__main__':
main()