Files
rdkit/Code/GraphMol/FileParsers/mol.py
Greg Landrum 75a79b6327 initial import
2006-05-06 22:20:08 +00:00

69 lines
1.5 KiB
Python
Executable File

from Chem import rdmol
from Chem.rdmol import Atom,Bond,Mol
def ParseAtomBlock(lines,mol,nAtoms):
for i in range(nAtoms):
line = lines[i]
pX = float(line[0:10])
pY = float(line[10:20])
pZ = float(line[20:30])
symb = line[31:34].strip()
newAt = rdmol.Atom(symb)
newAt.setPos(pX,pY,pZ)
chg = int(line[36:39])
if chg in [1,2,3,5,6,7]:
newAt.setFormalCharge(4-chg);
# parse valence
# parse rxn component
mol.addAtom(newAt)
bondMap = {1:Bond.SINGLE,2:Bond.DOUBLE,3:Bond.TRIPLE,4:Bond.AROMATIC}
def ParseBondBlock(lines,mol,nBonds):
for i in range(nBonds):
line = lines[i]
id1 = int(line[0:3])-1
id2 = int(line[3:6])-1
order = int(line[6:9])
order = bondMap.get(order,Bond.OTHER);
b = Bond(order)
b.setOwningMol(mol)
b.setBeginAtomIdx(id1)
b.setEndAtomIdx(id2)
mol.addBond(b)
def ParseMolBlock(lines,mol):
header = lines[0:3]
counts = lines[3]
nAtoms = int(counts[0:3])
nBonds = int(counts[3:6])
nLists = int(counts[6:9])
chiralFlag = int(counts[12:15])
nsText = int(counts[15:18])
nRxnComponents = int(counts[18:21])
nReactants = int(counts[21:24])
nProducts = int(counts[24:27])
nIntermediates = int(counts[27:30])
ParseAtomBlock(lines[4:],mol,nAtoms)
ParseBondBlock(lines[4+nAtoms:],mol,nBonds)
if __name__ == '__main__':
import sys
fName = sys.argv[1]
inF = open(fName,'r')
lines = inF.readlines()
m = rdmol.Mol()
ParseMolBlock(lines,m)
print m.getNumAtoms()
m.debugMol()
print rdmol.MolToCDXML(m)