Writing software is a big part of experimental physics. Even a moderately complex experiment involves several instruments that need to talk to each other and stay synchronised, so sooner or later we all have to decide how to control them all.
For a long time, LabVIEW was the answer. It is easy to pick up, but is awkward to version-control, and clumsy when you just want to write a quick scripts. Fewer and fewer students learn as part of the community has moved to Python. Written in Python, QTLab was popular for a while, with a simple interface, but it is no longer supported. QCoDeS and LabRAD have since become common in mesoscopic physics and quantum transport. They are really powerful, but they are not easy to learn for a new graduate student.
When I was a PhD student in Manchester, I looked at several of these options. With my friend Servet Ozdemir we tried a few different things to try to replace the aging LabView interface. Eventually I settled on QCoDeS, and started writing my own functions, drivers for the instruments we needed, station files and scripts.
I carried that set of scripts, commands and station files with me from Manchester to ICFO during my postdoc, and it showed. I ended up with scripts nobody else could run, overnight queues that were lost when something crashed, and Jupyter notebooks so large they could no longer be opened on a modest laptop. It was also difficult to train students this way. Everyone has their own idea of what good code looks like, and most people do not read the QCoDeS documentation. Some students end up writing fixes for problems that existing functions already solve, which complicates the analysis, because datasets measured by different people have their own nomenclature and conventions.
In the end, nothing was as easy as the plain old LabVIEW interface. It got me started quickly, and let me learn the physics before learning how to write advanced functions. Now that I am starting my own group and have PhD students to train, I wanted a tool that makes the learning curve gentle without giving up the functionality that makes QCoDeS useful.
For this reason, I have released mesoscopy, an open-source graphical interface for running experiments in quantum transport and mesoscopic physics. It is built on top of QCoDeS, so it works with the instrument drivers and databases many transport labs already use.
- Code: github.com/mpiLDE/mesoscopy
- Documentation: mpilde.github.io/mesoscopy
What it does
- Sweeps. Linear, logarithmic and “together” sweeps (several parameters
moving in lockstep), with live plotting while the measurement runs. Takes advantage of the
dondfunction of QCoDeS and its modularity. - Safety first. Configurable limits and maximum ramp rates on every parameter, so a typo cannot blow up a device.
- A queue that survives crashes. Queue up measurements and leave them running overnight. If something goes wrong, the queue can be resumed.
- Monitoring. Alarms and persistent logs for the quantities you care about (temperature, leakage current, and so on).
- Reproducibility Set experiment parameters based on those recorded for a previous run.
- Standard data format. Everything is written to regular QCoDeS databases, so your existing analysis code keeps working.
Getting started
I wrote it and tested it using Python 3.14+ and QCoDeS 0.60.0+. Installation instructions and a walkthrough are in the documentation. The test suite runs on simulated instruments, so you can try the software without any hardware attached.
Open source
Mesoscopy is released under the MIT license. Bug reports, feature requests and pull requests are welcome on GitHub. If you use it in your lab, I would be glad to hear about it.
0000-0002-6484-2157