我正在尝试隔离 dsn6 文件中的某些信息。具体来说,我想找到蛋白质内两个原子周围的电子密度。然后我想运行一个 python 代码来确定它们两者之间是否存在正电子密度。为此,我认为我需要将以非常压缩的格式存储的 dsn6 文件转换为我可以理解的格式。
我搜索了各种方法来查看 dsn6 文件(例如通过 PyMOL 或 CCP4 中的 COOT)作为模型。但是,我不知道如何以文本形式查看此解压缩文件。我已经尝试过,但在尝试弄清楚这些程序如何解压缩/读取文件时完全没有成功。
这是一段 dsn6 文件目前的样子:
˘>˝‰‡>™†≠>I14>)B=*À¢<™ÅK=i§=‰≤Ñ=ê8ºO∑ææѸΩfiZ
Ω2…=wÇ=œjÖ=ÿm=◊6=â(:ÿ◊ôΩl≥æ=sËΩ,vzºËm
>dg>ÄàG>>hº&>è,>SªÂ=
我希望解压缩的 dsn6 文件看起来类似于 pdb 文件的样子。例如,
ATOM 228 OG1 THR A 58 7.843 45.672 59.760 1.00 15.56 O
ATOM 229 CG2 THR A 58 6.672 44.132 61.223 1.00 14.90 C
ATOM 230 N PRO A 59 9.292 42.373 62.754 1.00 13.16 N
ATOM 231 CA PRO A 59 9.409 40.982 63.160 1.00 13.07 C
来自link由@marcin 提供,您可以深入了解数据格式,我已经提取了 header ,但是为了 reshape 数组,我得到了错误数量的值:
import struct
import numpy as np
file_path = r'5x22_2fofc.dsn6'
with open(file_path,'rb') as f:
brick = f.read(512)
header = brick # the firs brick is our header
n = 2 # number of bytes per entry
entries = [header[i:i + n] for i in range(0, len(header), n)]
header_desc = [
'x start', # 1
'y start', # 2
'z start', # 3
'x extent', # 4
'y extent', # 5
'z extent', # 6
'x sampling rate', # 7
'y sampling rate', # 8
'z sampling rate', # 9
'Header(18) * A Cell Edge', # 10
'Header(18) * B Cell Edge', # 11
'Header(18) * C Cell Edge', # 12
'Header(18) * alfa', # 13
'Header(18) * beta', # 14
'Header(18) * gamma', # 15
'Header(19) (253 -3) /(rmax -rmin)', # 16
'(3rmax - 253rmin)/(rmax -rmin)]', # 17
'Cell Constant Scaling Factor', # 18
'100'] # 19
header_conv = [struct.unpack('>h',i)[0] for i in entries]
# we now extract the data afte the header(using an offset)
data = np.memmap(file_path,dtype='uint8',offset=512,mode='r')
for i in zip(header_desc,header_conv):
print(i)
这是我提取的 header :
('x start', -20)
('y start', -56)
('z start', -135)
('x extent', 126)
('y extent', 118)
('z extent', 272)
('x sampling rate', 170)
('y sampling rate', 96)
('z sampling rate', 266)
('Header(18) * A Cell Edge', 14912)
('Header(18) * B Cell Edge', 8345)
('Header(18) * C Cell Edge', 23783)
('Header(18) * alfa', 7200)
('Header(18) * beta', 7868)
('Header(18) * gamma', 7200)
('Header(19) (253 -3) /(rmax -rmin)', 1375)
('(3rmax - 253rmin)/(rmax -rmin)]', 80)
('Cell Constant Scaling Factor', 80)
('100', 100)
我是一名优秀的程序员,十分优秀!