예제 #1
0
    def write_frame(self, frame, subset=None, **kwargs):
        '''
        Write a frame into the opened XTC file

        Parameters
        ----------
        frame : Frame
        subset : list of int, optional
        kwargs : dict
            Ignored
        '''
        import chemfiles

        if subset is None:
            positions = frame.positions
        else:
            positions = frame.positions[subset]

        cf_frame = chemfiles.Frame()
        cf_frame.resize(len(positions))
        cf_frame.positions[:] = positions * 10
        cf_frame.cell = chemfiles.UnitCell(frame.cell.lengths * 10,
                                           frame.cell.angles)
        cf_frame.step = frame.step

        self._xtc.write(cf_frame)
예제 #2
0
 def _timestep_to_chemfiles(self, ts):
     """
     Convert a Timestep to a chemfiles Frame
     """
     # TODO: CONVERTERS?
     frame = chemfiles.Frame()
     frame.resize(ts.n_atoms)
     if ts.has_positions:
         frame.positions[:] = ts.positions[:]
     if ts.has_velocities:
         frame.add_velocities()
         frame.velocities[:] = ts.velocities[:]
     frame.cell = chemfiles.UnitCell(*ts.dimensions)
     return frame
예제 #3
0
    def test_cell(self):
        frame = chemfiles.Frame()

        system = ChemfilesSystem(frame)
        self.assertTrue(np.all(system.cell() == 0))

        frame.cell = chemfiles.UnitCell((3, 3, 3))
        self.assertTrue(np.allclose(system.cell(), np.diag([3, 3, 3])))

        frame.cell = chemfiles.UnitCell((3, 3, 3), (60, 60, 60))
        expected = [
            [3.0, 0.0, 0.0],
            [1.5, 2.59807621, 0.0],
            [1.5, 0.8660254, 2.44948974],
        ]
        self.assertTrue(np.allclose(system.cell(), expected))
예제 #4
0
    def test_system_implementation(self):
        frame = chemfiles.Frame()
        frame.add_atom(chemfiles.Atom("C"), (0, 0, 0))
        frame.add_atom(chemfiles.Atom("CH3"), (0, 1, 0))
        frame.add_atom(chemfiles.Atom("X"), (0, 2, 0))
        frame.add_atom(chemfiles.Atom("Zn1", "Zn"), (0, 3, 0))

        system = ChemfilesSystem(frame)

        self.assertEqual(system.size(), 4)
        self.assertTrue(np.all(system.species() == [6, 120, 121, 30]))
        positions = [
            (0, 0, 0),
            (0, 1, 0),
            (0, 2, 0),
            (0, 3, 0),
        ]
        self.assertTrue(np.all(system.positions() == positions))
예제 #5
0
    def test_compute(self):
        frame = chemfiles.Frame()
        frame.add_atom(chemfiles.Atom("C"), (0, 0, 0))
        frame.add_atom(chemfiles.Atom("C"), (0, 1, 0))
        frame.add_atom(chemfiles.Atom("C"), (0, 2, 0))
        frame.add_atom(chemfiles.Atom("C"), (0, 3, 0))

        calculator = DummyCalculator(cutoff=3.4, delta=1, name="", gradients=False)

        with self.assertRaises(RascalError) as cm:
            calculator.compute(frame, use_native_system=False)

        self.assertEqual(
            cm.exception.__cause__.args[0],
            "chemfiles systems can only be used with 'use_native_system=True'",
        )

        # use_native_system=True should work fine
        descriptor = calculator.compute(frame, use_native_system=True)
        self.assertEqual(descriptor.values.shape, (4, 2))