# -*- coding: utf-8 -*- """ Created on Fri Feb 9 08:42:26 2024 @author: Publico """ import matplotlib.pyplot as plt import numpy as np import nidaqmx from scipy.signal import find_peaks # Para saber el ID de la placa conectada (DevX) system = nidaqmx.system.System.local() for device in system.devices: print(device) # Configuración de la tarea task = nidaqmx.Task() modo = nidaqmx.constants.TerminalConfiguration(10083) ai_channel = task.ai_channels.add_ai_voltage_chan("Dev2/ai1", terminal_config = modo, max_val = 10, min_val = -10) print(ai_channel.ai_term_cfg) print(ai_channel.ai_max) print(ai_channel.ai_min) def medicion_una_vez(duracion, fs, task): cant_puntos = int(duracion*fs) # Frecuencia de sampleo: task.timing.cfg_samp_clk_timing(rate = fs, samps_per_chan = cant_puntos, sample_mode = nidaqmx.constants.AcquisitionType.FINITE) # Adquirimos datos: datos = task.read(number_of_samples_per_channel = nidaqmx.constants.READ_ALL_AVAILABLE, timeout = nidaqmx.constants.WAIT_INFINITELY) # Sin el timeout no podemos cambiar la duracion a mas de 10 seg. datos = np.asarray(datos) return datos.T # Tenemos un matriz de [# de canales]x[cant_puntos], donde # cada fila son los datos de todo un canal. def espectro_gamma(dt, fs, cant_ventanas, task): picos = np.zeros(0) # Tensión del pico dist = np.zeros(0) # Distancia temporal entre los picos eventos_por_ventana=[] for i in range(cant_ventanas): # Medimos en la ventana temporal: y =-medicion_una_vez(dt, fs, task) # Buscamos picos: peaks, prop = find_peaks(y, height = np.mean(y)+np.std(y),width = 0) picos = np.concatenate((picos, y[peaks])) dist = np.concatenate((dist, np.diff(peaks)/fs)) eventos_por_ventana.append(len(peaks)) print(i+1,"de",cant_ventanas," ", len(peaks)) return picos, dist, np.array(eventos_por_ventana) #%% dt=0.01 fs=4e5 y=-medicion_una_vez(dt,fs,task) t=np.linspace(0,len(y)/fs,len(y)) picos,_ =find_peaks(y,height=np.mean(y)+np.std(y),width=0) plt.errorbar(t,y,fmt="-",linewidth=0.5) plt.plot(t[picos],y[picos], 'x') plt.xlabel('Tiempo [s]') plt.ylabel('Tensión [V]') plt.figure() plt.hist(y[picos],bins=100) plt.xlabel('Tensión [V]') plt.ylabel('Cuentas') plt.yscale("log") #%% dt=0.5 fs=4e5 ventanas = 240 picos, dist, eventos_por_ventana = espectro_gamma(dt,fs,ventanas,task) #M es tiempo,picos,num_ventana plt.figure() plt.hist(picos,bins=200) plt.xlabel('Tensión [V]') plt.ylabel('Cuentas') plt.yscale("log") # np.savetxt("Ba133 picos.txt",M) # np.savetxt("Ba133 ventanas.txt",dist) # np.savetxt("Ba133 eventos.txt",eventos_por_ventana) task.close()