Complete API reference for EPyR Tools modules.
Main data loading function for EPR files.
def eprload(
file_name: Optional[str] = None,
scaling: str = "",
plot_if_possible: bool = True
) -> Tuple[np.ndarray, np.ndarray, Dict[str, Any], str]Parameters:
file_name: Path to EPR file or None for file dialogscaling: Scaling options ('nPGT' for field normalization)plot_if_possible: Whether to display plot automatically
Returns:
x_data: Magnetic field or frequency valuesy_data: EPR intensity dataparams: Dictionary of measurement parametersfile_path: Full path to loaded file
Example:
import epyr
x, y, params, path = epyr.eprload('spectrum.dsc')Complete baseline correction system with modular architecture. See Baseline Reference for detailed documentation.
# Automatic model selection (recommended)
corrected, baseline, info = epyr.baseline.baseline_auto_1d(x, y, params)
# Specific methods
corrected, baseline = epyr.baseline.baseline_polynomial_1d(x, y, params, order=3)
corrected, baseline = epyr.baseline.baseline_stretched_exponential_1d(x, y, params)
corrected, baseline = epyr.baseline.baseline_bi_exponential_1d(x, y, params)
# Backend control
epyr.baseline.setup_inline_backend() # Static plots
epyr.baseline.setup_widget_backend() # Interactive plotsbaseline_auto_1d()- Automatic model selection using AIC/BIC/R² criteriabaseline_polynomial_1d()- Polynomial correction for CW EPR spectrabaseline_stretched_exponential_1d()- For T2 relaxation data (β = 0.01-5.0)baseline_bi_exponential_1d()- For complex decay with multiple componentsbaseline_polynomial_2d()- 2D surface fittingRegionSelector- Interactive region selectionsetup_*_backend()- Matplotlib backend control
models.py- Mathematical functionscorrection.py- Core algorithmsselection.py- Region utilitiesinteractive.py- Matplotlib widgetsauto.py- Model selection
Configuration management system.
class EPyRConfig:
def get(self, key: str, default: Any = None) -> Any
def set(self, key: str, value: Any) -> None
def get_section(self, section: str) -> Dict[str, Any]
def set_section(self, section: str, config_dict: Dict[str, Any]) -> None
def reset_section(self, section: str) -> None
def reset_all(self) -> None
def save(self) -> None
def export_config(self, file_path: Union[str, Path]) -> None
def import_config(self, file_path: Union[str, Path]) -> Nonefrom epyr.config import config
# Get configuration values
dpi = config.get('plotting.dpi')
cache_enabled = config.get('performance.cache_enabled')
# Set configuration values
config.set('plotting.dpi', 300)
config.save()def get_plotting_config() -> Dict[str, Any]
def get_performance_config() -> Dict[str, Any]
def is_debug_mode() -> bool
def is_cache_enabled() -> boolFAIR data conversion and validation.
def convert_bruker_to_fair(
input_file: Union[str, Path],
output_dir: Optional[Union[str, Path]] = None,
formats: List[str] = ["csv", "json"],
include_metadata: bool = True,
scaling: str = "",
) -> booldef batch_convert_directory(
input_directory: Union[str, Path],
output_directory: Optional[Union[str, Path]] = None,
file_extensions: List[str] = [".dsc", ".spc", ".par"],
scaling: str = "",
output_formats: List[str] = ["csv_json", "hdf5"],
recursive: bool = False,
) -> Nonedef validate_fair_dataset(
data_dict: Dict[str, Any],
file_path: Optional[Path] = None
) -> ValidationResult
def validate_fair_metadata(metadata: Dict[str, Any]) -> ValidationResult
def validate_data_integrity(
x_data: Optional[np.ndarray],
y_data: np.ndarray,
metadata: Dict[str, Any]
) -> ValidationResult
def create_validation_report(
result: ValidationResult,
output_path: Optional[Path] = None
) -> strclass ValidationResult:
is_valid: bool
errors: List[str]
warnings: List[str]
info: List[str]
def add_error(self, message: str) -> None
def add_warning(self, message: str) -> None
def add_info(self, message: str) -> None
def get_summary(self) -> Dict[str, Any]Performance optimization and memory management.
class DataCache:
def __init__(self, max_size_mb: Optional[int] = None)
def get(self, file_path: Path) -> Optional[Tuple]
def put(self, file_path: Path, data: Tuple) -> None
def clear(self) -> None
def get_stats(self) -> Dict[str, Any]class OptimizedLoader:
def __init__(
self,
chunk_size_mb: Optional[int] = None,
cache_enabled: bool = True
)
def load_epr_file(self, file_path: Union[str, Path]) -> Tuple
def load_chunked_data(
self,
file_path: Union[str, Path],
chunk_processor: Callable
) -> Anyclass MemoryMonitor:
@staticmethod
def get_memory_info() -> Dict[str, float]
@staticmethod
def check_memory_limit() -> bool
@staticmethod
def optimize_memory() -> Nonedef get_performance_info() -> Dict[str, Any]
def optimize_numpy_operations() -> None
def get_global_cache() -> DataCacheExtensible plugin architecture.
class BasePlugin(ABC):
plugin_name: str
plugin_version: str
@abstractmethod
def initialize(self) -> bool
def cleanup(self) -> None
def get_info(self) -> Dict[str, Any]class FileFormatPlugin(BasePlugin):
format_name: str
file_extensions: List[str]
supports_loading: bool
supports_saving: bool
@abstractmethod
def can_load(self, file_path: Path) -> bool
@abstractmethod
def load(self, file_path: Path, **kwargs) -> Tuple[
Optional[np.ndarray],
Optional[Union[np.ndarray, List[np.ndarray]]],
Optional[Dict[str, Any]]
]class ProcessingPlugin(BasePlugin):
processing_name: str
input_requirements: List[str]
output_types: List[str]
@abstractmethod
def process(self, data: Dict[str, Any], **kwargs) -> Dict[str, Any]
def validate_input(self, data: Dict[str, Any]) -> boolclass ExportPlugin(BasePlugin):
export_format: str
file_extension: str
supports_metadata: bool
@abstractmethod
def export(
self,
output_path: Path,
x_data: np.ndarray,
y_data: np.ndarray,
parameters: Dict[str, Any],
**kwargs
) -> boolclass PluginManager:
def register_plugin(self, plugin: BasePlugin) -> bool
def unregister_plugin(self, plugin_name: str) -> bool
def discover_plugins(
self,
plugin_directories: Optional[List[Path]] = None
) -> int
def get_file_format_plugin(self, file_path: Path) -> Optional[FileFormatPlugin]
def get_export_plugin(self, format_name: str) -> Optional[ExportPlugin]
def get_processing_plugin(self, processing_name: str) -> Optional[ProcessingPlugin]
def list_plugins(self) -> Dict[str, List[Dict[str, Any]]]
def get_supported_extensions(self) -> List[str]from epyr.plugins import plugin_manager
# Register custom plugin
plugin_manager.register_plugin(MyCustomPlugin())
# Find plugins
file_plugin = plugin_manager.get_file_format_plugin(Path('data.xyz'))
export_plugin = plugin_manager.get_export_plugin('csv')Centralized logging configuration.
def setup_logging(
level: str = "INFO",
log_file: Optional[Path] = None,
format_string: Optional[str] = None
) -> logging.Logger
def get_logger(name: str) -> logging.LoggerExample:
from epyr.logging_config import setup_logging, get_logger
# Set up logging
setup_logging('DEBUG', log_file=Path('epyr.log'))
# Get module logger
logger = get_logger(__name__)
logger.info("Processing started")Command-line interface functions.
def cmd_convert() -> None
def cmd_baseline() -> None
def cmd_batch_convert() -> None
def cmd_config() -> None
def cmd_info() -> None
def cmd_isotopes() -> None
def cmd_validate() -> None
def main() -> NoneThese functions are primarily used internally by the CLI system but can be called programmatically if needed.
Baseline correction algorithms.
def baseline_polynomial(
y_data: np.ndarray,
x_data: Optional[np.ndarray] = None,
poly_order: int = 1,
exclude_regions: Optional[List[Tuple[float, float]]] = None
) -> Tuple[np.ndarray, np.ndarray]Parameters:
y_data: EPR intensity datax_data: Magnetic field values (optional)poly_order: Polynomial order for fittingexclude_regions: List of (start, end) regions to exclude from fit
Returns:
corrected_data: Baseline-corrected intensity databaseline: Fitted baseline data
Physical constants (CODATA 2022) and EPR / NMR unit conversions.
# Fundamental constants (SI)
GFREE: float # free-electron g-factor (2.00231930436092)
BMAGN: float # Bohr magneton (9.2740100657e-24 J/T)
PLANCK: float # Planck constant (6.62607015e-34 J·s)
HBAR: float # reduced Planck constant
CLIGHT: float # speed of light
BOLTZM: float # Boltzmann constant
NMAGN: float # nuclear magneton
# ... and the *_CGS variants
# EPR-specific helpers
def gamma_hz(g_factor: float = 2.0023) -> float
def magnetic_field_to_frequency(B_tesla: float, g: float = 2.0023) -> float
def frequency_to_magnetic_field(freq_hz: float, g: float = 2.0023) -> float
def thermal_energy(T_kelvin: float) -> float
# Direct unit conversions
def mhz_to_mt(freq_mhz: float, g_factor: float = 2.0023) -> float
def mt_to_mhz(field_mt: float, g_factor: float = 2.0023) -> float
def cm_inv_to_mhz(wavenumber_cm_inv: float) -> float
def mhz_to_cm_inv(freq_mhz: float) -> float
# General-purpose converter
def unitconvert(value, from_unit: str, to_unit: str) -> floatBackwards-compatible callable accessors (planck(), bmagn(), ...) are
also available; prefer the upper-case constants for readability.
Interactive isotope database interface.
def run_gui() -> NoneLaunches the Tkinter-based isotope database GUI for exploring nuclear properties and magnetic parameters.
All modules use consistent error handling:
from epyr.logging_config import get_logger
logger = get_logger(__name__)
try:
# EPyR Tools operations
result = epyr.eprload('file.dsc')
except Exception as e:
logger.error(f"Operation failed: {e}")
raiseEPyR Tools uses comprehensive type hints:
from typing import Any, Dict, List, Optional, Tuple, Union
from pathlib import Path
import numpy as np
# Example function signature
def process_data(
x_data: np.ndarray,
y_data: np.ndarray,
parameters: Dict[str, Any],
output_path: Optional[Path] = None
) -> Tuple[np.ndarray, Dict[str, Any]]:
passimport epyr
from epyr.fair import convert_bruker_to_fair, validate_fair_dataset
from epyr.performance import OptimizedLoader
from epyr.config import config
# Configure EPyR Tools
config.set('performance.cache_enabled', True)
config.set('plotting.dpi', 300)
# Load data with optimization
loader = OptimizedLoader(cache_enabled=True)
x, y, params, path = loader.load_epr_file('spectrum.dsc')
# Validate FAIR compliance
data_dict = {'x_data': x, 'y_data': y, 'metadata': params}
validation_result = validate_fair_dataset(data_dict)
if validation_result.is_valid:
# Convert to FAIR formats
success = convert_bruker_to_fair(
'spectrum.dsc',
formats=['csv', 'json', 'hdf5'],
include_metadata=True
)
print(f"Conversion successful: {success}")
else:
print("FAIR validation failed:")
for error in validation_result.errors:
print(f" Error: {error}")This API reference provides comprehensive documentation for all public interfaces in EPyR Tools.