PulseEPR

class specatalog.models.measurements.PulseEPR(**kwargs)[source]

Pulsed electron paramagnetic resonance (pulsed EPR) measurement.

This subclass of Measurement represents any pulsed EPR experiment, e.g. transient nutations, PELTOR, saturation recovery… This model adds pulsed-EPR-specific parameters such as the experiment type (e.g. Hahn Echo, ESEEM), frequency band, and optional excitation wavelength for optically triggered sequences.

The model participates in SQLAlchemy polymorphism using the "pulse_epr" polymorphic_identity. Any row in measurements where method='pulse_epr' is therefore automatically loaded as a PulseEPR instance.

id

Primary key linked to measurements.id with cascading delete.

Type:

int

pulse_experiment

Type of pulsed EPR sequence used (e.g. Hahn Echo, Rabi, ESEEM).

Type:

str

frequency_band

Microwave frequency band of the experiment (e.g. X, Q, W-band). Optional because certain pulsed setups define frequency elsewhere.

Type:

str or None

attenuation

Microwave attenuation setting applied during the pulse sequence.

Type:

str or None

excitation_wl

Excitation wavelength in nanometres for optically triggered pulsed EPR experiments. Optional and only used for light-induced sequences.

Type:

float or None

Notes

  • The tablename is pulse_epr.

  • All shared measurement metadata (temperature, solvent, operator, timestamps, file path, etc.) are inherited from Measurement.

  • The id corresponds directly to the entry in the main measurements table via single-table inheritance.

  • Pulse-experiments usually have many metadata that are important. A file containing the metadata (e.g. a .DSC-file) should be saved with the raw data at /data/Mxy/raw.

Examples

Creating a pulsed EPR measurement:

>>> from measurements import PulseEPR
>>> from molecules import Molecule
>>> mol = Molecule(name="PDI-TEMPO")
>>> m = PulseEPR(
...     molecule=mol,
...     method="pulse_epr",
...     temperature=80.0,
...     solvent="Toluene",
...     date=date(2025, 4, 12),
...     measured_by="Bob",
...     path="/data/M21/measurement_M21.h5",
...     corrected=False,
...     evaluated=False,
...     pulse_experiment="HahnEcho",
...     frequency_band="X",
...     attenuation="20 dB",
...     excitation_wl=532.0,
... )
>>> session.add(m)
>>> session.commit()

Loading via polymorphism:

>>> m = session.query(Measurement).filter_by(id=21).one()
>>> type(m)
<class 'models.PulseEPR'>