# -*- coding: utf-8 -*-
"""
Created on Tue Jun  7 10:43:18 2022

@author: mathi
"""

from math import *
from random import *
import matplotlib.pyplot as plt 
import numpy as np

#MESURES EXPERIMENTALES 

EDTA = 0.05 #concentration d'EDTA en mol/L dans la solution titrante
Veq1 = np.array([8.1,8.2,8.1,8.3,8.0,8.1,7.9])  #premier volume équivalent en mL
Veq2 = np.array([3.9,4.0,4.0,4.1,4.2,4.1,3.9])  #second volume équivalent en mL
V = 50 #volume de l'échantillon d'eau à analyser

def ecart_type_sans_biais(z):
    n = len(z)
    moy = np.mean(z)
    sigma2 = 0
    for i in range(0,n):
        sigma2 = sigma2 + (z[i]-moy)**2
    return np.sqrt(sigma2/(n-1))
        
Veq1_moy = np.mean(Veq1)
Veq1_sigma = ecart_type_sans_biais(Veq1)
Veq2_moy = np.mean(Veq2)
Veq2_sigma = ecart_type_sans_biais(Veq2)

#SIMULATIONS   

Veq1_simul = np.random.normal(Veq1_moy,Veq1_sigma, 100000)  #np.random.normal(moy,sigma,n)  
Veq2_simul = np.random.normal(Veq2_moy,Veq2_sigma, 100000)   

C_tot_ions = 2*EDTA*Veq1_simul/V #Concentration totales en ions (Ca2+ et Mg2+) en mol/L, Stoechiometrie 2 car l'EDTA réagit avec molecules de NH3
C_Ca = 2*EDTA*Veq2_simul/V #Concentration en ions Ca2+ en mol/L
C_Mg = C_tot_ions - C_Ca  #Concentration en ions Mg2+ en mol/L

C_Ca_moy = np.mean(C_Ca)
C_Mg_moy = np.mean(C_Mg)

C_Ca_sigma = ecart_type_sans_biais(C_Ca)
C_Mg_sigma = ecart_type_sans_biais(C_Mg)


plt.hist(C_Ca, range = (0.005,0.01),bins = 100, label = 'Concentrtion en ions Ca2+') #range : plage d'affichage, bins : nombres d'intervalles
plt.hist(C_Mg, range = (0.005,0.01),bins = 100,label = 'Concentrtion en ions Mg2+')
plt.xlabel('Concentrations en mol/L')
plt.ylabel("Nombre de réalisation")
plt.legend()
plt.show()


