|
17 | 17 | import argparse
|
18 | 18 | import rdkit
|
19 | 19 | import time
|
| 20 | +import random |
20 | 21 | from rdkit import Chem
|
21 | 22 | from rdkit.Chem import AllChem
|
22 | 23 | import sys
|
@@ -49,22 +50,33 @@ def positional_analog_scan(mol, smarts_patt = '[cH]',
|
49 | 50 | help = "molecules input file")
|
50 | 51 | parser.add_argument("-o", metavar = "output.smi", dest = "output_fn",
|
51 | 52 | help = "analogs output file")
|
| 53 | + parser.add_argument("--rand-one", dest = "rand_one", action = "store_true", |
| 54 | + default = False, |
| 55 | + help = "output only one randomly-chosen analog \ |
| 56 | + per input molecule") |
52 | 57 | # parse CLI ----------------------------------------------
|
53 | 58 | if len(sys.argv) == 1:
|
54 | 59 | # user has no clue of what to do -> usage
|
55 | 60 | parser.print_help(sys.stderr)
|
56 | 61 | sys.exit(1)
|
57 | 62 | args = parser.parse_args()
|
58 | 63 | input_fn = args.input_fn
|
| 64 | + rand_one = args.rand_one |
59 | 65 | output = open(args.output_fn, 'w')
|
60 | 66 | count = 0
|
61 | 67 | # work ----------------------------------------------
|
62 | 68 | mol_supplier = RobustSmilesMolSupplier(input_fn)
|
63 | 69 | for name, mol in mol_supplier:
|
64 | 70 | analogs = positional_analog_scan(mol)
|
65 |
| - for i, ana_smi in enumerate(analogs): |
66 |
| - print("%s\t%s_ANA%03d" % (ana_smi, name, i), |
| 71 | + if rand_one: |
| 72 | + l = list(analogs) |
| 73 | + ana_smi = random.choice(l) |
| 74 | + print("%s\t%s_ANA%03d" % (ana_smi, name, 0), |
67 | 75 | file=output)
|
| 76 | + else: # print them all |
| 77 | + for i, ana_smi in enumerate(analogs): |
| 78 | + print("%s\t%s_ANA%03d" % (ana_smi, name, i), |
| 79 | + file=output) |
68 | 80 | count += 1
|
69 | 81 | after = time.time()
|
70 | 82 | dt = after - before
|
|
0 commit comments