Method: input.csv holds one energy axis (1.196-1.606 eV, 1024 points) and 15 spectra, 5-100 uW. Each spectrum was fitted with Lorentzians (constant background + 3 Lorentzians for the full range; a single-Lorentzian fit in 1.2-1.45 eV was used as a cross-check). The dominant PL peak is near 1.33 eV (FWHM ~0.065 eV). Two weaker features lie near 1.54 eV and above 1.6 eV (the high-energy edge is poorly constrained).

Main peak (3-Lorentzian fit): intensity (peak height, counts) vs power
5 uW: 122.7; 10: 226.5; 15: 319.3; 20: 409.8; 25: 500.7; 30: 593.8; 35: 669.1; 40: 792.6; 45: 855.1; 50: 947.8; 60: 1131.7; 70: 1321.5; 80: 1501.9; 90: 1723.3; 100: 1989.0
Peak position xc (eV): 1.3180 (5 uW) rising monotonically to 1.3351 (100 uW).

Allometric fit y = a * P^b (P in uW, nonlinear least squares):
- Intensity vs power: a = 20.1, b = 0.990 +/- 0.019 (unweighted). The single-Lorentzian cross-check gives b = 1.001 +/- 0.019, and a weighted fit using the fit errors gives 0.953 +/- 0.014 (chi2 is large, so the errors are underestimated). Essentially linear.
- Peak position vs power: a = 1.310 eV, b = 0.0041 +/- 0.0001 (a very weak blue shift, about 17 meV over 5-100 uW).

Note: the plots could not be rendered because matplotlib is not installed on the server. The fit values behind both plots are given above.

RESULT: b = 0.990 ± 0.019
