Exemple #1
0
    def create_structure(self):
        import vtk  # REQUIRES VTK < 9.0!!!
        # molecule
        mol = vtk.vtkMolecule()

        # hardcoded structure CO2
        a1 = mol.AppendAtom(6, 0.0, 0.0, 0.0)
        a2 = mol.AppendAtom(8, 0.0, 0.0, -1.0)
        a3 = mol.AppendAtom(8, 0.0, 0.0, 1.0)
        mol.AppendBond(a2, a1, 1)
        mol.AppendBond(a3, a1, 1)

        # hardcoded cell, cubic 10x10x10
        vector = vtk.vtkMatrix3x3()
        vector.DeepCopy([10, 0, 0, 0, 10, 0, 0, 0, 10])
        mol.SetLattice(vector)

        # Change lattice origin so molecule is in the centre
        mol.SetLatticeOrigin(vtk.vtkVector3d(-5.0, -5.0, -5.0))

        # Create a mapper and actor
        mapper = vtk.vtkMoleculeMapper()
        mapper.SetInputData(mol)

        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        self.fbo.addActors([actor])

        self.fbo.update()
Exemple #2
0
    def transform_scalars(self, dataset):
        """Reconstruct atomic positions"""

        atomic_numbers = [6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1]

        positions = [
            -0.9853672723415879, 0.9853672723415879, 0.0, -1.765101316934915,
            1.765101316934915, 0.0, -1.346036726076389, -0.3606694537348005,
            0.0, -2.411173239186462, -0.6460719222515465, 0.0,
            -0.3606694537348005, -1.346036726076389, 0.0, -0.6460719222515465,
            -2.411173239186462, 0.0, 0.9853672723415879, -0.9853672723415879,
            0.0, 1.765101316934915, -1.765101316934915, 0.0, 1.346036726076389,
            0.3606694537348005, 0.0, 2.411173239186462, 0.6460719222515465,
            0.0, 0.3606694537348005, 1.346036726076389, 0.0,
            0.6460719222515465, 2.411173239186462, 0.0
        ]

        bonds = [
            0, 1, 0, 2, 0, 10, 2, 3, 2, 4, 4, 5, 4, 6, 6, 7, 6, 8, 8, 9, 8, 10,
            10, 11
        ]

        bonds_order = [1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1]

        molecule = vtk.vtkMolecule()
        for i in range(len(atomic_numbers)):
            pos = np.array(positions[i * 3:i * 3 + 3])
            # pos *= 30
            pos += [150, 150, 40]
            molecule.AppendAtom(atomic_numbers[i], pos[0], pos[1], pos[2])

        for i in range(len(bonds_order)):
            molecule.AppendBond(bonds[i * 2], bonds[i * 2 + 1], bonds_order[i])

        return {"molecule": molecule}
Exemple #3
0
    def testCreation(self):
        "Testing if molecules can be created/modified."
        mol = vtk.vtkMolecule()

        self.assertEqual(mol.GetNumberOfAtoms(), 0, "Number of atoms incorrect")
        self.assertEqual(mol.GetNumberOfBonds(), 0, "Number of atoms incorrect")
        h1 = mol.AppendAtom(1, 0.0, 0.0, -0.5)
        h2 = mol.AppendAtom(1, 0.0, 0.0,  0.5)
        b = mol.AppendBond(h1, h2, 1)
        self.assertEqual(mol.GetNumberOfAtoms(), 2, "Number of atoms incorrect")
        self.assertEqual(mol.GetNumberOfBonds(), 1, "Number of atoms incorrect")
Exemple #4
0
    def testCreation(self):
        "Testing if molecules can be created/modified."
        mol = vtk.vtkMolecule()

        self.assertEqual(mol.GetNumberOfAtoms(), 0, "Number of atoms incorrect")
        self.assertEqual(mol.GetNumberOfBonds(), 0, "Number of atoms incorrect")
        h1 = mol.AppendAtom(1, 0.0, 0.0, -0.5)
        h2 = mol.AppendAtom(1, 0.0, 0.0,  0.5)
        b = mol.AppendBond(h1, h2, 1)
        self.assertEqual(mol.GetNumberOfAtoms(), 2, "Number of atoms incorrect")
        self.assertEqual(mol.GetNumberOfBonds(), 1, "Number of atoms incorrect")
    def transform_scalars(self, dataset):
        """Reconstruct atomic positions"""

        atomic_numbers = [6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1]

        positions = [
            -0.9853672723415879,
            0.9853672723415879,
            0.0,
            -1.765101316934915,
            1.765101316934915,
            0.0,
            -1.346036726076389,
            -0.3606694537348005,
            0.0,
            -2.411173239186462,
            -0.6460719222515465,
            0.0,
            -0.3606694537348005,
            -1.346036726076389,
            0.0,
            -0.6460719222515465,
            -2.411173239186462,
            0.0,
            0.9853672723415879,
            -0.9853672723415879,
            0.0,
            1.765101316934915,
            -1.765101316934915,
            0.0,
            1.346036726076389,
            0.3606694537348005,
            0.0,
            2.411173239186462,
            0.6460719222515465,
            0.0,
            0.3606694537348005,
            1.346036726076389,
            0.0,
            0.6460719222515465,
            2.411173239186462,
            0.0
        ]

        bonds = [
            0,
            1,
            0,
            2,
            0,
            10,
            2,
            3,
            2,
            4,
            4,
            5,
            4,
            6,
            6,
            7,
            6,
            8,
            8,
            9,
            8,
            10,
            10,
            11
        ]

        bonds_order = [1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1]

        molecule = vtk.vtkMolecule()
        for i in range(len(atomic_numbers)):
            pos = np.array(positions[i * 3:i * 3 + 3])
            # pos *= 30
            pos += [150, 150, 40]
            molecule.AppendAtom(atomic_numbers[i], pos[0], pos[1], pos[2])

        for i in range(len(bonds_order)):
            molecule.AppendBond(bonds[i * 2], bonds[i * 2 + 1], bonds_order[i])

        return {"molecule": molecule}
    grad = []

    l = f.readline()
    for i in range(n):
        l = f.readline().split()
        sym.append(int(l[1]))
        coord.append((lambda x: float(x) / 0.529177209, l[2:5]))
        grad.append((l[5:8]))

    return sym, N.array(coord), N.array(grad)


symbols, coordinates, gradients = read_xyz(argv[1])
nat = len(symbols)

molecule = vtk.vtkMolecule()

for i in range(nat):
    s = symbols[i]
    a = coordinates[i]
    molecule.AppendAtom(s, a[0], a[1], a[2])

for i in range(nat):
    a = coordinates[i]
    for j in range(i + 1, nat):
        b = coordinates[j]
        d = N.sqrt(N.sum((a - b)**2))
        if d < 3.0:
            molecule.AppendBond(i, j, 1)

atom_points = vtk.vtkPoints()