私は PDB ファイルを解析しており、(chain,[coordinate]) 形式の XYZ 座標と共にチェーン名のリストを持っています。私は多くの座標を持っていますが、3 つの異なるチェーンしかありません。同じチェーンのすべての座標を 1 つのリストにまとめて、チェーン = [座標]、[座標]、[座標] などを取得したいと考えています。biopython のドキュメントを見ましたが、必要な座標を取得する方法を正確に理解するのに苦労したため、手動で座標を抽出することにしました。これは私がこれまでに持っているコードです:
pdb_file = open('1adq.pdb')
import numpy as np
chainids = []
chainpos= []
for line in pdb_file:
if line.startswith("ATOM"):
# get x, y, z coordinates for Cas
chainid =str((line[20:22].strip()))
atomid = str((line[16:20].strip()))
pdbresn= int(line[23:26].strip())
x = float(line[30:38].strip())
y = float(line[38:46].strip())
z = float(line[46:54].strip())
if line[12:16].strip() == "CA":
chainpos.append((chainid,[x, y, z]))
chainids.append(chainid)
allchainids = np.unique(chainids)
print(chainpos)
そしていくつかの出力:
[('A', [1.719, -25.217, 8.694]), ('A', [2.934, -21.997, 7.084]), ('A', [5.35, -19.779, 8.986])
私の理想的な出力は次のようになります。
A = ([1.719, -25.217, 8.694]), ([2.934, -21.997, 7.084]),(5.35, -19.779,8.986])...
ありがとう!
Here is a section of PDB file:
ATOM 1 N PRO A 238 1.285 -26.367 7.882 0.00 25.30 N
ATOM 2 CA PRO A 238 1.719 -25.217 8.694 0.00 25.30 C
ATOM 3 C PRO A 238 2.599 -24.279 7.885 0.00 25.30 C
ATOM 4 O PRO A 238 3.573 -24.716 7.275 0.00 25.30 O
ATOM 5 CB PRO A 238 2.469 -25.791 9.881 0.00 25.30 C
A は列 4 のチェーン名です。チェーン名がアプリオリに何であるかはわかりませんが、1 行ずつ解析しているので、前述の形式でチェーン名を座標に貼り付けています。ここで、すべての座標の前に「A」を付けて、それらを「A」という 1 つのリストに貼り付けたいと思います。常に「A」であるとは限らないため、「A」でハードコードすることはできません。「L」と「H」もありますが、理解のこぶを乗り越えれば取れると思います。