Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions python/local/SyntheticAccessibilityScore.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
id: 5ef62e8f-e15f-4675-9a2c-3b13c3265e43
name: Synthetic Accessibility Score
description: Calculates the Synthetic Accessibility Score using the RDKit implementation.
category: Chemistry
version: 1.0.0
serviceName: Script
serviceUri: glysade.python
executorId: Glysade.CPythonDataFxn
inputFields:
- control:
id: structureColumn
label: Select structure column
type: columnselect
filters:
- dataType: string
contentType:
- chemical/x-mdl-molfile
- chemical/x-mdl-molfile-v3000
- chemical/x-smiles
- chemical/x-daylight-smiles
- dataType: binary
contentType:
- chemical/x-mdl-molfile
- chemical/x-mdl-molfile-v3000
validationRules:
- type: required
message: Must select column of 2D structures
request:
id: structureColumn
dataType: string
selectorType: column
tags:
- color: '#50AF28'
text: chemistry
- color: '#c6fc00'
text: calcprop
updateBehavior: automatic
maximumOutputColumns: !!int 1
maximumOutputTables: !!int 0
chemistryFunction: !!bool false
script: |
from df.sascorer import calculateScore
from df.chem_helper import column_to_molecules
from df.data_transfer import (DataFunctionRequest, DataFunctionResponse,
DataType, ColumnData, string_input_field)
from rdkit.Chem import AllChem
from rdkit.Chem.MolStandardize import rdMolStandardize

from ruse.rdkit.rdkit_utils import standardize_mol


def execute(request: DataFunctionRequest) -> DataFunctionResponse:
column_id = string_input_field(request, 'structureColumn')
input_column = request.inputColumns[column_id]
mols = column_to_molecules(input_column)

# The objects used for standardizing the molecules when creating
# the scores database.
# SureChEMBL has some odd azides that the normalizer doesn't touch.
fix_azide = AllChem.ReactionFromSmarts('[N-:1]=[N:2]#[N+:3]>>[N+0:1]#[N+:2][N-:3]')
normer = rdMolStandardize.Normalizer()
uncharger = rdMolStandardize.Uncharger()
metal_disconnector = rdMolStandardize.MetalDisconnector()

scores = []
for m in mols:
if m is None:
scores.append(None)
else:
sm = standardize_mol(m, normer, uncharger, metal_disconnector,
fix_azide)
scores.append(calculateScore(sm))
output_column = ColumnData(name=f'{input_column.name} SA Score',
dataType=DataType.DOUBLE, values=scores)
response = DataFunctionResponse(outputColumns=[output_column])
return response
outputFields:
- id: column1
source: column
type: filter
name: Output SA Score column
allowedClients:
- Analyst
- WebPlayer
demoUrl:
limitBy: none
minimumChartsVersion: