5
file acidebase.py: part of the package pyacidobasic version %s:
7
Copyright (C) 2010 Georges Khaznadar <georgesk@ofset.org>
9
This program is free software: you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation, either version 3 of the License, or
12
(at your option) any later version.
14
This program is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
GNU General Public License for more details.
19
You should have received a copy of the GNU General Public License
20
along with this program. If not, see <http://www.gnu.org/licenses/>.
23
from PyQt4.QtCore import *
26
def __init__(self, formes=["AH","A<sup>-</sup>"], formeIndex=0, nom="acide générique", pK=[3.5], c=1.0, charge=0, v=0.0):
28
objet représentant un couple acido-basique
29
@param formes la liste des formes acido-basiques conjuguées
30
@param formeIndex la forme de base
31
@param nom désignation de la forme de base
32
@param pK liste des constantes d'acidité
33
@param c concentration initiale en mol/L
34
@param charge charge électrique de la forme acide en unité élémentaire
38
self.formeIndex=formeIndex
46
return acideBase(self.formes, self.formeIndex, self.nom, self.pK, self.c, self.charge, self.v)
49
return "%s;%s;%s;%s;%s;%s;%s" %(self.formes,
56
def chargeNette(self,pH):
58
Renvoie la charge électrique en Faraday en fonction du pH
60
concentrations=[1.0] # liste des concentrations des espèces
61
total=1.0 # concentration totale
63
c=concentrations[-1]*10**(pH-pK)
64
concentrations.append(c)
66
# On normaliste pour que la concentration totale soit self.c
67
concentrations=map(lambda c:c/total*self.c, concentrations)
68
ch=self.charge # on considère la cahrge de l'espèce acide
70
# on calcule d'abord la concentration de charges
71
for c in concentrations:
72
result+=c*ch # on cumule la charge de l'espèce acide
73
ch-=1 # et on passe à la base conjuguée
74
# puis la charge en Faraday, en multipliant par le volume en mL.
81
formes=s[0].split(',')
85
ab.formes.append(QString(f))
86
ab.formeIndex= int(s[1])
87
ab.nom= QString(unicode(s[2],"utf-8"))
91
ab.pK.append(float(pK))
96
def listFromString(s):
98
for ligne in s.split("\n"):
100
acideOuBase=fromString(ligne)
101
liste.append(acideOuBase)
106
def listFromFile(fname):
107
return listFromString(open(fname,"r").read(655360))