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 settings for digital and analog
channels that were missing in the GUI before. - Lots of smaller changes to improve programming flexibility and robustness against users
- Added a new ungated extraction method ('ungated_gated_conv_deriv') which uses the keys in the
sampling information to convert an ungated timetrace into a gated timetrace which is then
anaylzed with the ungated method 'gated_conv_deriv'. The conversion is based on the rising
and falling bins in the laser channel which indicate the positions of the laser pulses in
the ungated trace. For fine-tuning additional delays (for example from AOMs) can be taken
into account. This method speeds up laser extractions from ungated timetraced by a lot. - Improved pulsed measurement textfile and plot layout for saved data
- Added buttons to delete all saved PulseBlock/PulseBlockEnsemble/PulseSequence objects at once.
- Introduced separate fit tools for each of the two plots in the pulsed analysis tab
- Automatically clears fit data when changing the alternative plot type or starting a new
measurement.
Config changes:
-
All pulsed related logic module paths need to be changed because they have been moved in the logic
subfolder "pulsed". As an example instead ofmodule.Class: 'pulsed_master_logic.PulsedMasterLogic'
it should be now
module.Class: 'pulsed.pulsed_master_logic.PulsedMasterLogic'
-
PulseExtractionLogic
andPulseAnalysisLogic
are no qudi logic modules anymore and must be
removed from the config. Also remember to remove them from the "connect" section of all other
modules (probably justPulsedMeasurementLogic
). -
The connection to
SaveLogic
has been removed fromPulsedMeasurementGui
and thus needs to be
removed from the "connect" section in the config. So the GUI entry in the config should look
somewhat like:pulsedmeasurement: module.Class: 'pulsed.pulsed_maingui.PulsedMeasurementGui' connect: pulsedmasterlogic: 'pulsedmasterlogic'
-
The connectors and ConfigOptions for
SequenceGeneratorLogic
have changed. The new config should
look somewhat like:sequencegeneratorlogic: module.Class: 'pulsed.sequence_generator_logic.SequenceGeneratorLogic' assets_storage_path: 'C:/Users/username/saved_pulsed_assets' # optional additional_predefined_methods_path: 'C:\\Custom_dir' # optional additional_sampling_functions_path: 'C:\\Custom_dir' # optional connect: pulsegenerator: 'mydummypulser'
Essentially "additional_predefined_methods_path" and "additional_sampling_functions_path" only
need to be specified when you want to import sampling functions or predefined methods from an
additional directory other than the default directories situated in qudi.logic.pulsed.
"assets_storage_path" is the directory where the object instances for blocks, ensembles and
sequences are saved to. If not specified this directory will default to a subfolder in the home
directory. -
The connectors and ConfigOptions for
PulsedMeasurementLogic
have changed. The new config should
look somewhat like:pulsedmeasurementlogic: module.Class: 'pulsed.pulsed_measurement_logic.PulsedMeasurementLogic' raw_data_save_type: 'text' # optional additional_extraction_path: 'C:\\Custom_dir' # optional additional_analysis_path: 'C:\\Custom_dir' # optional connect: fastcounter: 'mydummyfastcounter' pulsegenerator: 'mydummypulser' fitlogic: 'fitlogic' savelogic: 'savelogic' microwave: 'microwave_dummy'
Essentially "additional_extraction_path" and "additional_analysis_path" only need to be
specified when you want to import sampling functions or predefined methods from an additional
directory other than the default directories situated in qudi.logic.pulsed. -
The fitting has been added to the spectrometer logic module. You need to connect the FitLogic to
the SpectrometerLogic module like:spectrumlogic: module.Class: 'spectrum.SpectrumLogic' connect: spectrometer: 'myspectrometer' savelogic: 'savelogic' odmrlogic: 'odmrlogic' fitlogic: 'fitlogic'
-
Tektronix 7000 series is now in file
tektronix_awg7k.py
and classAWG7k
.
Use that instead oftektronix_awg7122c.py
and change the configuration like this:pulser_awg7000: module.Class: 'awg.tektronix_awg7k.AWG7k' awg_visa_address: 'TCPIP::10.42.0.211::INSTR' awg_ip_address: '10.42.0.211' timeout: 60