Skip to content
CPT_plotter_20231214.py 28.3 KiB
Newer Older
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
import h5py
import matplotlib.pyplot as plt
import numpy as np
import sys
import re
import ast
from scipy.optimize import curve_fit
import os
from scipy import interpolate

"""
Primero tengo mediciones de espectros cpt de un ion variando la tension dc_A
"""

#C:\Users\Usuario\Documents\artiq\artiq_experiments\analisis\plots\20220106_CPT_DosLaseres_v08_TISA_DR\Data

os.chdir('/home/nico/Documents/artiq_experiments/analisis/plots/20231214_CPTconmicromocioncristals/Data/')

SINGLECPT_FILES = """000016453-IR_Scan_withcal_optimized
000016454-IR_Scan_withcal_optimized
000016455-IR_Scan_withcal_optimized
000016456-IR_Scan_withcal_optimized
000016457-IR_Scan_withcal_optimized
000016458-IR_Scan_withcal_optimized
000016459-IR_Scan_withcal_optimized
000016461-IR_Scan_withcal_optimized
""" 

MULTICPT_FILES = """000016460-IR_Scan_withcal_optimized
000016462-IR_Scan_withcal_optimized
000016463-IR_Scan_withcal_optimized
000016464-IR_Scan_withcal_optimized
""" 

def SeeKeys(files):
    for i, fname in enumerate(files.split()):
        data = h5py.File(fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
        print(fname)
        print(list(data['datasets'].keys()))

#print(SeeKeys(MULTICPT_FILES))

#carpeta pc nico labo escritorio:
#C:\Users\Usuario\Documents\artiq\artiq_experiments\analisis\plots\20211101_CPT_DosLaseres_v03\Data

SingleCounts = []
SingleFreqs = []
MultiCounts = []
MultiFreqs = []

AmpTisa = []
UVCPTAmp = []
No_measures = []
Voltages = []

for i, fname in enumerate(MULTICPT_FILES.split()):
    print(str(i) + ' - ' + fname)
    #print(fname)
    data = h5py.File('Multi/'+fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'

    # Aca hago algo repugnante para poder levantar los strings que dejamos
    # que además tenian un error de tipeo al final. Esto no deberá ser necesario
    # cuando se solucione el error este del guardado.
    MultiFreqs.append(np.array(data['datasets']['IR1_Frequencies']))
    MultiCounts.append(np.array(data['datasets']['data_array']))
    #AmpTisa.append(np.array(data['datasets']['TISA_CPT_amp']))
    UVCPTAmp.append(np.array(data['datasets']['UV_CPT_amp']))
    No_measures.append(np.array(data['datasets']['no_measures']))
    Voltages.append(np.array(data['datasets']['scanning_voltages']))
    
for i, fname in enumerate(SINGLECPT_FILES.split()):
    print(str(i) + ' - ' + fname)
    #print(fname)
    data = h5py.File('Single/'+fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
    SingleFreqs.append(np.array(data['datasets']['IR1_Frequencies']))
    SingleCounts.append(np.array(data['datasets']['data_array']))


def Split(array,n):
    length=len(array)/n
    splitlist = []
    jj = 0
    while jj<length:
        partial = []
        ii = 0
        while ii < n:
            partial.append(array[jj*n+ii])
            ii = ii + 1
        splitlist.append(partial)
        jj = jj + 1
    return splitlist


CountsSplit = []

for kk in range(len(MultiCounts)):
    CountsSplit.append(Split(MultiCounts[kk],len(MultiFreqs[kk])))


#%%

"""
Ploteo la cpt de referencia / plotting the reference CPT
"""

jvec = [1]
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed


plt.figure()
i = 0
for j in jvec:
    plt.errorbar([2*f*1e-6 for f in SingleFreqs[j]], SingleCounts[j], yerr=np.sqrt(SingleCounts[j]), fmt='o', capsize=2, markersize=2)
    i = i + 1
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('counts')
plt.grid()
#for dr in drs:
#    plt.axvline(dr)
    #plt.axvline(dr+drive)
plt.legend()



#%%

"""
Ploteo curvas de la multi1

meds:
    0: dcA, 11 voltajes
    1: dcA, 21 voltajes
    2: compOven, 21 voltajes
    3: dcA, 31 voltajes

"""

med=1
jvec = [10]
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed


kk=9

plt.figure()
i = 0
for j in jvec:
    plt.errorbar([2*f*1e-6 for f in MultiFreqs[med]], CountsSplit[med][j], yerr=np.sqrt(CountsSplit[med][j]), fmt='o', capsize=2, markersize=2)
    #plt.plot([2*f*1e-6 for f in MultiFreqs[med]][kk], CountsSplit[med][j][kk],'o',markersize=10)
    i = i + 1
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('counts')
plt.grid()
#for dr in drs:
#    plt.axvline(dr)
    #plt.axvline(dr+drive)
plt.legend()

print(CountsSplit[med][j][9])
print(CountsSplit[med][j][10])
print(CountsSplit[med][j][11])
print(CountsSplit[med][j][12])



#%%
from EITfit.lolo_modelo_full_8niveles import PerformExperiment_8levels_MM
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
from scipy.optimize import curve_fit
import time

"""
MEDICION 1: ajusto una curva con dos iones con un modelo que considera solo uno
"""

phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0,  0
phiprobe = 0
titaprobe = 90

Temp = 0.5e-3

sg = 0.544
sp = 4.5
sr = 0
DetRepump = 0


lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres


u = 32.5e6

#B = (u/(2*np.pi))/c

gPS, gPD, = 2*np.pi*21.58e6, 2*np.pi*1.35e6 
alpha = 0


drivefreq = 2*np.pi*22.135*1e6

selectedcurve=0

FreqsDR = SingleFreqs[selectedcurve]
CountsDR = SingleCounts[selectedcurve]
   
freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
CircPr = 1
alpha = 0

def FitEIT_MM_1ion(Freqs, offset, DetDoppler, SG, SP, SCALE1, OFFSET, BETA1, TEMP, U, plot=False):
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
#def FitEIT_MM(freqs, SG, SP, SCALE1, OFFSET, BETA1):
    #BETA = 1.8
    # SG = 0.6
    # SP = 8.1
    # TEMP = 0.2e-3
    #U=32.5e6
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    freqs = [2*f*1e-6-offset for f in Freqs]
  
    Detunings, Fluorescence1 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA1, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed

    ScaledFluo1 = np.array([f*SCALE1 + OFFSET for f in Fluorescence1])
    if plot:
        return ScaledFluo1, Detunings
    else:
        return ScaledFluo1
    #return ScaledFluo1

do_fit = True
if do_fit:
    popt_1, pcov_1 = curve_fit(FitEIT_MM_1ion, FreqsDR, CountsDR, p0=[430, -25, 0.9, 6.2, 3e4, 200, 2, (np.pi**2)*1e-3,32.5e6], bounds=((0, -50, 0, 0, 0, 0, 0, 0,30e6), (1000, 0, 2, 20, 5e6, 5e4, 10, (np.pi**2)*10e-3,35e6)))
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed

    FittedEITpi_1_short, Detunings_1_short = FitEIT_MM_1ion(FreqsDR, *popt_1, plot=True)
    freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
    FittedEITpi_1_long, Detunings_1_long = FitEIT_MM_1ion(freqslong, *popt_1, plot=True)


plt.figure()
plt.errorbar(Detunings_1_short, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', color='darkgreen', alpha=0.5, capsize=2, markersize=2)
plt.plot(Detunings_1_long, FittedEITpi_1_long, color='darkolivegreen', linewidth=3, label='med 1')
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
plt.xlabel('Detuning (MHz)')
plt.ylabel('Counts')
plt.legend(loc='upper left', fontsize=20)
plt.grid()



#%%
#from EITfit.MM_eightLevel_2repumps_AnalysisFunctions import PerformExperiment_8levels
from scipy.optimize import curve_fit
import time

"""
MEDICION 1: ahora la ajusto pero considerando contribucion de dos iones
"""

phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0,  0
phiprobe = 0
titaprobe = 90

Temp = 0.5e-3

sg = 0.544
sp = 4.5
sr = 0
DetRepump = 0


lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres


u = 32.5e6

#B = (u/(2*np.pi))/c

gPS, gPD, = 2*np.pi*21.58e6, 2*np.pi*1.35e6 
alpha = 0


drivefreq = 2*np.pi*22.135*1e6

selectedcurve=0

FreqsDR = SingleFreqs[selectedcurve]
CountsDR = SingleCounts[selectedcurve]
   
#freqslong = np.arange(min(FreqsDR)*0.2, max(FreqsDR)*2+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
CircPr = 1
alpha = 0

def FitEIT_MM_2ion(Freqs, offset, DetDoppler, SG, SP, SCALE1, SCALE2, BETA1, BETA2, TEMP, U, plot=False, plotsingles=False):
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
#def FitEIT_MM(freqs, SG, SP, SCALE1, OFFSET, BETA1):
    #BETA = 1.8
    # SG = 0.6
    # SP = 8.1
    # TEMP = 0.2e-3

    freqs = [2*f*1e-6-offset for f in Freqs]
  
    Detunings, Fluorescence1 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA1, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
    Detunings, Fluorescence2 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA2, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed

    OFFSET1 = 300
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed

    ScaledFluo1 = np.array([f*SCALE1 + 0.5*OFFSET1 for f in Fluorescence1])
    ScaledFluo2 = np.array([f*SCALE2 + 0.5*OFFSET1 for f in Fluorescence2])
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    
    if plot:
        return ScaledFluo1+ScaledFluo2, Detunings
    if plotsingles:
        return ScaledFluo1, ScaledFluo2, Detunings
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    else:
        return ScaledFluo1+ScaledFluo2
    #return ScaledFluo1

do_fit = True
if do_fit:
    popt_1_2ion, pcov_1_2ion = curve_fit(FitEIT_MM_2ion, FreqsDR, CountsDR, p0=[445, -32, 0.5, 7, 2e4, 1e4, 2, 1, 0.5e-3, 32e6], bounds=((0, -50, 0, 0, 0, 0, 0,0, 0,30e6), (1000, 0, 2, 20, 5e6, 5e6, 10, 10,20e-3,35e6)))
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed

    FittedEITpi_1_short_2ion, Detunings_1_short_2ion = FitEIT_MM_2ion(FreqsDR, *popt_1_2ion, plot=True)
freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
FittedEITpi_1_long_2ion, Detunings_1_long_2ion = FitEIT_MM_2ion(freqslong, *popt_1_2ion, plot=True)

plot_singles=False
if plot_singles:
    FittedEITpi_1_short_2ion_ion1, FittedEITpi_1_short_2ion_ion2, Detunings_1_short_2ion = FitEIT_MM_2ion(FreqsDR, *popt_1_2ion, plot=False, plotsingles=True)
    plt.figure()
    #plt.errorbar(Detunings_1_short_2ion, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', color='darkgreen', alpha=0.5, capsize=2, markersize=2)
    plt.plot(Detunings_1_short_2ion, FittedEITpi_1_short_2ion_ion1, color='darkolivegreen', linewidth=3, label='med 1')
    plt.plot(Detunings_1_short_2ion, FittedEITpi_1_short_2ion_ion2, color='darkolivegreen', linewidth=3, label='med 1')

    #plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
    plt.xlabel('Detuning (MHz)')
    plt.ylabel('Counts')
    #plt.xlim(-80,50)
    plt.legend(loc='upper left', fontsize=20)
    plt.grid()
    
else:
    plt.figure()
    plt.errorbar(Detunings_1_short_2ion, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', color='darkgreen', alpha=0.5, capsize=2, markersize=2)
    plt.plot(Detunings_1_long_2ion, FittedEITpi_1_long_2ion, color='darkolivegreen', linewidth=3, label='med 1')
    #plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
    plt.xlabel('Detuning (MHz)')
    plt.ylabel('Counts')
    #plt.xlim(-80,50)
    plt.legend(loc='upper left', fontsize=20)
    plt.grid()
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed



#%%
#from EITfit.MM_eightLevel_2repumps_AnalysisFunctions import PerformExperiment_8levels
from scipy.optimize import curve_fit
import time

"""
MEDICION MULTI INDIVIDUAL

VEO EL AJUSTE DE UNA DEL AS CURVAS MULTI PARA VER COMO AJUSTA

"""

phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0,  0
phiprobe = 0
titaprobe = 90

Temp = 0.5e-3

sg = 0.544
sp = 4.5
sr = 0
DetRepump = 0


lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres


u = 32.5e6

#B = (u/(2*np.pi))/c

gPS, gPD, = 2*np.pi*21.58e6, 2*np.pi*1.35e6 
alpha = 0


drivefreq = 2*np.pi*22.135*1e6

measurement = 2
#selectedcurve=10
selectedcurvevec=[10]

#popt_vecs = []
#pcov_vecs = []

for selectedcurve in selectedcurvevec:
    FreqsDR = MultiFreqs[measurement]
    CountsDR = CountsSplit[measurement][selectedcurve]
       
    if selectedcurve==9 and measurement==1:
        CountsDR[10]=4132+89
        CountsDR[11]=4132+2*89

    freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
    CircPr = 1
    alpha = 0
    
    
    
    def FitEIT_MM_2ion(Freqs, offset, DetDoppler, SG, SP, SCALE1, SCALE2, BETA1, BETA2, TEMP, U, plot=False):
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    #def FitEIT_MM(freqs, SG, SP, SCALE1, OFFSET, BETA1):
        #BETA = 1.8
        # SG = 0.6
        # SP = 8.1
        # TEMP = 0.2e-3
        OFFSET = 300
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
        freqs = [2*f*1e-6-offset for f in Freqs]
      
        Detunings, Fluorescence1 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA1, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
        Detunings, Fluorescence2 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA2, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
    
    
        ScaledFluo1 = np.array([f*SCALE1 + 0.5*OFFSET for f in Fluorescence1])
        ScaledFluo2 = np.array([f*SCALE2 + 0.5*OFFSET for f in Fluorescence2])
        
        if plot:
            return ScaledFluo1+ScaledFluo2, Detunings
        else:
            return ScaledFluo1+ScaledFluo2
        #return ScaledFluo1

    def FitEIT_MM_1ion(Freqs, offset, DetDoppler, SG, SP, SCALE1, BETA1, TEMP, U, plot=False):
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    #def FitEIT_MM(freqs, SG, SP, SCALE1, OFFSET, BETA1):
        #BETA = 1.8
        # SG = 0.6
        # SP = 8.1
        # TEMP = 0.2e-3
        OFFSET = 300
        freqs = [2*f*1e-6-offset for f in Freqs]
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
      
        Detunings, Fluorescence1 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA1, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    
    
        ScaledFluo1 = np.array([f*SCALE1 + 1*OFFSET for f in Fluorescence1])
        
        if plot:
            return ScaledFluo1, Detunings
        else:
            return ScaledFluo1
        #return ScaledFluo1
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed

    
    do_fit = True
    if do_fit:
        try:
            popt_multi1_1ion_test, pcov_multi1_1ion_test = curve_fit(FitEIT_MM_1ion, FreqsDR, CountsDR, p0=[448.2, -44.8, 0.5, 6.6, 3.8e4, 1, 1e-3, 32e6], bounds=((0, -50, 0, 0, 0, 0, 0, 30e6), (1000, 0, 2, 20, 5e6, 10, 10e-3, 35e6)))
            #popt_multi1_2ion_test, pcov_multi1_2ion_test = curve_fit(FitEIT_MM_2ion, FreqsDR, CountsDR, p0=[448.2, -44.8, 0.5, 6.6, 3.8e4, 1.26e5, 4.2, 1.3, 1.4e-3, 32e6], bounds=((0, -50, 0, 0, 0, 0, 0,0, 0, 28e6), (1000, 0, 2, 20, 5e6, 5e6, 10, 10,20e-3,40e6)))
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
        except:
            popt_multi1_2ion_test = [0,0,0,0,0,0,0,0,0,0]
            pcov_multi1_2ion_test = [0]
    

        FittedEITpi_multi1_short_1ion, Detunings_multi1_short_1ion = FitEIT_MM_1ion(FreqsDR, *popt_multi1_1ion_test, plot=True)
        freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
        FittedEITpi_multi1_long_1ion, Detunings_multi1_long_1ion = FitEIT_MM_1ion(freqslong, *popt_multi1_1ion_test, plot=True)
        # FittedEITpi_multi1_short_2ion, Detunings_multi1_short_2ion = FitEIT_MM_2ion(FreqsDR, *popt_multi1_2ion_test, plot=True)
        # freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
        # FittedEITpi_multi1_long_2ion, Detunings_multi1_long_2ion = FitEIT_MM_2ion(freqslong, *popt_multi1_2ion_test, plot=True)
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed


        #popt_vecs.append(popt_multi1_2ion)
        #pcov_vecs.append(pcov_multi1_2ion)

    print(f'Listo {selectedcurve}')

    plt.figure()
    plt.errorbar(Detunings_multi1_short_1ion, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', color='darkgreen', alpha=0.5, capsize=2, markersize=2)
    plt.plot(Detunings_multi1_long_1ion, FittedEITpi_multi1_long_1ion, color='red', linewidth=3, label=f'selcurve: {selectedcurve}')
    plt.title('1 ion model')
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    plt.xlabel('Detuning (MHz)')
    plt.ylabel('Counts')
    plt.legend(loc='upper left', fontsize=20)
    plt.grid()


    # plt.figure()
    # plt.errorbar(Detunings_multi1_short_2ion, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', color='darkgreen', alpha=0.5, capsize=2, markersize=2)
    # plt.plot(Detunings_multi1_long_2ion, FittedEITpi_multi1_long_2ion, color='darkolivegreen', linewidth=3, label=f'selcurve: {selectedcurve}')
    # plt.title('2 ion model')
    # plt.xlabel('Detuning (MHz)')
    # plt.ylabel('Counts')
    # plt.legend(loc='upper left', fontsize=20)
    # plt.grid()
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    

# plt.plot(detunings,'o')


#%%
#from EITfit.MM_eightLevel_2repumps_AnalysisFunctions import PerformExperiment_8levels
from scipy.optimize import curve_fit
import time

"""
MEDICION MULTI 1

Cada bloque ajusta un grupo de mediciones porque sino es un lio

"""

phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0,  0
phiprobe = 0
titaprobe = 90

Temp = 0.5e-3

sg = 0.544
sp = 4.5
sr = 0
DetRepump = 0


lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres


u = 32.5e6

#B = (u/(2*np.pi))/c

gPS, gPD, = 2*np.pi*21.58e6, 2*np.pi*1.35e6 
alpha = 0


drivefreq = 2*np.pi*22.135*1e6

measurement = 1
#selectedcurve=10
selectedcurvevec=[7,8,9,10,11,12,13,14]

popt_vecs = []
pcov_vecs = []

for selectedcurve in selectedcurvevec:
    FreqsDR = MultiFreqs[measurement]
    CountsDR = CountsSplit[measurement][selectedcurve]
       
    freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
    CircPr = 1
    alpha = 0
    
    
    
    def FitEIT_MM_2ion(Freqs, offset, DetDoppler, SG, SP, SCALE1, SCALE2, OFFSET, BETA1, BETA2, TEMP, U, plot=False):
    #def FitEIT_MM(freqs, SG, SP, SCALE1, OFFSET, BETA1):
        #BETA = 1.8
        # SG = 0.6
        # SP = 8.1
        # TEMP = 0.2e-3
    
        freqs = [2*f*1e-6-offset for f in Freqs]
      
        Detunings, Fluorescence1 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA1, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
        Detunings, Fluorescence2 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA2, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
    
    
        ScaledFluo1 = np.array([f*SCALE1 + 0.5*OFFSET for f in Fluorescence1])
        ScaledFluo2 = np.array([f*SCALE2 + 0.5*OFFSET for f in Fluorescence2])
        
        if plot:
            return ScaledFluo1+ScaledFluo2, Detunings
        else:
            return ScaledFluo1+ScaledFluo2
        #return ScaledFluo1
    
    do_fit = True
    if do_fit:
        try:
            popt_multi1_2ion, pcov_multi1_2ion = curve_fit(FitEIT_MM_2ion, FreqsDR, CountsDR, p0=[448.2, -44.8, 0.5, 6.6, 3.8e4, 1.26e5, 1.5e-1, 4.2, 1.3, 1.4e-3, 32e6], bounds=((0, -50, 0, 0, 0, 0, 0, 0,0, 0,25e6), (1000, 0, 2, 20, 5e6, 5e6, 5e4, 10, 10,20e-3,40e6)))
        except:
            popt_multi1_2ion = [0,0,0,0,0,0,0,0,0,0,0]
            pcov_multi1_2ion = [0]
    
        FittedEITpi_multi1_short_2ion, Detunings_multi1_short_2ion = FitEIT_MM_2ion(FreqsDR, *popt_multi1_2ion, plot=True)
        freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
        FittedEITpi_multi1_long_2ion, Detunings_multi1_long_2ion = FitEIT_MM_2ion(freqslong, *popt_multi1_2ion, plot=True)

        popt_vecs.append(popt_multi1_2ion)
        pcov_vecs.append(pcov_multi1_2ion)

    print(f'Listo {selectedcurve}')

    plt.figure()
    plt.errorbar(Detunings_multi1_short_2ion, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', color='darkgreen', alpha=0.5, capsize=2, markersize=2)
    plt.plot(Detunings_multi1_long_2ion, FittedEITpi_multi1_long_2ion, color='darkolivegreen', linewidth=3, label=f'selcurve: {selectedcurve}')
    #plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
    plt.xlabel('Detuning (MHz)')
    plt.ylabel('Counts')
    plt.legend(loc='upper left', fontsize=20)
    plt.grid()

# plt.plot(detunings,'o')


#from EITfit.MM_eightLevel_2repumps_AnalysisFunctions import PerformExperiment_8levels
from scipy.optimize import curve_fit
import time

"""
MEDICION MULTI 1

otras
"""

phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0,  0
phiprobe = 0
titaprobe = 90

Temp = 0.5e-3

sg = 0.544
sp = 4.5
sr = 0
DetRepump = 0


lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres


u = 32.5e6

#B = (u/(2*np.pi))/c

gPS, gPD, = 2*np.pi*21.58e6, 2*np.pi*1.35e6 
alpha = 0


drivefreq = 2*np.pi*22.135*1e6

measurement = 1
#selectedcurve=10
selectedcurvevec=[15,16,17,18]

popt_vecs2 = []
pcov_vecs2 = []

for selectedcurve in selectedcurvevec:
    FreqsDR = MultiFreqs[measurement]
    CountsDR = CountsSplit[measurement][selectedcurve]
       
    freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
    CircPr = 1
    alpha = 0
    
    
    
    def FitEIT_MM_2ion(Freqs, offset, DetDoppler, SG, SP, SCALE1, SCALE2, OFFSET, BETA1, BETA2, TEMP, U, plot=False):
    #def FitEIT_MM(freqs, SG, SP, SCALE1, OFFSET, BETA1):
        #BETA = 1.8
        # SG = 0.6
        # SP = 8.1
        # TEMP = 0.2e-3
    
        freqs = [2*f*1e-6-offset for f in Freqs]
      
        Detunings, Fluorescence1 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA1, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
        Detunings, Fluorescence2 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA2, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
    
    
        ScaledFluo1 = np.array([f*SCALE1 + 0.5*OFFSET for f in Fluorescence1])
        ScaledFluo2 = np.array([f*SCALE2 + 0.5*OFFSET for f in Fluorescence2])
        
        if plot:
            return ScaledFluo1+ScaledFluo2, Detunings
        else:
            return ScaledFluo1+ScaledFluo2
        #return ScaledFluo1
    
    do_fit = True
    if do_fit:
        try:
            popt_multi1_2ion, pcov_multi1_2ion = curve_fit(FitEIT_MM_2ion, FreqsDR, CountsDR, p0=[447.5, -44.0, 0.7, 10, 5.0e4, 6e4, 1.5e-10, 3.7, 1.3, 1.1e-3, 32e6], bounds=((0, -50, 0, 0, 0, 0, 0, 0,0, 0, 25e6), (1000, 0, 2, 20, 5e6, 5e6, 5e4, 10, 10,20e-3, 40e6)))
        except:
            popt_multi1_2ion = [0,0,0,0,0,0,0,0,0,0,0]
            pcov_multi1_2ion = [0]
    
        FittedEITpi_multi1_short_2ion, Detunings_multi1_short_2ion = FitEIT_MM_2ion(FreqsDR, *popt_multi1_2ion, plot=True)
        freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
        FittedEITpi_multi1_long_2ion, Detunings_multi1_long_2ion = FitEIT_MM_2ion(freqslong, *popt_multi1_2ion, plot=True)

        popt_vecs2.append(popt_multi1_2ion)
        pcov_vecs2.append(pcov_multi1_2ion)

    print(f'Listo {selectedcurve}')

    plt.figure()
    plt.errorbar(Detunings_multi1_short_2ion, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', color='darkgreen', alpha=0.5, capsize=2, markersize=2)
    plt.plot(Detunings_multi1_long_2ion, FittedEITpi_multi1_long_2ion, color='darkolivegreen', linewidth=3, label=f'selcurve: {selectedcurve}')
    #plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
    plt.xlabel('Detuning (MHz)')
    plt.ylabel('Counts')
    plt.legend(loc='upper left', fontsize=20)
    plt.grid()

#%%

#from EITfit.MM_eightLevel_2repumps_AnalysisFunctions import PerformExperiment_8levels
from scipy.optimize import curve_fit
import time

"""
MEDICION MULTI 1

otras
"""

phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0,  0
phiprobe = 0
titaprobe = 90

Temp = 0.5e-3

sg = 0.544
sp = 4.5
sr = 0
DetRepump = 0


lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres


u = 32.5e6

#B = (u/(2*np.pi))/c

gPS, gPD, = 2*np.pi*21.58e6, 2*np.pi*1.35e6 
alpha = 0


drivefreq = 2*np.pi*22.135*1e6

measurement = 1
#selectedcurve=10
selectedcurvevec=[6]

popt_vecs3 = []
pcov_vecs3 = []

for selectedcurve in selectedcurvevec:
    FreqsDR = MultiFreqs[measurement]
    CountsDR = CountsSplit[measurement][selectedcurve]
       
    freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
    CircPr = 1
    alpha = 0
    
    
    
    def FitEIT_MM_2ion(Freqs, offset, DetDoppler, SG, SP, SCALE1, SCALE2, OFFSET, BETA1, BETA2, TEMP, U, plot=False):
    #def FitEIT_MM(freqs, SG, SP, SCALE1, OFFSET, BETA1):
        #BETA = 1.8
        # SG = 0.6
        # SP = 8.1
        # TEMP = 0.2e-3
    
        freqs = [2*f*1e-6-offset for f in Freqs]
      
        Detunings, Fluorescence1 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA1, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
        Detunings, Fluorescence2 = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, U, DopplerLaserLinewidth, ProbeLaserLinewidth, TEMP, alpha, phidoppler, titadoppler, phiprobe, titaprobe,  BETA2, drivefreq, min(freqs), max(freqs)+(freqs[1]-freqs[0]), freqs[1]-freqs[0], circularityprobe=CircPr, plot=False, solvemode=1, detpvec=None)
    
    
        ScaledFluo1 = np.array([f*SCALE1 + 0.5*OFFSET for f in Fluorescence1])
        ScaledFluo2 = np.array([f*SCALE2 + 0.5*OFFSET for f in Fluorescence2])
        
        if plot:
            return ScaledFluo1+ScaledFluo2, Detunings
        else:
            return ScaledFluo1+ScaledFluo2
        #return ScaledFluo1
    
    do_fit = True
    if do_fit:
        try:
            popt_multi1_2ion, pcov_multi1_2ion = curve_fit(FitEIT_MM_2ion, FreqsDR, CountsDR, p0=[448.2, -45.8, 0.6, 10, 7.3e4, 2.9e4, 1.3e3, 3.7, 1.1, 3.4e-3,32e6], bounds=((0, -50, 0, 0, 0, 0, 0, 0,0, 0,25e6), (1000, 0, 2, 20, 5e6, 5e6, 5e4, 10, 10,20e-3,40e6)))
        except:
            popt_multi1_2ion = [0,0,0,0,0,0,0,0,0,0,0]
            pcov_multi1_2ion = [0]
    
        FittedEITpi_multi1_short_2ion, Detunings_multi1_short_2ion = FitEIT_MM_2ion(FreqsDR, *popt_multi1_2ion, plot=True)
        freqslong = np.arange(min(FreqsDR), max(FreqsDR)+FreqsDR[1]-FreqsDR[0], 0.1*(FreqsDR[1]-FreqsDR[0]))
        FittedEITpi_multi1_long_2ion, Detunings_multi1_long_2ion = FitEIT_MM_2ion(freqslong, *popt_multi1_2ion, plot=True)

        popt_vecs3.append(popt_multi1_2ion)
        pcov_vecs3.append(pcov_multi1_2ion)

    print(f'Listo {selectedcurve}')

    plt.figure()
    plt.errorbar(Detunings_multi1_short_2ion, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', color='darkgreen', alpha=0.5, capsize=2, markersize=2)
    plt.plot(Detunings_multi1_long_2ion, FittedEITpi_multi1_long_2ion, color='darkolivegreen', linewidth=3, label=f'selcurve: {selectedcurve}')
    #plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
    plt.xlabel('Detuning (MHz)')
    plt.ylabel('Counts')
    plt.legend(loc='upper left', fontsize=20)
    plt.grid()

#%%
betas1s = []
betas2s = []
temps = []
detunings = []

# for i in range(len(popt_vecs3)):
#     betas1s.append(popt_vecs3[i][7])
#     betas2s.append(popt_vecs3[i][8])
#     temps.append(popt_vecs3[i][9])
#     detunings.append(popt_vecs3[i][6])

for i in range(len(popt_vecs)):
    betas1s.append(popt_vecs[i][7])
    betas2s.append(popt_vecs[i][8])
    temps.append(popt_vecs[i][9])
    detunings.append(popt_vecs[i][])

for i in range(len(popt_vecs2)):
    betas1s.append(popt_vecs2[i][7])
    betas2s.append(popt_vecs2[i][8])
    temps.append(popt_vecs2[i][9])
    detunings.append(popt_vecs2[i][5])

# plt.figure()
# plt.plot(betas1s,'o')
# plt.plot(betas2s,'o')

plt.figure()
plt.plot(detunings,'o')