UV_spectrums.py 10.6 KB
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

# Solo levanto algunos experimentos
Calib_Files = """000004167-UV_Scan_withcalib_Haeffner
000004168-UV_Scan_withcalib_Haeffner
000004186-UV_Scan_withcalib_Haeffner
000004187-UV_Scan_withcalib_Haeffner
000004188-UV_Scan_withcalib_Haeffner
000004228-UV_Scan_withcalib_Haeffner
000004229-UV_Scan_withcalib_Haeffner
000004230-UV_Scan_withcalib_Haeffner
000004231-UV_Scan_withcalib_Haeffner
000004232-UV_Scan_withcalib_Haeffner
000004233-UV_Scan_withcalib_Haeffner""" 



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

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()))

#%%    

Amps = []
Freqs = []
Counts = []

for i, fname in enumerate(Calib_Files.split()):
    print(SeeKeys(Calib_Files))
    print(i)
    print(fname)
    data = h5py.File(fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
    print(list(data['datasets'].keys()))
    Amps.append(np.array(data['datasets']['UV_Amplitudes']))
    Freqs.append(np.array(data['datasets']['UV_Frequencies']))
    Counts.append(np.array(data['datasets']['counts_spectrum']))
    

#%%

def Lorentzian(f, A, gamma, x0):
    return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + 5

j = 0 #UV_cooling en 100 MHz

UV_cooling = 100

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

popt, pcov = curve_fit(Lorentzian, FreqsChosen, CountsChosen)

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='2.4 uW')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')


def Lorentzian(f, A, gamma, x0):
    return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + 5

j = 1 #UV_cooling en 100 MHz

UV_cooling = 110

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

popt, pcov = curve_fit(Lorentzian, FreqsChosen, CountsChosen)

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='2.4 uW')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')

#%%

def Lorentzian(f, A, gamma, x0):
    return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + 5

j = 2

UV_cooling = 100

Cool_every = 20

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

popt, pcov = curve_fit(Lorentzian, FreqsChosen, CountsChosen)

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='Cool_every 20')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')


def Lorentzian(f, A, gamma, x0):
    return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + 5

j = 3

UV_cooling = 100

Cool_every = 5

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

popt, pcov = curve_fit(Lorentzian, FreqsChosen, CountsChosen)

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='Cool_every 5')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')


j = 4

UV_cooling = 100

Cool_every = 50

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

popt, pcov = curve_fit(Lorentzian, FreqsChosen, CountsChosen)

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='Cool_every 50')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')

#%%

m = 6.6e-26
c = 3e8
T = 100e-6
kb=1.38e-23
hbar=1.03e-34
f0 = 755e12

fL = 22
fG = np.sqrt(8*kb*T*np.log(2)/(m*c*c))*f0*1e-6

print(fG)


"""
wl = 589e-9
T = 300
m2 = 3.5e-23
fG2 = 2*np.pi*(4*np.pi/wl)*np.sqrt(kb*T*2*np.log(2)/(m2))*1e-6
print(fG2)
"""

fV = 0.5*fL + np.sqrt((fL**2)/4 + fG**2)
print(fV)

#%% en teoria esto esta "bien compensado" con -1.21 V en dcB


j = 6

UV_cooling = 90

Cool_every = 20

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

lim = len(FreqsChosen)
popt, pcov = curve_fit(Lorentzian, FreqsChosen[0:lim], CountsChosen[0:lim])

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.1 V')
#plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.xlim(170, 270)
plt.grid()
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')

j = 7

UV_cooling = 90

Cool_every = 20

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

lim = len(FreqsChosen)
popt, pcov = curve_fit(Lorentzian, FreqsChosen[0:lim], CountsChosen[0:lim])

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.16 V')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.xlim(170, 270)
plt.grid()
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')

j = 8

UV_cooling = 90

Cool_every = 20

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

lim = len(FreqsChosen)
popt, pcov = curve_fit(Lorentzian, FreqsChosen[0:lim], CountsChosen[0:lim])

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.20 V')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.xlim(170, 270)
plt.grid()
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')

"""
j = 5

UV_cooling = 90

Cool_every = 20

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

popt, pcov = curve_fit(Lorentzian, FreqsChosen, CountsChosen)

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.22 V')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.xlim(170, 270)
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')

#en teoria esto esta mal compensado poniendo -1.1 V en dcB
def Lorentzian(f, A, gamma, x0):
    return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + 100

"""
j = 9

UV_cooling = 90

Cool_every = 20

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

lim = len(FreqsChosen)
popt, pcov = curve_fit(Lorentzian, FreqsChosen[0:lim], CountsChosen[0:lim])

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.24 V')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.xlim(170, 270)
plt.grid()
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')


j = 10

UV_cooling = 90

Cool_every = 20

FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]

lim = len(FreqsChosen)
popt, pcov = curve_fit(Lorentzian, FreqsChosen[0:lim], CountsChosen[0:lim])

freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)

#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.26 V')
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.xlim(170, 270)
plt.grid()
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz, cooling en {(popt[2]-2*UV_cooling)/23} det/gamma')