Code:
|
# get formula dictionary
dd = {}
clazz = ccp.api.molecule.ChemComp.ChemAtom
for mr in self.molResidues:
for ss in (ca.elementSymbol for ca in mr.getByNavigation('chemComp', ('chemCompVars', (mr.linking, mr.descriptor)), 'chemAtoms') if isinstance(ca, clazz)):
ii = dd.get(ss)
if ii is None:
dd[ss] = 1
else:
dd[ss] = ii + 1
if dd:
# 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)
else:
result = None
|