File: test_pdb_extra.py

package info (click to toggle)
python-ase 3.21.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 13,936 kB
  • sloc: python: 122,428; xml: 946; makefile: 111; javascript: 47
file content (64 lines) | stat: -rw-r--r-- 2,374 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""PDB parser

Test dealing with files that are not fully
compliant with the specification.

"""

import numpy as np
import pytest

from ase import io

# Some things tested:
# Giant cell that would fail for split()
# No element field
# positions with no spaces

test_pdb = """REMARK   Not a real pdb file
CRYST1   30.00015000.00015000.000  90.00  90.00  90.00 P1
ATOM      1  C     1 X   1       1.000   8.000  12.000  0.00  0.00           C    
ATOM      1  C     1 X   1       2.000   6.000   4.000  0.00  0.00
ATOM      1  SI1 SIO     1       2.153  14.096   3.635  1.00  0.00      SIO 
ATOM      1    O   1     1       3.846   5.672   1.323  0.40 38.51            0
ATOM      1  C1'   T A   1      -2.481   5.354   0.000
ATOM      1 SIO  SIO     1     -11.713-201.677   9.060************      SIO2Si  
"""


@pytest.mark.filterwarnings('ignore:Length of occupancy array')
def test_pdb_read():
    """Read information from pdb file."""
    with open('pdb_test.pdb', 'w') as pdb_file:
        pdb_file.write(test_pdb)
    expected_cell = [[30.0, 0.0, 0.0],
                     [0.0, 15000.0, 0.0],
                     [0.0, 0.0, 15000.0]]
    expected_positions = [[1.000, 8.000, 12.000],
                          [2.000, 6.000, 4.000],
                          [2.153, 14.096, 3.635],
                          [3.846, 5.672, 1.323],
                          [-2.481, 5.354, 0.000],
                          [-11.713, -201.677, 9.060]]
    expected_species = ['C', 'C', 'Si', 'O', 'C', 'Si']

    pdb_atoms = io.read('pdb_test.pdb')
    assert len(pdb_atoms) == 6
    assert np.allclose(pdb_atoms.cell, expected_cell)
    assert np.allclose(pdb_atoms.positions, expected_positions)
    assert pdb_atoms.get_chemical_symbols() == expected_species
    assert 'occupancy' not in pdb_atoms.arrays


def test_pdb_read_with_arrays():
    """Read information from pdb file. Includes occupancy."""
    with open('pdb_test_2.pdb', 'w') as pdb_file:
        # only write lines with occupancy and bfactor
        pdb_file.write('\n'.join(test_pdb.splitlines()[:6]))
    expected_occupancy = [0.0, 0.0, 1.0, 0.4]
    expected_bfactor = [0.0, 0.0, 0.0, 38.51]

    pdb_atoms = io.read('pdb_test_2.pdb')
    assert len(pdb_atoms) == 4
    assert np.allclose(pdb_atoms.arrays['occupancy'], expected_occupancy)
    assert np.allclose(pdb_atoms.arrays['bfactor'], expected_bfactor)