GROMACS中结构文件数据精度问题详解 在GROMACS中,结构文件是模拟模拟的基础,常用的结构文件格式包括pdb、gro和g96这三种。每种格式都有其特点和精度问题。 pdb格式全称为Protein Data Bank,顾名思义在蛋白数据库中用的非常多,记录的信息也非常全面,当然一般在GROMACS中用到无非是晶胞参数、残基名称、原子名、坐标、元素名、温度因子等。pdb格式的坐标单位为Å,位宽为8,因此总共x、y、z坐标占24位长度,默认采用的是8.3f的格式,因此精度达到0.001 Å。 gro格式全称为GROMOS87,记录的信息要比pdb格式少很多,一般我们关注的与上面提到的类似。gro格式的坐标单位为nm,默认输出位宽为8,因此总共x、y、z坐标占24位长度,默认采用的是8.3f的格式,因此精度达到0.001 nm,比pdb要低。 g96格式全称为GROMOS-96,记录信息和gro差不多,结构和轨迹有区别。g96格式的坐标单位为nm,输出位宽为15,因此总共占据45位长度,采用%15.9lf的格式,因此精度达到了1E-9 nm。 GROMACS处理这几类格式坐标的区别:GROMACS分别是如何来读写这几类坐标的呢?对于pdb格式,GROMACS的读取策略是固定位每8位宽一组,连续读取三组然后得到xyz坐标,最后转换成nm。对于gro格式,GROMACS的读取方式是首先根据第一行坐标的小数点间隔位宽来确定读取的gro中的数据精度数多少。 在实际操作中,如果自己编程创建的坐标非常的大,某个维度数值非小数部分超过了4位数[默认8-(1+3)=4],比如12459.236或者有负数的情况下-1212.123,该数字的总位宽就超过了8,所以默认的%8.3f%8.3f%8.3f就不再正确,固定格式发生了错位。如果这一行xyz三个坐标不是全部都是三位小数和相同位宽,且位于首行,那么gmx就会报错:The spacing of the decimal points in file xxx.gro is not consistent for x, y and z。 针对以上罕见错误[数据值太大引起的],如果自己编程,最好是采用变精度方式来进行写坐标,比如坐标格式控制的那部分用%15.6lf%15.6lf%15.6lf,这样不仅位宽提升,数据实际精度变成了1E-6 nm, 且非小数部分的数值也达到了8位数[15-(1+6)=8],注意一定要保证每一行的坐标都用相同格式!!GROMACS所有写gro操作均采用%8.3f%8.3f%8.3f,因此数据值过大会使得固定格式错位。 因此,在使用GROMACS处理结构文件时,需要严格注意精度问题,避免错误的出现。同时,在编程创建结构文件时,也需要注意精度问题,避免固定格式的错位。