Skip to content
UV_spectrums.py 8.46 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

# Solo levanto algunos experimentos
Calib_Files = """000004035-UV_Scan_withcalib_Haeffner
000004036-UV_Scan_withcalib_Haeffner
000004062-UV_Scan_withcalib_Haeffner
000004063-UV_Scan_withcalib_Haeffner
000004064-UV_Scan_withcalib_Haeffner
000004065-UV_Scan_withcalib_Haeffner
000004066-UV_Scan_withcalib_Haeffner
000004067-UV_Scan_withcalib_Haeffner
000004068-UV_Scan_withcalib_Haeffner
000004069-UV_Scan_withcalib_Haeffner
000004071-UV_Scan_withcalib_Haeffner
000004072-UV_Scan_withcalib_Haeffner
000004073-UV_Scan_withcalib_Haeffner
000004074-UV_Scan_withcalib_Haeffner
000004075-UV_Scan_withcalib_Haeffner
000004077-UV_Scan_withcalib_Haeffner
000004078-UV_Scan_withcalib_Haeffner
000004114-UV_Scan_withcalib_Haeffner
000004115-UV_Scan_withcalib_Haeffner
000004116-UV_Scan_withcalib_Haeffner
000004119-UV_Scan_withcalib_Haeffner
000004120-UV_Scan_withcalib_Haeffner
000004129-UV_Scan_withcalib_Haeffner
000004130-UV_Scan_withcalib_Haeffner
000004131-UV_Scan_withcalib_Haeffner
000004132-UV_Scan_withcalib_Haeffner
000004133-UV_Scan_withcalib_Haeffner
000004134-UV_Scan_withcalib_Haeffner""" 


Calib_Files_1005 = """000004114-UV_Scan_withcalib_Haeffner
"""


#carpeta pc nico labo escritorio:
#C:\Users\Usuario\Documents\artiq\artiq_experiments\analisis\plots\20211004_EspectrosUV\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 = 17 #el 15 es lindo tambien

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([f - 225 for f in FreqsChosen], CountsChosen, 'o', label='2.4 uW')
plt.plot([f - 225 for f in FreqsChosen], CountsChosen, 'o')
plt.plot([f - 225 for f in freqslong], Lorentzian(freqslong, *popt), label='Lorentzian fit')
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*95-225, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')


j = 18 #el 15 es lindo tambien

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.plot(FreqsChosen, CountsChosen, 'o', label='1.1 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*95, linestyle='--', linewidth=1, label='UV Cooling Freq')
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')

#%%

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

j = 22

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')
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*100, linestyle='--', linewidth=1, label='UV cooling freq')
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.title('Pot UV: 2.8 uW')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')


j = 23

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')
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*105, linestyle='--', linewidth=1, label='UV cooling freq')
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.title('Pot UV: 2.8 uW')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')


j = 24

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')
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*110, linestyle='--', linewidth=1, label='UV cooling freq')
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.title('Pot UV: 2.8 uW')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')

#%%
j = 25

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')
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*110, linestyle='--', linewidth=1, label='UV cooling freq')
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.title('Pot UV: 2.8 uW, otra polarizacion')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')

j = 26

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')
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*110, linestyle='--', linewidth=1, label='UV cooling freq')
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.title('Pot UV: 2.8 uW, otra polarizacion')
#plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')

j = 27

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')
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*110, linestyle='--', linewidth=1, label='UV cooling freq')
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.title('Pot UV: 2.8 uW, otra polarizacion')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')

#%% SIMULACION DE DOS CAMPANAS

dif = 20
amprand = 0.001
Suma = Lorentzian(np.array(FreqsChosen), 1, 23, 215) + amprand*(np.random.rand()-0.5) + Lorentzian(np.array(FreqsChosen), 1, 23, 215+dif) + amprand*(np.random.rand()-0.5)

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

plt.figure()
plt.plot(FreqsChosen, Suma, 'o')
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*105, linestyle='--', linewidth=1, label='UV cooling freq')
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.title('Pot UV: 2.8 uW')
plt.legend()

print(f'Ancho medido: {round(popt[1])} MHz')