Skip to content
CPT_plotter_20230906.py 5.58 KiB
Newer Older
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

#Mediciones barriendo angulo del TISA y viendo kicking de resonancias oscuras

#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/20230906_CPTconmicromocion2/Data/')

CPT_FILES = """000015243-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(CPT_FILES))

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

Counts = []
Freqs = []

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

for i, fname in enumerate(CPT_FILES.split()):
    print(str(i) + ' - ' + fname)
    #print(fname)
    data = h5py.File(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.
    Freqs.append(np.array(data['datasets']['IR1_Frequencies']))
    Counts.append(np.array(data['datasets']['counts_spectrum']))
    #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']))


#%%

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

jvec = [0]

drs = [390.5, 399.5, 406, 413.5]

drive=22.1

plt.figure()
i = 0
for j in jvec:
    plt.errorbar([2*f*1e-6 for f in Freqs[j]], Counts[j], yerr=np.sqrt(Counts[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)
#from EITfit.MM_eightLevel_2repumps_AnalysisFunctions import PerformExperiment_8levels_MM, GenerateNoisyCPT_MM_fit
from scipy.optimize import curve_fit
from time import time as titi

"""
Ajusto un cpt para obtener todos los parámetros relevantes primero.
I fit a cpt curve to retrieve all the relevant parameters first.
"""

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

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

T = 0.6e-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 = 33.5e6

beta = 0

drivefreq = 2*np.pi*22.135e6
correccion = 6 #probe de 1 a 12 y 6 es la mejor

SGs = []
SPs = []
Temps = []
Betas = []
Scales = []
Offsets = []
ErrorBetas = []

offsetxpi = 423+correccion
DetDoppler = -20.5   -correccion

FreqsDRpi = [2*f*1e-6-offsetxpi for f in Freqs[0]]
CountsDRpi = Counts[0]

freqslongpi = np.arange(min(FreqsDRpi), max(FreqsDRpi)+FreqsDRpi[1]-FreqsDRpi[0], 0.1*(FreqsDRpi[1]-FreqsDRpi[0]))

#[1.71811842e+04 3.34325038e-17]

def FitEITpi(freqs, scale, offset, SG, SP, temp, BETA):
    #temp = 1e-3
    #BETA=0
    MeasuredFreq, MeasuredFluo = PerformExperiment_8levels_MM(SG, SP, gPS, gPD, DetDoppler, u, DopplerLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, titaprobe, BETA, drivefreq, min(freqs), max(freqs), freqs[1]-freqs[0])
    # scale = 5.69952745e+04
    # offset = 2.91686628e+03
    FinalFluo = [f*scale + offset for f in MeasuredFluo]
    return FinalFluo

t1 = titi()
popt_fullcpt, pcov_fullcpt = curve_fit(FitEITpi, FreqsDRpi, CountsDRpi, p0=[5e4, 3e3, 0.5, 8, 5e-3, 1], bounds=((0, 0, 0, 0, 0, 0), (1e6, 1e5, 2, 20, 15e-3, 5)))
t2 = titi()

Scales.append(popt_fullcpt[0])
Offsets.append(popt_fullcpt[1])
SGs.append(popt_fullcpt[2])
SPs.append(popt_fullcpt[3])
Temps.append(1e3*popt_fullcpt[4])
Betas.append(popt_fullcpt[5])

ErrorBetas.append(np.sqrt(pcov_fullcpt[5,5]))

#print(f'Temperatura: ({round(1e3*popt_fullcpt[-1],2)} +- {round(1e3*np.sqrt(pcov_fullcpt[-1][-1]),2)}) mK')


print('done', correccion, f', took {round(t2-t1)} seconds')
#popt_fullcpt = array([1.17888250e+05, 1.92746338e+03, 6.15041437e-01, 7.41895643e+00, 1.97990392e-04, 7.14734207e-01]) #este anda bien
#FittedEITpi = FitEITpi(freqslongpi, 0.5, 8, 6e4, 4e3)
FittedEITpi = FitEITpi(freqslongpi, popt_fullcpt[0], popt_fullcpt[1], popt_fullcpt[2], popt_fullcpt[3], popt_fullcpt[4], popt_fullcpt[5])

"""
Ploteo la CPT de referencia junto al ajuste y a la resonancia oscura de interes
I plot the reference CPT along with the fit to the model and the dark resonance of interest
"""
#i_DR = 955

DRs = [-42.5, -33.5, -27, -19]

plt.figure()
plt.errorbar(FreqsDRpi, CountsDRpi, yerr=2*np.sqrt(CountsDRpi), color='purple', alpha=0.6, fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi, FittedEITpi, linewidth=2, color='purple')
# for dr in DRs:
#     dr = dr
#     plt.axvline(dr, color='black',alpha=0.5)
#     plt.axvline(dr+22.135, color='blue',alpha=0.3)
#     plt.axvline(dr-22.135, color='red',alpha=0.3)
#plt.axvline(DetDoppler-22.135)
#plt.axvline(DetDoppler+22.135)
#plt.plot(freqslongpi[i_DR], FittedEITpi[i_DR],'o', color='red', markersize=12)
plt.xlabel('Detuning (MHz)', fontsize=15)
plt.ylabel('Counts', fontsize=15)
plt.grid()
#plt.title(f'correccion: {correccion}')
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')