Lab Software Development 1 - free-carrier LIFETIME measurement and analysis system

Quick Screenshot:

Paper using the software: https://www.nature.com/articles/s41467-021-25311-1


Motivation

As the designer for a new free-carrier lifetime measurement system, it is my job to do the software development --- designing a compact controlling system for I/O, data gathering, and data analysis GUI. During the hardware testing phase, I created a rough Python software to control and gather data from the oscilloscope in the lifetime measurement system. It worked without a problem but would be a trouble for other users who know little about Python or programming in general. So creating a PC software with GUI is essential to the new system.


Environment

Usually, the equipment control and data collecting can be easily done with LabView. However, since we want to add data analysis functionalities to the software, it would be better to use more flexible options, such as Python-based QtCreator. Since I already created some modules with python without GUI, it would be convenient to produce a complete software with existing resources.



Functionality - Measurement


As the measurement takes time, synchronous programming is needed to avoid freezing of the UI. Assigning a separate thread with QThread to the measurement object is thus required. Besides this, all other parts of the tab including the I/O, communication with laser controller, oscilloscope are borrowed from my previous hardware test modules. In the interface, though I made it automatic to find the correct device connected to the computer, I still give the user full control of external device selection in case people upgrade hardware in the future. All experiment-related parameters such as the laser current, number of turns, and interval times can be defined by the user. Since the data-taking process would take a long time with multiple turns, I also designed two graph windows showing both the data in the current turn and the overall average data as of the current turn. This should give the user a direct intuition of the progress and quality of the data overall.

Functionality - Lifetime Fitting

During or after the measurement, we want to extract the lifetimes from the measured curves. This is one of the reasons I didn’t want to use LabView with the “building blocks”. Here the user can load the data directly from the measurement or from a saved file. I mainly designed three fitting modes - 1st, 2nd, and 3rd orders. It is usually not necessary nor convincing to reach 4th order in carrier lifetime analysis. The result panel directly shows the fitting parameters, and the user can select the wanted range to do the analysis.

Functionality - Laser Current Scanning

This functionality can be considered as an add-on. It is always quite annoying to identify the real laser power given a laser current, as the environment, mirrors, lenses, alignments all can change with time. Here I designed a quick measurement tool to sweep the laser current in a given range and read the laser power values in real-time with a power meter.

Summary

This project involves synchronized programming, multiple device controlling, and data analysis, etc. The purpose of the GUI is for users of the new system other than me to easily control equipment, collect data, and analyze data without the cost of learning. As the new semester comes, I hope to hear from other users and improve the software accordingly.


This project is open source. Feel free to use or improve it if needed.

Github link: https://github.com/xuejianma/LabTools/tree/master/LifetimeMeasurement


Comments

Popular posts from this blog

Digit sequence detection of SVHN dataset

Lab Software Development 3 - Scanning Probe Microscope Controller

Traffic-Sign Recognition Project: Basis for Self-Driving Vehicle Sensing System