如何将DSN6文件解压缩为可读格式?

时间:2019-07-11 10:48:15

标签: python pymol

我正在尝试隔离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        

1 个答案:

答案 0 :(得分:1)

从@marcin提供的link中,您可以了解数据格式,我提取了标头,但为了重塑数组,我使用了错误的值数:

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)
相关问题