PL power series: Lorentzian fits and allometric (power-law) fits

Data: input.csv has one shared energy axis (1.196 to 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 column is already the merged spectrum for that power.

How it was done
- Spectra: isolated cosmic-ray spikes were replaced by a 7-point median value (0 to 2 points per spectrum; for example a 2066-count spike in the 45 uW spectrum at 1.602 eV).
- Lorentzian fit for every spectrum: constant baseline plus three Lorentzians, L(x) = A*(w/2)^2/((x-xc)^2+(w/2)^2), so A is the peak intensity (height) and w the FWHM. P1 is the main PL peak (about 1.33 eV), P2 a second peak (about 1.54 eV), and a third Lorentzian models the rising edge above 1.58 eV, which the data cut off. R^2 goes from 0.92 (5 uW) to 0.994.
- Allometric fit: y = a*x^b, fitted on intensity vs power and on xc vs power (scipy curve_fit, Levenberg-Marquardt, unweighted unless stated otherwise).

Fitted peak parameters (± is the 1-sigma fit error)
Power(uW) | P1 A (counts) | P1 xc (eV) | P1 FWHM | P2 A (counts) | P2 xc (eV)
  5 |  122.7±1.5 | 1.31804±0.00038 | 0.0692 |  79.1±4.8  | 1.5363±0.0030
 10 |  226.5±1.5 | 1.32314±0.00021 | 0.0707 | 108.8±3.6  | 1.5306±0.0011
 15 |  319.3±1.7 | 1.32522±0.00017 | 0.0700 | 153.1±4.4  | 1.5321±0.0009
 20 |  409.8±1.9 | 1.32685±0.00015 | 0.0675 | 198.5±4.3  | 1.5333±0.0007
 25 |  500.7±2.0 | 1.32813±0.00012 | 0.0663 | 243.3±4.1  | 1.5345±0.0006
 30 |  593.8±2.2 | 1.32907±0.00011 | 0.0667 | 279.6±4.7  | 1.5362±0.0006
 35 |  669.1±2.3 | 1.32954±0.00010 | 0.0657 | 297.6±5.4  | 1.5352±0.0005
 40 |  792.6±2.5 | 1.33070±0.00009 | 0.0646 | 351.8±5.3  | 1.5372±0.0005
 45 |  853.0±2.6 | 1.33097±0.00009 | 0.0643 | 370.3±5.8  | 1.5358±0.0005
 50 |  947.7±2.9 | 1.33194±0.00009 | 0.0647 | 415.7±6.2  | 1.5357±0.0005
 60 | 1131.8±3.4 | 1.33242±0.00009 | 0.0636 | 489.8±19.9 | 1.5358±0.0007
 70 | 1321.5±3.8 | 1.33355±0.00009 | 0.0628 | 544.2±24.1 | 1.5372±0.0009
 80 | 1502.1±4.2 | 1.33378±0.00008 | 0.0621 | 617.4±23.4 | 1.5398±0.0010
 90 | 1723.3±4.7 | 1.33444±0.00008 | 0.0613 | 659.0±30.7 | 1.5392±0.0009
100 | 1989.3±5.3 | 1.33506±0.00008 | 0.0602 | 716.0±30.5 | 1.5391±0.0010

Plot 1: peak intensity vs power, allometric fit I = a*P^b
- P1 (main peak): a = 20.1 ± 1.6, b = 0.990 ± 0.019 (weighted by the fit errors: b = 0.953 ± 0.015)
- P2: a = 18.1 ± 0.9, b = 0.800 ± 0.012
The main peak grows almost linearly with power (b close to 1), which points to excitonic recombination. P2 grows sublinearly (b about 0.8), as expected for a defect- or trap-related emission that saturates.

Plot 2: peak position vs power, allometric fit xc = a*P^b
- P1: a = 1.3116 ± 0.0005 eV, b = (3.87 ± 0.09)e-3. That is a small blueshift of about 17 meV from 5 to 100 uW.
- P2: a = 1.5244 ± 0.0019 eV, b = (2.0 ± 0.3)e-3. Nearly constant, about 3 meV over the range.

Files in this folder: fit.py (the full analysis) and results.txt (the fit numbers). matplotlib is not installed on this host, so the PNG plots were not rendered. fit.py writes them if it is run where matplotlib is installed.

The headline exponent is the allometric b for the main peak's intensity vs power (unweighted fit):

RESULT: b = 0.990 ± 0.019
