首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vmd原子选择命令删除残馀

使用vmd原子选择命令删除残馀
EN

Stack Overflow用户
提问于 2015-09-13 15:00:17
回答 1查看 1.7K关注 0票数 0

我试图使用atomselect命令删除.gro文件中蛋白质区域内的脂质。因为它是一个马提尼粗粒度文件,所以我只可以使用关键字resname作为剩余名,nametype用于珠类型(我的伪原子)。因此,没有定义默认的单字。

我试了一下命令:

代码语言:javascript
复制
atomselect 0 "all not resname DPPE DOPE POPE POPG within 1 of resname ALA ARG ASN ASP CYS GLN GLU GLY HIS ILE LEU LYS MET PHE PRO SER THR TRP TYR VAL"

并得到以下错误:

(错误)选择过早终止 (错误)语法错误原子选择:不能解析选择文本:所有未重新命名的DPPE毒品、教皇POPG都在重新命名ALA ARG ASN ASP CYS GLN GLU GLY的1以内,他的ILE LEU LYS遇到了PHE PRO SER TRP TRP TYR VAL

所以很明显我的语法不太正确。我尝试了几个不同的版本,并将resname选择存储在变量中,但是没有任何效果。我怎样才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2015-09-15 14:54:58

因此,我在R中使用bio3d编写了一些代码来完成以下任务:

代码语言:javascript
复制
library(bio3d)
library (gdata)

#read pdb input
insane <- read.pdb("nice.pdb")


#vector with residuenumbers to delete 
select_resi <- c(1000, 1136, 1026, 1252, 1449, 970, 1067, 1298, 
                 1287, 1357, 1051, 993, 1241, 1282, 1341, 1344, 
                 1048, 1154, 1205, 1274, 1465, 1322, 1418, 992)

select_resi <- sort(select_resi)

#select residues to delete
selected_resi <-  atom.select(insane, resno = select_resi)


#delete selected residues
insane$atom <- insane$atom[-selected_resi$atom,]
insane$calpha <- insane$calpha[-selected_resi$atom]
insane$xyz <- insane$xyz[-selected_resi$xyz]

#renumber residuenumbers and convert to gromacs type pdb
printstuff <- convert.pdb(insane, type = "gromacs", 
                          renumber = TRUE, first.resno = 1, first.eleno = 1)

#write pdb file
write.pdb(pdb = printstuff, file = "memb2R.pdb", xyz = printstuff$xyz, 
          type = printstuff$atom$type, resno = printstuff$atom$resno, 
          resid = printstuff$atom$resid, eleno = printstuff$atom$eleno, 
          elety = printstuff$atom$elety, end = TRUE, verbose = TRUE)

如果之后需要.gro格式(这就是加载gdata的原因),您可以继续这样做:

代码语言:javascript
复制
#preparing xyz to match with .gro format
xyz_vector <- insane$xyz/10 

pos_x <- c()
pos_y <- c()
pos_z <- c()

#sorting loop for x, y, z coordinates
for (i in seq(along=xyz_vector)) {
  pos_x <- c(pos_x, xyz_vector[i])
  xyz_vector <- xyz_vector[-i]
    pos_y <- c(pos_y, xyz_vector[i])
    xyz_vector <- xyz_vector[-i]
      pos_z <- c(pos_z, xyz_vector[i])
      print(i)
}

#delete redundant entries
pos_x <- pos_x[1:length(xyz_vector)]
pos_y <- pos_y[1:length(xyz_vector)]
pos_z <- pos_z[1:length(xyz_vector)]

#prepare other passing vectors for .gro vector
resi_numb <- insane$atom$resno
resi_name <- insane$atom$resid
atom_name <- insane$atom$elety
atom_numb <- insane$atom$eleno


#prepare .gro vector
gro_vec <- sprintf ("%5d%-5s%5s%5d%8.3f%8.3f%8.3f",

                      #for velocity fields add %8.4f%8.4f%8.4f to string and create 3 velocity vectors similar to pos_x etc.

                      resi_numb, resi_name, atom_name, atom_numb,
                      pos_x, pos_y, pos_z)

#transform gro_vec in matrix
gro_matrix <- as.matrix(gro_vec, byrow = TRUE)


#write output
write.fwf (gro_matrix, file = "yourfile.txt", sep = "")

记住在.txt中重命名.gro文件。在文件的第一行中写入systemname,在第二行中写入atom实体,在最后一行中写入框向量(如果可用)。不是最漂亮的代码,但我仍然是新的,它完成了工作。

(欢迎提出改进建议:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32550990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档