PL power series: Lorentzian peak fits and allometric power-law fits

Data: input.csv holds one energy axis (1.196-1.606 eV, 1024 points) and 15 spectra, one per excitation power (5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100 uW). Each power has one column, so the merged spectrum for a power is that column. I replaced isolated cosmic-ray spikes (more than 8 robust sigma above a 7-point median filter; 0-2 points per spectrum, e.g. one at 1.605 eV in the 45 uW spectrum) with the median value.

Lorentzian fit: each spectrum was fitted with constant + 3 Lorentzians, L = A*(w/2)^2/((x-xc)^2+(w/2)^2), where A is the peak intensity (height).
- Peak 1 (main PL peak, ~1.32-1.335 eV): well resolved, fit R^2 = 0.92-0.99.
- Peak 2 (broad, ~1.53-1.54 eV).
- Peak 3: a rising edge cut off at the top of the window (>1.58 eV). It is included only to model the background. Its parameters are not physically determined.
A check fit (2 Lorentzians + constant on x < 1.575 eV) gives the same main-peak results: b(I1) = 0.988 +/- 0.019.

Main peak (Peak 1) results:
P(uW)  I (counts)      xc (eV)
5      122.7 +/- 1.5   1.31804 +/- 0.00038
10     226.5 +/- 1.6   1.32314 +/- 0.00023
15     319.3 +/- 1.8   1.32522 +/- 0.00019
20     409.8 +/- 2.0   1.32685 +/- 0.00016
25     500.7 +/- 2.0   1.32813 +/- 0.00013
30     593.8 +/- 2.2   1.32907 +/- 0.00012
35     669.1 +/- 2.3   1.32954 +/- 0.00011
40     792.6 +/- 2.5   1.33070 +/- 0.00010
45     853.0 +/- 2.7   1.33097 +/- 0.00010
50     947.7 +/- 3.0   1.33195 +/- 0.00010
60     1131.8 +/- 3.4  1.33242 +/- 0.00009
70     1321.6 +/- 3.8  1.33356 +/- 0.00009
80     1502.1 +/- 4.2  1.33378 +/- 0.00008
90     1723.4 +/- 4.6  1.33445 +/- 0.00008
100    1989.4 +/- 5.3  1.33506 +/- 0.00008

Allometric fits y = a * P^b (unweighted least squares, scipy curve_fit):
Plot 1, intensity vs power (main peak): a = 20.1 +/- 1.6, b = 0.990 +/- 0.019. The response is close to linear (b ~ 1), as expected for excitonic emission without saturation.
Plot 2, peak position vs power (main peak): a = 1.3103 +/- 0.0005 eV, b = 0.00413 +/- 0.00009. This is a small blue shift of about 17 meV between 5 and 100 uW.
Secondary peak (~1.535 eV): intensity b = 0.81 +/- 0.01 (sublinear); position b = 0.0014 +/- 0.0004.

The plot data is in plot_data.csv (power, intensities, positions and errors for peaks 1 and 2). Matplotlib is not installed on this host, so no image files were rendered.

RESULT: b = 0.990 ± 0.019
