from scipy.interpolate import splrep, splev import numpy from spectrafile import SpectraFile def add_soc_estimate(spectras: list[SpectraFile]): data = [list(), list()] for spectra in spectras: if not spectra.meta.soc <= 0: data[0].append(spectra.ocv) data[1].append(spectra.meta.soc) ndata = numpy.asarray(data) ndata.sort(1) knots = 9 qs = numpy.linspace(0, 1, knots)[1:-1] knots = numpy.quantile(ndata[0], qs) tck = splrep(ndata[0], ndata[1], t=knots, k=3) estimates = splev(ndata[0], tck) for spectra in spectras: spectra.meta.soc_estimate = splev(spectra.ocv, tck)