Как определить систему координат в pymol?

Я хочу знать вектор положения некоторых атомов в пимоле. Я могу рассчитать расстояния, но вместо этого мне нужен вектор положения. Как я могу получить атомную координату относительно некоторой определенной системы координат?

Предположим, что есть два атома. Как я могу получить координаты (x, y, z) этих двух атомов? Должна быть система отсчета для вычисления этих координат по отношению к ней. Что это за система отсчета в пимоле?


person MOON    schedule 17.11.2015    source источник
comment
Какой формат файла? Поскольку файл pdb в основном состоит из координат, либо вы используете другой тип файла, либо я не понимаю вашего вопроса.   -  person John Coleman    schedule 18.11.2015
comment
Я совершенно новичок в пимоле. Формат файла pdb. Как я могу получить эти координаты? Где происхождение?   -  person MOON    schedule 18.11.2015
comment
Я мало что делал с pymol, кроме того, что использовал его несколько раз для создания крутых картинок, но прошлой весной я сделал проект для курса по созданию карт контактов белков из файлов pdb и обнаружил, что довольно легко написать функцию Python для извлечения нужные мне данные из файлов. См. описание: en.wikipedia.org/wiki/Protein_Data_Bank_(file_format) . С другой стороны, я был бы удивлен, если бы в pymol не было встроенных инструментов для синтаксического анализа, поэтому я бы немного больше изучил справку, прежде чем анализировать ее самостоятельно.   -  person John Coleman    schedule 18.11.2015
comment
Если у меня будет время, я постараюсь завтра написать что-нибудь о том, как я извлекал данные с помощью Python. Координаты в ангстремах и (я думаю) относительно центра тяжести молекулы. Когда я занимался этим прошлой весной, мне очень помогло следующее: rcsb.org/pdb/101/static101.do?p=education_discussion/   -  person John Coleman    schedule 18.11.2015


Ответы (1)


Вот простая функция 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