def getCoeff(coeff): #coeff er f.eks. CO eller CH4
    with open('cp_data.txt', 'r') as data:       #finner riktige koeffesienter
        coeffStr = 'not_null_str'
        while coeff not in coeffStr and coeffStr:
            coeffStr = data.readline()

    coeffList = eval(coeffStr.split('=')[1])       #henter ut listen med koeffisienter fra linjen
    coeffNavn = ['a','b','c','d']
    coeffDict = dict([(coeffNavn[i],coeffList[i]) for i in range(4)])       #gjør om listen til en dict

    return coeffDict

def HeatCapacity(T, coeff):

    coeffDict = getCoeff(coeff)

    a = coeffDict['a']
    b = coeffDict['b']
    c = coeffDict['c']
    d = coeffDict['d']

    c_p = a + b*T + c*(T**2) + d*(T**3)     #regner ut varmekapasiteten

    return c_p

def MeanHeatCapacity(T0,T1,coeff):
    coeffDict = getCoeff(coeff)

    a = coeffDict['a']
    b = coeffDict['b']
    c = coeffDict['c']
    d = coeffDict['d']

    mC_p = (a*(T1-T0) + (b*(T1**2-T0**2))/2 + (c*(T1**3-T0**3))/3 + (d*(T1**4 - T0**4))/4)/(T1-T0)

    return mC_p


def cpdt_lik_tall(guessT,
        partlist=[0.21, 0.53, 0.16, 0.05, 0.05],
        coefflist=['CO', 'H2', 'CH4', 'N2', 'CH3OH'],
        T1=550,
        tall = 1684,
        hopp=75, mode=0):

    if mode == 0:
        if len(partlist) != len(coefflist):
            return print('partlist is len: ', len(partlist), '\n coefflist is len: ', len(coefflist))

    from py_oving.oving1.HeatCp import MeanHeatCapacity as mhcp

    cp = 0
    for i in range(len(partlist)):
        cp += partlist[i] * mhcp(guessT, 550, coefflist[i])

    diff = tall - (T1 - guessT) * cp
    print(guessT, '      ', diff, '        ', hopp)

    if diff > 1:
        if mode == -1:
            hopp = hopp / 2
        return cpdt_lik_tall(guessT - hopp, hopp=hopp, mode=1)

    if diff < -1:
        if mode == 1:
            hopp = hopp / 2
        return cpdt_lik_tall(guessT + hopp, hopp=hopp, mode=-1)

    return guessT, cp
