Commit 1f3a3960 authored by Marcelo Luda's avatar Marcelo Luda

lolo graficos

parent 426c52f1
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
from glob import glob
from scipy.signal import savgol_filter as savgol
#%% Funciones auxiliares
# Función para verificar lectura de archivos
def SeeKeys(files):
for i, fname in enumerate(files):
data = h5py.File(fname, 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
print(fname)
print(list(data['datasets'].keys()))
def clean_jumps_below(frec,amp,umbral=0):
"""
función para filtrar los spickes menores a un humbral determinado
"""
frec = np.array(frec)
amp = np.array(amp)
return frec[amp>umbral] , amp[amp>umbral]
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#%% Carga de datos experimentales
# glob('/home/lolo/tmp/github/artiq_experiments/artiq_master/results/2023-08-16')
DATAFILES = sorted(glob('../../../artiq_master/results/2023-08-*/*/*.h5'))
""" Bitácora Nico:
Configuracion +2/+2 descompensando:
Ubicación lateral
DCA: 14506, 14507, 14508
CompOVEN: 14509, 14510, 14511, 14512
Ubicación superior:
DCA: 14513, 14514, 14515
CompOVEN: 14516, 14517, 14518, 14519
Configuración Gaussianos:
DCA: 14557, 14558. 14559
CompOVEN: 14560, 14561, 14562, 14563, 14564
"""
DATAFILES_costado_dcA = [ aa for aa in DATAFILES for jj in range(14506,14508+1) if f'{jj}' in aa ]
DATAFILES_costado_compOVEN = [ aa for aa in DATAFILES for jj in range(14509,14512+1) if f'{jj}' in aa ]
DATAFILES_arriba_dcA = [ aa for aa in DATAFILES for jj in range(14513,14515+1) if f'{jj}' in aa ]
DATAFILES_arriba_compOVEN = [ aa for aa in DATAFILES for jj in range(14516,14519+1) if f'{jj}' in aa ]
DATAFILES_gauss_dcA = [ aa for aa in DATAFILES for jj in range(14557,14559+1) if f'{jj}' in aa ]
DATAFILES_gauss_compOVEN = [ aa for aa in DATAFILES for jj in range(14560,14564+1) if f'{jj}' in aa ]
DATOS_COMPLETOS = []
DATOS_COMPLETOS.append([DATAFILES_costado_dcA,'Configuracion +2/+2 colineales, ion al costado del haz barriendo dcA','conf_+2+2_lateral_dcA.png'])
DATOS_COMPLETOS.append([DATAFILES_costado_compOVEN,'Configuracion +2/+2 colineales, ion al costado del haz barriendo compOven','conf_+2+2_lateral_compOven.png'])
DATOS_COMPLETOS.append([DATAFILES_costado_dcA,'Configuracion +2/+2 colineales, ion arriba del haz barriendo dcA','conf_+2+2_arriba_dcA.png'])
DATOS_COMPLETOS.append([DATAFILES_costado_compOVEN,'Configuracion +2/+2 colineales, ion arriba del haz barriendo compOven','conf_+2+2_arriba_compOven.png'])
DATOS_COMPLETOS.append([DATAFILES_costado_dcA,'Configuracion gaussiana colineales barriendo dcA','conf_gauss_dcA.png'])
DATOS_COMPLETOS.append([DATAFILES_costado_dcA,'Configuracion gaussiana colineales barriendo compOven','conf_gauss_compOven.png'])
#%% inspect
# SeeKeys(DATAFILES_costado_dcA[:1])
# data = h5py.File(DATAFILES_costado_dcA[0], 'r')
# for kk,vv in data['datasets'].items():
# print(f'{kk}:\t',vv)
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#%% Configuracion +2/+2 colineales, ion al costado del haz barriendo dcA
FACTOR_ESCALA = 10
for ii,DATO in enumerate(DATOS_COMPLETOS):
VECTOR_DE_DATOS, SUP_TITLE, FILENAME = DATO
# Grafico con subplots
fig,axx = plt.subplots(1,2,figsize=(12,8), constrained_layout=True , sharey=True )
fig.set_constrained_layout_pads(w_pad=1/72, h_pad=0, hspace=0, wspace=0)
rango_dr1 = np.array([435,437])
rango_dr2 = np.array([443,445])
I_base_fit = np.arange(0,50).tolist()+np.arange(230,280).tolist()+np.arange(450,459).tolist()
I_base_fit = np.array(I_base_fit)
ax = axx[0]
# plt.figure()
# ax = plt.gca()
NORMALIZADO = True
rango_dr1 = np.array([435,437])
rango_dr2 = np.array([443,446])
picos = {0:[], 1:[]}
dcA_vec = []
for data in sorted([ h5py.File(DataFile, 'r') for DataFile in VECTOR_DE_DATOS ],key=lambda x: np.array(x['datasets']['initialvoltage_dcA']) ):
frecuencia = np.array(data['datasets']['IR1_Frequencies'])*2e-6
voltages = np.array(data['datasets']['scanning_voltages'])
for kk, dcA in enumerate( voltages ):
# cuentas = np.array(data['datasets']['data_array'])
cuentas = np.array(data['datasets']['data_array']).reshape(len(voltages),-1)[kk][0:len(frecuencia)]
amplitudes = np.array(data['datasets']['IR1_Amplitudes'])
# dcA = np.array(data['datasets']['initialvoltage_dcA'])
dcA_vec.append( dcA.tolist() )
frecuencia,cuentas = clean_jumps_below(frecuencia,cuentas, 200)
cuentas_suave = savgol(cuentas,13,2)
# cuentas_suave = cuentas
I_base_fit = np.arange(len(frecuencia))[:50].tolist()
I_base_fit += np.arange(len(frecuencia))[(frecuencia>=439)&(frecuencia<=442)].tolist()
# I_base_fit += np.arange(len(frecuencia))[(frecuencia>=500)&(frecuencia<=442)].tolist()
I_base_fit = np.array(I_base_fit)
mm = np.polyfit(frecuencia[I_base_fit], cuentas[I_base_fit],1)
base = np.polyval(mm,frecuencia)
CURVA = (cuentas/base-1)/FACTOR_ESCALA + dcA
CURVA_SUAVE = (cuentas_suave/base-1)/FACTOR_ESCALA+ dcA
ax.plot(frecuencia,CURVA , '.', alpha=0.1)
ax.plot(frecuencia,CURVA_SUAVE, '-', alpha=0.9, color=ax.get_lines()[-1].get_color())
for jj,rango in enumerate([rango_dr1,rango_dr2]):
I = np.arange(len(frecuencia))[(frecuencia>rango.min())&(frecuencia<rango.max())]
idx = cuentas_suave[I].argmin() + I[0]
ax.plot(frecuencia[idx],(cuentas_suave[idx]/base[idx]-1)/FACTOR_ESCALA+dcA, 'o', ms=6, color=ax.get_lines()[-1].get_color(),zorder=10)
Base = np.polyval(mm,rango.mean())
val_pico = cuentas_suave[I].min()
picos[jj].append( (Base-val_pico)/Base )
print( (Base-val_pico)/Base , end="\t")
print('')
# break
# break
# ax.plot(frecuencia,cuentas , label=dcA)
# plt.pause(2)
# plt.cla()
# ax.plot(cuentas , label=dcA)
# plt.plot(frecuencia,amplitudes )
# ax.legend()
ax.axvline(rango_dr1.mean(), color='gray', zorder=-10, lw=3 , alpha=0.5)
ax.axvline(rango_dr2.mean(), color='gray', zorder=-10, lw=3, ls='--', alpha=0.5)
ax = axx[1]
ax.plot( picos[0] , dcA_vec , '.-' , color='gray')
for pico,dcA_val in zip(picos[0],dcA_vec):
ax.plot( pico, dcA_val, '.' ,ms=7)
ax.set_prop_cycle(None)
ax.plot( picos[1] , dcA_vec , 'o--' , color='gray')
for pico,dcA_val in zip(picos[1],dcA_vec):
ax.plot( pico, dcA_val, 'o' ,ms=7)
profundidad_mean = [ np.array(np.array(picos[0])[dcA_vec==val].tolist()+np.array(picos[1])[dcA_vec==val].tolist()).mean() for val in np.unique(dcA_vec) ]
profundidad_dev = [ np.array(np.array(picos[0])[dcA_vec==val].tolist()+np.array(picos[1])[dcA_vec==val].tolist()).std() for val in np.unique(dcA_vec) ]
dcA_uniq = np.unique(dcA_vec)
ax.set_xlabel('Profundidad')
axx[0].set_ylabel(f'{SUP_TITLE.split()[-1]} [V]')
axx[0].set_xlabel('frecuencia [kHz]')
for ax in axx:
ax.grid(b=True,linestyle=':',color='lightgray')
ax.set_xlim( 0, ax.get_xlim()[1] )
fig.suptitle(SUP_TITLE)
fig.savefig(f"{ii+1:02d}_{FILENAME}")
# break
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment