2

我正在尝试隔离 dsn6 文件中的某些信息。具体来说,我想找到蛋白质中两个原子周围的电子密度。然后我想运行一个python代码来确定它们两者之间是否存在正电子密度。为了做到这一点,我相信我需要将存储在非常压缩格式的 dsn6 文件转换为我可以理解的格式。

我搜索了将 dsn6 文件(例如通过 CCP4 中的 PyMOL 或 COOT)作为模型查看的方法。但是,我不知道如何将这个解压缩文件作为文本查看。我已经尝试过,但试图弄清楚这些程序如何解压缩/读取文件完全没有成功。

这是一段 dsn6 文件当前的样子:

˘>˝‰‡&gt;™†≠>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        
4

1 回答 1

1

从@marcin 提供的链接中,您可以了解数据格式,我已经提取了标头,但是为了重塑数组,我得到了错误数量的值:

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)

这是我提取的标题:

('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)
于 2019-07-11T18:25:45.683 回答