forninlist(range(nmax+1))[(nmax+1)::-1][0:len(list(range(nmax+1))[(nmax+1)::-1])-1]:#jaja esto solo es para que vaya de nmax a 1 bajando. debe haber algo mas facil pero kcio
if(r<2andk>3)or(k<2andr>3)or(r>3andk>3)or(r==0andk==1)or(r==1andk==0)or(r==2andk==3)or(r==3andk==2):#todo esto sale de analizar explicitamente la matriz y tratar de no calcular cosas de más que dan cero
Toma los indices donde estan las DR y evalua su fluorescencia. Esos indices son minimos locales en un entorno
cercano a las DR teoricas y, si no hay ningun minimo, toma la teorica.
Luego, hace el cociente de esa fluorescencia y un factor de normalización segun NormalizationCriterium:
1: Devuelve la fluorescencia absoluta de los minimos
2: Devuelve el cociente entre la fluorescencia del minimo y un valor medio entre dos puntos lejanos, como si no
hubiera una resonancia oscura y hubiera una recta. Ese valor esta a DistanciaFrecuenciaCociente del detuning del azul (el punto medio entre las dos DR en este caso)
3: Devuelve el cociente entre la fluorescencia del minimo y el valor a -100 MHz (si se hizo de -100 a 100),
o el valor limite por izquierda de la curva
4: Deuelve el cociente entre la fluorescencia del minimo y el valor de fluorescencia a detuning 0 MHz
Esta funcion devuelve valores de frecuencias y fluorescencia relativa de los minimos.
Minimumcriterion:
1: Saca los minimos con funcion argelextrema
2: Directamente con las frecuencias teoricas busca las fluorescencias
Normalizationcriterium:
1: Devuelve la fluorescencia absoluta de los minimos
2: Devuelve el cociente entre la fluorescencia del minimo y un valor medio entre dos puntos lejanos, como si no
hubiera una resonancia oscura y hubiera una recta. Ese valor esta a DistanciaFrecuenciaCociente del detuning del azul (el punto medio entre las dos DR en este caso)
3: Devuelve el cociente entre la fluorescencia del minimo y el valor a -100 MHz (si se hizo de -100 a 100),
minimum_voltage=-(poptini[1]-poptfin[1])/(poptini[0]-poptfin[0])#voltaje donde se intersectan las rectas, es decir, donde deberia estar el minimo de micromocion
minimum_modulationfactor=lineal(minimum_voltage,*poptini)#es lo mismo si pongo *poptfin
minimum_voltage=-(poptini[1]-poptfin[1])/(poptini[0]-poptfin[0])#voltaje donde se intersectan las rectas, es decir, donde deberia estar el minimo de micromocion
minimum_modulationfactor=lineal(minimum_voltage,*poptini)#es lo mismo si pongo *poptfin
#popt_quad, pcov_quad = curve_fit(cuadratica,Betas_vec[:11],[t*1e3 for t in Temp_vec[:11]],p0=(1,10))
#popt_rho22, pcov_rho22 = curve_fit(InverseMicromotionSpectra,Betas_vec,[t*1e3 for t in Temp_vec],p0=(10,10,-10,1,20)) #esto ajusta muy bien
#popt_rho22, pcov_rho22 = curve_fit(InverseMicromotionSpectra,Betas_vec, [t*1e3 for t in Temp_vec],p0=(-10,-10,10,1,20)) #esto ajusta muy bien
#popt_rho22_raw, pcov_rho22_raw = curve_fit(InverseMicromotionSpectra_raw,Betas_vec[:7], [t*1e3 for t in Temp_vec[:7]],p0=(-0.1, -10, 1)) #esto ajusta muy bien
popt_rho22_balance,pcov_rho22_balance=curve_fit(FinalTemp,Betas_vec[:medfin],[t*1e3fortinTemp_vec[:medfin]],p0=(-10,10,1))#esto ajusta muy bien
popt_rho22_poly,pcov_rho22_poly=curve_fit(polynomial,Betas_vec[:medfin],[t*1e3fortinTemp_vec[:medfin]],p0=(1,2,3,4,10))#esto ajusta muy bien
minimum_voltage=-(poptini[1]-poptfin[1])/(poptini[0]-poptfin[0])#voltaje donde se intersectan las rectas, es decir, donde deberia estar el minimo de micromocion
minimum_modulationfactor=lineal(minimum_voltage,*poptini)#es lo mismo si pongo *poptfin