view @ 7:9b48456a96fe draft default tip

"planemo upload for repository commit 05dc325ce687441e5d3bdbdedcc0e3529cd5e070"
author bgruening
date Wed, 14 Apr 2021 09:30:28 +0000
parents bb5365381c8f
line wrap: on
line source

#!/usr/bin/env python
Utility functions for SuCOS and other RDKit modules

from __future__ import print_function

import gzip
import sys

from rdkit import Chem

def log(*args, **kwargs):
    """Log output to STDERR"""
    print(*args, file=sys.stderr, **kwargs)

def open_file_for_reading(filename):
    """Open the file gunzipping it if it ends with .gz."""
    if filename.lower().endswith(".gz"):
        return, "rb")
        return open(filename, "rb")

def open_file_for_writing(filename):
    if filename.lower().endswith(".gz"):
        return, "at")
        return open(filename, "w+")

def read_single_molecule(filename, index=1, format=None):
    """Read a single molecule as a RDKit Mol object. This can come from a file in molfile or SDF format.
    If SDF then you can also specify an index of the molecule that is read (default is the first)
    mol = None
    if (
        format == "mol"
        or filename.lower().endswith(".mol")
        or filename.lower().endswith(".mol.gz")
        file = open_file_for_reading(filename)
        mol = Chem.MolFromMolBlock(
    elif (
        format == "sdf"
        or filename.lower().endswith(".sdf")
        or filename.lower().endswith(".sdf.gz")
        file = open_file_for_reading(filename)
        supplier = Chem.ForwardSDMolSupplier(file)
        for i in range(0, index):
            if supplier.atEnd():
            mol = next(supplier)

    if not mol:
        raise ValueError("Unable to read molecule")

    return mol