full_wavelength_attenuation_voltage_test.py should be used first, with the laser running into the power meter and the power meter connected to port 4 of the SIM900's voltage reader. It should be set to output (from the back BNC, not the front) with 10dBm/volt.
This will give you a power-calibration-data.txt file. This is useful if you want to correct the power while running a scan. However, typically there is still around 0.3dB variation in the power (7% variation) which isn't ideal, so this power calibration can also be used to post-calibrate. It is likely best to do this, and use the null-calibration-data.txt file, which has no calibration.
The power-calibration-data.txt file's contents are used by full_wavelength_attenuation_self-correcting_counts_polcontrol_test.py to calibrate the power output.
If you are autocorrecting while running and want to check the calibration, you can test this with: ~voltage_calibrationtest_test.py, which runs the scan adjusting the power and measures the output power. It should be basically flat (or ~0.3dB - about 7% power flux).
~polcontrol_test.py, with "at least 100" (=256) polarizations, and 26 wavelengths, takes two hours to complete.
To post-calibrate your data, there is a folder called Data Processing. Within this, Postcalibrate Counts can be found. Using postcalibrate_counts_from_power_data-subtract-darkcountsmod.py, and setting the source data and a recent power output, this will generate QE for your data scan, accounting for the varying laser power and the varying photon flux for a given power when changing wavelength.
If then required, Process Counts contains a file which will return the max/min/average/stdev of the data generated by the scan, which can be important.