The epyr.cli module provides a comprehensive command-line interface with 9 professional commands for all EPR workflows.
EPyR Tools CLI follows modern CLI design principles with:
- Consistent argument patterns across commands
- Comprehensive help system
- Progress reporting and verbose logging
- Error handling with detailed diagnostics
- Integration with configuration system
epyr <command> [options]
# or use individual commands:
epyr-<command> [options]Convert Bruker EPR files to FAIR-compliant formats.
epyr-convert input.dsc [options]Options:
-o, --output-dir DIR: Output directory (default: current directory)-f, --formats LIST: Output formats: csv,json,hdf5 (default: csv,json)--no-metadata: Skip metadata export-v, --verbose: Enable verbose output
Examples:
# Basic conversion
epyr-convert spectrum.dsc
# Multiple formats with custom output
epyr-convert spectrum.dsc -o ./results -f csv,json,hdf5
# Batch processing without metadata
epyr-convert *.dsc --no-metadata --verboseImplementation Details:
- Uses
epyr.fair.convert_bruker_to_fair()internally - Validates input file existence before processing
- Creates output directory if it doesn't exist
- Provides detailed error reporting on failure
- Returns exit code 1 on errors for script integration
Apply baseline correction algorithms to EPR data.
epyr-baseline input.dsc [options]Options:
-o, --output FILE: Output file (default: input_baseline.csv)-m, --method METHOD: Correction method (polynomial, exponential, stretched_exponential)--order INT: Polynomial order (default: 1)--exclude START END: Exclude region from fit (can be repeated)--plot: Generate comparison plot-v, --verbose: Enable verbose output
Examples:
# Basic polynomial baseline
epyr-baseline spectrum.dsc
# Advanced correction with exclusions
epyr-baseline spectrum.dsc -m polynomial --order 2 --exclude 3480 3520
# Generate plot with custom output
epyr-baseline spectrum.dsc -o corrected.csv --plotImplementation Details:
- Integrates with
epyr.baselinemodule - Saves results as CSV with original, baseline, and corrected data
- Optional matplotlib plotting with dual-panel comparison
- Supports multiple exclusion regions for signal protection
- Automatic output filename generation
Convert multiple EPR files efficiently with automatic figure generation for data quality verification.
epyr-batch-convert input_dir [options]Options:
-o, --output-dir DIR: Output directory (default: input_dir/converted)-f, --formats LIST: Output formats (default: csv,json)--save-jpg: Save JPG figures of loaded data (default: True)--no-jpg: Disable JPG figure generation-j, --jobs INT: Number of parallel jobs (default: 1)-v, --verbose: Enable verbose output
Examples:
# Convert all .dsc and .spc files with JPG generation
epyr-batch-convert ./data/
# Disable JPG generation for faster processing
epyr-batch-convert ./data/ --no-jpg
# Custom output directory with all formats
epyr-batch-convert ./data/ -o ./converted -f csv,json,hdf5
# Verbose mode for detailed progress tracking
epyr-batch-convert ./data/ -vJPG Figure Generation: By default, batch conversion now generates high-quality JPG figures (150 DPI) for visual verification of converted data:
-
1D EPR Data: Line plots with real and imaginary components
- Proper axis labels from EPR parameters (field unit, intensity)
- Grid overlay for easy reading
- Legend for complex data
-
2D EPR Data: Color map visualizations
- Intensity colorbars with proper units
- Optimized layout without tight_layout conflicts
- Clear axis labels for point and scan indices
File Discovery: Automatically discovers EPR files with case-insensitive patterns:
*.dsc,*.DSC(Bruker BES3T descriptor files)*.spc,*.SPC(Bruker ESP spectrum files)- Removes duplicates on case-insensitive filesystems
- Processes files in sorted order for consistency
Implementation Details:
- Loads each file with
eprload()before conversion - Generates JPG only after successful data loading
- Independent error handling for conversion and figure generation
- Progress reporting:
[N/M] Processing filename.dsc - Detailed summary statistics:
- Successfully converted: X/Y files
- Failed: X/Y files
- Output directory location
- Comprehensive error handling per file with optional verbose traceback
- Automatic output directory creation
Manage EPyR Tools configuration with subcommands.
epyr-config <subcommand> [options]Subcommands:
epyr-config show [section]- Show all configuration or specific section
- JSON-formatted output for easy parsing
epyr-config set key value- Supports dot notation (e.g.,
plotting.dpi) - Automatic JSON parsing for complex values
- Immediate save to configuration file
epyr-config reset [section|all]- Reset specific section or all configuration
- Restores default values
epyr-config export config.json
epyr-config import config.json- Full configuration backup and restore
- JSON format for portability
Examples:
# View current configuration
epyr-config show
# Set plotting DPI
epyr-config set plotting.dpi 300
# Set complex value (JSON)
epyr-config set plotting.figure_size '[10, 8]'
# Reset plotting section
epyr-config reset plotting
# Backup configuration
epyr-config export my_settings.jsonDisplay comprehensive system and configuration information.
epyr-info [options]Options:
--config: Show detailed configuration--performance: Show performance metrics--plugins: Show loaded plugins--all: Show all information
Examples:
# Basic system info
epyr-info
# Performance diagnostics
epyr-info --performance
# Complete system report
epyr-info --allInformation Displayed:
- EPyR Tools version
- Configuration file location
- Memory usage and system resources
- Loaded plugins and capabilities
- Performance settings and optimization status
Validate EPR files and check FAIR compliance.
epyr-validate files... [options]Options:
--format FORMAT: Expected file format--detailed: Show detailed validation results-v, --verbose: Enable verbose output
Examples:
# Basic validation
epyr-validate spectrum.dsc
# Detailed FAIR compliance check
epyr-validate spectrum.dsc --detailed
# Validate multiple files
epyr-validate *.dsc --verboseValidation Features:
- File format integrity checking
- Data consistency validation
- FAIR metadata compliance assessment
- EPR-specific parameter validation
- Detailed error and warning reports
Load and visualize EPR data with interactive plotting and measurement tools.
epyr-plot [file] [options]Options:
-s, --scaling STRING: Scaling string (n=scans, P=power, G=gain, T=temp, c=time)--no-plot: Load data without plotting--interactive: Enable interactive matplotlib backend--save: Save plot as PNG file--measure: Enable interactive measurement tool (click two points to measure distance)-v, --verbose: Enable verbose output
Examples:
# Interactive plot with file dialog
epyr-plot --interactive
# Load specific file with measurement tools
epyr-plot spectrum.dsc --interactive --measure
# Load with scaling and save plot
epyr-plot data.dta -s nG --interactive --save
# Measurement mode with verbose output
epyr-plot --interactive --measure -vInteractive Measurement Features:
- Mouse Controls:
- Left-click: Select measurement points (click two points to measure)
- Right-click: Clear all measurements
- Standard matplotlib zoom/pan navigation
- Keyboard Shortcuts:
c: Clear measurementsq: Quit/close plot
- Measurements Displayed:
- Δx: Horizontal distance between points
- Δy: Vertical distance between points
- |Δ|: Euclidean distance between points
- Visual annotations with yellow boxes and red dashed lines
Console Output Example:
📐 Measurement Results:
Point 1: (3340.0000, 1.2345e-01)
Point 2: (3360.0000, 8.9123e-01)
Δx = 20.0000
Δy = 7.6778e-01
Distance = 21.4567e+00
Implementation Details:
- macOS optimized with TkAgg backend for smooth performance
- Custom InteractiveMeasurementTool class for precise measurements
- EPR-aware plotting with proper field/intensity labels
- Real-time visual feedback with point markers and connecting lines
- Multiple measurements supported - click two points repeatedly
- Smart plotting logic that disables default eprload plotting in measurement mode
Launch the interactive nuclear isotope database interface with periodic table visualization.
epyr-isotopesFeatures:
- Interactive Periodic Table: Color-coded elements by category (main group, transition metals, rare earth)
- Comprehensive Isotope Data: Natural abundance, nuclear spin, g-factors, quadrupole moments
- Real-time NMR Frequency Calculation: Enter magnetic field strength for frequency calculations
- EPR Band Presets: Quick selection for X-band (340 mT), Q-band (1200 mT), W-band (3400 mT)
- Advanced Filtering: Show/hide unstable isotopes (*) and non-magnetic nuclei (spin=0)
- Element-Specific Views: Click any element to filter isotopes for that element only
- Sortable Data Table: Click column headers to sort by any parameter
- Professional GUI: Tooltips, resizable interface, cross-platform compatibility
Data Source:
- EasySpin nuclear isotope database format (
sub/isotopedata.txt) - CODATA 2018 physical constants for accurate calculations
- Both stable and selected radioactive isotopes included
Usage Examples:
# Programmatic access
from epyr import isotopes
isotopes() # Launch GUI
# Direct CLI launch
epyr-isotopesUnified access to all commands through subcommands.
epyr <command> [options]Examples:
epyr convert spectrum.dsc
epyr config show plotting
epyr plot spectrum.dsc --interactive --measure
epyr validate *.dsc --detailed# Consistent error patterns across commands
try:
# Command implementation
success = perform_operation()
if not success:
logger.error("Operation failed")
sys.exit(1)
except Exception as e:
logger.error(f"Unexpected error: {e}")
if args.verbose:
logger.debug("Full traceback:", exc_info=True)
sys.exit(1)# Verbose logging setup
if args.verbose:
from .logging_config import setup_logging
setup_logging('DEBUG')# All commands integrate with config system
from .config import config
# Use configured defaults
default_formats = config.get('fair_conversion.default_formats')
cache_enabled = config.get('performance.cache_enabled')# Consistent progress patterns
logger.info(f"Processing {file_path}")
logger.info(f"[{current}/{total}] Converting {filename}")
logger.info(f"Operation completed: {success_count}/{total_count} successful")# Example test pattern
from unittest.mock import patch
import epyr.cli
def test_command():
with patch('sys.argv', ['epyr-convert', 'test.dsc']):
with patch('epyr.fair.convert_bruker_to_fair') as mock_convert:
mock_convert.return_value = True
epyr.cli.cmd_convert()
mock_convert.assert_called_once()- Implement command function:
def cmd_newcommand():
"""New command implementation."""
parser = argparse.ArgumentParser(
prog='epyr-newcommand',
description='Description of new command'
)
# Add arguments
args = parser.parse_args()
# Implementation- Register in main CLI:
# In main() function
elif args.command == 'newcommand':
cmd_newcommand()- Add to pyproject.toml:
[project.scripts]
epyr-newcommand = "epyr.cli:cmd_newcommand"- Use consistent argument names across commands
- Provide sensible defaults from configuration
- Support both verbose and quiet operation modes
- Return appropriate exit codes for script integration
- Provide actionable error messages
- Include suggestions for common issues
- Use verbose mode for detailed diagnostics
- Log errors for debugging while showing user-friendly messages
- Check file existence before processing
- Use progress reporting for long operations
- Integrate with performance monitoring
- Support interruption (Ctrl+C) gracefully
- Leverage existing EPyR Tools modules
- Use configuration system for defaults
- Integrate with logging system
- Support plugin system extensions
This CLI system provides a professional interface to all EPyR Tools capabilities, making the package accessible to users who prefer command-line workflows while maintaining full integration with the underlying Python API.