Computational chemistry 분야를 조금이라도 파고 들면 항상 .sdf가 붙은 데이터를 마주치게 됩니다. 제 본 전공도 아니고, 입문한 지 얼마 되지 않았지만 저와 같은 상황에 마주친 분들을 위해 알고 있는 지식을 짧게 공유드리고자 합니다.
Molecule
모든 분자는 그래프로 나타낼 수 있습니다. 예를 들어 물(H2O) 분자가 주어졌다고 해볼게요. 그러면 수소 원자 2개와 산소 원자 하나는 그래프의 node가 됩니다.
그리고 분자 내부의 bond는 edge로 나타낼 수 있습니다. 그래프의 언어로 나타내면
GH2O=G(V,E)V={H1,H2,O},E={(H1,O),(H2,O)}
라고 할 수 있습니다. (수소 1과 산소), (수소 2와 산소) 사이에 결합이 형성되어 있다는 의미이겠죠?
기본적으로 컴퓨터에서 한 분자에 대해 받는 정보는 아래와 같습니다.
- 분자 내 원자의 개수, 그리고 분자 내의 bond의 수
- 분자의 무게중심에 대한 각 원자들의 상대 좌표
- 어떤 원자들이 결합을 이루는지, 그리고 결합의 종류
- additional descriptors
SDF file
Structural Data Files 의 약어입니다. 대체로 아래 사진과 같은 모습을 하고 있습니다.
크게 SDF 파일은 헤더, node features(원자 정보), edge features(결합 정보), extra property line으로 이루어집니다. 가장 많이 쓰이는 V2000 포맷의 경우 아래 사진과 같습니다.
Chem.libtext에서 가져온 figure. url은 아래 참고문헌에 있습니다.
- Header block : 화학식 또는 어떤 database의 몇 번째 molecule인지.
- Count line block : 원자 개수 | bond 개수 | additional feature line 개수 | ... | sdf 파일이 쓰여진 버전
- Atom block : 각 원자의 상대좌표 | 원소 기호 | 부가적인 정보.
- 부가적인 정보에 대해서는 더 공부하고 추가할 예정입니다.
- Bond block : atom 1 | atom 2 | bond 종류 | stereo(cis인지 trans인지 등) | cbond topology(ring인지 등) | ...
- Properties block : Count line block에서 미리 선언한 line 수만큼 부가적인 정보를 적어놓는 구간.
예를 들면 위 분자에서 2번 원자는 탄소, 4번 원자는 산소입니다. Bond block의 3번째 줄을 보면, 이 둘이 이중결합을 하고 있다는 것을 알 수 있습니다. 따라서 2번 원자는 아래 그림의 가장 가운데 위치한 탄소입니다.
참고 문헌