29
29
30
30
### start function definitions #########################################
31
31
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
+
34
39
if len (pyO3As ) == 0 :
35
40
return 0
36
41
@@ -68,6 +73,7 @@ def main():
68
73
parser = argparse .ArgumentParser (description = 'Open3DAlign with RDKit' )
69
74
parser .add_argument ('query' , help = 'query molfile' )
70
75
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' )
71
77
parser .add_argument ('-t' , '--threshold' , type = float , help = 'score cuttoff relative to alignment of query to itself' )
72
78
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' )
73
79
parser .add_argument ('-a' , '--attempts' , default = 0 , type = int , help = 'number of attempts to generate conformers' )
@@ -106,7 +112,11 @@ def main():
106
112
datasetMetaProps = datasetMetaProps ,
107
113
fieldMetaProps = fieldMetaProps )
108
114
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
+
110
120
perfect_align = pyO3A .Align ()
111
121
perfect_score = pyO3A .Score ()
112
122
utils .log ('Perfect score:' , perfect_align , perfect_score , Chem .MolToSmiles (qmol , isomericSmiles = True ), qmol .GetNumAtoms ())
@@ -124,10 +134,10 @@ def main():
124
134
mol .RemoveAllConformers ()
125
135
conformerProps , minEnergy = conformers .process_mol_conformers (mol , i , args .num , args .attempts , args .rmsd , None , None , 0 )
126
136
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 )
128
138
else :
129
139
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 )
131
141
total += mol .GetNumConformers ()
132
142
except ValueError as e :
133
143
errors += 1
0 commit comments