Python: ajuste gaussiano de dos curvas con mínimos cuadrados no lineales

Mi conocimiento de las matemáticas es limitado, por lo que probablemente estoy atascado. Tengo un espectro en el que estoy tratando de ajustar dos picos gaussianos. Puedo ajustarme al pico más grande, pero no puedo ajustar al pico más alto. Entiendo que necesito sumar la función gaussiana para los dos picos, pero no sé dónde me he equivocado. Se muestra una imagen de mi salida actual:

La línea azul es mi información y la línea verde es mi ajuste actual. Hay un hombro a la izquierda del pico principal en mis datos que actualmente estoy tratando de ajustar, usando el siguiente código:

<code>import matplotlib.pyplot as pt
import numpy as np
from scipy.optimize import leastsq
from pylab import *

time = []
counts = []


for i in open('/some/folder/to/file.txt', 'r'):
    segs = i.split()
    time.append(float(segs[0]))
    counts.append(segs[1])

time_array = arange(len(time), dtype=float)
counts_array = arange(len(counts))
time_array[0:] = time
counts_array[0:] = counts


def model(time_array0, coeffs0):
    a = coeffs0[0] + coeffs0[1] * np.exp( - ((time_array0-coeffs0[2])/coeffs0[3])**2 )
    b = coeffs0[4] + coeffs0[5] * np.exp( - ((time_array0-coeffs0[6])/coeffs0[7])**2 ) 
    c = a+b
    return c


def residuals(coeffs, counts_array, time_array):
    return counts_array - model(time_array, coeffs)

# 0 = baseline, 1 = amplitude, 2 = centre, 3 = width
peak1 = np.array([0,6337,16.2,4.47,0,2300,13.5,2], dtype=float)
#peak2 = np.array([0,2300,13.5,2], dtype=float)

x, flag = leastsq(residuals, peak1, args=(counts_array, time_array))
#z, flag = leastsq(residuals, peak2, args=(counts_array, time_array))

plt.plot(time_array, counts_array)
plt.plot(time_array, model(time_array, x), color = 'g') 
#plt.plot(time_array, model(time_array, z), color = 'r')
plt.show()
</code>

Respuestas a la pregunta(3)

Su respuesta a la pregunta