Skip to content
RDS_IR2power.py 9.45 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

#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/20230817_RotationalDopplerShift_v4/Data')



"""
en este codigo ploteo espectros CPT de resonancias D-D para configuracion +2/+2 y +2/-2 (usando pentaprisma)
"""

def find_nearest(array, value):
    array = np.asarray(array)
    idx = (np.abs(array - value)).argmin()
    return idx


IRPOWER_FILES = """VaryingPower/000014529-IR_Scan_withcal_optimized
VaryingPower/000014530-IR_Scan_withcal_optimized
VaryingPower/000014523-IR_Scan_withcal_optimized
VaryingPower/000014528-IR_Scan_withcal_optimized
VaryingPower/000014522-IR_Scan_withcal_optimized
VaryingPower/000014526-IR_Scan_withcal_optimized
VaryingPower/000014524-IR_Scan_withcal_optimized
VaryingPower/000014527-IR_Scan_withcal_optimized
VaryingPower/000014525-IR_Scan_withcal_optimized
VaryingPower/000014531-IR_Scan_withcal_optimized
"""


UVPOWER_FILES = """VaryingUVPower/000014581-IR_Scan_withcal_optimized
VaryingUVPower/000014582-IR_Scan_withcal_optimized
VaryingUVPower/000014583-IR_Scan_withcal_optimized
VaryingUVPower/000014584-IR_Scan_withcal_optimized
VaryingUVPower/000014585-IR_Scan_withcal_optimized
VaryingUVPower/000014586-IR_Scan_withcal_optimized
VaryingUVPower/000014587-IR_Scan_withcal_optimized
VaryingUVPower/000014588-IR_Scan_withcal_optimized
VaryingUVPower/000014589-IR_Scan_withcal_optimized
"""





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


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(IRPOWER_FILES))
print(SeeKeys(UVPOWER_FILES))

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

IrPowerCounts = []
IrPowerFrequencies = []

for i, fname in enumerate(IRPOWER_FILES.split()):
    print(str(i) + ' - ' + fname)
    data = h5py.File(fname+'.h5', 'r')
    #Amplitudes.append(np.array(data['datasets']['amplitudes']))
    IrPowerCounts.append(np.array(data['datasets']['counts_spectrum']))
    IrPowerFrequencies.append(np.array(data['datasets']['IR1_Frequencies']))


UvPowerCounts = []
UvPowerFrequencies = []
UvPowerAmps = []

for i, fname in enumerate(UVPOWER_FILES.split()):
    print(str(i) + ' - ' + fname)
    data = h5py.File(fname+'.h5', 'r')
    #Amplitudes.append(np.array(data['datasets']['amplitudes']))
    UvPowerCounts.append(np.array(data['datasets']['counts_spectrum']))
    UvPowerFrequencies.append(np.array(data['datasets']['IR1_Frequencies']))
    UvPowerAmps.append(np.array(data['datasets']['UV_CPT_amp']))

   
def ErrorDRdepth(p, f, b):
    ep = np.sqrt(p)
    ef = np.sqrt(f)
    eb = np.sqrt(b)
    derivadap = 1/((f-b)**2)
    derivadaf = ((p-b)/((f-b)**2))**2
    derivadab = ((p-f)/((f-b)**2))**2
    return 2*np.sqrt(derivadap*ep*ep + derivadaf*ef*ef + derivadab*eb*eb)

#%%
import seaborn as sns
"""
Resonancias DD configuracion +2/-2 colineal variando la potencia del laser IR2
"""

palette = sns.color_palette("tab10")

# pmlocmedvec = [0, 4, 3, 5, 1, 7, 6, 2]
# idxvec = [95, 95, 95, 94, 93, 98, 97, 97]

irpowermedvec = [0,1,2,3,4,5,6,7,8,9]

idxvecdr1 = [159, 159, 159, 159, 159, 159, 159, 159, 160, 159]
idxvecdr2 = [394, 394, 394, 394, 394, 394, 394, 394, 394, 393]

#irpowermedvec = [0]

IrAmpVec = [0.03, 0.04, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.33]
PotIr2Vec = [0.05, 0.08, 0.48, 2.5, 7.5, 16.8, 31.2, 50.8, 73.6, 143]

PotIr1 = 3.6

plt.figure()

ftrap = 22.1

DR1 = 435.8
DR2 = 444.2

bkg = 130

powdepthsdr1=[]
errorpowdepthsdr1=[]

powdepthsdr2=[]
errorpowdepthsdr2=[]

idxtest = 393

jj=0
for med in irpowermedvec:
    if med == 0:
        powdepthsdr1.append(1-(IrPowerCounts[med][1:][idxvecdr1[jj]]-bkg)/(np.mean(IrPowerCounts[med][1:][50:150])-bkg))
        powdepthsdr2.append(1-(IrPowerCounts[med][1:][idxvecdr2[jj]]-bkg)/(np.mean(IrPowerCounts[med][1:][-100:-1])-bkg))
        errorpowdepthsdr1.append(ErrorDRdepth(IrPowerCounts[med][1:][idxvecdr1[jj]],np.mean(IrPowerCounts[med][1:][50:150]), bkg))
        errorpowdepthsdr2.append(ErrorDRdepth(IrPowerCounts[med][1:][idxvecdr2[jj]],np.mean(IrPowerCounts[med][1:][-100:-1]), bkg))

    
    else:    
        powdepthsdr1.append(1-(IrPowerCounts[med][1:][idxvecdr1[jj]]-bkg)/(np.mean(IrPowerCounts[med][1:][0:20])-bkg))
        powdepthsdr2.append(1-(IrPowerCounts[med][1:][idxvecdr2[jj]]-bkg)/(np.mean(IrPowerCounts[med][1:][0:20])-bkg))
        errorpowdepthsdr1.append(ErrorDRdepth(IrPowerCounts[med][1:][idxvecdr1[jj]],np.mean(IrPowerCounts[med][1:][0:20]), bkg))
        errorpowdepthsdr2.append(ErrorDRdepth(IrPowerCounts[med][1:][idxvecdr2[jj]],np.mean(IrPowerCounts[med][1:][0:20]), bkg))
    plt.plot([2*f*1e-6 for f in IrPowerFrequencies[med][1:]], [c for c in IrPowerCounts[med][1:]], '-o', color=palette[med],markersize=2, alpha=0.7, label=f'{IrAmpVec[jj]}')
    plt.plot([2*f*1e-6 for f in IrPowerFrequencies[med][1:]][idxtest], [c for c in IrPowerCounts[med][1:]][idxtest], 'o', color=palette[med],markersize=14)
    jj=jj+1
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Counts')
#plt.xlim(442,445)
plt.grid()
#plt.legend()
#plt.title('Espectros para distintas geometrías')

fig, ax = plt.subplots()
ax.errorbar(PotIr2Vec, powdepthsdr1, yerr=errorpowdepthsdr1, fmt='o',capsize=4, markersize=10, label='DR left')
ax.errorbar(PotIr2Vec, powdepthsdr2, yerr=errorpowdepthsdr2, fmt='o',capsize=4, markersize=10, label='DR right')
ax.set_xlabel('IR1 amp')
ax.set_ylabel('DR Relative depth')
ax.set_xlim(-5,80)
ax.set_xscale('linear')
ax.set_ylim(0,1)
ax.axvline(PotIr1, label='IR1 power', linestyle='--', color='firebrick', zorder=0, alpha=0.7)
plt.legend()
plt.grid()

#%%
import seaborn as sns
"""
Resonancias DD configuracion +2/-2 colineal variando la potencia del laser UV
"""

palette = sns.color_palette("tab10")

# pmlocmedvec = [0, 4, 3, 5, 1, 7, 6, 2]
# idxvec = [95, 95, 95, 94, 93, 98, 97, 97]

uvpowermedvec = [0,1,2,3,4,5,6,7,8]

idxvecdr1 = [95, 95, 95, 95, 95, 95,95,95,95]
idxvecdr2 = [236, 236, 236, 236, 236, 236, 236, 236, 236, 236]

#uvpowermedvec = [2]

PotUvVec = [4, 0.76, 11, 22.4, 36, 50, 61, 65, 1.5]


plt.figure()

ftrap = 22.1

DR1 = 435.8
DR2 = 444.2

bkg = 120

powdepthsdr1=[]
errorpowdepthsdr1=[]

powdepthsdr2=[]
errorpowdepthsdr2=[]

idxtest = 236

jj=0
for med in uvpowermedvec:
    
    if med == 1:
        powdepthsdr1.append(1-(UvPowerCounts[med][1:][idxvecdr1[jj]]-bkg)/(np.mean(UvPowerCounts[med][1:][6:26])-bkg))
        powdepthsdr2.append(1-(UvPowerCounts[med][1:][idxvecdr2[jj]]-bkg)/(np.mean(UvPowerCounts[med][1:][6:26])-bkg))
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
        errorpowdepthsdr1.append(ErrorDRdepth(UvPowerCounts[med][1:][idxvecdr1[jj]],np.mean(UvPowerCounts[med][1:][6:26]), bkg))
        errorpowdepthsdr2.append(ErrorDRdepth(UvPowerCounts[med][1:][idxvecdr2[jj]],np.mean(UvPowerCounts[med][1:][6:26]), bkg))

    else:
        powdepthsdr1.append(1-(UvPowerCounts[med][1:][idxvecdr1[jj]]-bkg)/(np.mean(UvPowerCounts[med][1:][2:20])-bkg))
        powdepthsdr2.append(1-(UvPowerCounts[med][1:][idxvecdr2[jj]]-bkg)/(np.mean(UvPowerCounts[med][1:][2:20])-bkg))
        errorpowdepthsdr1.append(ErrorDRdepth(UvPowerCounts[med][1:][idxvecdr1[jj]],np.mean(UvPowerCounts[med][1:][0:20]), bkg))
        errorpowdepthsdr2.append(ErrorDRdepth(UvPowerCounts[med][1:][idxvecdr2[jj]],np.mean(UvPowerCounts[med][1:][0:20]), bkg))
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
    plt.plot([2*f*1e-6 for f in UvPowerFrequencies[med][1:]], [c for c in UvPowerCounts[med][1:]], '-o', color=palette[med],markersize=2, alpha=0.7, label=f'{UvPowerAmps[jj]}')
    #plt.plot([2*f*1e-6 for f in UvPowerFrequencies[med][1:]][idxtest], [c for c in UvPowerCounts[med][1:]][idxtest], 'o', color=palette[med],markersize=14)
    jj=jj+1
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Counts')
#plt.xlim(442,445)
plt.grid()
#plt.legend()
#plt.title('Espectros para distintas geometrías')

fig, ax = plt.subplots()
ax.errorbar(PotUvVec, powdepthsdr1, yerr=errorpowdepthsdr1, fmt='o',capsize=4, markersize=10, label='DR left')
ax.errorbar(PotUvVec, powdepthsdr2, yerr=errorpowdepthsdr2, fmt='o',capsize=4, markersize=10, label='DR right')
ax.set_xlabel('Uv power (uW)')
ax.set_ylabel('DR Relative depth')
#ax.set_xlim(-5,80)
ax.set_xscale('linear')
ax.set_ylim(0,1)
plt.legend()
plt.grid()

#%%
"""
EXTRA: sensibilidad de CPT D-D con OAM +2/-2 a movimiento térmico del ion
comparado con CPT tradicional S-D
"""



import numpy as np
import matplotlib.pyplot as plt

def sens(r,l=2):
    return 2*l/r

Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
def sensgauss(angle):
    k = 2*np.pi/866e-9
    return np.sqrt(k**2 + k**2 - 2*k*k*np.cos(angle*np.pi/180))
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed

radius = np.arange(0.1e-6,10e-6,0.01e-6)

Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
ang = 1

Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
plt.figure()
plt.semilogy([r*1e6 for r in radius],sens(radius), linewidth=3, color='coral', label='D-D CPT +2/-2 OAM ')
plt.xlabel('OAM radius (um)')
plt.ylabel('Thermometry sensitivity')
plt.axhline(8.6e6, color='indigo', linestyle='--', label='S-P CPT gaussian sensitivity')
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
plt.axhline(8.6e6, color='indigo', linestyle='--', label='S-P CPT gaussian sensitivity')
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
plt.grid()
plt.legend()