fix-altloc

fix-altloc は、PDB ファイルから代替位置(altLoc)指示子を削除します。各原子について占有率(occupancy)に基づいて最良のコンフォーマーを選択し、重複を除去します。占有率が同点の場合はファイル内の出現順で先に現れたものを残し、保持側の列 17 をスペース 1 文字に置換します。マルチコンフォーマー入力を受け付けない下流の段階(extract / opt / tsopt など、クラスター抽出や構造最適化)の前に実行してください。

実行例

# コマンド形式
pdb2reaction fix-altloc -i INPUT.pdb [-o OUTPUT.pdb] [OPTIONS]

# 単一ファイルを処理(出力: INPUT_clean.pdb)
pdb2reaction fix-altloc -i 1abc.pdb

# 出力ファイルを指定
pdb2reaction fix-altloc -i 1abc.pdb -o 1abc_fixed.pdb

# ディレクトリを再帰的に処理
pdb2reaction fix-altloc -i ./structures -o ./cleaned --recursive

# 入力ファイルをその場で上書き(.bakバックアップを作成)
pdb2reaction fix-altloc -i ./structures --inplace --recursive

処理の流れ

  1. 入力ファイルに非空白の altLoc 文字(列 17)が含まれているかチェック。

  • altLoc が見つからず --force が設定されていない場合、ファイルをスキップ。

  1. 各 ATOM/HETATM レコードについて、altLoc フィールドを無視した識別キーを構築:

  • レコード名、原子名、残基名、チェーン ID、残基番号、挿入コード、segID

  1. 同じ識別キーを持つ原子の中から、以下の基準で選択:

  • 最高の占有率(列 55–60)

  • 同点の場合、ファイル内で最初に出現したもの

  1. 出力を書き込み:

  • 選択された原子のみを保持

  • altLoc カラム(17)を空白(スペース 1 文字)に置換

  • ANISOU レコードは保持された原子に一致するもののみフィルタリング

処理対象レコード

  • ATOM / HETATM: altLoc の選択とブランク化

  • ANISOU: 対応する ATOM/HETATM レコード(同じシリアル番号)が保持される場合のみ保持

altLoc 状態間で原子数が異なる場合の処理

異なる altLoc 状態で異なる原子が含まれている場合(例:altLoc A には N, CA, CB, CG、 altLoc B には N, CA, CB, CD がある場合)、fix-altloc は以下のように正しく処理します:

  • 重複原子(複数の altLoc で同じ残基+原子名、例:N, CA, CB): 占有率に基づいて最良のものを選択(最高値を優先、同点の場合はファイル内で最初のもの)

  • ユニーク原子(1 つの altLoc にのみ存在、例:A の CG、B の CD): すべてのユニーク原子が出力に保持されます

これにより、出力構造にはすべての altLoc 状態の原子が含まれ、 真の重複のみが一つに統合されます。

例:

入力:
 ATOM 1 N AALA A 1... 0.50 # altLoc A
 ATOM 2 CA AALA A 1... 0.50 # altLoc A
 ATOM 3 CG AALA A 1... 0.50 # altLoc A のみ
 ATOM 4 N BALA A 1... 0.40 # altLoc B
 ATOM 5 CA BALA A 1... 0.40 # altLoc B
 ATOM 6 CD BALA A 1... 0.40 # altLoc B のみ

出力:
 ATOM 1 N ALA A 1... 0.50 # A から(占有率が高い)
 ATOM 2 CA ALA A 1... 0.50 # A から(占有率が高い)
 ATOM 3 CG ALA A 1... 0.50 # 保持(Aのみ)
 ATOM 6 CD ALA A 1... 0.40 # 保持(Bのみ)

出力

  • 代替位置が削除された PDB ファイル:

  • 入力がファイル: デフォルトは <input>_clean.pdb-o/--out が省略された場合)

  • 入力がディレクトリ: デフォルトは <input>_clean/(サブパスを保持)

  • -o/--out 指定時: OUTPUT.pdb

  • --inplace 設定時: 元のファイルを上書き(バックアップは <input>.pdb.bak として保存)

Python API

プログラムから利用する場合、モジュールは以下をエクスポートします:

from pdb2reaction.io.pdb_fix import has_altloc, fix_altloc_file

# ファイルにaltLocがあるかチェック
if has_altloc(Path("input.pdb")):
 # altLocを修正
 was_processed = fix_altloc_file("input.pdb", "output.pdb", overwrite=True)

CLI オプション

オプション

説明

デフォルト

-i, --input PATH

入力 PDB ファイルまたはディレクトリ

必須

-o, --out PATH

出力ファイル(入力がファイルの場合)またはディレクトリ(入力がディレクトリの場合)

入力がファイル: <input>_clean.pdb、入力がディレクトリ: <input>_clean/

--recursive/--no-recursive

入力がディレクトリの場合、*.pdb ファイルを再帰的に処理

False

--inplace/--no-inplace

入力ファイルをその場で上書き(.bak バックアップを作成)

False

--overwrite/--no-overwrite

既存の出力ファイルの上書きを許可

False

--force/--no-force

altLoc が検出されなくてもファイルを処理

False

すべてのフラグの一覧は、生成されるコマンドリファレンスにあります。

注記

  • デフォルトでは、ファイルにaltLoc 文字が含まれていない場合(列 17 がすべて空白)、ファイルはスキップされ、出力は書き込まれません。altLoc の有無に関わらず処理を行うには --force を使用してください。

  • 原子シリアル番号は再番号付けされません(重複削除後にギャップが残る場合があります)。

  • CONECT およびその他の接続/注釈レコードは更新されません

  • 変更されるのは列 17(altLoc)のみ。座標、占有率、B 因子、電荷、挿入コード、 レコード順序は保持されます(重複削除を除く)。

  • MODEL/ENDMDL ブロックは独立して処理されます。

  • all ワークフローでは、fix-altlocadd-elem-info の後(元素フィールドが欠損していた場合)、活性部位モデル抽出の前に自動的に実行されます。まず元素記号が補完され、次に代替位置が一つに統合されます。これにより、抽出ステップはクリーンで曖昧さのない座標を受け取ります。altLoc 文字が検出された場合のみファイルが処理され、そうでない場合は元のファイルがそのまま渡されます。

関連項目

  • 症状起点で切り分ける場合は 典型エラー別レシピ を先に参照し、詳細は トラブルシューティング を確認してください。

  • extract — クリーン化された PDB を渡す下流の活性部位モデル抽出。

  • alladd-elem-info の後に fix-altloc を preflight として自動実行するエンドツーエンドワークフロー。