import numpy as np, konstanter as k, kalibreringskurve as kalib, matplotlib.pyplot as plt, regning as regn
def read_data(filename):
    with open(filename, 'r') as file:
        lines = file.readlines()
        lines = [np.array([float(x) for x in line.split()]) for line in lines]
        data = np.array(lines)
        data= np.transpose(data)
        return data

###### Henter ut data ########
data = read_data('data.txt')
V_mb_points = data[0]   #[ml]
V_iso_points = data[1]  #[ml]
T = data[2] + 273.15      #[K]
p = data[3]      #[cmHg]
brytning_v1_points = data[4]
brytning_v2_points = data[5]
brytning_k1_points = data[6]
brytning_k2_points = data[7]

######## regner ut gjennomsnitt av brytningene #############
brytning_v_points = (brytning_v1_points + brytning_v2_points)/2
brytning_k_points = (brytning_k1_points + brytning_k2_points)/2


########### finner molfraksjoner av iso med standardavvik fra kalibreringskurve ########
x, s_x = kalib.x_iso_fra_brytning(brytning_v_points)
y, s_y = kalib.x_iso_fra_brytning(brytning_k_points)

x = 1-x
y = 1-y

a = ((np.exp(
            (k.H_vap_iso / k.R) * ((1 / T) - (1 / k.T_b_iso))
        ) * (
            (p * y) / (k.p0 * x)
        ) * (
        -k.H_vap_iso/(k.R * (T**2)))
        ) * k.s_T
    ) ** 2

b=((np.exp((k.H_vap_iso / k.R) * ((1 / T) - (1 / k.T_b_iso))) *
     ((p * y) / (k.p0 * x)) *
     (k.H_vap_iso/(k.R * (k.T_b_iso**2)))) * k.s_T)**2

c = ((np.exp((k.H_vap_iso/k.R) * ((1/T) - (1/k.T_b_iso))) * ((p )/(k.p0 * x))) * s_y)**2

d = ((np.exp((k.H_vap_iso/k.R) * ((1/T) - (1/k.T_b_iso))) * (-(p * y)/(k.p0 * (x**2)))) * s_x)**2

# print('#'*50)
# for liste,navn in zip([a,b,c,d, sum([a,b,c,d])], ['a  ','b  ','c  ','d  ', 'sum']):
#     print(navn, end=':   ')
#     for i in liste:
#         print(i.round(5), end=' '*(10-len(str(i.round(5)))))
#     print()
#
# print()
# teller = 0
# for liste in [x, s_x, y, s_y, T, p, 1/x]:
#     if teller in [2,4,6]:
#         print()
#     for i in liste:
#         print(i.round(5), end=' '*(10-len(str(i.round(5)))))
#     teller += 1
#     print()

plt.plot(x, d, color = 'b')
plt.plot(x, c, color = 'r')
plt.show()