Skip to content

Laser Setup

Laser Setup is an experimental control system for laser, I–V, and transfer-curve measurements on nano-electronic devices. It is built on top of PyMeasure and extends it with a YAML-based configuration system (powered by OmegaConf and Hydra) so that instruments, measurement procedures and sequences can be defined and modified without touching Python code.

  • New here?

    Install the project and launch the app for the first time.

    Getting Started

  • Learn by doing

    Run real (simulated) experiments step by step — no hardware required.

    Tutorials

  • Understand the system

    How the GUI, configuration, procedures and instruments fit together.

    User Guide

  • Build something new

    Write your own measurement procedure or add a new instrument.

    Developer Guide

What can it do?

  • Control instruments from your computer — source-meters, power supplies, light sources, power meters and temperature sensors.
  • Run measurement procedures through a graphical interface with live plots, logs and parameter inputs.
  • Chain procedures into sequences that run automatically, one after another.
  • Reproduce experiments thanks to parameters and metadata saved alongside every data file.
  • Develop without hardware using a built-in debug mode and a FakeProcedure that generates synthetic data — perfect for learning the software.

Supported instruments

Instrument Role Notes
Keithley 2450 SourceMeter Source/measure voltage & current Requires NI-VISA
Keithley 6517B Electrometer High-impedance current measurement Requires NI-VISA
TENMA Power Supply Gate / laser bias Serial (COM) connection
Thorlabs PM100D / PM100USB Optical power measurement Requires NI-VISA
Bentham TLS120Xe Tunable light source (monochromator) Proprietary bendev driver
PT100 / Clicker (RosaTech) Temperature sense & hot-plate control Custom serial firmware

Any instrument from the PyMeasure instrument library can also be used.

Read the PyMeasure docs too

Laser Setup builds directly on PyMeasure's Procedure, Parameter, Results and managed-window classes. Skimming the PyMeasure documentation will make everything here click into place much faster.

How the pieces fit together

flowchart TD
    CLI["<b>laser_setup</b> command"] --> Setup["config.setup()"]
    Setup --> CONFIG[("CONFIG<br/>(merged YAML)")]
    CLI -->|no argument| Main["MainWindow (GUI hub)"]
    CLI -->|procedure name| Exp["ExperimentWindow"]
    CLI -->|script name| Script["CLI script function"]
    Main --> Exp
    Main --> Seq["SequenceWindow"]
    Exp --> Proc["Procedure<br/>(startup → execute → shutdown)"]
    Seq --> Proc
    Proc --> IM["InstrumentManager"]
    IM --> HW["Instruments<br/>(real or debug)"]
    CONFIG -.drives.-> Main
    CONFIG -.drives.-> Exp
    CONFIG -.drives.-> Proc
    CONFIG -.drives.-> IM

Read the Architecture page for the full story.

Where to go next


Conventions used in this documentation

  • Shell commands are shown with a $ prompt; type only what follows it.
  • Every Python/CLI command uses uv so that nothing is installed system-wide. See Installation for why.
  • File paths are given relative to the repository root unless stated otherwise.