- 0
- 국내산라이츄
- 조회 수 606
이거 쓰고 오늘은 아마... Biopython 할 거 같은데요?
Biopython은 네이버 블로그랑 미디움에 연재중인데, 미디움 생각보다 불편합니다.
네이버 블로그는 wrap이 안되더라도 일단 코드블록이 있는데, 미디움은 그런 거 없어요.
그래서 일차적으로 노션에 정리해 둔 코드를 다 캡처해서 붙여야 합니다.
윈도우는 클립보드행이지만 리눅스는 저장되기때문에 그걸 또 첨부해야 하는 사태가 벌어지는거죠...
1. SMILES란 무엇인가
Simplified Molecular Input Line Entry System의 약어입니다. 일단 아래 그림부터 보고 가시죠.
이건 여러분들이 진통제로 먹기도 하고, 최근 품귀현상도 빚었던(정확히는 타이레놀이) 아세트아미노펜입니다.
자매품으로는 이부프로펜이 있습니다. (대표적인 약이 부X펜)
이건 거... 닥터 프리즈너에서 나이제랑 이재준이 칼부림 났을 때 다른 의사가 와서 케타민 중독인 것 같은데 슈감마덱스 나트륨 처방해 할 때 그 슈감마덱스. (저기 카복실기가 negative charge라 양이온 좋아합니다) 아 닥터프리즈너 재밌어요. 유튭에 올라온 거 봤는데 아 진짜 꿀잼이여. 거기서 그 다른 의사 역할 했던 배우가 맛남의광장 나왔었어요. 목소리 듣고 알아봤지.
근데 왜 뜬금없이 그림이냐고요? 아악 내눈! 아이고 두야! 여러분은 OME하고 아이고 두야 하시지만 컴퓨터는 그래서 이게 뭔데요 휴먼 합니다. 그리고 지금은 한장씩 단식으로 보여주는거지만, 저게 데이터베이스 형태로 있다고 생각해보세요. 스크롤 하다가 빡칩니다.
이런 상황을 막고자(...) 분자를 문자(ASCII)로 한줄요약한 게 SMILES입니다.
CC(=O)NC1=CC=C(C=C1)O Acetaminophen
C(CSC[C@@H]1[C@@H]2[C@@H]([C@H]([C@H](O1)O[C@@H]3[C@H](O[C@@H]([C@@H]([C@H]3O)O)O[C@@H]4[C@H](O[C@@H]([C@@H]([C@H]4O)O)O[C@@H]5[C@H](O[C@@H]([C@@H]([C@H]5O)O)O[C@@H]6[C@H](O[C@@H]([C@@H]([C@H]6O)O)O[C@@H]7[C@H](O[C@@H]([C@@H]([C@H]7O)O)O[C@@H]8[C@H](O[C@@H]([C@@H]([C@H]8O)O)O[C@@H]9[C@H](O[C@H](O2)[C@@H]([C@H]9O)O)CSCCC(=O)O)CSCCC(=O)O)CSCCC(=O)O)CSCCC(=O)O)CSCCC(=O)O)CSCCC(=O)O)CSCCC(=O)O)O)O)C(=O)O Sugammadex
이런 식으로 표기합니다. 으아아 내눈 차라리 아까 그 그림을 볼래 저게 사람 입장에서는 이게 뭔 괴랄한 문자여 해도, 컴퓨터 입장에서는 화합물 구조 보는 용도로 그렇게 편할 수가 없습니다. 우리가 백날 계통명 써줘봐야 컴퓨터한테는 문자열이고, 그림은 그냥 0과 255로 구별되는 배열일 뿐이라 그림 던져주면 이놈이 그래서 뭘 말하려고 이걸 줬나... 하죠.
2. SMILES 표기법
바이오파이썬 파싱에는 for문이 국룰이고(없으면 뭔 괴랄한 결과 출력함) 양자역학에는 슈뢰딩거 방정식이 국룰이듯 으아아 SMILES에도 국룰이 되는 표기법이 있습니다.
- 원자는 대괄호로 표기한다. 이 때, charge가 없고 동위원소 표기도 하지 않는 경우(그니까 12C같은 거) 대괄호를 생략할 수있다.
- 유기화합물에서 자주 보는 붕소, 탄소, 질소, 산소, 인, 황, 할로겐(아스타틴 및 테네신 제외)은 아무 charge 없이 표기된 원자에 한해서 최외각전자에 맞게 암묵적으로 수소가 알아서 추가된다. (예: [O]=H2O, 이 경우 대괄호 생략 가능함)
- 이온이면 원소명 뒤에 +나 -를 붙이고, isotope(방사성 동위원소)인 경우 앞에 질량수를 표기한다. 그러니까 예를 들어서 컴퓨터에게 칼슘 이온에 대해 설명할 때는 [Ca+2], 우라늄 238에 대해 설명할때는 [238U]라고 쓴다. 중수소, 삼중수소도 각각 [2H], [3H]. (보통 D 혹은 T로 쓰기도 하지만 패스)
- 결합은 단일이 -, 이중이 =, 삼중이 #이다. 1.5중은 :. (확장 SMILES에서 사중결합은 $로 쓰는데 유기화합물에서 4중까지는 잘 볼 일이 없다)
- 결합하지 않는 경우 .으로 표기한다.
- 고리 화합물의 경우 spaning tree, 즉 신장 부분 그래프로 표기하게 되고 시작점과 끝점에 숫자로 라벨 표시를 한다. (예: C1CCCCC1) 방향족은 소문자. (왼쪽에 저건 사이클로핵산이고 벤젠은 c1ccccc1이다)
- 화합물 중간에 가지가 있을 경우 괄호로 표기한다.
- 기하 이성질체(Cis/trans)는 /나 \로 표기한다.
- 광학 이성질체는 중심탄소에 @나 @@로 표기한다. (골뱅이 하나가 반시계방향) 키랄성 불명이면 당연히 표기하지 않음. (L-ala: CC@@HN/D-ala: CC@HN)
- 화학 반응은 비포>>애프터 혹은 비포>촉매>애프터로 표기. (예: CC=C.O>>CC(O)C)
이런 국룰들에 의거해, 컴퓨터는 SMILES를 다시 사람이 알아먹기 편한 구조도로 그려줄 수 있습니다.
3. 왜 이렇게 표기하나요?
거기에 대해 자세히 알아보려면 그래프 이론에 대해 알아야 하는데... 이거는 또 설명하려면 글 하나는 있어야 합니다. 용어가 일단 개빡세요. 그래서 자세한건 나중에 설명하기로 하고... 꺾은선 막대 아닙니다. 여기서 말하는 그래프는 객체간의 연결 관계를 꼭지점과 변으로 표현하는 것으로, 어떤 정보를 전달하는 수단이 되기도 합니다. 버스 노선도나 지하철 노선도처럼요. 서울 지하철 노선도 보면 복잡해서 더 모를 것 같은디 버뮤다 응암지대만 하겠수
아무튼 SMILES는 위에 있는 표기법에 맞게 분자를 그래프화 한 것이라고 보면 됩니다. 원자를 꼭지점, 결합을 변으로 두고 국룰에 따라 단일, 이중, 삼중 여부와 charge를 가지는가? 등의 정보를 도식화하고, 그걸 한 줄로 적... 아냐 슈감마덱스 저거 절대 한줄 안돼...... 펍켐에서 찾았는데 세줄떴어요 저거... 참고로 가장 긴 SMILES는 250자정도 됩니다. 아니 도랏
이런 식으로 분자 구조도를 도식화해서 SMILES로 만드는데 저게 아무래도 오픈소스가 아니다보니 SMILES화하는 알고리즘이 죄다 달라서 똑같은 분자여도 SMILES가 다를 수 있습니다. InChl Key는 좀 낫긴 한데 그것도 일단 사람 입장에서는 많이 괴랄하다는 게 문제죠.
4. SMILES에서 파생된 것들
저것도 뭔가 부족했는지 확장판이 나오고 파생작도 나왔습니다. 대표적인 파생작이 SMIRKS와 SMARTS인데 전자는 화학 반응 서술 위주로 확장된 버전이고(포도당과 과당이 설탕이 될 때 전자의 이동같은 거+그래서 이거 무슨 반응임?), SMARTS는 원자 결합에 관한 쿼리가 추가된 버전입니다.
무슨 반응이 왜 중요하냐고요? 아니 그게 유기물의 화학반응이 크게 네 가지예요. 뭐가 추가되거나(첨가), 뭐가 빠지거나(제거), 뭐가 바뀌거나(치환), 분자 내부에서 뭐가 바뀌거나(전위). 화학 반응 서술 위주라는 건 중간체(전자의 이동과 친핵체/친전자체 여부)에 대해서 서술하는 것이기도 하고 저게 그래서 첨가냐 제거냐 치환이냐(SN1 SN2) 전위냐를 표시하는거죠.