Drug/Computer-Aided Drug Discovery

cheminformatics 툴킷: rd_filters

Novelism 2022. 1. 18. 00:28

신약개발에서 루틴하게 사용하는 Medicinal Chemistry Filter (MCF) 들이 있습니다.

과도한 반응성을 가지는 분자나, 여러 단백질에 선택성 없이 결합하는 분자, 불안정한 분자, 약물들이 가지기 어려운 작용기 등의 패턴을 미리 정리해둔 것입니다. 복잡하지 않으면서 잘 알려진 독성 작용기 중에는 MCF로 걸리는 것들도 있습니다. 

필터들 중에서 대표적으로 많이 사용되는 것으로 PAINS가 있습니다. 

 

rd_filters 는 BMS, Dundee, Glaxo, Inpharmatica, LINT, MLSMR, PAINS, SureChEMBL의 8종의 필터를 모아둔 것입니다. 

코드 저자는 Patrick Walters 입니다. 블로그 주소: Practical Cheminformatics

하는 김에 MW, logP, TPSA, HDB, HDA 필터링도 해줍니다. 

필터들 사이에 중복되는 부분도 있고, 차이나는 부분도 있습니다. 8개 전부 쓸 경우 좀 과하다 싶을 정도로 많은 분자가 제거됩니다. 만들려는 약의 종류에 따라서 적절한 것도, 부적절한 것도 있을 수 있으니 주의해서 사용하여야 합니다. 잘 모르면 PAINS 하나만 쓸 수도 있습니다. 

 

GitHub - PatWalters/rd_filters: A script to run structural alerts using the RDKit and ChEMBL

 

GitHub - PatWalters/rd_filters: A script to run structural alerts using the RDKit and ChEMBL

A script to run structural alerts using the RDKit and ChEMBL - GitHub - PatWalters/rd_filters: A script to run structural alerts using the RDKit and ChEMBL

github.com

 

python과 rdkit이 설치되어있어야 사용할 수 있습니다. 

설치 

git clone https://github.com/PatWalters/rd_filters
cd rd_filters
python setup.py install

pip로 설치할 수도 있습니다. 

 

cd rd_filters
pip install .

 

사용법 

도움말을 출력해봅니다. 

rd_filters -h

Usage:
rd_filters filter --in INPUT_FILE --prefix PREFIX [--rules RULES_FILE_NAME] [--alerts ALERT_FILE_NAME][--np NUM_CORES]
rd_filters template --out TEMPLATE_FILE [--rules RULES_FILE_NAME]

Options:
--in INPUT_FILE input file name
--prefix PREFIX prefix for output file names
--rules RULES_FILE_NAME name of the rules JSON file
--alerts ALERTS_FILE_NAME name of the structural alerts file
--np NUM_CORES the number of cpu cores to use (default is all)
--out TEMPLATE_FILE parameter template file name
"""

다음 명령어를 실행하면, rules.json 파일이 생성됩니다. 

rd_filters template --out rules.json

rules.json 파일을 열면

{
    "HBA": [
        0,
        10
    ],
    "HBD": [
        0,
        5
    ],
    "LogP": [
        -5,
        5
    ],
    "MW": [
        0,
        500
    ],
    "Rule_BMS": false,
    "Rule_Dundee": false,
    "Rule_Glaxo": false,
    "Rule_Inpharmatica": true,
    "Rule_LINT": false,
    "Rule_MLSMR": false,
    "Rule_PAINS": false,
    "Rule_SureChEMBL": false,
    "TPSA": [
        0,
        200
    ]
}

이 있습니다. 여기서 사용할 필터를 true 로 바꿔줍니다.

 저는 주로 BMS, Glaxo, PAINS, SureChEMBL 4가지를 사용합니다.

 HBA (hydrogen bond acceptor),  HBD (hydrogen bond donor), logP, MW, TPSA 는 사용하고 싶지 않으면 "MW":[0,10000] 처럼 그냥 큰 값을 넣어주면 됩니다. 

 

test.smi 파일은 다음처럼 SMILES와 mol_id 를 공간으로 분리해서 넣어줍니다. 

CCCCC m1
c1ccccc1 m2
NCCC m3
CCC(=O)O m4
CC(=O)NC m5

실행

rd_filters filter --in test.smi --prefix out --rules rules.json --np 4

여기서 prefix 는 output 파일 이름입니다. out.smi, out.csv 두 개의 파일이 나옵니다. --np 다음은 사용할 cpu의 수를 적어줍니다. 이 옵션을 적지 않으면 컴퓨터의 모든 cpu를 사용합니다.

out.csv 파일은 필터 통과 여부가 출력됩니다. OK 는 통과한 것들입니다. 

out.smi 는 필터링된 결과입니다. 필터를 통과한 것들만 남고, 통과하지 못한 것들은 출력되지 않습니다. 

$ cat out.csv
,SMILES,NAME,FILTER,MW,LogP,HBD,HBA,TPSA
0,CCCCC,m1,OK,72.151,2.1965000000000003,0,0,0.0
1,c1ccccc1,m2,OK,78.11399999999999,1.6866,0,0,0.0
2,NCCC,m3,OK,59.111999999999995,0.3551000000000002,1,1,26.02
3,CCC(=O)O,m4,OK,74.079,0.481,1,1,37.3
4,CC(=O)NC,m5,OK,73.095,-0.24770000000000003,1,1,29.1


$ cat out.smi
CCCCC m1
c1ccccc1 m2
NCCC m3
CCC(=O)O m4
CC(=O)NC m5