Skip to content

Instrument control suite for Bruker E500, MercuryiTC and Keithley 2600.

License

Notifications You must be signed in to change notification settings

OE-FET/customxepr

Repository files navigation

Documentation Status

Warning: Version 2.3.3 is the last release that supports Python 2.7. All newer releases only support Python 3.6 and higher.

CustomXepr

A Python instrument controller and GUI for Bruker E500 EPR spectrometers, MercuryiTC temperature controllers and Keithley 2600 series source measurement units. CustomXepr relies on the python drivers keithley2600 and mercuryitc and the respective user interfaces keithleygui and mercurygui for functionality regarding the Keithley 2600 and MercuryiTC instruments.

Screenshot of CustomXepr GUI

Overview

CustomXepr for Linux and macOS enables the interaction with all instruments involved in field induced electron spin resonance (FI-EPR) measurements: the Bruker E500 spectrometer, through Bruker's Xepr Python API, the Oxford Instruments MercuryiTC temperature controller, and the Keithley 2600 series of source measurement units (SMUs). The program suite is structured into drivers and user interfaces for individual instruments (external packages), CustomXepr's main class which provides higher level functions that often combine functionality from multiple instruments, and a manager which handles the scheduling of experiments.

The aim of CustomXepr is twofold: First and foremost, it enables the user to automate and schedule full measurement plans which may run for weeks without user input. Second, it complements the functionality of Bruker's Xepr control software. This includes for instance powerful logging capabilities, a more accurate determination of the cavity's Q-value from its frequency response, more reliable tuning of the cavity, the ability to re-tune the cavity during long-running measurements, logging of the cryostat temperature during measurements, and many more. Low level functionality and communication with the spectrometer remains with Xepr.

CustomXepr structure

Finally, CustomXepr fully supports Bruker BES3T data files (DSC, DTA, etc). The customxepr.experiment.XeprData class enables loading, plotting, modifying and saving such data files from regular, 2D or pulsed experiements. It also supports reading and plotting the pulse sequences used to acquire the data, as saved in the DSC file. More information is provided in the API documentation for the XeprData class.

Installation

Make sure that you have PyQt or PySide installed on your system (all other dependencies will be installed automatically). Then install CustomXepr by running in a terminal:

$ pip install git+https://github.com/OE-FET/customxepr

Instrument communication

CustomXepr communicates with with the Keithley and MercuryiTC through NI-VISA or pyvisa-py and is therefore independent of the actual interface, e.g., Ethernet, USB, or GPIB. Connections to the EPR spectrometer are handled through Bruker's Xepr Python API.

Usage

CustomXepr can be run interactively from a Jupyter console, or as a standalone program. In the latter case, it will create its own internal Jupyter console for the user to run commands.

You can start CustomXepr from a Python command prompt as follows:

>>> from customxepr import run_gui
>>> run_gui()

To start the CustomXepr GUI from a console / terminal, run customxepr.

CustomXepr has a user interface which displays all jobs waiting in the queue, all results returned from previous jobs, and all logging messages. Common tasks such as pausing, aborting and clearing jobs, plotting and saving returned data, and setting temperature stability tolerances can be performed through the interface itself. However, apart from tuning the cavity and reading a Q-factor, all jobs must be scheduled programmatically through the provided Jupyter console.

Job-scheduling

CustomXepr's core consists of functions for preconfigured tasks, such as changing the cryostat temperature, recording a transfer curve, performing a preconfigured EPR measurement. For instance, customXepr.setTemperature(110) tells the MercuryiTC to ch