Releases: Ulm-IQO/qudi
Qudi v0.10 (Pulsed 3.0)
Changes/New features:
- Added support for Opal Kelly XEM6310-LX45 devices to HardwareSwitchFpga hardware module.
- Newport CONEX-AGP piezo stage motor module.
- Sequence Generator checks the step constraint and adds and idle block if necessary.
- Save_logic now expands environment variables in the configured data path (e.g. $HOME under Unix or $HOMEPATH under Windows)
- Added command line argument --logdir to specify the path to the logging directory
- Added the keyword "labels" to the "measurement_information" dict container in predefined methods.
This can be used to specify the axis labels for the measurement (excluding units) - All modules use new connector style where feasible.
- Bug fix for POI manager was losing active POI when moving crosshair in confocal
- Added a how-to-get-started guide to the documentation
- Bug fixes and improvements for the scientific SpinBox introduced in v0.9
- POI manager keeps POIs as StatusVar across restarts and fixes to distance measurement
- Various stability improvements and minor bug fixes
- Update conda environment to more recent versions of packages
- Fix installation procedure for the conda environment in windows by using powershell in the cmd and catch with that potential exceptions (e.g. if conda environment is not present).
- Added .ico image to make a desktop shortcut on Windows with explanation in the documentation
- Added a how-to-participate guide to the documentation
- Added installation options guide to the documentation
- A lot of smaller fixes to the spectrometer (WinSpec) -> this also modifies the connectors in the default config
- Added fitting to the spectrometer
- Microwave interface passes trigger timing to microwave source, needs hardware module adjustments for not-in-tree modules
- Bug fixes and support for SMD12 laser controller
- For SMIQs added config options to additionally limit frequency and power. Added constraint for SMQ06B model.
- Added live OMDR functionality to only calculate the average signal over a limited amount of scanned lines
- New hardware file for Microwave source - Anritsu MG3691C with SCPI commands has been added.
- Config Change: Hardware file for mw_source_anritsu70GHz.py with class MicrowaveAnritsu70GHz was changed to file mw_source_anritsu_MG369x.py with class MicrowaveAnritsuMG369x to make it universal. Also hardware constraints are set per model.
- Lock-In functionality was added to the ODMR counter and implemented for the NI-Card. All other hardware and interfuse with ODMRCounterInterface were updated.
- New hardware file for Microwave source - WindFreak Technologies SynthHDPro 54MHz-13GHz source
- New hardware file for AWG - Keysight M3202A 1GS/s 4-channel PXIe AWG
- Add separate conda environments for windows 7 32bit, windows 7 64bit, and windows 10 64bit.
- Extend the windows installation procedure of the conda environment for qudi. The conda environments is selected automatically for the correct windows version and the appropriate environment file is taken.
- Rewrite the documentation for required python packages for Qudi and mention instead the installation procedure, how to create manually a python environment for qudi.
- Correct the low level implementation for the PulseBlasterESR-PRO.
- Implement the pulser interface for PulseBlasterESR-PRO devices.
- Implement the switch interface for PulseBlasterESR-PRO devices.
- Add possibility to set instruction delays in the config for PulseBlasterESR-PRO sequence generation.
- Add a copy-paste config option to the docstrings of all current qudi hardware modules.
- Pulsed 3.0:
A truckload of changes regarding all pulsed measurement related modules- analyze_sequence now returns all the necessary values to work with sequences.
- It is now possible to select no or analogue laser channels. In this case, the relevant block element gets marked as laser.
- Adding the possibility to reliably add flags to sequence steps and making them selectable in the GUI.
- Bug fix for waveform generation larger than ~2 GSamples
- Added chirp function to available analog shapes in pulsed measurements
- Tab order in pulsed measurement GUI is now more useful
- Added delta plot of alternating sequence in the pulsed analysis window (including errorbars)
- Bug fix for pulsed extraction window where zooming caused InfiteLines to disappear and a
switch in lines caused negative width - Bug fix for pulsed measurements with large photon count numbers (
numpy.int32
vs.
numpy.int64
) - Pulsed related logic modules have been moved to
<main_dir>/logic/pulsed
- Graphical editors for
PulseBlock
,PulseBlockEnsemble
andPulseSequence
instance
generation are now implemented according to the Qt model/view concept. Several delegates and
custom widgets needed by the editors can be found in<main_dir>/gui/pulsed
. The editors
(QTableView) and corresponding models (QAbstractTableModel) can be found in
pulse_editors.py
. - Several GUI tweaks and clean-ups for all tabs of
PulsedMeasurementGui
- Removal of several "logic components" from GUI module
SequenceGeneratorLogic
is now fully responsible for controlling the pulse generator hardware.
PulsedMeasurementLogic
also has access to the pulse generator but only to start/stop it.
samples_write_methods.py
became obsolete and will be removed once all hardware modules
implement waveform/sequence generation on their own.- The purpose of
PulsedMasterLogic
is now mainly to decouple function calls to
SequenceGeneratorLogic
andPulsedMeasurementLogic
via signals. Due to the very diverse
usage of the pulsed modules in a combination of custom scripts together with the GUI this is
a crucial feature to ensure safe threading. - Pulser hardware interface has been changed. The pulser hardware module is now fully
responsible for waveform and sequence generation on the device. TheSequenceGeneratorLogic
now only calculates the analog and digital samples and hands them over to the hardware module
to be written to the device. This makes it more flexible since no in-depth knowledge about the
hardware specific memory/file management is needed in the logic making the interface more
generic. Makes it easier to create new pulse generator modules as long as the hardware can be
abstracted to a waveform/sequence terminology. - Adapted pulse generator modules to new pulser interface.
- Adapted FPGA hardware file to run with new interface.
- All groups of settings in pulsed logic modules are now represented as dictionaries improving
flexibility as well as minimizing necessary code changes when adding new features. - Most parameter sets in
PulsedMeasurementLogic
andSequenceGeneratorLogic
are now
properties of the respective module.PulsedMasterLogic
also provides an interface to all those
properties. - Dynamic import of pulse analysis and pulse extraction methods now realized through helper
class instances held byPulsedMeasurementLogic
. For detailed information about adding
methods, please seehow_to_add_analysis_methods.md
andhow_to_add_extraction_methods.md
- Dynamic import of predefined methods now realized through helper class instance held by
SequenceGeneratorLogic
. For detailed information about adding methods, please see
how_to_add_predefined_methods.md
- Dynamic import of sampling function definitions (analog waveform shapes) handled by class
SamplingFunctions
and will be refreshed upon activation ofSequenceGeneratorLogic
. For
detailed information about adding functions, please seehow_to_add_sampling_functions.md
- Alternative plot data will now always be saved if available
- Automatic setting of parameters in pulsed analysis tab (invoke settings) will only be possible
for ensembles/sequences generated by predefined methods (instances must have fully populated
measurement_information
dictionary) NOT for ensembles/sequences created or edited by the table
editors. - Each
PulseBlockEnsemble
andPulseSequence
instance will have a dictionary attribute called
sampling_information
which will be populated during waveform/sequence creation. It provides
information about the "real life" realization of the waveform/sequence like the actual length of
eachPulseBlockElement
in integer time bins or the times at which transitions of digital
channels occur. It will also contain the set of pulse genrator settings used during sampling
(e.g. sample_rate, activation_config etc.).
When the respective pulser assets (waveforms and sequences) get deleted from the device, this
dictionary will be emptied to indicate that the asset has not yet been sampled.
This will only work if you delete waveforms/sequences on the device via qudi commands or upon a
restart of qudi. Hardware assets directly deleted by hand can lead to faulty behaviour of the
pulsed measurement modules. - Pulse analysis and extraction methods now have read-only access to the entire
PulsedMeasurementLogic
allowing to implement more sophisticated methods that need in-depth
information about the running waveform. - Predefined methods now have read-only access to the entire
SequenceGeneratorLogic
- Pulsed object instances (blocks, ensembles, sequences) are serialized to a directory that can
be changed via ConfigOption. Each instance is a separate file so it is easier to manage a large
number of instances. In the future these instances need to be saved as StatusVars - New dialog box for pulse generator hardware settings. Previously the settings were located
directly in a tab of the PulsedMainGUI. Also added voltage se...
Qudi v0.9 (Analog In, scientific SpinBox, waveform sampling)
Changes/New features:
- Huge amount of small and medium sized bug fixes and usability/stability improvements
- Replaced scientific SpinBoxes with a new implementation that is more powerful and does not use pyqtgraph
- Fixed Python crash upon closing qudi which was related to saving images with matplotlib (Windows)
- Added hardware module to control Coherent OBIS lasers
- Manager GUI now properly reflects the state of each module
- Full multichannel support for slow counting / confocal / ODMR
- Moved to fysom v2.1.4
- Module base classes now nest fysom state machine in
module_state
instead of subclassing it. The current state is accessible viamodule_state.current
ormodule_state()
- Changed the sampling algorithm for waveforms. Formerly each
PulseBlockElement
was sampled to match the specified length as closely as possible. Now the ideal time on which a transition between elements should occur is matched to a global quantized timeline. The sampled waveform length will now not deviate more than one timebin from the ideal length. However ideally identical elements can slightly vary (1 bin) in length throughout the entire waveform. This should lead in general to better results since the overall definition of the waveform is more closely matched to a quantized timeline - Commonly used parameters in pulsed measurements are now shared for all predefined methods (less input widgets / clean UI). Each
generate_*
method still needs all parameters but input widgets are reused by name. Available names are:['mw_channel', 'gate_count_channel', 'sync_trig_channel', 'mw_amp', 'mw_freq', 'channel_amp', 'delay_length', 'wait_time', 'laser_length', 'rabi_period']
- Generalized APT motor stages class (multi-axis support via config)
- Simple digital channel based switch on/off capability added to
hardware/ni_card.py
- National Instruments X series card hardware module renamed from
ni_card.py
tonational_instruments_x_series.py
qudikernel.py
moved to core- Listening address and port of qudi can now be changed in config (default: localhost)
- Analog signal input (for PDMR measurements) now supported for slow counter/confocal/ODMR (see config changes)
- Use of rpyc became optional (does not need to be installed if no remote module capability is needed)
- Mayor cleanup/overhaul of the
microwave_interface.py
and adaption of all affected modules (hardware/logic)
Config changes:
- New remote server declaration (old one working but deprecated):
[global]
module_server:
address: ''
port: 12345
certfile: 'filename.cert'
keyfile: 'filename.key'
- New full example config for
national_instruments_x_series.py
:
mynicard:
module.Class: 'national_instruments_x_series.NationalInstrumentsXSeries'
clock_channel: '/Dev1/Ctr0'
scanner_clock_channel: '/Dev1/Ctr2'
photon_sources:
- '/Dev1/PFI8'
- '/Dev1/PFI9'
counter_channels:
- '/Dev1/Ctr1'
counter_ai_channels: # optional
- '/Dev1/AI1'
scanner_counter_channels:
- '/Dev1/Ctr3'
scanner_ai_channels: # optional
- '/Dev1/AI0'
scanner_ao_channels:
- '/Dev1/AO0'
- '/Dev1/AO1'
- '/Dev1/AO2'
- '/Dev1/AO3'
scanner_position_ranges:
- [0e-6, 200e-6]
- [0e-6, 200e-6]
- [-100e-6, 100e-6]
- [-10, 10]
scanner_voltage_ranges:
- [-10, 10]
- [-10, 10]
- [-10, 10]
- [-10, 10]
default_samples_number: 10
default_clock_frequency: 100
default_scanner_clock_frequency: 100
gate_in_channel: '/Dev1/PFI9'
counting_edge_rising: True
odmr_trigger_channel: '/Dev1/PFI15'
Qudi v0.8 (Qt5, connectors and fits)
Caution: fits need to be configured in the respective settings dialog and may not include printed results or may be just broken. If you find a defective fit, consider fixing it and submitting a pull request.
Changes/New features:
- The Qudi paper was published: http://doi.org/10.1016/j.softx.2017.02.001
- Move everything to Qt5 only (no more Qt4 support) and pyqtgraph 0.10.0
- Re-usable/configurable fit GUI components
- Scienific notation input for PID GUI
- Support for Extensions (out-of-tree modules)
- Removed the fysom event parameter (usually called e) from on_activae and on_deactivate functions
- Swabian Instruments TimeTagger / PulseStreamer hardware modules
- Much faster savelogic
- Remove 'Out' connectors, connection is now by module name only
- Pulse analysis supports multiple methods
- Module loading and unloading now definitely happens in the correct order
- Locked modules are only deactivated after prompting the user
Config changes:
- No more 'Out' connectors:
Old style, produces lots of warnings:
logic:
counter:
module.Class: 'counter_logic.CounterLogic'
connect:
counter1: 'mynicard.counter'
savelogic: 'savelogic.savelogic'
save:
module.Class: 'save_logic.SaveLogic'
win_data_directory: 'C:/Data'
unix_data_directory: 'Data/'
New style:
logic:
counter:
module.Class: 'counter_logic.CounterLogic'
connect:
counter1: 'mynicard'
savelogic: 'save'
save:
module.Class: 'save_logic.SaveLogic'
win_data_directory: 'C:/Data'
unix_data_directory: 'Data/'
Qudi v0.70
Changes/New features:
- Overhaul of most used hardware modules, including
- Error codes and failed hardware calls are caught and passed up to the logic
- Updates of methods documentation in hardware modules and corresponding interfaces
- Logic modules are now listening to the hardware return values and react accordingly
- Introduction of update signals in most logic and GUI modules to ensure coherency of logic and GUI module information. So upon changing something in the GUI this module will emit an update signal which is connected to the logic module. The same works vice-versa if a script or something is changing values in logic modules.
- Stability improvements to pulsed measurement analysis toolchain (pulse_extraction_logic and pulse_analysis_logic)
- Changed SpinBoxes in pulsed_maingui BlockEditor, EnsembleOrganizer and SequenceOrganizer to scientific SpinBoxes enabling scientific number format and unit prefix input
- Pulsed measurement data is saved properly now. Scientific number format was introduced to avoid problems with too few digits
- Better pulsed_master_logic structure that allows now also for direct waveform/sequence generation on pulse generator devices (without writing files)
- Heaps of changes/improvements regarding fitting in qudi. Big parts of fit_logic have been rewritten. It may be necessary to adapt custom scripts using fits
- Confocal is now consequently using SI units (config change needed)
- Confocal can now work from different count sources which are selectable (multichannel support) (config change needed)
- Voltage range for NI card channels can be set independently for each channel (config change needed)
Config changes:
In order to update to the latest version of qudi one has to apply minor changes to the config file.
Change configuration settings for the ni_card module:
-
Replace "scanner_ao_channels" with "scanner_x_ao", "scanner_y_ao" and "scanner_z_ao".
Example:
scanner_x_ao: '/Dev1/AO0'
scanner_y_ao: '/Dev1/AO1'
scanner_z_ao: '/Dev1/AO2'
scanner_a_ao: '/Dev1/AO3'
If you do not need the 4th axis, just leave it out.
- You can either specify a voltage range for all axes:
voltage_range:
- -10
- 10
- or you have to specify one for each axis:
x_voltage_range:
- -10
- 10
y_voltage_range:
- -10
- 10
z_voltage_range:
- 0
- 10
a_voltage_range:
- -5
- 5
- Change all distances in ni_card to meters; you can use exponential notation. For example
x_range:
- -100e-6
- 100e-6
The hardware file for Tektronix AWG70k series has been changed to use the pyvisa package for more robust and easy communication with the device:
- The settings "awg_IP_address" and "awg_port" are not used anymore and have to be replaced with "awg_visa_address" and "awg_ip_address". For example:
awg_visa_address: 'TCPIP0::AWG70K-38293801::inst0::INSTR'
awg_ip_address: '192.168.1.3'
The Visa address can be obtained for example by the "Agilent connection expert" application.
Qudi v0.60 (SoftwareX paper release)
Changes/New features:
- Lots and lots of work leading to working and stable pulsed measurement modules, including
- Editor for fast analog and digital waveforms and AWG channel configuration
- Synthesize and upload waveforms to AWGs while respecting AWG limits and channels
- Pulse extraction from fast counter time trace and flourescence signal extraction
- Display of results for common measurements
- Works with Jupyter notebooks
- Some new documentation
- Preliminary GUI to show/edit configuration files
- Massive improvements to fit stability
- Most interfaces now use abstract base classes
- Confocal can show last scanned line and move Z while scanning XY
- Continuous integration support
- Nuclear spin operations experiment module
- Spinboxes with scientific notation support
- Use QtPy to support multiple Qt versions
- Configuration files now use the YAML file format
- Cooperative inheritance for modules
- Logging now based on standard Python logger
- HighFinesse WSU 30 wave meter support
- New and consistent colors for plots throughout Qudi
- PyQt5 compatibility
- Many fixes to QO and Pi3 FPGA fast counter modules
- Matplotlib inline plots and completion suport for Jupyter kernel
- Jupyter kernel for Qudi (including install script)
- Move project repository from SVN to git and to GitHub
- New dark color scheme for GUI (modified qdark)
- Lots of new predefined fitting methods
- Fit logic can now load fitting methods from python files in a subfolder
- Reusable fit settings GUI methods
- Tektronix AWG 70000, 7112 and 5002 support
- Gated counter logic and GUI modules
- Magnetic field alignment module for vector magnet and solid state magnet on a 4-axis stage
- Thorlabs APTmotor support
- Scan history (Forward/backward) in Confocal
- Qudi module state save/restore functionality (app_status folder)
- Automatic loading of configured modules on a remote system
- UI fixes
- TSYS_01 temperature sensor support
- Raspberry Pi PWM support for PID
- Software PID logic and GUI
- Fastcomtec 7887 and MCS6 support
- Picoharp300 support
- Python script to list qudi modules
Qudi v0.1
Functionality:
- Counter
- Confocal scanning
- Laser scanning
- POI managing
- ODMR
The basics of all these modules are working but there is plenty room for improvement.
At this stage the GUI is still under active development and so users should expect some interface items to change in future releases.
Qudi v0.5 (Christmas 2015 edition)
New features:
- Two photon counters supported in NI card counter and counter logic
Qudi v0.4
New features:
- Tilted scanning
- ODMR remembers settings
- ODMR can save raw data
- Working and tested support for Radiant Dyes flip mirrors
- support for taking spectra from spectrometer via WinSpec32
- POI positions are now actually updated when the tracked POI moves
- remote module support is more robust now
- fixed a crash when changing confocal color bar while scanning
- winspec32 spectrometer support
- configurable settling time at start of optimization scans
- option for surface-subtraction in the depth optimization scan
- ALPHA Task interface
- PRE-ALPHA for pulsed experiments
Qudi v0.3
New features:
- Manager now includes log and iPython console
- Manager can load and save the configuration
- Manager can show active threads and remotely shared modules
- QuDi remembers which configuration file is loaded
- QuDi can restart to load new configuration
- SmiQ R&S 06ATE works for ODMR
- Dockwidgets in ODMR
- Laser scanning with a remote wavemeter is now tested and confirmed working
- Zoom with mouse in Confocal
Additionally, lots of bugs were fixed.
Qudi v0.2
New features:
- New Log style
- (Manager shows module state)
- Continues scan xy/depth (loop scan)
- Rotate confocal images (rotates only the image, not the cursor!!!)
- POI Manager GUI: restore default widget location (size might not be as default)
- Cursor and arrow keys: right/left(x-direction) up/down(y-direction) Bild up/Bild down(z-direction); big step size with shift;step size can be changes in the settings
- Clock time sample shift POI Manager
- Centiles of colorbars is now working during a scan
- All save files should now have the same time in the lable
- duration of periodic optimiser changeable working during period
- improved explanation in the data file of the Confocal scans
- Added tooltips to Confocal and Optimiser settings