Drug/Computer-Aided Drug Discovery

CADD 기초 예제 정리중 (22.10.07 갱신)

Novelism 2022. 10. 7. 00:14

 

 제가 처음 포닥 생활을 한 연구실에선 처음 들어온 사람을 위한 assignment가 있었습니다.

 일부 너무 극악한 문제도 있었지만, 입문자한테 적당한 문제를 제시하고 그것을 풀라고 하는 것은 좋은 방법이라 생각합니다. (6개월~1년간 assignment만 하다가 울면서 나간 사람들도 여럿 있지만...)

 

저도 이 분야를 시작하는 사람들에게 단순히 설명해주는 방식으로 교육하는 것보다는, 어떤 것이 필요한지 제시해주고 그것을 스스로 풀어가는 과정을 통해서 기초 지식과 해결능력을 배울수 있게 해야 한다고 생각합니다. 

그래서 CADD 및 인공지능 신약개발에 필요한 기초 지식들을 정리해보려고 합니다. 

제가 하는것이 단백질 구조기반 접근방법이다보니 그것들 위주로 작성합니다. 

 

* 1. 리눅스 운영체제 및 서버환경에서 작업하기  

1. linux 사용법 익히기

 상당수 시스템은 linux 서버로 구축되어있기에, linux 를 사용할 줄 알아야 합니다. 

2. linux 시스템의 에디터 (vi, emacs, 등) 사용법 익히기

 요즘은 굳이 이것만 쓸 필요는 없고, 더 편한 에디터를 사용해도 되지만... 저는 vi를 주로 사용합니다. 

 고쳐야 할 파일이 단지 python 코드만이 아니니까요.  

3. awk, bash 사용법 익히기

 필수는 아니지만, bash로 만들어진 코드도 여럿 있고, 알아두면 편합니다.

4. 서버 접속 방법 및 서버 환경을 이해하고 서버에서 작업하는법 익히기

 서버는 로컬 환경과는 좀 차이가 있습니다. 특히 여러 사람이 함께 사용하기에 민폐를 저지르지 않아야 합니다. 

 정말 터무니없는 짓 하는 사람들이 있습니다. 사용법 교육 안된 사람에게는 서버 계정을 발급하지 않아야 한다고 생각합니다. 서버는 접속을 종료하면 잡이 종료되기에 (백그라운드 작업 포함) nohup이나 screen이나 tmux 같은 것을 사용하면 접속 종료하여도 잡이 종료되지 않게 할 수 있습니다. 

5. 잡 스케쥴러 (PBS, slurm 등) 사용법 익히기

 학계에선 잡 스케줄러를 많이 쓰는데, 회사에선 별로 쓰지 않는 경우도 있더군요. 역시 잘못 사용하면 엄청난 민폐를 끼치게 됩니다. 자신이 제출한 잡이 제대로 돌아가고 있는지, 쓸데없이 비효율적으로 돌지 않는지, 서버 자원을 효율적으로 사용중인지, 에러가 나서 정체되고 있는지 체크를 해야합니다. 안하면 정말 심각한 자원 낭비이고 민폐입니다. 말을 해도 못알아듣는 사람이 꼭 있습니다.

 

*2. python 사용법 익히기 

 1. python 세팅 하기 (anaconda)

 cheminfomatic 툴이나 ML 툴중에 python기반으로 되어있는 것이 많기에 필수로 알아야 합니다. 

 2. 기초 코딩 (print, = )

데이터 타입 (int, float, string 등)과 자료구조 list, dict, tuple 등 이해하기

 3. slicing 사용법과 len 함수 사용법 익히기 

 4. 반복문 (for, while ) 과 조건문 (if) 사용법 익히기 break, continue, pass, exit  등 제어문(?) 익히기 

 5. 파일 읽고쓰기

 6. 함수 선언하고 사용하기

 7. class 사용법 익히기

 8. 여러 파일에 코드를 작성하고 모듈 불러오기  (import) 

 9. try, except을 활용한 에러처리 

10. python 객체에 대해 공부하기 

- 다양한 객체에 대해서, dir(객체) 를 출력하고, 객체의 method 들 알아보기 

 - __method__  같은 형태로 정의된 메소드에 대해 알아보기 

 

실전문제:

 1. txt 파일을 읽고 한 줄씩 출력하기, 줄 길이, 문자수 등 출력하기 

 

*3. cheminformatics

1. rdkit 사용법 익히기

2. openbabel 사용법 익히기 (python interface, obabel 명령어 )

3. SMILES 와 SMARTS 문법 익히기

4. atom feature, bond feature, molecular feature에 대해 생각해보기

 

실전문제: rdkit이나 openbabel 이나 기타 툴킷을 사용하는것을 추천합니다. 

1. SMILES (혹은 리스트)를 입력받아서 rule of five 체크하기

 (HBA, HBD, MW, logP, TPSA)

2. SMILES 나 구조 파일(mol, pdb 등)을 받아서 분자구조를 그리고 파일에 저장하기

 

3. SMILES에서 시작해서 단백질에 대한 docking 결과 구하기 (vina 및 기타 툴 사용)

 SMILES로부터 분자의 초기 구조를 얻고 이를 receptor 파일에 도킹합니다. 

 

4. docking 자동화 스크립트 만들기 (bash or python)

 

5. 특정 분자가 주어졌을 때, 이와 유사한 분자들 탐색하기

 5.1 substructure 기반

 5.2 fingerprint similarity 기반

 

 

 

 

*4. protein bioinformatics 

 1. 단백질 서열 정렬 NWalign 구현하기

 2. pdb 파일포멧을 이해하고 파싱하기

 3. blast, hhblits, jackhmmer 중 하나를 사용해서, homology 서열 검색하기

4. pymol 사용법 익히기 

5. 원자들 사이의 dihedral angle (phi, psi)계산하기 

 

실전문제:

 1. pdb 파일을 다운받고, uniprot의 표준서열과 비교 정렬하여 mutation 찾기, pdb의 chain정보와 ligand 정보, missing residue, missing atom 찾아서 고치기, ligand 구조 픽스하기

 2. 단백질 구조와 reference 구조 (동일한 단백질의 경우)사이의 RMSD 계산하기 (정렬전, 정렬 후 모두, Calpha만 사용)

 3. RMSD나 TMalign을 사용하여 동일한 단백질에 대해서 pdb 구조 정렬하기 (mutation 포함되어있을 수 있음)

 4. pdb파일로부터 residue 사이의 간격이 1,2,3,4,5에 대해서 Calpha 원자들 사이의 (좌표공간) 거리 histogram 그리고, 2차구조와 좌표 공간에서의 거리 사이의 관계에 대해 설명하기

 5. pdb 구조로부터 Ramachandran plot (phi, psi) 그리고, 2차 구조와의 관계 설명하기

 

6. 단백질 구조를 이용해서 contact map (Cb-Cb distance 8A 이내) 그리기

6.1 도메인이 2개 이상인 단백질에 대해서 contact map에서 inter-domain contact과 intra-domain contact 비교하기

 

 

*5. protein-ligand interaction 분석 및 예측

1. docking 프로그램(AutoDock Vina 등) 사용해보기

2. 특정 단백질에 대해서 pymol 등을 사용하여 ligand가 붙어있는 pdb파일들을 정렬하고 ligand의 위치, 구조 비교하기

3. pymol을 사용하여 binding pose 와 docking pose에서 interaction 분석하기 

 

실전문제:

 1. metalloprotein에 대하여, metal ion과 ligand각 원자(N,C,O,S 등) 사이의 거리 histogram 그리기

 2. pdb에서 단백질-리간드 결합구조를 다운받고, ligand 주변 포켓 부뉘의 residue를 식별하기

(ligand의 원자와 5A 이내에 있는 원자를 포함하는 residue)

3. 단백질과 결합된 분자에 대해서, docking 구조와 pdb실험구조 사이의 RMSD 계산하는 프로그램 작성하기 (블로그에 코드 있음) 

4. fragment based docking, docking 시뮬레이션 결과로부터 분자의 특정 fragment가 reference position보다 얼마나 떨어져있는지 확인하기 (구체적인 예시 필요.)

 

*6. 머신러닝 딥러닝 코딩

pytorch 나 tensorflow 사용법 익히기

 

 

*7. 인공지능 신약개발:

 

 

실전문제:

1. Fingerprint를 이용한 분자 특성 예측모델 만들기 

2. SMILES 기반의 분자 특성 예측, 분자 생성모델 만들기

3. Graph 기반의 분자 특성 예측모델 만들기

4. 단백질 서열기반 생성모델 및 예측모델 만들기

 

 

8. 의약화학

분자의 결합기에 대해 알아보기

(수소결합 주게, 받게, cation,anion, aromatic ring, hydrophobic 등)

바이오등전자족 알아보기

약물 타겟 단백질 종류 알아보기 (효소, 수용체, 운반 단백질 등)

inhibitor, agonist, antagonist 차이 알아보기 

IC50, ki, kd, EC50, LD50 의미 이해하기

 

실전 문제:

1. kinase hinge binder의 특징을 이해하고, 자주 사용되는 hinge binder를 5개 이상 찾기 

2. 작용기의 위치에 따라 결합력이 얼마나 달라지는지 시뮬레이션하기 (docking 등)

3. MCF (medicinal chemistry filter) 사용하여 분자 필터링하기 

4. 특정 단백질에 대해서, 그 단백질에 결합하는 분자들이 가지는 공통 fragment를 찾고, 그 fragment를 가지는 분자들을 탐색한 후, 도킹하고, 도킹된 구조에서 fragment가 제 위치에 있는지 확인하기

5. 단백질과 결합되어있는 분자에 대해서 구조의 견고화 시도해보기 

 

 

 

 일단 생각나는 것들 적었는데, 수시로 추가할 것입니다.