33 lines
774 B
Python
33 lines
774 B
Python
from scipy.optimize import curve_fit
|
|
from scipy.interpolate import splrep, splev
|
|
import csv
|
|
import argparse
|
|
import numpy
|
|
import matplotlib.pyplot as plt
|
|
from eisgenerator import EisSpectra
|
|
import io
|
|
import tarfile
|
|
from tqdm import tqdm
|
|
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)
|