Я хотел бы задать вам вопрос о наложении и вычислении RMSD нескольких файлов mmCIF одновременно. Я создаю код, который загружает все гомологическое суперсемейство, которое затем необходимо обрезать на основе определенного значения RMSD. Я хочу автоматизировать этот процесс в Python (в рамках jupyterLab).
Рассматриваемые файлы mmCIF содержат разные белки. На данный момент я попытался использовать BIO.PDB (MMCIFPparser), чтобы сначала проанализировать структуру первого файла .cif (называемого mmcif_ref), а затем список всех остальных файлов. Я хочу сравнить все остальные белковые структуры с эталонными и рассчитать RMSD. Однако проблема в том, что у них разные атомы, что я нашел в Интернете и является одним из основных критериев.
Мой текущий код не работает и выдает ошибка:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[24], line 1
----> 1 rmsd = calculate_rmsd(mmcif_list, mmcif_ref, mmcif_comp)
Cell In[21], line 7, in calculate_rmsd(mmcif_dir, mmcif_ref, mmcif_comp)
4 parser = MMCIFParser()
6 # Parse the structures from the MMCIF files
----> 7 structure1 = parser.get_structure("reference", mmcif_dir + '/' + mmcif_ref)
8 structure2 = parser.get_structure("comparison", mmcif_dir + '/' + mmcif_comp)
10 # Select the atoms for superimposition
TypeError: can only concatenate list (not "str") to list
Итак, мой вопрос: глядя на мой код, что бы вы посоветовали мне изменить, чтобы иметь возможность накладывать несколько разных белков на один эталонный белок и сохранять только те файлы cif, которые соответствуют конкретное среднеквадратичное значение.
Надеюсь, кто-нибудь сможет мне помочь. Заранее спасибо!
# Initialization
cur_dir = os.getcwd()
mmcif_dir = cur_dir + '/' + protein_name + '/input/cif_files'
output_dir = cur_dir + '/' + protein_name + '/prep'
mmcif_list = []
for file in os.listdir(mmcif_dir):
if file.endswith('.cif'):
mmcif_list.append(file)
mmcif_ref = mmcif_list[0]
mmcif_comp = mmcif_list[1:]
print(mmcif_ref)
print(mmcif_comp)
def calculate_rmsd(mmcif_dir, mmcif_ref, mmcif_comp):
parser = MMCIFParser()
# Parse the structures from the MMCIF files
structure1 = parser.get_structure("reference", mmcif_dir + '/' + mmcif_ref)
structure2 = parser.get_structure("comparison", mmcif_dir + '/' + mmcif_comp)
# Select the atoms for superimposition
atoms1 = Selection.unfold_entities(structure1, "N, CA, C")
atoms2 = Selection.unfold_entities(structure2, "N, CA, C")
# Create an instance of the Superimposer
super_imposer = Superimposer()
# Set the atoms for superimposition
super_imposer.set_atoms(atoms1, atoms2)
# Apply the transformation to the atoms of structure2
super_imposer.apply(structure2.get_atoms())
# Calculate the RMSD
rmsd = super_imposer.rms
return rmsd
rmsd = calculate_rmsd(mmcif_list, mmcif_ref, mmcif_comp)
Подробнее здесь: https://stackoverflow.com/questions/765 ... for-pdb-fi