1
2
3
4
5
6
7 import Chem
8
9 -def MolWt(mol,heavyAtomsOnly=0):
10 """ The average molecular weight of the molecule
11
12 >>> '%.2f'%MolWt(Chem.MolFromSmiles('CC'))
13 '30.07'
14 >>> '%.2f'%MolWt(Chem.MolFromSmiles('CC'),1)
15 '24.02'
16 >>> '%.2f'%MolWt(Chem.MolFromSmiles('[NH4+].[Cl-]'))
17 '53.49'
18 """
19 hMass = Chem.GetPeriodicTable().GetAtomicWeight(1)
20 accum = 0.0
21 for atom in mol.GetAtoms():
22 accum += atom.GetMass()
23 if not heavyAtomsOnly:
24 accum += atom.GetTotalNumHs()*hMass
25 return accum
26 MolWt.version="1.0.0"
27
28 HeavyAtomMolWt=lambda x:MolWt(x,1)
29 HeavyAtomMolWt.__doc__="""The average molecular weight of the molecule ignoring hydrogens
30
31 >>> '%.2f'%HeavyAtomMolWt(Chem.MolFromSmiles('CC'))
32 '24.02'
33 >>> '%.2f'%HeavyAtomMolWt(Chem.MolFromSmiles('[NH4+].[Cl-]'))
34 '49.46'
35
36 """
37 HeavyAtomMolWt.version="1.0.0"
38
40 """ The number of valence electrons the molecule has
41
42 >>> NumValenceElectrons(Chem.MolFromSmiles('CC'))
43 14.0
44 >>> NumValenceElectrons(Chem.MolFromSmiles('C(=O)O'))
45 18.0
46 >>> NumValenceElectrons(Chem.MolFromSmiles('C(=O)[O-]'))
47 18.0
48 >>> NumValenceElectrons(Chem.MolFromSmiles('C(=O)'))
49 12.0
50
51
52 """
53 tbl = Chem.GetPeriodicTable()
54 accum = 0.0
55 for atom in mol.GetAtoms():
56 accum += tbl.GetNOuterElecs(atom.GetAtomicNum())
57 accum -= atom.GetFormalCharge()
58 accum += atom.GetTotalNumHs()
59
60 return accum
61 NumValenceElectrons.version="1.0.0"
62
63
64
65
66
68 import doctest,sys
69 return doctest.testmod(sys.modules["__main__"])
70
71 if __name__ == '__main__':
72 import sys
73 failed,tried = _test()
74 sys.exit(failed)
75