Skip to content

Qudi v0.10 (Pulsed 3.0)

Latest
Compare
Choose a tag to compare
@Neverhorst Neverhorst released this 14 Mar 13:01

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 and PulseSequence 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 and PulsedMeasurementLogic 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. The SequenceGeneratorLogic
      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 and SequenceGeneratorLogic 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 by PulsedMeasurementLogic. For detailed information about adding
      methods, please see how_to_add_analysis_methods.md and how_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 of SequenceGeneratorLogic. For
      detailed information about adding functions, please see how_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 and PulseSequence 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
      each PulseBlockElement 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 of

    module.Class: 'pulsed_master_logic.PulsedMasterLogic'
    

    it should be now

    module.Class: 'pulsed.pulsed_master_logic.PulsedMasterLogic'
    
  • PulseExtractionLogic and PulseAnalysisLogic 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 just PulsedMeasurementLogic).

  • The connection to SaveLogic has been removed from PulsedMeasurementGui 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 class AWG7k.
    Use that instead of tektronix_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