Вот простая функция Python для извлечения данных из файла pdb
. Он возвращает словарь словарей словарей. Внешний словарь задается номером модели, а внутренние словари задаются номером атома в модели, а затем каждая строка считывается в словарь, задаваемый интересующими полями в соответствующей записи атома:
def parsePDB(fname):
f = open(fname)
lines = f.read().split('\n')
f.close()
modelNum = 1
multiModel = False
d = {1:{}}
for line in lines:
fields = line.split()
record = fields[0] if len(fields)> 0 else ''
if record == "MODEL":
if multiModel:
modelNum += 1
d[modelNum] = {}
else:
multiModel = True
elif record == "ATOM":
num = int(fields[1])
atomDict = {}
atomDict["atom"] = fields[2]
atomDict["amino"] = fields[3]
atomDict["chain"] = fields[4]
atomDict["residue"] = int(fields[5])
atomDict["xyz"] = (float(fields[6]),float(fields[7]),float(fields[8]))
d[modelNum][num] = atomDict
return d
Некоторый тестовый код:
d = parsePDB("2HIU.pdb")
atom = d[3][358]
print("atom",358,"of model",3,"is the",atom["atom"], "atom of a", atom["amino"],"amino acid")
print("It is located on residue", atom["residue"], "of chain",atom["chain"])
print("Its coordinates are", atom["xyz"])
Выход:
atom 358 of model 3 is the OD1 atom of a ASN amino acid
It is located on residue 3 of chain B
Its coordinates are (13.093, 5.012, -5.549)
Это из файла 2HIU.pdb. Строка из файла, используемого в тестовом коде, выглядит так:
ATOM 358 OD1 ASN B 3 6.882 2.397 -4.401 1.00 0.00 O
Вот как выглядит соответствующий самый внутренний словарь:
>>> d[3][358]
{'atom': 'OD1', 'chain': 'B', 'amino': 'ASN', 'residue': 3, 'xyz': (13.093, 5.012, -5.549)}
Следует помнить о двух осложнениях:
1) Не все эти файлы имеют несколько моделей. На самом деле, у большинства нет и отсутствуют строки, начинающиеся с MODEL
. Если len(d)
равно 1, то в файле есть только одна модель.
2) Записи HETATM
соответствуют атомам, которые сами по себе не входят в состав белка, но каким-то образом с ним связаны. Я их полностью проигнорировал. Ваши цели могут потребовать их использования, и в этом случае вам потребуется настроить код.
person
John Coleman
schedule
19.11.2015
pdb
в основном состоит из координат, либо вы используете другой тип файла, либо я не понимаю вашего вопроса. - person John Coleman   schedule 18.11.2015pdb
. Как я могу получить эти координаты? Где происхождение? - person MOON   schedule 18.11.2015