mcpField
P
pdb

pdb

github.com/adaptyvbioデータ・データベース17246 回インストール20 週間前に更新
リポジトリ

pdb について

PDB Database Accessは、RCSB PDBの構造を扱う研究者やタンパク質設計者向けのスキルです。HTTPリクエストとBioPythonを使った構造の取得、検索、準備、基本分析を扱います。

主な機能

  1. 01PDBおよびmmCIF構造の取得
  2. 02テキストまたは配列類似性による検索
  3. 03チェーン選択と結合領域の切り出し
  4. 04チェーン情報と残基数の確認
  5. 05チェーン間インターフェース残基の特定

活用シーン

  1. 01PDB IDによる構造の取得
  2. 02タンパク質配列に関連する構造の検索
  3. 03バインダー設計向けの標的構造の準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/adaptyvbio/protein-design-skills --skill pdb

インストール後、Claude Code で/pdbを入力して読み込まれたか確認します。

詳細

PDB データベースへのアクセス

注:このスキルは RCSB PDB Web API を直接使用します。Modal のデプロイは不要です。すべての操作は HTTP リクエストを介してローカルで実行されます。

構造の取得

PDB ID を指定する場合
# Download PDB file
curl -o 1alu.pdb "https://files.rcsb.org/download/1ALU.pdb"

# Download mmCIF
curl -o 1alu.cif "https://files.rcsb.org/download/1ALU.cif"
Python を使用する場合
from Bio.PDB import PDBList

pdbl = PDBList()
pdbl.retrieve_pdb_file("1ABC", pdir="structures/", file_format="pdb")
RCSB API を使用する場合
import requests

def fetch_pdb(pdb_id: str, format: str = "pdb") -> str:
    """Fetch structure from RCSB PDB."""
    url = f"https://files.rcsb.org/download/{pdb_id}.{format}"
    response = requests.get(url)
    response.raise_for_status()
    return response.text

def fetch_fasta(pdb_id: str) -> str:
    """Fetch sequence in FASTA format."""
    url = f"https://www.rcsb.org/fasta/entry/{pdb_id}"
    return requests.get(url).text

# Example usage
pdb_content = fetch_pdb("1ALU")
with open("1ALU.pdb", "w") as f:
    f.write(pdb_content)

構造の準備

チェーンの選択
from Bio.PDB import PDBParser, PDBIO, Select

class ChainSelect(Select):
    def __init__(self, chain_id):
        self.chain_id = chain_id

    def accept_chain(self, chain):
        return chain.id == self.chain_id

# Extract chain A
parser = PDBParser()
structure = parser.get_structure("protein", "1abc.pdb")
io = PDBIO()
io.set_structure(structure)
io.save("chain_A.pdb", ChainSelect("A"))
結合領域へのトリミング
def trim_around_residues(pdb_file, center_residues, buffer=10.0):
    """Trim structure to region around specified residues."""
    parser = PDBParser()
    structure = parser.get_structure("protein", pdb_file)

    # Get center coordinates
    center_coords = []
    for res in structure.get_residues():
        if res.id[1] in center_residues:
            center_coords.extend([a.coord for a in res.get_atoms()])

    center = np.mean(center_coords, axis=0)

    # Keep residues within buffer
    class RegionSelect(Select):
        def accept_residue(self, res):
            for atom in res.get_atoms():
                if np.linalg.norm(atom.coord - center) < buffer:
                    return True
            return False

    io = PDBIO()
    io.set_structure(structure)
    io.save("trimmed.pdb", RegionSelect())

PDB の検索

RCSB Search API
import requests

query = {
    "query": {
        "type": "terminal",
        "service": "full_text",
        "parameters": {
            "value": "EGFR kinase domain"
        }
    },
    "return_type": "entry"
}

response = requests.post(
    "https://search.rcsb.org/rcsbsearch/v2/query",
    json=query
)
results = response.json()
配列類似性で検索する場合
query = {
    "query": {
        "type": "terminal",
        "service": "sequence",
        "parameters": {
            "value": "MKTAYIAKQRQISFVK...",
            "evalue_cutoff": 1e-10,
            "identity_cutoff": 0.9
        }
    }
}

構造の解析

チェーン情報の取得
def get_structure_info(pdb_file):
    parser = PDBParser(QUIET=True)
    structure = parser.get_structure("protein", pdb_file)

    info = {
        "chains": [],
        "total_residues": 0
    }

    for model in structure:
        for chain in model:
            residues = list(chain.get_residues())
            info["chains"].append({
                "id": chain.id,
                "length": len(residues),
                "first_res": residues[0].id[1],
                "last_res": residues[-1].id[1]
            })
            info["total_residues"] += len(residues)

    return info
インターフェース残基の検索
def find_interface_residues(pdb_file, chain_a, chain_b, distance=4.0):
    """Find residues at interface between two chains."""
    parser = PDBParser(QUIET=True)
    structure = parser.get_structure("complex", pdb_file)

    interface_a = set()
    interface_b = set()

    for res_a in structure[0][chain_a].get_residues():
        for res_b in structure[0][chain_b].get_residues():
            for atom_a in res_a.get_atoms():
                for atom_b in res_b.get_atoms():
                    if atom_a - atom_b < distance:
                        interface_a.add(res_a.id[1])
                        interface_b.add(res_b.id[1])

    return interface_a, interface_b

バインダー設計でよく行う作業

標的の準備チェックリスト
  1. 構造をダウンロードします:curl -o target.pdb "https://files.rcsb.org/download/XXXX.pdb"
  2. 標的チェーンを特定します
  3. 必要に応じて水分子とリガンドを削除します
  4. 結合領域とバッファーを残してトリミングします
  5. 潜在的なホットスポットを特定します
  6. 必要に応じて番号を振り直します

トラブルシューティング

構造が見つからない場合:PDB ID の形式(4 文字)を確認してください 複数のモデルがある場合:設計には最初のモデルを選択してください 残基が欠落している場合:構造にギャップがないか確認してください


次の手順:設計には、構造とともにboltzgen(推奨)またはrfdiffusionを使用してください。

コメント