- Scripts for LIV and optical spectra measurements using following equipment:
- Keysight B2901A Precision Source/Measure Unit
- Thorlabs PM100USB Power and energy meter
- Keysight 8163B Lightwave Multimeter
- YOKOGAWA AQ6370D Optical Spectrum Analyzer
- Advanced Temperature Test (ATT) Chuck System A160 CMI
- Script to approximate small signal modulation signal (S-parameters) at different currents stored in multiple .s2p files
- Script to calculate and plot thermal resistance of a VCSEL
How to use:
measure.py (LIV, Optical spectra, small-signal modulation and RIN)
python measure.py [Equipment_choice] [WaferID] [Wavelength(nm)] [Coordinates] [Temperature(°C)]
or
python measure.py [Equipment_choice] [WaferID] [Wavelength(nm)] [Coordinates] [Start_Temperature(°C)] [Stop_Temperature(°C)] [Temperature_Increment(°C)]
By running ‘python measure.py’ you will get a small instruction on what arguments to provide. config.ini contains visa addresses and other settings.
following arguments are needed: [Equipment_choice] [WaferID] [Wavelength(nm)] [Coordinates] [Temperature(°C)] e.g. run:
python measure.py k2 gs15 1550 00C9 25
NOTE: Character ‘-’ is not allowed! It breaks filename parsing.
for equipment choice use:
Manual system:
t for LIV (Thorlabs PM100USB Power and energy meter) k1 for LIV (Keysight 8163B Lightwave Multimeter port 1) k2 for LIV (Keysight 8163B Lightwave Multimeter port 2) y for Optical Spectra (YOKOGAWA AQ6370D Optical Spectrum Analyzer)
Automatic system (Optical switch is controlled):
p for Small-Signal Modulation (Keysight_N5247B PNA-X Network Analyzer) r for RIN (Keysight_N9030B Keysight X-Series Signal Analyzers)
For multiple temperature you need to specify start, stop and step temperature values: [Equipment_choice] [WaferID] [Wavelength(nm)] [Coordinates] [Start_Temperature(°C)] [Stop_Temperature(°C)] [Temperature_Increment(°C)] e.g. run
python measure.py t gs15 1550 00C9 25 85 40
in this case you will get LIVs for 25, 65 and 85 degrees
Equipment list:
- Keysight B2901A Precision Source/Measure Unit
- Thorlabs PM100USB Power and energy meter
- Keysight 8163B Lightwave Multimeter
- YOKOGAWA AQ6370D Optical Spectrum Analyzer
- Advanced Temperature Test Systems Chuck System A160 CMI
- Keysight N5247B PNA-X Network Analyzer
- Keysight_N9030B Keysight X-Series Signal Analyzers
- CoherentSolutions MatrIQswitch
analyze.py
python analyze.py [OPTIONS] [PATHS]...
analyze.py accepts multiple [PATHS] to process multiple directories The default settings are set in a corresponding YAML file in the ‘templates’ directory. To change settings just copy corresponding file to another directory (e.g. projects), add directories and change settings and run
analyze.py -y [path to a YAML files]
LIV and optical spectra measurements at different temperatures;
Thermal resistance calculation and the estimation of the active area temperature;
S11 and S21 measurements and fittings at different current levels;
Relative Intensity Noise measurement and fittings at different current levels;
Fiber coupling with piezo drivers;
Bitrate, Q-Factor, Bit Error Ratio measurements. VCSEL operating
optimization for better bitrate and energy consumption;
Options:
-l, --replot_liv Replot LIV figures (replot_liv.yaml)
-s, --ssm Analyze small signal modulation data: .s2p files or automatic system reports (ssm.yaml; src/analysis_ssm.py and src/analysis_ssm_one_file.py)
-r, --rin Plot RIN data from automatic system reports (rin.yaml; src/analysis_rin.py)
-c, --calculate_rin Calculate and fit RIN data from .csv files measured by measure.py (TODO: calculate_rin.yaml; src/calculate_rin.py)
-o, --optical_spectra Plot optical spectra and calculate thermal resistance (os.yaml; src/analysis_os.py)
-y, --yaml_project Read and analize according to settings in YAML files
--help Show this message and exit.
Additional yaml_projects:
- combine_liv.yaml Combine multiple LIV curves in one figure (src/combine_liv.py)
- combine_os.yaml Combine multiple Optical Spectra in one figure (src/combine_os.py)
- combine_ssm.yaml Combine multiple small-signal modulation results in one figure (src/combine_ssm_reports.py)
- TODO: combine_s11_smith_charts.yaml Combine multiple S11 in one Smith Chart figure (src/combine_s11_smith_charts.py)
-
Additional scripts
parse_skew.py
To parse skew data in resources/DeviceStates
python src/parse_skew.py
ssm_play.py
To plot S21 data for arbitrary fr, fp and gamma
python src/ssm_play.py
arrange_automatic_reports.py
To properly arrange automatic system .csv files from [paths] directory to the ‘data’ directory file name convention: “waferID-wavelength_coordinates_time” (e.g. test-850nm_00-11_20240122073936.csv)
python src/arrange_automatic_reports.py [paths]
adjustpd.py
Continuously shows power from PM100USB Power and energy meter for easy position adjustment
python adjustpd.py [wavelength]
shf_test.py
TODO
Make virtual environment
python -m venv env
(note: “env” is the name of a directory with a virtual environment)
Activate an environment (Unix)
source env\bin\activate
Activate an environment (Windows)
env\Scripts\Activate.Ps1
Install required python libraries from requirements.txt
pip install -r requirements.txt
Note: PyVISA installation
If you are told your version of pip is out of date, you might as well update it with
python -m pip install --upgrade pip
Once you have that installed, you will need to install pyvisa. Under Windows, that is as simple as running
pip install pyvisa
Finally, as pyvisa is really only a “wrapper” for a VISA layer, you will need to install a supported VISA layer for it to talk to. If you are running Windows, realistically, you should use the National Instruments NI-VISA package. It’s a bulky piece of software, but it is the most well-supported VISA layer generally speaking – a version of it may already be installed on your computer by the “bundled” software that comes with your instrument. It is possible to avoid using NI-VISA on Windows, but then you will need to cook up your own drivers for each instrument and self-sign them and it’s just a whole heap of hassle.
On Linux, however, you will also need to install pyvisa-py which provides a Python-based VISA layer, as well as pyusb (for USB-TMC instruments) and pyserial (for Serial connected instruments). This can be done by using the following command (both with and without sudo)
pip install pyvisa-py pyusb pyserial
pip install psutil zeroconf
- https://goughlui.com/2021/03/28/tutorial-introduction-to-scpi-automation-of-test-equipment-with-pyvisa/
- https://youtu.be/1HQxnz3P9P4
- https://github.com/instrumentkit/InstrumentKit
- https://instrumentkit.readthedocs.io/en/latest/_modules/instruments/yokogawa/yokogawa6370.html