Skip to content

Commit aa5765b

Browse files
committed
adding crippen contributions to Open3DAlign
1 parent 29f0f5d commit aa5765b

File tree

3 files changed

+48
-6
lines changed

3 files changed

+48
-6
lines changed

src/python/pipelines/rdkit/o3dAlign.dsd.json

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,23 @@
7171
},
7272
"@class": "org.squonk.options.OptionDescriptor"
7373
},
74+
{
75+
"modes": [
76+
"User"
77+
],
78+
"editable": true,
79+
"visible": true,
80+
"description": "Use Crippen (logP) contributions",
81+
"label": "Use Crippen (logP) contributions",
82+
"key": "arg.crippen",
83+
"minValues": 1,
84+
"maxValues": 1,
85+
"typeDescriptor": {
86+
"type": "java.lang.Boolean",
87+
"@class": "org.squonk.options.SimpleTypeDescriptor"
88+
},
89+
"@class": "org.squonk.options.OptionDescriptor"
90+
},
7491
{
7592
"@class": "org.squonk.options.OptionDescriptor",
7693
"modes": [
@@ -110,5 +127,5 @@
110127
}
111128
],
112129
"imageName": "informaticsmatters/rdkit_pipelines",
113-
"command": "python -m pipelines.rdkit.o3dAlign queryMol.data.gz -i ${PIN}input.data.gz -o ${POUT}output -of json${binding.variables.containsKey('qmolidx') ? ' --qmolidx ' + binding.variables.get('qmolidx') : ''}${binding.variables.containsKey('num') ? ' --num ' + binding.variables.get('num') : ''}${binding.variables.containsKey('threshold') ? ' --threshold ' + binding.variables.get('threshold') : ''} --meta"
130+
"command": "python -m pipelines.rdkit.o3dAlign queryMol.data.gz -i ${PIN}input.data.gz -o ${POUT}output -of json${binding.variables.containsKey('qmolidx') ? ' --qmolidx ' + binding.variables.get('qmolidx') : ''}${binding.variables.containsKey('num') ? ' --num ' + binding.variables.get('num') : ''}${binding.variables.containsKey('threshold') ? ' --threshold ' + binding.variables.get('threshold') : ''}${crippen ? ' --crippen' : ''} --meta"
114131
}

src/python/pipelines/rdkit/o3dAlign.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,13 @@
2929

3030
### start function definitions #########################################
3131

32-
def doO3Dalign(i, mol, qmol, threshold, perfect_score, writer, conformerProps=None, minEnergy=None):
33-
pyO3As = rdMolAlign.GetO3AForProbeConfs(mol, qmol)
32+
def doO3Dalign(i, mol, qmol, use_crippen, threshold, perfect_score, writer, conformerProps=None, minEnergy=None):
33+
34+
if use_crippen:
35+
pyO3As = rdMolAlign.GetCrippenO3AForProbeConfs(mol, qmol)
36+
else:
37+
pyO3As = rdMolAlign.GetO3AForProbeConfs(mol, qmol)
38+
3439
if len(pyO3As) == 0:
3540
return 0
3641

@@ -68,6 +73,7 @@ def main():
6873
parser = argparse.ArgumentParser(description='Open3DAlign with RDKit')
6974
parser.add_argument('query', help='query molfile')
7075
parser.add_argument('--qmolidx', help="Query molecule index in SD file if not the first", type=int, default=1)
76+
parser.add_argument('--crippen', action='store_true', help='Use Crippen (logP) contributions')
7177
parser.add_argument('-t', '--threshold', type=float, help='score cuttoff relative to alignment of query to itself')
7278
parser.add_argument('-n', '--num', default=0, type=int, help='number of conformers to generate, if None then input structures are assumed to already be 3D')
7379
parser.add_argument('-a', '--attempts', default=0, type=int, help='number of attempts to generate conformers')
@@ -106,7 +112,11 @@ def main():
106112
datasetMetaProps=datasetMetaProps,
107113
fieldMetaProps=fieldMetaProps)
108114

109-
pyO3A = rdMolAlign.GetO3A(qmol2, qmol)
115+
if args.crippen:
116+
pyO3A = rdMolAlign.GetCrippenO3A(qmol2, qmol)
117+
else:
118+
pyO3A = rdMolAlign.GetO3A(qmol2, qmol)
119+
110120
perfect_align = pyO3A.Align()
111121
perfect_score = pyO3A.Score()
112122
utils.log('Perfect score:', perfect_align, perfect_score, Chem.MolToSmiles(qmol, isomericSmiles=True), qmol.GetNumAtoms())
@@ -124,10 +134,10 @@ def main():
124134
mol.RemoveAllConformers()
125135
conformerProps, minEnergy = conformers.process_mol_conformers(mol, i, args.num, args.attempts, args.rmsd, None, None, 0)
126136
mol = Chem.RemoveHs(mol)
127-
count += doO3Dalign(i, mol, qmol, args.threshold, perfect_score, writer, conformerProps=conformerProps, minEnergy=minEnergy)
137+
count += doO3Dalign(i, mol, qmol, args.crippen, args.threshold, perfect_score, writer, conformerProps=conformerProps, minEnergy=minEnergy)
128138
else:
129139
mol = Chem.RemoveHs(mol)
130-
count += doO3Dalign(i, mol, qmol, args.threshold, perfect_score, writer)
140+
count += doO3Dalign(i, mol, qmol, args.crippen, args.threshold, perfect_score, writer)
131141
total += mol.GetNumConformers()
132142
except ValueError as e:
133143
errors +=1

src/python/pipelines/rdkit/o3dAlign.test

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,21 @@
4343
creates: [ 'output.data.gz',
4444
'output.metadata'],
4545

46+
],
47+
48+
// Testing o3dAlign.py using crippen contributions
49+
test_raw_o3dalign_sdf_to_json = [
50+
51+
command: '''python -m pipelines.rdkit.o3dAlign --crippen
52+
${PIN}pyrimethamine.mol -n 2 -t 10
53+
-i ${PIN}Kinase_inhibs.sdf.gz -if sdf
54+
-o ${POUT}output -of json''',
55+
56+
stderr: [ 'Molecule 36 generated [1-9]\\d* conformers' ],
57+
58+
creates: [ 'output.data.gz',
59+
'output.metadata'],
60+
4661
],
4762

4863
// Uses an invalid file - but here just to improve coverage

0 commit comments

Comments
 (0)