PyMOL 명령어 정리: 논문·발표용 이미지 스크립트까지 한 번에
지난 PyMOL 설치·마우스 조작 글에 대한 반응이 예상보다 컸습니다. 설치는 끝냈고 화면도 어느 정도 돌려봤는데, 그다음이 막막하다는 분들이 많았습니다. 커맨드 라인에 뭘 쳐야 할지 몰라 결국 캡처 화면만 들고 보고서를 쓰거나, 어디서 복사해온 스크립트를 그대로 붙여 넣었다가 에러 메시지만 보고 포기하는 경우입니다.
이번 글은 그 다음 단계, 즉 실제로 자주 쓰는 명령어와 논문·발표용 이미지를 뽑아내는 스크립트를 정리합니다. 다만 인터넷에 떠도는 PyMOL 스크립트 중에는 예전 버전 문법이거나, 애초에 존재하지 않는 세팅 이름이 섞여 있는 경우가 적지 않습니다. 그래서 이 글에 실린 모든 명령어는 PyMOL 공식 문서와 PyMOL Wiki를 기준으로 하나씩 확인한 뒤 실었습니다. 확인 과정에서 실제로 동작하지 않는 표현 3곳을 발견해 수정했고, 어떤 부분이 왜 틀렸는지는 별도로 짚어두었습니다.
1. 화면 제어 및 구조 불러오기
커맨드 라인은 화면 하단에 있습니다. 아래 명령어들은 세션을 시작할 때 거의 매번 쓰게 되는 기본기입니다.
- PDB 구조 불러오기:
fetch 1tup— 인터넷에서 해당 PDB ID의 구조를 바로 내려받아 표시합니다. - 배경색 변경:
bg_color white— 논문·발표 자료는 흰 배경이 기본입니다. - 화면 정렬/초기화:
orient— 구조 전체가 화면에 꽉 차도록 각도와 확대 비율을 자동으로 맞춥니다.zoom은 현재 각도를 유지한 채 확대 비율만 조정한다는 점에서 차이가 있습니다. - 특정 부위로 확대:
zoom resi 150— 150번 잔기를 중심으로 확대합니다. 도킹 부위나 특정 변이 위치를 자세히 볼 때 유용합니다.
2. 표시 방식과 컬러링
- 리본형(2차 구조 강조):
show cartoon - 막대형(원자·결합 강조):
show sticks - 공간 채움형:
show spheres - 표면형:
show surface - 표시 끄기:
hide lines— 불러온 직후 기본으로 표시되는 선(line) 형태를 끌 때 씁니다. - 색상 지정:
color cyan, chain A— 특정 체인이나 선택 영역에만 색을 입힙니다.
리간드나 특정 분자를 원소별 고유색(탄소=회색, 산소=빨강, 질소=파랑 등 CPK 배색)으로 칠하고 싶을 때는 color atomtype이라는 명령어를 쓰는 경우를 종종 보는데, 이는 실제로 존재하지 않는 명령어입니다. PyMOL Wiki의 컬러링 문서에 따르면 이 기능은 util.cba* 계열 명령으로 처리합니다. 예를 들어 util.cbay ligand는 탄소를 노란색으로 두고 산소·질소 등 나머지 원소는 CPK 배색을 적용합니다. 탄소색은 그대로 두고 나머지 원소만 CPK로 칠하고 싶다면 util.cnc ligand를 씁니다.
3. 선택(Selection)과 수소결합 표시
- 용매 제거:
remove solvent— 구조 파일에 포함된 물 분자를 제거해 화면을 정리합니다. - 리간드만 선택:
select ligand, organic - 특정 부위 근처 선택:
select pocket, byres (all within 4.0 of ligand)— 리간드 기준 4.0Å 이내 잔기를 통째로(byres) 선택합니다.
수소결합 표시는 distance 명령에 mode=2 옵션을 주는 방식입니다.
distance hbonds, chain A, chain B, 3.2, mode=2
이 mode=2는 PyMOL 공식 문서에서 극성 접촉(polar contact)만 표시하도록 정의한 옵션이며, 내부적으로는 Kabsch와 Sander가 1983년 발표한 DSSP 이차구조 판정 알고리즘의 수소결합 판정 기준을 근사해서 사용합니다. 다만 PyMOL 개발진이 직접 밝힌 바에 따르면 이 기능은 정식으로 검증된 수소결합 판정 도구가 아니라 참고용 근사치이며, 특히 구조 파일에 수소 원자가 없으면 판정 정확도가 떨어질 수 있습니다. 결정구조 대부분은 수소가 생략되어 있으므로, 정밀하게 보고 싶다면 h_add 명령으로 수소를 먼저 추가한 뒤 거리 측정을 하는 것이 안전합니다.
4. 논문 제출용 고화질 렌더링 스크립트
흰 배경에 그림자 효과를 살려 고해상도로 저장하는 세팅입니다. 아래 값들은 모두 PyMOL 공식 세팅 문서에 등재된 실제 파라미터입니다.
# 1. 배경을 흰색으로
bg_color white
# 2. 물 분자 제거
remove solvent
# 3. 레이트레이싱 그림자/광원 설정
set ray_trace_mode, 1
set ray_shadows, 1
set ambient, 0.4
set direct, 0.5
set reflect, 0.2
# 4. PNG 저장 시 배경을 투명하게 하려면 opaque_background를 끈다
set ray_opaque_background, off
# 5. 고해상도 렌더링 후 저장
ray 3000, 2400
png my_protein_figure.png, dpi=300
배경 투명화는 transparent_viewport라는 세팅으로 안내되는 경우가 있는데, 이 이름의 세팅은 PyMOL에 존재하지 않습니다. 공식 문서 기준으로 배경 투명 PNG 저장은 ray_opaque_background를 off로 두는 방식이 맞습니다. 위 스크립트에는 이 부분을 수정해 반영했습니다.
5. 단백질-리간드 결합 부위 연출 스크립트
# 1. 단백질 전체는 회색 카툰으로
hide everything
show cartoon
color gray80, all
# 2. 리간드를 노란 스틱으로, 원소별 CPK 배색 적용
select my_ligand, organic
show sticks, my_ligand
util.cbay my_ligand
# 3. 리간드 주변 4.0Å 이내 잔기 선택 및 표시
select pocket, byres (all within 4.0 of my_ligand)
show sticks, pocket
util.cnc pocket
# 4. 수소결합 표시 (수소가 있는 구조에서 더 정확)
distance hbonds, my_ligand, pocket, 3.2, mode=2
set dash_width, 3.0
set dash_gap, 0.25
color atomtype을 util.cbay / util.cnc로 교체한 것 외에, color dash_yellow처럼 색상 이름 앞에 dash_가 붙는 표현도 정식 색상명이 아니어서 제거했습니다. 수소결합 dash 선의 색은 distance 객체를 만든 뒤 color yellow, hbonds 형태로 별도 지정하면 됩니다.
6. 정전기 표면(Electrostatic Surface) 시각화 — 사용 시 주의할 점
PyMOL은 GUI의 Action(A) → generate → vacuum electrostatics → protein contact potential (local) 메뉴로 표면 전하를 색으로 보여주는 기능을 제공합니다. 다만 이 경로는 GUI 메뉴 조작이며, 커맨드 라인 명령어 한 줄로 대체되는 기능이 아닙니다. "action -> electrostatic -> vacuum electrostatics"처럼 커맨드 라인 명령인 것처럼 안내되는 자료들이 있는데, 이는 메뉴 경로를 명령어로 오인한 표현입니다.
더 중요한 점은 따로 있습니다. PyMOL Wiki는 이 기능을 "quick-and-dirty", 즉 대략적인 정성적 참고용이라고 명시하고 있으며, 실제 논문에 싣는 정전기 표면 분석에는 적합하지 않다고 설명합니다. 전하를 단순 근접 거리 기준으로 뭉뚱그려 계산하는 방식이기 때문입니다. 발표 자료에서 "대략 이쪽이 양전하, 이쪽이 음전하"라는 느낌을 보여주는 용도로는 쓸 수 있지만, 논문 투고용 정전기 표면이 필요하다면 APBS(Adaptive Poisson-Boltzmann Solver) 플러그인을 별도로 설치해 계산하는 것이 정석입니다.
# 표면 생성 (전하 계산은 GUI의 Action > generate > vacuum electrostatics 메뉴 이용)
show surface
# 표면 투명도를 낮춰 내부 카툰 구조가 비치게 하기
set transparency, 0.3, all
cavity_search라는 세팅도 자주 함께 인용되지만 이 역시 실재하지 않는 이름입니다. 표면의 내부 빈 공간(cavity) 표시 방식을 조절하려면 set surface_cavity_mode, 1을 쓰거나, 작은 고립 영역을 제거하는 cavity_cull 값을 조정합니다.
명령어 요약표
| 목적 | 명령어 | 비고 |
|---|---|---|
| 구조 불러오기 | fetch 1tup | PDB ID 기준 |
| 화면 정렬 | orient / zoom | orient는 각도까지 재정렬 |
| 원소별 배색 | util.cbay / util.cnc | color atomtype은 존재하지 않음 |
| 수소결합 표시 | distance, mode=2 | 수소 추가 후 사용 권장 |
| 배경 투명 PNG | ray_opaque_background | transparent_viewport는 존재하지 않음 |
| 정전기 표면 | GUI: Action→generate→vacuum electrostatics | 정성적 참고용, 논문용은 APBS 필요 |
| 캐비티 표시 | surface_cavity_mode / cavity_cull | cavity_search는 존재하지 않음 |
FAQ
Q1. mode=2로 표시된 수소결합을 그대로 논문에 인용해도 되나요?
권장하지 않습니다. PyMOL의 mode=2는 DSSP 판정 기준을 근사한 참고용 표시이며, 개발진 스스로도 엄밀한 검증 도구가 아니라고 밝히고 있습니다. 논문에 수소결합을 명시하려면 별도의 구조 분석 도구나 문헌 근거로 교차 확인하는 편이 안전합니다.
Q2. 정전기 표면을 GUI로 만들었는데 색이 이상하게 나옵니다.
vacuum electrostatics 기능은 원자 전하를 단순 근접 거리로 뭉뚱그려 계산하는 정성적 방식이라 구조에 따라 직관과 다른 색 분포가 나올 수 있습니다. 결과가 이상하다기보다는 애초에 정밀한 계산이 아니라는 점을 감안해야 하며, 정확한 분포가 필요하면 APBS 플러그인을 쓰는 것이 맞습니다.
Q3. 인터넷에서 복사한 PyMOL 스크립트가 에러를 냅니다. 왜 그런가요?
버전에 따라 일부 명령어의 문법이 바뀌었거나, 애초에 존재하지 않는 세팅 이름이 섞여 배포되는 경우가 있습니다. 에러가 나는 줄은 PyMOL 공식 문서(pymol.org/dokuwiki)나 PyMOL Wiki에서 명령어명을 직접 검색해 실재 여부부터 확인하는 것이 가장 빠릅니다.
참고문헌
- PyMOL 공식 문서, "command:distance" — mode=2(극성 접촉 표시) 옵션 정의: https://pymol.org/dokuwiki/doku.php?id=command:distance
- PyMOL Wiki, "Displaying Biochemical Properties" — mode=2의 DSSP(Kabsch & Sander, 1983) 기반 수소결합 판정 원리 및 한계: https://pymolwiki.org/index.php/Displaying_Biochemical_Properties
- PyMOL Wiki, "Advanced Coloring" — util.cba*, util.cnc 원소별 배색 명령어 설명: https://pymolwiki.org/index.php/Advanced_Coloring
- PyMOL 공식 문서, "setting:ray" — ray_shadows, ray_trace_mode 등 렌더링 세팅 목록: https://pymol.org/dokuwiki/doku.php?id=setting:ray
- PyMOL Wiki, "Png" — 배경 투명 PNG 저장 시 ray_opaque_background 세팅 사용법: https://wiki.pymol.org/index.php/Png
- PyMOL Wiki, "Protein contact potential" — vacuum electrostatics 기능의 정성적 성격과 APBS 대비 한계: https://pymolwiki.org/Protein_contact_potential
- PyMOL Wiki, "Surface cavity mode" — surface_cavity_mode 세팅을 통한 캐비티 표시 조절: https://wiki.pymol.org/index.php/Surface_cavity_mode
댓글
댓글 쓰기