我试图使用atomselect命令删除.gro文件中蛋白质区域内的脂质。因为它是一个马提尼粗粒度文件,所以我只可以使用关键字resname作为剩余名,name或type用于珠类型(我的伪原子)。因此,没有定义默认的单字。
我试了一下命令:
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选择存储在变量中,但是没有任何效果。我怎样才能解决这个问题?
发布于 2015-09-15 14:54:58
因此,我在R中使用bio3d编写了一些代码来完成以下任务:
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的原因),您可以继续这样做:
#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实体,在最后一行中写入框向量(如果可用)。不是最漂亮的代码,但我仍然是新的,它完成了工作。
(欢迎提出改进建议:)
https://stackoverflow.com/questions/32550990
复制相似问题