diff ob_remIons.py @ 14:7672039a0bb0 draft

"planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/chemicaltoolbox/openbabel commit 327c29cc43f56d7067ab9fa51323ea31951db98b"
author bgruening
date Tue, 10 Nov 2020 20:40:46 +0000
parents a66827fc370d
children 75ee9c410951
line wrap: on
line diff
--- a/ob_remIons.py	Mon Oct 19 14:45:37 2020 +0000
+++ b/ob_remIons.py	Tue Nov 10 20:40:46 2020 +0000
@@ -1,4 +1,5 @@
 #!/usr/bin/env python
+
 """
     Input: molecular input file.
     Output: Molecule file with removed ions and fragments.
@@ -15,20 +16,24 @@
     parser.add_argument('-iformat', default='sdf', help='input file format')
     parser.add_argument('-i', '--input', required=True, help='input file name')
     parser.add_argument('-o', '--output', required=True, help='output file name')
+    parser.add_argument('-idx', default=False, action='store_true', help='should output be an indexed text table? works only for inchi/smiles, otherwise is ignored')
     return parser.parse_args()
 
 
 def remove_ions(args):
-    outfile = pybel.Outputfile(args.iformat, args.output, overwrite=True)
-    for mol in pybel.readfile(args.iformat, args.input):
-        if mol.OBMol.NumHvyAtoms() > 5:
-            mol.OBMol.StripSalts(0)
-            if 'inchi' in mol.data:
-                del mol.data['inchi']  # remove inchi cache so modified mol is saved
-            # Check if new small fragments have been created and remove them
+    with open(args.output, 'w') as outfile:
+        for index, mol in enumerate(pybel.readfile(args.iformat, args.input)):
             if mol.OBMol.NumHvyAtoms() > 5:
-                outfile.write(mol)
-    outfile.close()
+                mol.OBMol.StripSalts(0)
+                if 'inchi' in mol.data:
+                    del mol.data['inchi']  # remove inchi cache so modified mol is saved
+
+            mol = mol.write(args.iformat) if mol.OBMol.NumHvyAtoms() > 5 else '\n'
+
+            if args.idx and args.iformat in ['inchi', 'smi']:
+                outfile.write(f'{index}\t{mol}')
+            elif mol != '\n':
+                outfile.write(f'{mol}')
 
 
 def __main__():