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 = """000002552-UV_Scan.h5""" 


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

def SeeKeys(files):
    for i, fname in enumerate(files.split()):
        data = h5py.File(fname, 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
        print(fname)
        print(list(data['datasets'].keys()))


def GetXToInterpolate(vec):
    return np.arange(min(vec), max(vec), 1e-2*np.abs((vec[1]-vec[0])))

def Test_Calibrate_amplitudes(PD_UV_counts, Calibration_freqs, Calibration_amps, Calibration_PD_Value, Experiment_frequencies):
    
    Interpolation_functions = []
    Interpolation_functions_2 = []

    Calibration_freqs = Calibration_freqs[0:int(len(PD_UV_counts)/len(Calibration_amps))]

    n = len(Calibration_freqs)
    PD_split = np.matrix([PD_UV_counts[i * n:(i + 1) * n] for i in range((len(PD_UV_counts) + n - 1) // n )])
    PD_T = np.transpose(PD_split)

    amps = Calibration_amps

    for i in range(len(PD_T)):
        #PD_values = np.array(PD_T[i][0])[0]
        PD_values = np.array(PD_T[i])[0]
        f = interpolate.interp1d(PD_values, amps, kind='cubic')
        g = interpolate.interp1d(amps, PD_values, kind='cubic')

        Interpolation_functions.append(f)
        Interpolation_functions_2.append(g)
        

    Calibrated_Amplitudes = []
    for fi in Interpolation_functions:
        try:
            Calibrated_Amplitudes.append(float(fi(Calibration_PD_Value)))
        except:
            Calibrated_Amplitudes.append(0)
            print('no, rey')


    Function_Calibs_vs_freq = interpolate.interp1d(Calibration_freqs, Calibrated_Amplitudes, kind='quadratic')    
    
    Experiment_amps = []
    
    for freq in Experiment_frequencies:
        calibamp = Function_Calibs_vs_freq(freq)
        Experiment_amps.append(calibamp)
    
    fs = GetXToInterpolate(Calibration_freqs)
    plt.figure()
    plt.plot(Calibration_freqs, Calibrated_Amplitudes, 'o')
    plt.plot(fs, Function_Calibs_vs_freq(fs))
    
    ExpectedFluo = []
    i = 0
    while i < len(Experiment_amps):
        if Experiment_amps[i] == 0:
            ExpectedFluo.append(0)
        else:
            ExpectedFluo.append(Interpolation_functions_2[i](Experiment_amps[i]))
           
        i = i + 1
        
    
    return Experiment_amps, ExpectedFluo
        

#%%    



for i, fname in enumerate(Calib_Files.split()):
    print(SeeKeys(Calib_Files))
    print(i)
    print(fname)
    data = h5py.File(fname, 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
    print(list(data['datasets'].keys()))
    meas = np.array(data['datasets']['measurements'])
    freqs = np.array(data['datasets']['UV_Frequencies'])
    
meas_eff = np.zeros(len(freqs))
for i in range(len(meas)):
    
    meas_eff[i%len(freqs)] = meas_eff[i%len(freqs)] + meas[i]


plt.plot(freqs, meas_eff, 'o')