CLI Modernization & Architecture Refactor
Key Changes When Merged
- CLI Framework: Migrated from Click to Typer with Rich console integration
- Class Naming:
Generator→Simulatorthroughout codebase - Configuration: Enhanced parameter inheritance, runtime template expansion
- Safety Features: Retry logic, rollback capabilities, atomic file operations
- A CLI to combine frame files.
Breaking Changes
- Import paths:
gwsim.generator.*→gwsim.simulator.* - Simulator base class interface updated with StateAttribute descriptors
- CLI command structure remains same but internal implementation changed
Example Configuration File:
# Advanced Enhanced Configuration Example
# Demonstrates simple class names, third-party packages, and complex template usage
globals:
# Base configuration
working-directory: "/tmp/gwsim_data"
sampling-frequency: 16384
duration: 8
start-time: 1234567890
# Output configuration
output-directory: "{ working-directory }/output"
metadata-directory: "{ working-directory }/metadata"
# Shared simulator parameters
seed-base: 42
detector: "H1"
simulators:
# High-resolution noise with gwsim class
noise_high_res:
class: ColoredNoise # Resolves to gwsim.noise.WhiteNoise
arguments:
psd_file: ET.txt
seed: "{ seed-base }"
# Override global duration for longer noise segments
duration: 16
output:
file_name: "{ detector }-NOISE-{ start-time }-{ duration }.gwf"
arguments:
channel: "{ detector }:STRAIN"
# Binary black hole merger signal using gwsim
bbh_signal:
class: BBHInspiral # Resolves to gwsim.signal.BBHInspiral
arguments:
mass1: 35.0
mass2: 30.0
spin1z: 0.3
spin2z: -0.2
distance: 410.0 # Mpc
inclination: 1.2
coalescence_phase: 0.5
seed: "{ seed-base + 1 }" # Template arithmetic
output:
file_name: "{ detector }-BBH-{ start-time }-{ duration }.gwf"
arguments:
channel: "{ detector }:STRAIN"
# Third-party noise simulator
external_noise:
class: scipy.stats.norm # Third-party package - used as-is
arguments:
loc: 0.0
scale: 1e-23
output:
file_name: "{ detector }-EXTERNAL-{ start-time }-{ duration }.gwf"
arguments:
channel: "{ detector }:STRAIN"
# Detector glitch using gwsim
glitch_blip:
class: Blip # Resolves to gwsim.glitch.Blip
arguments:
central_freq: 500.0
bandwidth: 100.0
amplitude: 5e-20
duration: 0.05 # Short glitch
output:
file_name: "{ detector }-GLITCH-{ start-time }-{ duration }.gwf"
arguments:
channel: "{ detector }:STRAIN"
Edited by chun-fung.wong