diff options
| author | Sam Scholten | 2025-10-23 15:06:25 +1000 |
|---|---|---|
| committer | Sam Scholten | 2025-10-23 15:22:54 +1000 |
| commit | 307bf648d8e3fe852d7daf2fa1567d1896e50f7e (patch) | |
| tree | d15344eab2003fd0a12544cc1ed9fbfef3e871d9 /example.py | |
| parent | 4a7026759e099e5c81cc9c77f19182a23d2f0275 (diff) | |
| download | transivent-307bf648d8e3fe852d7daf2fa1567d1896e50f7e.tar.gz transivent-307bf648d8e3fe852d7daf2fa1567d1896e50f7e.zip | |
Release v2.0.0v2.0.0
Major API refactoring with simplified public interface.
- Added EventProcessor for high-level event processing workflow
- New utility functions for data preprocessing
- Additional example scripts for different use cases
- Comprehensive test suite
- Updated documentation with migration guide
Diffstat (limited to 'example.py')
| -rw-r--r-- | example.py | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/example.py b/example.py deleted file mode 100644 index 06c33c5..0000000 --- a/example.py +++ /dev/null @@ -1,136 +0,0 @@ -from warnings import warn - -import matplotlib as mpl - -from transivent import configure_logging, get_waveform_params, process_file - -# --- User configuration dictionary --- -CONFIG = { - "SMOOTH_WIN_T": 10e-3, # smoothing window in seconds (set to None to use frequency) - "SMOOTH_WIN_F": None, # smoothing window in Hz (set to None to use time) - "DETECTION_SNR": 3, # point-by-point detection threshold, <MIN_EVENT_KEEP_SNR - "MIN_EVENT_KEEP_SNR": 5, # min event (max-)amplitude in multiples of global noise - "MIN_EVENT_T": 0.75e-6, # minimum event duration (seconds) - "WIDEN_FRAC": 10, # fraction of event length to widen detected events - "SIGNAL_POLARITY": 1, # Signal polarity: -1 for negative events (below background), +1 for positive events (above background) - "LOG_LEVEL": "INFO", # logging level: DEBUG, INFO, WARNING, ERROR, CRITICAL - "MAX_PLOT_POINTS": 10000, # Downsample threshold for plotting - "ENVELOPE_MODE_LIMIT": 10e-3, # Use envelope when time span >10ms, show thresholds when <10ms - "YSCALE_MODE": "snr", # y-scale mode for event plotter: 'snr', 'percent' or 'raw' - "FILTER_TYPE": "median", # Filter type: "savgol", "gaussian", "moving_average", "median" - "FILTER_ORDER": 3, # Order of the savgol filter for smoothing - "CHUNK_SIZE": None, # Set to None to disable chunking - # --- - "DATA_PATH": "../hycav/data/2025-07-17_bsa/", - "MEASUREMENTS": [ - { - "data": "RefCurve_2025-07-17_0_065114.Wfm.bin", - }, - { - "data": "RefCurve_2025-07-17_1_065214.Wfm.bin", - }, - { - "data": "RefCurve_2025-07-17_2_065510.Wfm.bin", - }, - { - "data": "RefCurve_2025-07-17_3_065814.Wfm.bin", - }, - { - "data": "RefCurve_2025-07-17_4_065850.Wfm.bin", - }, - { - "data": "RefCurve_2025-07-17_5_070003.Wfm.bin", - }, - { - "data": "RefCurve_2025-07-17_6_070045.Wfm.bin", - }, - { - "data": "RefCurve_2025-07-17_7_070339.Wfm.bin", - }, - ], -} - - -def main() -> None: - """ - Main function to process all measurements. - """ - # Configure logging - configure_logging(CONFIG.get("LOG_LEVEL", "INFO")) - - for measurement in CONFIG["MEASUREMENTS"]: - # Merge global config with measurement-specific overrides - merged_config = CONFIG.copy() - merged_config.update(measurement) - - # Extract parameters for process_file - name = merged_config["data"] - sidecar = merged_config.get("sidecar") - - params = get_waveform_params( - name, data_path=merged_config["DATA_PATH"], sidecar=sidecar - ) - sampling_interval = params["sampling_interval"] - - # Call with explicit parameters - process_file( - name=name, - sampling_interval=sampling_interval, - data_path=merged_config["DATA_PATH"], - smooth_win_t=merged_config.get("SMOOTH_WIN_T"), - smooth_win_f=merged_config.get("SMOOTH_WIN_F"), - detection_snr=merged_config.get("DETECTION_SNR", 3.0), - min_event_keep_snr=merged_config.get("MIN_EVENT_KEEP_SNR", 6.0), - min_event_t=merged_config.get("MIN_EVENT_T", 0.75e-6), - widen_frac=merged_config.get("WIDEN_FRAC", 10.0), - signal_polarity=merged_config.get("SIGNAL_POLARITY", -1), - max_plot_points=merged_config.get("MAX_PLOT_POINTS", 10000), - envelope_mode_limit=merged_config.get("ENVELOPE_MODE_LIMIT", 10e-3), - sidecar=sidecar, - crop=merged_config.get("crop"), - yscale_mode=merged_config.get("YSCALE_MODE", "snr"), - show_plots=True, - filter_type=merged_config.get("FILTER_TYPE", "gaussian"), - filter_order=merged_config.get("FILTER_ORDER", 2), - chunk_size=merged_config.get("CHUNK_SIZE"), - ) - - -if __name__ == "__main__": - # Set Matplotlib rcParams directly here - for optn, val in { - "backend": "QtAgg", - "figure.constrained_layout.use": True, - "figure.dpi": 90, - # "figure.figsize": (8.5 / 2.55, 6 / 2.55), - "font.family": ("sans-serif",), - "font.size": 11, - "legend.fontsize": "x-small", - "legend.handlelength": 1.5, - "legend.handletextpad": 0.6, - "lines.markersize": 4.0, - "lines.markeredgewidth": 1.6, - "lines.linewidth": 1.8, - "xtick.labelsize": 10, - "xtick.major.size": 3, - "xtick.direction": "in", - "ytick.labelsize": 10, - "ytick.direction": "in", - "ytick.major.size": 3, - "axes.formatter.useoffset": False, - "axes.formatter.use_mathtext": True, - "errorbar.capsize": 3.0, - "axes.linewidth": 1.4, - "xtick.major.width": 1.4, - "xtick.minor.width": 1.1, - "ytick.major.width": 1.4, - "ytick.minor.width": 1.1, - "axes.labelsize": 11, - }.items(): - if isinstance(val, (list, tuple)): - val = tuple(val) - try: - mpl.rcParams[optn] = val - except KeyError: - warn(f"mpl rcparams key '{optn}' not recognised as a valid rc parameter.") - main() |
