Method: input.csv holds one merged table: energy (eV) plus 15 spectra (5-100 uW). Each spectrum was fitted with a constant background plus three Lorentzians (robust soft-L1 least squares): the dominant peak near 1.32-1.336 eV, a second near 1.54 eV and a third at the high-energy edge (~1.62 eV, truncated by the data range and poorly constrained). The 45 uW spike (2066 counts at 1.6052 eV) was handled by the robust loss. Intensity = Lorentzian peak height, xc = centre of the dominant peak.

Dominant peak, Lorentzian fit:
Intensity rises from about 123 counts at 5 uW to about 1949 counts at 100 uW.
xc shifts from 1.3181 eV to 1.3359 eV.
FWHM narrows from 0.069 eV to 0.053 eV.

Allometric fits y = a * P^b (P in uW), using scipy curve_fit:
- Peak intensity vs power: a = 21.1 ± 1.8, b = 0.975 ± 0.020 (unweighted). Fitting with the Lorentzian-fit errors as weights gives b = 0.909 ± 0.011, and a log-log linear fit gives 0.909. The estimate therefore depends on the weighting, and b is near linear.
- Peak position vs power: a = 1.3095 ± 0.0003 eV, b = 0.00437 ± 0.00007. xc is almost power-independent, with a tiny blue shift.

Plot data (P, intensity, error, xc, error) are in plotdata.csv in this folder. matplotlib is not installed, so no image files were produced.

RESULT: b = 0.975 ± 0.020
