# -*- coding: utf-8 -*-
# Chapitre 7 - CORRIGE du script de suivi cinetique.

import matplotlib
matplotlib.use("Agg")            # (pour la generation des figures du livre)
import matplotlib.pyplot as plt

t = [0, 120, 240, 360, 480, 600, 720, 840,
     960, 1080, 1200, 1320, 1440, 1560, 1680, 1800]          # s
c = [5.000e-3, 4.094e-3, 3.352e-3, 2.744e-3, 2.247e-3, 1.839e-3,
     1.506e-3, 1.233e-3, 1.009e-3, 0.826e-3, 0.677e-3, 0.554e-3,
     0.454e-3, 0.371e-3, 0.304e-3, 0.249e-3]                 # mol/L

# --- 2. vitesse volumique de disparition (ligne completee) ------------
v = []
for i in range(len(t) - 1):
    v.append(-(c[i + 1] - c[i]) / (t[i + 1] - t[i]))   # LIGNE COMPLETEE

# --- 3. test d'ordre 1 : v en fonction de c ---------------------------
# Le nuage est aligne sur une droite passant par l'origine : la vitesse
# est proportionnelle a la concentration, la reaction est d'ordre 1.
# Constante de vitesse estimee (pente moyenne) :
k = 0
for i in range(len(v)):
    k = k + v[i] / c[i]
k = k / len(v)
print("k estimee =", k, "s-1")           # environ 1,5e-3 s-1
print("ln(2)/k   =", 0.693 / k, "s")     # a comparer au t1/2 lu (~420 s)

# --- figure pour le livre : deux panneaux -----------------------------
fig = plt.figure(figsize=[8.6, 3.6])
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
c_mmol = []
for valeur in c:
    c_mmol.append(valeur * 1e3)
ax1.plot(t, c_mmol, "o", color="#7B1E3B", ms=4)
ax1.set_xlabel("$t$ (s)")
ax1.set_ylabel("$[\\mathrm{S_2O_8^{2-}}]$ ($\\times10^{-3}$ mol$\\cdot$L$^{-1}$)")
ax1.grid(True, linestyle=":")
c_v_mmol = []
v_micromol = []
for i in range(len(v)):
    c_v_mmol.append(c[i] * 1e3)
    v_micromol.append(v[i] * 1e6)
ax2.plot(c_v_mmol, v_micromol, "o", color="#7B1E3B", ms=4,
         label="mesures")
cmax = c[0]
ax2.plot([0, cmax * 1e3], [0, k * cmax * 1e6], color="0.35", lw=1.2,
         label="droite $v = k\\,[\\mathrm{S_2O_8^{2-}}]$")
ax2.set_xlabel("$[\\mathrm{S_2O_8^{2-}}]$ ($\\times10^{-3}$ mol$\\cdot$L$^{-1}$)")
ax2.set_ylabel("$v$ ($\\times10^{-6}$ mol$\\cdot$L$^{-1}\\cdot$s$^{-1}$)")
ax2.grid(True, linestyle=":")
ax2.legend(fontsize=8.5)
plt.tight_layout()
plt.savefig("../images/ch07_python_ordre1.png", dpi=160)
plt.close()
print("figure ch07_python_ordre1.png OK")
