예제 #1
0
 def test_repr(self):
     self.assertEqual(
         UnitCell(3, 4, 5).__repr__(),
         "UnitCell(3.0, 4.0, 5.0, 90.0, 90.0, 90.0)")
     self.assertEqual(
         UnitCell(3, 4, 5, 89.015, 120, 112).__repr__(),
         "UnitCell(3.0, 4.0, 5.0, 89.015, 120.0, 112.0)")
예제 #2
0
    def test_wrap(self):
        cell = UnitCell(3, 4, 5)

        wrapped = cell.wrap((1, 5, -5.5))

        self.assertEqual(wrapped[0], 1.0)
        self.assertEqual(wrapped[1], 1.0)
        self.assertEqual(wrapped[2], -0.5)
예제 #3
0
    def test_shape(self):
        cell = UnitCell(3, 4, 5)
        self.assertEqual(cell.shape, CellShape.Orthorhombic)
        cell.shape = CellShape.Triclinic
        self.assertEqual(cell.shape, CellShape.Triclinic)

        cell = UnitCell(3, 4, 5, 100, 120, 130)
        self.assertEqual(cell.shape, CellShape.Triclinic)
예제 #4
0
    def test_copy(self):
        cell = UnitCell(3, 4, 5)
        cloned = copy.copy(cell)

        self.assertEqual(cell.lengths, (3.0, 4.0, 5.0))
        self.assertEqual(cloned.lengths, (3.0, 4.0, 5.0))

        cell.lengths = 10, 11, 12
        self.assertEqual(cell.lengths, (10.0, 11.0, 12.0))
        self.assertEqual(cloned.lengths, (3.0, 4.0, 5.0))
예제 #5
0
    def test_angles(self):
        cell = UnitCell(3, 4, 5)
        self.assertEqual(cell.angles, (90.0, 90.0, 90.0))

        self.assertEqual(cell.shape, CellShape.Orthorhombic)
        with remove_warnings:
            with self.assertRaises(ChemfilesError):
                cell.angles = [80, 89, 110]

        cell.shape = CellShape.Triclinic
        cell.angles = [80, 89, 110]
        self.assertEqual(cell.angles, (80.0, 89.0, 110.0))
예제 #6
0
 def test_matrix(self):
     cell = UnitCell(3, 4, 5)
     expected = [(3, 0, 0), (0, 4, 0), (0, 0, 5)]
     matrix = cell.matrix
     for i in range(3):
         for j in range(3):
             self.assertAlmostEqual(matrix[i][j], expected[i][j])
예제 #7
0
    def test_distance(self):
        frame = Frame()
        frame.cell = UnitCell(3.0, 4.0, 5.0)
        frame.add_atom(Atom(""), (0, 0, 0))
        frame.add_atom(Atom(""), (1, 2, 6))

        self.assertEqual(frame.distance(0, 1), math.sqrt(6.0))
예제 #8
0
    def test_cell(self):
        frame = Frame()
        frame.cell = UnitCell(1, 2, 4)
        self.assertEqual(frame.cell.lengths, (1, 2, 4))
        self.assertEqual(frame.cell.angles, (90, 90, 90))
        self.assertEqual(frame.cell.shape, CellShape.Orthorhombic)

        frame.cell.lengths = (3, 4, 5)
        self.assertEqual(frame.cell.lengths, (3, 4, 5))
예제 #9
0
    def test_read(self):
        trajectory = Trajectory(get_data_path("water.xyz"))

        self.assertEqual(trajectory.nsteps, 100)
        self.assertEqual(trajectory.path, get_data_path("water.xyz"))

        frame = trajectory.read()
        self.assertEqual(len(frame.atoms), 297)

        self.assertEqual(frame.positions[0].all(),
                         np.array([0.417219, 8.303366, 11.737172]).all())
        self.assertEqual(frame.positions[124].all(),
                         np.array([5.099554, -0.045104, 14.153846]).all())

        self.assertEqual(len(frame.atoms), 297)
        self.assertEqual(frame.atoms[0].name, "O")
        self.assertEqual(frame.atoms[1].name, "H")

        trajectory.set_cell(UnitCell(30, 30, 30))
        frame = trajectory.read_step(41)
        self.assertEqual(frame.cell.lengths, (30.0, 30.0, 30.0))

        self.assertEqual(frame.positions[0].all(),
                         np.array([0.761277, 8.106125, 10.622949]).all())
        self.assertEqual(frame.positions[124].all(),
                         np.array([5.13242, 0.079862, 14.194161]).all())

        self.assertEqual(len(frame.atoms), 297)
        self.assertEqual(frame.topology.bonds_count(), 0)

        frame.guess_bonds()
        self.assertEqual(frame.topology.bonds_count(), 181)
        self.assertEqual(frame.topology.angles_count(), 87)

        topology = Topology()
        for i in range(297):
            topology.atoms.append(Atom("Cs"))

        trajectory.set_topology(topology)
        frame = trajectory.read_step(10)
        self.assertEqual(frame.atoms[10].name, "Cs")

        trajectory.set_topology(get_data_path("topology.xyz"), "XYZ")
        frame = trajectory.read()
        self.assertEqual(frame.atoms[100].name, "Rd")
예제 #10
0
#!/usr/bin/env python
import numpy as np
from chemfiles import Topology, Frame, Atom, UnitCell, Trajectory

topology = Topology()
topology.atoms.append(Atom("H"))
topology.atoms.append(Atom("O"))
topology.atoms.append(Atom("H"))

topology.add_bond(0, 1)
topology.add_bond(2, 1)

frame = Frame()
frame.resize(3)
frame.topology = topology

frame.positions[0, :] = np.array([1.0, 0.0, 0.0])
frame.positions[1, :] = np.array([0.0, 0.0, 0.0])
frame.positions[2, :] = np.array([0.0, 1.0, 0.0])

frame.add_atom(Atom("O"), [5.0, 0.0, 0.0])
frame.add_atom(Atom("C"), [6.0, 0.0, 0.0])
frame.add_atom(Atom("O"), [7.0, 0.0, 0.0])
frame.add_bond(3, 4)
frame.add_bond(4, 5)

frame.cell = UnitCell(10, 10, 10)

with Trajectory("water-co2.pdb", 'w') as trajectory:
    trajectory.write(frame)
예제 #11
0
 def test_volume(self):
     cell = UnitCell(3, 4, 5)
     self.assertEqual(cell.volume, 3 * 4 * 5)
예제 #12
0
 def test_lengths(self):
     cell = UnitCell(3, 4, 5)
     self.assertEqual(cell.lengths, (3.0, 4.0, 5.0))
     cell.lengths = [10, 11, 12]
     self.assertEqual(cell.lengths, (10.0, 11.0, 12.0))
예제 #13
0
name = "nt12.opt"
a = 24.2

# Read the frame
frame = Trajectory(name + ".xyz").read()

# Set the topology
topo = Trajectory("topology.pdb").read()
frame.set_topology(topo.topology())

# Get the positions
positions = frame.positions()

# Set the cell
cell = UnitCell(a, a, 42.43, 90, 90, 120)
frame.set_cell(cell)

# Select all except hydroxyl groups
#selection = Selection("atoms: name Al or name Obr or name Si")
selection = Selection(
    "atoms: name Hext or name Oext or name Al or name Obr or name Si")
framework = selection.evaluate(frame)

with open(name + ".cris", 'w') as cris:
    with open(name + ".slice.xyz", 'w') as slic:
        with open(name + ".framework.xyz", 'w') as out:
            cris.write(" .false.\n")
            cris.write('{} {} 8.486 90.0 90.0 120.0\n'.format(a, a))
            cris.write('{}\n'.format(len(framework) / 5))