import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
import scipy
from scipy.integrate import cumulative_trapezoid
import pprint

c = 299792458 #m/s
h = 6.62607015e-34

# data1 = pd.read_csv("C:/Users/jelholm/Documents/GitHub/automation/logs/308nm_30mA_0.01ms.txt", sep=' ', header = None)
# data2 = pd.read_csv("C:/Users/jelholm/Documents/GitHub/automation/logs/340nm_30mA_0.01ms.txt", sep=' ', header = None)
# data3 = pd.read_csv("C:/Users/jelholm/Documents/GitHub/automation/logs/365nm_30mA_0.01ms.txt", sep=' ', header = None)
# data4 = pd.read_csv("C:/Users/jelholm/Documents/GitHub/automation/logs/405nm_30mA_0.01ms.txt", sep=' ', header = None)
# data_files = [data1,data2,data3,data4]

#SPECTRA DATA
# sdata1 = pd.read_csv("C:/Users/jelholm/Documents/GitHub/automation/logs/308nm_spectra.txt", sep=' ', header = None)
# sdata2 = pd.read_csv("C:/Users/jelholm/Documents/GitHub/automation/logs/340nm_spectra.txt", sep=' ', header = None)
# sdata3 = pd.read_csv("C:/Users/jelholm/Documents/GitHub/automation/logs/365nm_spectra.txt", sep=' ', header = None)
# sdata4 = pd.read_csv("C:/Users/jelholm/Documents/GitHub/automation/logs/405nm_spectra.txt", sep=' ', header = None)
# sdata_files = [sdata1,sdata2,sdata3,sdata4]

#SPECTRA DATA (QPOD)
sdata = {}
sdata["280"] = pd.read_csv("logs/led_280nm_500ma_qpod.txt", sep=' ', header = None)
sdata["308"] = pd.read_csv("logs/led_308nm_160ma_qpod.txt", sep=' ', header = None)
sdata["340"] = pd.read_csv("logs/led_340nm_80ma_qpod.txt", sep=' ', header = None)
sdata["365"] = pd.read_csv("logs/led_365nm_20ma_qpod.txt", sep=' ', header = None)
sdata["405"] = pd.read_csv("logs/led_405nm_10ma_qpod.txt", sep=' ', header = None)
sdata["455"] = pd.read_csv("logs/led_455nm_10ma_qpod.txt", sep=' ', header = None)
sdata["430"] = pd.read_csv("logs/led_430nm_10ma_qpod.txt", sep=' ', header = None)


# powers = {}
# powers['20'] = [0.0000021958283,0.00000843627004,0.000011773619]
# powers['30'] = [0.00000343077295,0.0000126154946,0.0000190698411]
# powers['40'] = [0.00000469077031,0.0000167056423,0.0000265108447]
# powers['50'] = [0.00000595431902,0.0000209078098,0.0000337455349]
# powers['60'] = [0.00000722141976,0.0000250512694,0.0000412048066]
# powers['70'] = [0.00000848141644,0.0000292183468,0.0000486640747]
# powers['80'] = [0.00000979255219,0.0000331821684,0.0000561982051]
# powers['90'] = [0.0000110539713,0.0000372633804,0.0000636788609]
# powers['100'] = [0.0000123132577,0.0000413310918,0.0000712611218]
# powers['200'] = [0.0000247029984,0.0000800519483,0.000145276324]
# powers['300'] = [0.0000364506704,0.000116762567,0.000217767607]
# powers['400'] = [0.0000471999774,0.000151699031,0.000288972515]
# powers['500'] = [0.0000567209972,0.000185252604,0.000358080637]
# powers['600'] = [0.0000648859277,0.000217706634,0.000425215752]


LEDs = [280,308,340,365,405,430,455]



path = r"C:\Users\jelholm\Documents\GoogleDrive\Other computers\Min bærbare computer\Kemi KU\PhD\experiments\automation-project\powermeter\06nov24-nT-air.csv"
import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()

path = filedialog.askopenfilename()
if path:
    pass
else:
    print("File was not chosen correctly")
    raise FileNotFoundError

df_data = pd.read_csv(path)
led_in_data = []
leds = {}
for wl in LEDs:
    leds[f"{wl}"] = False
for led in df_data.iloc[:,0]:
    for wl in LEDs:
        if f"{wl}" in led:
            leds[f"{wl}"] = True
            led_in_data.append(wl)
led_in_data = list(set(led_in_data))
print(led_in_data)
    
powers_led = {}
for x in df_data.itertuples():
        for led_wl in led_in_data:
            if f"{led_wl}.0_p" in x._1:
                print(list(x))
                powers_led[f"{led_wl}"] = x[1:]
print(powers_led)
i=1
powers = {}
for amp in ['20','30','40','50','60','70','80','90','100','200','300','400','500','600','700','800','900','1000','1100','1200']:
    current_amp = []
    for led_wl in led_in_data:
        try:
            current_amp.append(powers_led[f"{led_wl}"][i])
        except:
            current_amp.append(0)
    powers[amp] = current_amp
    i+=1
pprint.pprint(powers,sort_dicts=False)

c = 299792458 #m/s
h = 6.62607015e-34

flux_dict = {}
for name in led_in_data:
    flux_dict[f"{name}"] = {}
number = 0
row = 1

power_list = list(powers.keys())
# print(power_list)

print(f"Power {'nm '.join([str(i) for i in led_in_data])}nm")
start_col = 0
threshold_val = 0.1
for p in range(len(power_list)):
    number = 0
    row = 1
    for_excel = []
    for key in led_in_data:
        if leds[f"{key}"]:
            data = sdata[f"{key}"]
            if threshold_val*max(data.iloc[row,start_col:]) > 3000:
                # print(f"Threshhold for {key} is {0.05*max(data.iloc[row,start_col:])}")
                threshold = threshold_val*max(data.iloc[row,start_col:])
            else:
                threshold = threshold_val*max(data.iloc[row,start_col:])
            area = (data.iloc[row,start_col:]>threshold)[data.iloc[row,start_col:]>threshold].index
            x = data.iloc[0,area]
            y = data.iloc[row,area]
            wl = int(x.values[np.argmax(y.values)])
            integral = sum(y)
            new_y = []
            for i in range(len(x.values)):
                E = h*c*1e9/x.values[i]
                new_y.append(y.values[i]*powers[power_list[p]][number]/(integral*E))
            photon_flux = sum(new_y)
            if photon_flux != photon_flux:
                photon_flux = 0
            row += 0
            for_excel.append(f"{photon_flux:.4e}")
            plt.plot(x,new_y,label=f"{wl} nm\n1/s: {photon_flux:.4e}")
            flux_dict[f"{key}"][f"{power_list[p]}"] = photon_flux
            number += 1
        
    
    # print(f"{power_list[p]}"," ".join(for_excel))

# print(flux_dict)
# pprint.pprint(flux_dict,depth=2,sort_dicts=False,compact=True)
print_all = True
if print_all == True:
    print("{",end=" ")
    for k in flux_dict.keys():
        if k == list(flux_dict.keys())[-1]:
            print(f"'{k}':",flux_dict[k],end=" ")
        else:
            print(f"'{k}':",flux_dict[k],",")
    print("}")
plt.show()
