Mercurial > repos > bgruening > chembl
comparison structure_pipeline.py @ 6:a57de37f12c2 draft
"planemo upload for repository https://github.com/chembl/chembl_webresource_client commit 78f2261af4e00c830ea311337d0aed9b297aad8e"
author | bgruening |
---|---|
date | Wed, 07 Oct 2020 09:31:40 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
5:1ade252ebe08 | 6:a57de37f12c2 |
---|---|
1 import argparse | |
2 | |
3 from chembl_structure_pipeline import checker, standardizer | |
4 | |
5 | |
6 def load_mols(input_file): | |
7 """ | |
8 Returns a list of strings, each a molblock | |
9 """ | |
10 with open(input_file) as f: | |
11 mols = [''.join(('\n', mol.strip())) for mol in f.read().strip().split('$$$$\n')] | |
12 return mols | |
13 | |
14 | |
15 def write_mols(mols, output_file): | |
16 """ | |
17 Writes a list of molblocks to an SDF | |
18 """ | |
19 with open(output_file, 'w') as f: | |
20 f.write('\n$$$$'.join(mols)) | |
21 | |
22 | |
23 def standardize_molblock(mol): | |
24 return standardizer.standardize_molblock(mol) | |
25 | |
26 | |
27 def get_parent_molblock(mol): | |
28 return standardizer.get_parent_molblock(mol)[0] | |
29 | |
30 | |
31 def check_molblock(mol): | |
32 issues = checker.check_molblock(mol) | |
33 max_penalty_score = str(max([issue[0] for issue in issues])) if issues else '0' | |
34 message = '; '.join([issue[1] for issue in issues]) | |
35 mol_with_issues = '\n'.join((mol, '> <MaxPenaltyScore>', max_penalty_score, '> <IssueMessages>', message)) | |
36 return mol_with_issues | |
37 | |
38 | |
39 def main(): | |
40 parser = argparse.ArgumentParser(description='Search ChEMBL database for compounds') | |
41 parser.add_argument('-i', '--input', help='SDF/MOL input') | |
42 parser.add_argument('-o', '--output', help="Standardized output") | |
43 parser.add_argument('--standardize', action='store_true', help="Standardize molblock") | |
44 parser.add_argument('--get_parent', action='store_true', help="Get parent molblock.") | |
45 parser.add_argument('--check', action='store_true', help="Check molblock") | |
46 args = parser.parse_args() | |
47 | |
48 mols = load_mols(args.input) | |
49 if args.standardize: | |
50 mols = [standardize_molblock(mol) for mol in mols] | |
51 if args.get_parent: | |
52 mols = [get_parent_molblock(mol) for mol in mols] | |
53 if args.check: | |
54 mols = [check_molblock(mol) for mol in mols] | |
55 write_mols(mols, args.output) | |
56 | |
57 | |
58 if __name__ == "__main__": | |
59 main() |