Code:
|
# get formula dictionary
dd = {}
clazz = ccp.api.molecule.ChemComp.ChemAtom
for mr in self.residues:
for ss in (ca.elementSymbol for ca in mr.chemCompVar.chemAtoms if isinstance(ca, clazz)):
ii = dd.get(ss)
if ii is None:
dd[ss] = 1
else:
dd[ss] = ii + 1
# generate formula
ll = [None] * (len(dd)*2)
next = 0
for ss in ('C', 'H'):
ii = dd.get(ss)
if ii is not None:
ll[next] = ss
ll[next+1] = str(ii)
del dd[ss]
next = next + 2
items = dd.items()
items.sort()
for (ss, ii) in items:
ll[next] = ss
ll[next+1] = str(ii)
next = next + 2
#
result = ''.join(ll) or None
|