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)")
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)
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)
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))
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))
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])
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))
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))
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")
#!/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)
def test_volume(self): cell = UnitCell(3, 4, 5) self.assertEqual(cell.volume, 3 * 4 * 5)
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))
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))