Mercurial > repos > bgruening > sucos_clustering
comparison utils.py @ 0:c0e3a335dbfc draft
"planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/chemicaltoolbox/sucos commit ef86cfa5f7ab5043de420511211579d03df58645"
| author | bgruening |
|---|---|
| date | Wed, 02 Oct 2019 13:00:09 -0400 |
| parents | |
| children | ba1a2eba3f3d |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:c0e3a335dbfc |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 """ | |
| 3 Utility functions for SuCOS and other RDKit modules | |
| 4 """ | |
| 5 | |
| 6 from __future__ import print_function | |
| 7 import sys, gzip | |
| 8 from rdkit import Chem | |
| 9 | |
| 10 def log(*args, **kwargs): | |
| 11 """Log output to STDERR | |
| 12 """ | |
| 13 print(*args, file=sys.stderr, **kwargs) | |
| 14 | |
| 15 def open_file_for_reading(filename): | |
| 16 """Open the file gunzipping it if it ends with .gz.""" | |
| 17 if filename.lower().endswith('.gz'): | |
| 18 return gzip.open(filename, 'rb') | |
| 19 else: | |
| 20 return open(filename, 'rb') | |
| 21 | |
| 22 def open_file_for_writing(filename): | |
| 23 if filename.lower().endswith('.gz'): | |
| 24 return gzip.open(filename, 'at') | |
| 25 else: | |
| 26 return open(filename, 'w+') | |
| 27 | |
| 28 def read_single_molecule(filename, index=1, format=None): | |
| 29 """Read a single molecule as a RDKit Mol object. This can come from a file in molfile or SDF format. | |
| 30 If SDF then you can also specify an index of the molecule that is read (default is the first) | |
| 31 """ | |
| 32 mol = None | |
| 33 if format == 'mol' or filename.lower().endswith('.mol') or filename.lower().endswith('.mol.gz'): | |
| 34 file = open_file_for_reading(filename) | |
| 35 mol = Chem.MolFromMolBlock(file.read()) | |
| 36 file.close() | |
| 37 elif format == 'sdf' or filename.lower().endswith('.sdf') or filename.lower().endswith('.sdf.gz'): | |
| 38 file = open_file_for_reading(filename) | |
| 39 supplier = Chem.ForwardSDMolSupplier(file) | |
| 40 for i in range(0,index): | |
| 41 if supplier.atEnd(): | |
| 42 break | |
| 43 mol = next(supplier) | |
| 44 file.close() | |
| 45 | |
| 46 if not mol: | |
| 47 raise ValueError("Unable to read molecule") | |
| 48 | |
| 49 return mol |
