Source code for ase.io.mol

"""Reads chemical data in MDL Molfile format.

See https://en.wikipedia.org/wiki/Chemical_table_file
"""
from ase.atoms import Atoms


[docs]def read_mol(fileobj): lines = fileobj.readlines() L1 = lines[3] # The V2000 dialect uses a fixed field length of 3, which means there # won't be space between the numbers if there are 100+ atoms, and # the format doesn't support 1000+ atoms at all. if L1.rstrip().endswith('V2000'): natoms = int(L1[:3].strip()) else: natoms = int(L1.split()[0]) positions = [] symbols = [] for line in lines[4:4 + natoms]: x, y, z, symbol = line.split()[:4] symbols.append(symbol) positions.append([float(x), float(y), float(z)]) return Atoms(symbols=symbols, positions=positions)