# enzymmodel.py - hoe snel werkt een enzym bij elke temperatuur? (een model)
import math

R = 8.314                          # gasconstante in J/(mol K)


def botsingen(t, Ea=50000):
    """Arrhenius: hoeveel keer sneller dan bij 20 graden, alleen door de temperatuur."""
    T = t + 273.15
    return math.exp(-Ea / R * (1 / T - 1 / 293.15))


def juiste_vorm(t, Tm, dH=400000):
    """Deel van de enzymen dat zijn vorm nog heeft: 1 = alle, 0 = geen."""
    T = t + 273.15
    return 1 / (1 + math.exp(dH / R * (1 / (Tm + 273.15) - 1 / T)))


def snelheid(t, Tm):
    return botsingen(t) * juiste_vorm(t, Tm)


enzymen = {"koudeminnend": 28, "mens": 45, "Taq": 84}   # Tm: dan is de helft ontvouwen
temps = [x / 10 for x in range(0, 1001)]               # 0,0 tot 100,0 graden
beste = {}
for naam, Tm in enzymen.items():
    t_opt = max(temps, key=lambda t: snelheid(t, Tm))
    beste[naam] = snelheid(t_opt, Tm)
    print(f"{naam:13s} optimum bij {t_opt:5.1f} graden")

print()
print("  t   koudeminnend   mens    Taq    (tegenover het eigen maximum)")
for t in range(0, 101, 10):
    rij = [snelheid(t, Tm) / beste[naam] for naam, Tm in enzymen.items()]
    print(f"{t:3d}       {rij[0]:5.2f}     {rij[1]:5.2f}   {rij[2]:5.2f}")
