Rowan: 클라우드 네이티브 분자 모델링 및 약물 설계 워크플로우
개요
Rowan은 분자 시뮬레이션, 의약 화학 및 구조 기반 설계를 위한 클라우드 네이티브 워크플로우 플랫폼입니다. Python API는 소분자 모델링, 물성 예측, 도킹, 분자 동역학 및 AI 구조 워크플로우를 위한 통합 인터페이스를 제공합니다.
로컬 HPC 인프라, GPU 프로비저닝 또는 여러 개별 모델링 도구를 유지 관리하지 않고, 프로그래밍 방식으로 의약 화학 또는 분자 설계 워크플로우를 실행하려면 Rowan을 사용하세요. Rowan은 모든 인프라, 결과 관리 및 계산 확장을 처리합니다.
Rowan을 사용해야 하는 경우
Rowan이 적합한 경우:
- 양자 화학, 반경험적 방법 또는 신경망 포텐셜
- 배치 물성 예측 (pKa, 서술자, 투과성, 용해도)
- 컨포머 및 토토머 앙상블 생성
- 도킹 워크플로우 (단일 리간드, 유사체 시리즈, 포즈 정제)
- 단백질-리간드 공접힘 및 MSA 생성
- 다단계 화학 파이프라인 (예: 토토머 검색 → 도킹 → 포즈 분석)
- 일관되고 확장 가능한 인프라가 필요한 배치 의약 화학 캠페인
Rowan이 적합하지 않은 경우:
- 단순 분자 입출력 (RDKit 직접 사용)
- Post-HF ab initio 양자 화학 또는 상대론적 계산
빠른 시작
uv pip install rowan-python
import rowan
rowan.api_key = "your_api_key_here" # 또는 ROWAN_API_KEY 환경 변수 설정
# 서술자는 SMILES 문자열이 아닌 3D 분자가 필요합니다.
mol = rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O")
wf = rowan.submit_descriptors_workflow(mol, name="aspirin")
result = wf.result()
print(result.descriptors["MW"]) # 180.042 — 정확한 질량
print(result.descriptors["SLogP"]) # 1.31
print(result.descriptors["TopoPSA"]) # 63.6 — 위상학적 PSA
오류 없이 출력되면 올바르게 설정된 것입니다. 이 값과 예제는 rowan-python 3.1.13에 대해 검증되었습니다.
설치
uv pip install rowan-python
# 또는: pip install rowan-python
사용자 및 웹훅 관리
인증
환경 변수를 통해 API 키를 설정합니다 (권장):
export ROWAN_API_KEY="your_api_key_here"
또는 Python에서 직접 설정:
import rowan
rowan.api_key = "your_api_key_here"
인증 확인:
import rowan
user = rowan.whoami() # 인증된 경우 사용자 정보 반환
print(f"사용자: {user.email}")
print(f"사용 가능한 크레딧: {user.credits_available_string()}")
분자 입력 형식
Rowan은 다음 형식의 분자를 허용합니다:
- SMILES (권장):
"CCO","c1ccccc1O" - SMARTS 패턴 (일부 워크플로우): 부분 구조 매칭을 위한 SMARTS의 하위 집합
- InChI (API 버전에서 지원하는 경우):
"InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3"
API는 분자 입력을 검증하고, 구문 분석할 수 없는 SMILES 또는 워크플로우와 호환되지 않는 입력 유형에 대해 ValueError를 발생시킵니다. 재현성을 위해 항상 정규화된 SMILES를 사용하세요.
SMILES 문자열 대 분자 객체
rowan-python 3.1.13에서는 워크플로우에 따라 허용되는 입력 유형이 다릅니다. 다음 일반 워크플로우만 문자열을 허용합니다: pKa, 컨포머 검색, 막 투과성, ADMET, LogP, macropKa, 용해도 및 포즈 분석 MD. 대부분의 다른 워크플로우(서술자, 토토머 검색, 도킹, 유사체 도킹, BDE, NMR, Fukui 포함)는 rowan.Molecule.from_smiles(smiles) 또는 RDKit Mol/RWMol이 필요합니다. 잘못된 유형은 제출 전에 ValueError를 발생시킵니다.
팁: 제출 전에 RDKit을 사용하여 SMILES를 검증하세요:
from rdkit import Chem
smiles = "CCO"
mol = Chem.MolFromSmiles(smiles)
if mol is None:
raise ValueError(f"잘못된 SMILES: {smiles}")
핵심 사용 패턴
대부분의 Rowan 작업은 동일한 3단계 패턴을 따릅니다:
- 제출 워크플로우
- 완료 대기 (선택적 스트리밍 포함)
- 편의 속성을 사용하여 타입이 지정된 결과 검색
import rowan
# 1. 제출 — 특정 워크플로우 함수 사용 (일반 submit_workflow 아님)
workflow = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O"),
name="aspirin descriptors",
)
# 2. & 3. 대기 및 검색
result = workflow.result() # 완료될 때까지 차단 (기본값: wait=True, poll_interval=5)
print(result.data) # 원시 딕셔너리
print(result.descriptors["MW"]) # 180.042 정확한 질량; result.molecular_weight 속성 없음
장기 실행 워크플로우의 경우 스트리밍을 사용하세요:
for partial in workflow.stream_result(poll_interval=5):
print(f"완료: {partial.complete}") # 부울, 백분율 아님
print(partial.data)
result() 대 stream_result()
| 패턴 | 사용 시기 | 소요 시간 |
|---|---|---|
result() | 전체 결과를 기다릴 수 있는 경우 | 일반적으로 <5분 |
stream_result() | 진행 상황 피드백을 원하거나 조기 부분 결과가 필요한 경우 | >5분 또는 대화형 사용 |
지침: 서술자, pKa에는 result()를 사용하세요. 컨포머 검색, 도킹, 공접힘에는 stream_result()를 사용하세요.
결과 작업
Rowan의 API에는 편의 속성이 있는 타입이 지정된 워크플로우 결과 객체가 포함됩니다.
타입 속성 및 .data 사용
결과에는 두 가지 액세스 패턴이 있습니다:
- 편의 속성 (권장 우선):
result.descriptors,result.best_pose,result.scores. 결과 클래스는 다릅니다: 컨포머 검색은get_energies()및get_conformers()메서드를 사용합니다. - 원시 폴백:
result.data— API의 원시 딕셔너리
예:
result = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CCO"),
name="ethanol",
).result()
# 편의 속성 (모든 서술자 반환):
print(result.descriptors["MW"]) # 정확한/단일 동위원소 질량
print(result.descriptors["SLogP"])
print(result.descriptors["TopoPSA"]) # 일반적인 위상학적 PSA
# 원시 데이터 폴백:
print(result.data["descriptors"])
참고: DescriptorsResult에는 molecular_weight 속성이 없습니다. MW는 정확한/단일 동위원소 질량이며 평균 분자량이 아닙니다. TPSA는 3D 하전 표면 서술자입니다. 약물 유사성 규칙에 사용되는 일반적인 위상학적 극성 표면적에는 TopoPSA를 사용하세요.
캐시 무효화
일부 결과 속성은 지연 로드됩니다 (예: 컨포머 형상, 단백질 구조). 새로 고치려면:
result.clear_cache()
new_structures = result.get_conformers() # ConformerSearchResult의 경우 다시 가져옴
프로젝트, 폴더 및 구성
중요한 캠페인의 경우 프로젝트와 폴더를 사용하여 작업을 체계적으로 유지하세요.
프로젝트
import rowan
# 프로젝트 생성
project = rowan.create_project(name="CDK2 리드 최적화")
rowan.set_project("CDK2 리드 최적화")
# 이후 모든 워크플로우는 이 프로젝트에 속함
wf = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CCO"), name="테스트 화합물"
)
# retrieve_project는 UUID를 받습니다. list_workflows는 parent_uuid로 범위를 지정합니다.
project = rowan.retrieve_project(project.uuid)
workflows = rowan.list_workflows(parent_uuid=project.uuid, size=50)
폴더
# 계층적 폴더 구조 생성
folder = rowan.create_folder(name="docking/batch_1/screening")
wf = rowan.submit_docking_workflow(
# ... 도킹 매개변수 ...
folder=folder,
name="compound_001",
)
# 폴더의 워크플로우 나열
results = rowan.list_workflows(parent_uuid=folder.uuid)
워크플로우 결정 트리
pKa vs MacropKa
미시적 pKa를 사용해야 하는 경우:
- 단일 이온화 그룹의 pKa가 필요한 경우
- 산-염기 전이 및 양성자화 열역학에 관심이 있는 경우
- 분자에 이온화 부위가 1~2개 있는 경우
- 속도가 중요한 경우 (더 빠르고, 더 적은 크레딧)
MacropKa를 사용해야 하는 경우:
- 생리학적 관련 범위 (예: 0–14)에서 pH 의존적 거동이 필요한 경우
- pH에 따른 집계 전하 및 양성자화 상태 집단을 원하는 경우
- 분자에 결합된 양성자화를 가진 여러 이온화 그룹이 있는 경우
- 다른 pH에서 수용해도와 같은 다운스트림 속성이 필요한 경우
결정 예:
페놀 (pKa ~10): 미시적 pKa 사용
아민 (pKa ~9–10): 미시적 pKa 사용
다중 이온화 약물 (N, O, 산성 그룹): MacropKa 사용
GI pH 전반의 ADME 평가: MacropKa 사용
컨포머 검색 대 토토머 검색
컨포머 검색을 사용해야 하는 경우:
- 단일 토토머 형태가 알려진 경우
- 도킹, MD 또는 SAR 분석을 위한 다양한 3D 앙상블이 필요한 경우
- 회전 가능한 결합이 화학 공간을 지배하는 경우
토토머 검색을 사용해야 하는 경우:
- 토토머 평형이 불확실한 경우 (예: 헤테로사이클, 케토-에놀 시스템)
- 모든 관련 양성자화 이성질체를 모델링해야 하는 경우
- 다운스트림 계산 (도킹, pKa)이 토토머 형태에 의존하는 경우
결합 워크플로우:
# 1단계: 최상의 토토머 찾기
taut_wf = rowan.submit_tautomer_search_workflow(
initial_molecule=rowan.Molecule.from_smiles("O=c1[nH]ccnc1"),
name="imidazole tautomers",
)
best_taut = taut_wf.result().best_tautomer
# 2단계: 최상의 토토머에서 컨포머 생성
conf_wf = rowan.submit_conformer_search_workflow(
initial_molecule=best_taut,
name="imidazole conformers",
)
도킹 대 유사체 도킹 대 공접힘
| 워크플로우 | 사용 시기 | 입력 | 출력 |
|---|---|---|---|
| 도킹 | 단일 리간드, 알려진 포켓 | 단백질 + SMILES + 포켓 좌표 | 포즈, 점수, dG |
| 유사체 도킹 | 5–100개 이상의 관련 화합물 | 단백질 + SMILES 목록 + 참조 리간드 | 모든 포즈, 참조 정렬 |
| 단백질-리간드 공접힘 | 서열 + 리간드, 결정 구조 없음 | 단백질 서열 + SMILES | ML 예측 결합 복합체 |
단백질 유틸리티
단백질 업로드
# 로컬 PDB 파일에서
protein = rowan.upload_protein(
name="egfr_kinase_domain",
file_path="egfr_kinase.pdb",
)
# PDB 데이터베이스에서
protein_from_pdb = rowan.create_protein_from_pdb_id(
name="CDK2 (1M17)",
code="1M17",
)
# 이전에 업로드된 단백질 검색
protein = rowan.retrieve_protein("protein-uuid")
# 모든 단백질 나열
my_proteins = rowan.list_proteins()
단백질 준비 지침
- 파일 형식: PDB, mmCIF (Rowan 자동 감지)
- 물 분자: Rowan은 일반적으로 관련 물을 유지합니다. 원하는 경우 업로드 전에 벌크 물을 제거하세요.
- 헤테로원자: 보조 인자, 이온 및 결합 리간드는 일반적으로 보존됩니다. 업로드 전에 원하지 않는 헤테로원자를 제거하세요.
- 다중 사슬 단백질: 완벽하게 지원됩니다.
- 해상도: NMR 구조, 상동성 모델 및 극저온 전자 현미경과 함께 작동합니다. 품질은 다운스트림 예측에 중요합니다.
- 검증: Rowan은 PDB 구문을 검증합니다. 심각하게 잘못된 파일은 거부될 수 있습니다.
워크플로우 카탈로그
9가지 일반 워크플로우 범주(서술자, 미시적 pKa, MacropKa, 컨포머 검색, 토토머 검색, 도킹, 유사체 도킹, MSA 생성 및 단백질-리간드 공접힘) 각각에 대한 제출 코드 및 결과 형태와 함께 지원되는 모든 워크플로우 유형(핵심 모델링, 구조 기반 설계, 고급 계산 화학, 반응 화학, 고급 물성, 결합 자유 에너지, 서열 및 구조 생물학)의 전체 목록은 references/workflow_catalog.md에 있습니다.
배치 제출, 웹훅 및 비동기 작업
배치 제출/폴링/검색, 비차단 실행-확인 패턴, 웹훅 설정, 비밀 생성 및 교체, 페이로드 및 서명 확인(FastAPI 핸들러 포함) 및 웹훅 모범 사례는 references/batch_and_webhooks.md에 있습니다.
액세스, 가격 및 크레딧
무료 티어 한도, 워크플로우당 크레딧 소비 및 일반적인 비용 추정치는 references/access_and_pricing.md에 있습니다.
작업 예제 및 문제 해결
프로젝트 설정, 토토머, 유사체 시리즈 전반의 pKa, 결과 수집 및 도킹 후속 조치를 포함한 전체 리드 최적화 캠페인은 references/end_to_end_example.md에 있습니다.
일반적인 오류와 수정 방법 및 디버깅 팁은 references/troubleshooting.md에 있습니다.
권장 사용 패턴
- 존재하는 경우 저수준 조립보다 Rowan 네이티브 워크플로우 선호
- 중요한 캠페인(>5개 워크플로우)에는 프로젝트 및 폴더 사용
result()를 사용하여 완료될 때까지 차단 (기본값:wait=True, poll_interval=5)- 먼저 타입이 지정된 결과 속성을 사용하고, 매핑되지 않은 필드에 대해
.data로 폴백 - 화합물 라이브러리 또는 유사체 시리즈에는 배치 제출 사용
- 다단계 화학 캠페인을 위해 워크플로우 연결:
pKa → macropKa → 투과성(ADME 평가)토토머 검색 → 도킹 → 포즈 분석 MD(포즈 정제)MSA 생성 → 단백질-리간드 공접힘(AI 구조 예측)
- 장기 실행 캠페인(>50개 워크플로우) 또는 비동기 파이프라인에는 웹훅 사용
- 대규모 컨포머/도킹 검색에 대한 대화형 피드백에는 스트리밍 사용
요약
분자 설계 작업에 클라우드 실행이 필요하고, 특히 소분자 모델링, 단백질, 도킹, ADME 예측 및 ML 구조 생성 전반에 걸친 통합 API와 일관된 결과 처리를 원할 때 Rowan을 사용하세요.
Rowan은 단순한 원격 화학 엔진이 아닌 분자 설계 워크플로우 플랫폼입니다. 인프라 확장, 결과 지속성 및 다단계 파이프라인 오케스트레이션을 처리하므로 사용자는 과학에 집중할 수 있습니다.