python-3.x - Vpython访问从pdb蛋白质文件加载的对象
问题描述
使用这个 .cif 文件:
https://files.rcsb.org/download/1MSC.cif并使用https://pypi.org/project/pdbx-mmcif/解析
使用在 python3 中使用 Vpython 7.6.1 的代码(main.py):
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 11 17:40:03 2020
@author: Pietro
"""
import sys
from pdbx.reader.PdbxReader import PdbxReader
import time
from vpython import *
scene = canvas(title='Examples of Tetrahedrons',
width=800, height=800,
center=vector(0,0,0), background=color.black)
openz = open('./1msc.cif')
pRd = PdbxReader(openz)
data = []
pRd.read(data)
block = data[0]
atomsite = block.getObj("atom_site")
i=0
while True:
atom = atomsite.getValue("group_PDB",i)
atomid = atomsite.getValue('label_atom_id',i)
if atom =='ATOM':
if atomid == 'CA':
aa = sphere(pos=vector(float(atomsite.getValue('Cartn_x',i)),float(atomsite.getValue('Cartn_y',i)),
float(atomsite.getValue('Cartn_z',i))),radius=0.5)
i +=1
else:
break
print('fine')
我可以将空间中的 CA 原子显示为球体。我缺少的是如何访问由vpython创建的单球体(我理解的对象),以便能够应用类似的东西
sphere-object-number-1.color = color.red
sphere-object-number-1.color = color.blue
显然不在我为显示所有球体而创建的同一个循环中?请善待我不是 Python 专家。
解决方案
一种标准方法是创建一个列表 atom = [],然后在创建球体时将其添加到列表中,如 atom.append(sphere(.....))。然后你用atoms[n]访问第n个球体,其中n从0到atoms.length-1。
推荐阅读
- javascript - 使用 async.series() 填充 mongoDB - MDN Web 文档
- python - 如何使用pandas从某个句子的txt文件中加载jupyter表
- javascript - 去抖动功能不起作用 - REACT 功能组件
- javascript - 具有多个可选参数的函数的控制台输出
- azure-ad-b2c - 带有身份验证/注销的 ADB2C 在 Blazor 中不起作用
- python - 如何使用字符串引用列表中对象的属性?
- reactjs - Reactjs React.memo 不记忆 const 函数
- python - 为什么 input( ) 在遇到换行符后不停止?
- c++ - c ++类/结构中的功能依赖属性
- python - ModuleNotFoundError:没有名为“flask”的模块,我做错了什么?