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/20230817_RotationalDopplerShift_v5/Data')
os.chdir('C://Users//nicon//Doctorado//artiq_experiments//analisis//plots//20230817_RotationalDopplerShift_v5//Data')
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""
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
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()))
PiezoVerCounts = []
PiezoVerFrequencies = []
PIEZOVER_FILES = np.arange(922, 948,1)
for i in PIEZOVER_FILES:
#print(str(i) + ' - ' + fname)
data = h5py.File(f'VaryingBeamlocation/Directions/Vertical/000014{i}-IR_Scan_withcal_optimized'+'.h5', 'r')
PiezoVerCounts.append(np.array(data['datasets']['counts_spectrum']))
PiezoVerFrequencies.append(np.array(data['datasets']['IR1_Frequencies']))
PiezoVerDCounts = []
PiezoVerDFrequencies = []
PIEZOVERD_FILES = list(np.arange(70, 97,1))+list(np.arange(99,116))
for i in PIEZOVERD_FILES:
#print(str(i) + ' - ' + fname)
if i <100:
data = h5py.File(f'VaryingBeamlocation/Directions/VerticalDense/0000150{i}-IR_Scan_withcal_optimized'+'.h5', 'r')
else:
data = h5py.File(f'VaryingBeamlocation/Directions/VerticalDense/000015{i}-IR_Scan_withcal_optimized'+'.h5', 'r')
PiezoVerDCounts.append(np.array(data['datasets']['counts_spectrum']))
PiezoVerDFrequencies.append(np.array(data['datasets']['IR1_Frequencies']))
PiezoDiagCounts = []
PiezoDiagFrequencies = []
PIEZODIAG_FILES = list(np.arange(948, 976,1))
for i in PIEZODIAG_FILES:
#print(str(i) + ' - ' + fname)
data = h5py.File(f'VaryingBeamlocation/Directions/Diagonal/000014{i}-IR_Scan_withcal_optimized'+'.h5', 'r')
PiezoDiagCounts.append(np.array(data['datasets']['counts_spectrum']))
PiezoDiagFrequencies.append(np.array(data['datasets']['IR1_Frequencies']))
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 1*np.sqrt(derivadap*ep*ep + derivadaf*ef*ef + derivadab*eb*eb)
def Lorentzian( x, A, B, x0, gam, C):
return A * gam**2 / ( gam**2 + ( x - x0 )**2) + B - C*(x-x0)
#%%
"""
Ahora voy a intentar ajustarlas con una lorentziana que es mejor
"""
import seaborn as sns
"""
Resonancias DD configuracion +2/-2 colineal variando la ubicacion del ion en los haces
Moviendo verticalmente el haz
"""
palette = sns.color_palette("tab10")
pmlocmedvec = np.arange(0,len(PIEZOVER_FILES),1)
pmdepthsdrver=[]
errorpmdepthsdrver=[]
Intensityver = []
errorIntensityver = []
jj=0
for med in pmlocmedvec:
Freqs = [2*f*1e-6 for f in PiezoVerFrequencies[med][1:]]
Counts = [c for c in PiezoVerCounts[med][1:]]
if med==1:
popt, pcov = curve_fit(Lorentzian, Freqs[0:-10], Counts[0:-10], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.5, 1,1000)))
elif med==2:
popt, pcov = curve_fit(Lorentzian, Freqs[0:-5], Counts[0:-5], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.75,0,-1000),(0,1e4, 435.85, 1,1000)))
elif med==3:
popt, pcov = curve_fit(Lorentzian, Freqs[0:-5], Counts[0:-5], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
elif med==5:
popt, pcov = curve_fit(Lorentzian, Freqs[5:], Counts[5:], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
elif med==9:
popt, pcov = curve_fit(Lorentzian, Freqs[:-8], Counts[:-8], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
elif med==10:
popt, pcov = curve_fit(Lorentzian, Freqs[20:], Counts[20:], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
elif med==17:
popt, pcov = curve_fit(Lorentzian, Freqs[:-9], Counts[:-9], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
else:
popt, pcov = curve_fit(Lorentzian, Freqs, Counts, p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
pmdepthsdrver.append(1-(np.min(Lorentzian(Freqs,*popt))-bkg)/(popt[1]-bkg))
errorpmdepthsdrver.append(ErrorDRdepth(np.min(Lorentzian(Freqs,*popt)),popt[1], bkg))
Intens = popt[1]
Intensityver.append(Intens)
# errorIntensity.append(2*np.sqrt(np.mean(Piezo1Counts[med][1:][0:20]))+np.sqrt(bkg))
if med not in [800]:
plt.plot([2*f*1e-6 for f in PiezoVerFrequencies[med][1:]], [c for c in PiezoVerCounts[med][1:]], '-o', markersize=2, alpha=0.7)
plt.plot(Freqs,Lorentzian(Freqs,*popt))
jj=jj+1
# plt.xlabel('Frecuencia (MHz)')
# plt.ylabel('Counts')
#plt.xlim(435.2, 436.5)
plt.grid()
# plt.legend()
# #plt.title('Espectros para distintas geometrías')
if len(pmlocmedvec)!=1:
plt.figure()
plt.plot(np.arange(0,len(Intensityver),1), [i/np.max(Intensityver) for i in Intensityver], '-o',markersize=8)
plt.plot(np.arange(0,len(Intensityver),1), [p for p in pmdepthsdrver], 'o',markersize=8)
plt.xlabel('Ion position')
plt.ylabel('Intensity / DR Relative depth')
#plt.xticks([1,2,3,4,5])
#plt.xlim(200,3200)
plt.ylim(-0.1,1.1)
plt.grid()
#plt.axvline(3, color='salmon')
plt.legend()
#%%
"""
Ahora voy a intentar ajustarlas con una lorentziana que es mejor
"""
import seaborn as sns
"""
Resonancias DD configuracion +2/-2 colineal variando la ubicacion del ion en los haces
Moviendo diagonalmente el haz
"""
palette = sns.color_palette("tab10")
pmlocmedvec = np.arange(0,len(PIEZODIAG_FILES),1)
pmdepthsdrdiag=[]
errorpmdepthsdrdiag=[]
Intensitydiag = []
errorIntensitydiag = []
jj=0
for med in pmlocmedvec:
Freqs = [2*f*1e-6 for f in PiezoDiagFrequencies[med][1:]]
Counts = [c for c in PiezoDiagCounts[med][1:]]
if med==0:
popt, pcov = curve_fit(Lorentzian, Freqs, Counts, p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.7,0,-1000),(0,1e4, 435.9, 1,1000)))
popt, pcov = curve_fit(Lorentzian, Freqs[:-5], Counts[:-5], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 435.9, 1,1000)))
elif med==2:
popt, pcov = curve_fit(Lorentzian, Freqs[:-25], Counts[:-25], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
elif med==3:
popt, pcov = curve_fit(Lorentzian, Freqs[:-4], Counts[:-4], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.7,0,-1000),(0,1e4, 436.1, 1,1000)))
popt, pcov = curve_fit(Lorentzian, Freqs[10:-53]+Freqs[-30:-1], Counts[10:-53]+Counts[-30:-1], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
elif med==20:
popt, pcov = curve_fit(Lorentzian, Freqs[:-10], Counts[:-10], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.7,0,-1000),(0,1e4, 436.1, 1,1000)))
elif med==22:
popt, pcov = curve_fit(Lorentzian, Freqs[:-10], Counts[:-10], p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.7,0,-1000),(0,1e4, 436.1, 1,1000)))
popt, pcov = curve_fit(Lorentzian, Freqs, Counts, p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
pmdepthsdrdiag.append(1-(np.min(Lorentzian(Freqs,*popt))-bkg)/(popt[1]-bkg))
errorpmdepthsdrdiag.append(ErrorDRdepth(np.min(Lorentzian(Freqs,*popt)),popt[1], bkg))
Intens = popt[1]
Intensitydiag.append(Intens)
# errorIntensity.append(2*np.sqrt(np.mean(Piezo1Counts[med][1:][0:20]))+np.sqrt(bkg))
if med not in [800]:
plt.plot([2*f*1e-6 for f in PiezoDiagFrequencies[med][1:]], [c for c in PiezoDiagCounts[med][1:]], '-o', markersize=2, alpha=0.7)
plt.plot(Freqs,Lorentzian(Freqs,*popt))
jj=jj+1
# plt.xlabel('Frecuencia (MHz)')
# plt.ylabel('Counts')
#plt.xlim(435.2, 436.5)
plt.grid()
# plt.legend()
# #plt.title('Espectros para distintas geometrías')
if len(pmlocmedvec)!=1:
plt.figure()
plt.plot(np.arange(0,len(Intensitydiag),1), [i/np.max(Intensitydiag) for i in Intensitydiag], '-o',markersize=8)
plt.plot(np.arange(0,len(Intensitydiag),1), [p for p in pmdepthsdrdiag], 'o',markersize=8)
plt.plot(np.arange(0,len(Intensitydiag),1), [p for p in Anchos], 'o',markersize=8)
plt.xlabel('Ion position')
plt.ylabel('Intensity / DR Relative depth')
#plt.xticks([1,2,3,4,5])
#plt.xlim(200,3200)
plt.ylim(-0.1,1.1)
plt.grid()
#plt.axvline(3, color='salmon')
plt.legend()
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
#%%
"""
Ploteo en conjunto. La horizontal sale de RDS_piezo.py
"""
cap=3
plt.figure()
plt.plot(np.arange(0,len(Intensitydiag),1), [i/np.max(Intensitydiag) for i in Intensitydiag], '-o',markersize=8)
#plt.plot(np.arange(0,len(Intensitydiag),1), [p for p in pmdepthsdrdiag], 'o',markersize=8, label='Diagonal')
plt.errorbar(np.arange(0,len(Intensitydiag),1), [p for p in pmdepthsdrdiag], yerr=errorpmdepthsdrdiag, fmt='o',capsize=cap,markersize=8, label='Diagonal')
#plt.plot(np.arange(0,len(Intensityver),1), [i/np.max(Intensityver) for i in Intensityver], '-o',markersize=8)
#plt.plot(np.arange(0,len(Intensityver),1), [p for p in pmdepthsdrver], 'o',markersize=8, label='Vertical')
plt.errorbar(np.arange(0,len(Intensityver),1), [p for p in pmdepthsdrver], yerr=errorpmdepthsdrver, fmt='o', capsize=cap,markersize=8, label='Vertical')
scale = 1.6
#plt.plot([s*scale for s in np.arange(16,len(Intensity),1)-16], [i/np.max(Intensity) for i in Intensity[16:]], '-o',markersize=8)
#plt.plot([s*scale for s in np.arange(16,len(Intensity),1)-16], [p for p in pmdepthsdr[16:]], 'o',markersize=8, label='Horizontal')
plt.errorbar([s*scale for s in np.arange(16,len(Intensity),1)-16], [p for p in pmdepthsdr[16:]], yerr=errorpmdepthsdr[16:], fmt='o', capsize=cap,markersize=8, label='Horizontal')
plt.xlabel('Ion position')
plt.ylabel('Intensity / DR Relative depth')
#plt.xticks([1,2,3,4,5])
plt.ylim(-0.1,1.1)
plt.grid()
#plt.axvline(3, color='salmon')
plt.legend()
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
#%%
import seaborn as sns
"""
Resonancias DD configuracion +2/-2 colineal variando la ubicacion del ion en los haces
Moviendo verticalmente el haz pero con mayor densidad de puuntos
"""
palette = sns.color_palette("tab10")
pmlocmedvec = np.arange(0,len(PIEZOVERD_FILES),1)
#pmlocmedvec = [6]
plt.figure()
#bkg = np.min(PiezoVerDCounts[5])
bkg=150
pmdepthsdrverd=[]
errorpmdepthsdrverd=[]
Intensityverd = []
errorIntensityverd = []
jj=0
for med in pmlocmedvec:
Freqs = [2*f*1e-6 for f in PiezoVerDFrequencies[med][1:]]
Counts = [c for c in PiezoVerDCounts[med][1:]]
popt, pcov = curve_fit(Lorentzian, Freqs, Counts, p0=(-200,2100,435.8,0.05,0.1), bounds=((-10000,0,435.5,0,-1000),(0,1e4, 436.1, 1,1000)))
pmdepthsdrverd.append(1-(np.min(Lorentzian(Freqs,*popt))-bkg)/(popt[1]-bkg))
errorpmdepthsdrverd.append(ErrorDRdepth(np.min(Lorentzian(Freqs,*popt)),popt[1], bkg))
Intens = popt[1]
Intensityverd.append(Intens)
errorIntensityverd.append(2*np.sqrt(Intens)+np.sqrt(bkg))
if med not in [800]:
plt.plot([2*f*1e-6 for f in PiezoVerDFrequencies[med][1:]], [c for c in PiezoVerDCounts[med][1:]], '-o', markersize=2, alpha=0.7)
plt.plot(Freqs,Lorentzian(Freqs,*popt))
jj=jj+1
# plt.xlabel('Frecuencia (MHz)')
# plt.ylabel('Counts')
#plt.xlim(435.2, 436.5)
plt.grid()
# plt.legend()
# #plt.title('Espectros para distintas geometrías')
plt.figure()
plt.errorbar(np.arange(0,len(Intensityverd),1), [i/np.max(Intensityverd) for i in Intensityverd], yerr=[e/np.max(Intensityverd) for e in errorIntensityverd], fmt='o', capsize=3, markersize=8)
plt.errorbar(np.arange(0,len(Intensityverd),1), [p for p in pmdepthsdrverd], yerr=errorpmdepthsdrverd, fmt='o',color='limegreen',capsize=3,markersize=8)
#plt.plot(np.arange(0,len(Intensityverd),1), [p for p in Anchos], 'o',color='blue',markersize=8)
plt.xlabel('Screw step')
plt.ylabel('Intensity / DR Relative depth')
#plt.xticks([1,2,3,4,5])