Пример #1
0
 def testSpg(self):
     doc, s = castep2dict(REAL_PATH +
                          "data/Na3Zn4-swap-ReOs-OQMD_759599.castep")
     crystal = Crystal(doc)
     print(crystal.get_space_group(symprec=0.01))
     print(crystal.get_space_group(symprec=0.001))
     self.assertEqual(crystal.get_space_group(symprec=0.0000001), "Pm")
Пример #2
0
    def test_getters_setters(self):
        doc, s = castep2dict(REAL_PATH +
                             "data/Na3Zn4-swap-ReOs-OQMD_759599.castep")
        crystal = Crystal(doc)
        self.assertEqual(list(crystal.lattice_cart[0]),
                         [9.0397727, 0.0081202, 0.0000000])
        self.assertEqual(crystal.num_atoms, 14)
        with self.assertRaises(AttributeError):
            crystal["positions_frac"] = [[0, 1, 2]]

        # check we can set fields to the same value
        crystal["new_field"] = [1, 2, 3]
        crystal["new_field"] = [1, 2, 3]

        crystal["new_field_2"] = np.nan
        crystal["new_field_2"] = np.nan

        crystal["new_field_3"] = [1, 2, 4]
        with self.assertRaises(AttributeError):
            crystal["new_field_3"] = [1, 2, 5]

        crystal["new_field_4"] = [1, 2, np.nan]
        crystal["new_field_4"] = [1, 2, np.nan]

        crystal["new_field_5"] = [1, np.nan, 2]
        with self.assertRaises(AttributeError):
            crystal["new_field_5"] = [1, 2, np.nan]

        crystal["new_field_6"] = np.linspace(0, 1, 1000).tolist()
        crystal["new_field_6"] = np.array(crystal["new_field_6"],
                                          copy=True).tolist()
Пример #3
0
 def testCoordination(self):
     doc, s = magres2dict(REAL_PATH + "data/magres_files/NaP_QE6.magres")
     crystal = Crystal(doc, voronoi=True)
     for atom in crystal:
         print(atom, atom.coordination)
     print(crystal.coordination_lists)
     print(crystal.coordination_stats)
Пример #4
0
    def test_minimal_init(self):
        doc = Crystal(
            dict(
                lattice_abc=np.asarray([[3, 3, 3], [90, 90, 90]]),
                atom_types=["Na", "Cl"],
                positions_frac=[[0, 0, 0], [0.5, 0.5, 0.5]],
            )
        )
        self.assertEqual(doc.stoichiometry, [["Cl", 1.0], ["Na", 1.0]])
        self.assertEqual(doc.lattice_abc, ((3.0, 3.0, 3.0), (90.0, 90.0, 90.0)))
        self.assertEqual(
            doc.lattice_cart, ((3.0, 0.0, 0.0), (0.0, 3.0, 0.0), (0.0, 0.0, 3.0))
        )
        self.assertEqual(len(doc.sites), 2)
        self.assertEqual(doc.num_atoms, 2)
        self.assertEqual(doc.concentration, [0.5, 0.5])
        self.assertEqual(doc.positions_abs, [[0, 0, 0], [1.5, 1.5, 1.5]])
        self.assertEqual(doc.positions_frac, [[0, 0, 0], [0.5, 0.5, 0.5]])
        self.assertEqual(doc.formula, "ClNa")
        self.assertEqual(doc.cell_volume, 27.0)
        self.assertEqual(doc.space_group, "Pm-3m")

        doc = Crystal(
            dict(
                lattice_cart=((3.0, 0.0, 0.0), (0.0, 3.0, 0.0), (0.0, 0.0, 3.0)),
                atom_types=["Na", "Cl"],
                positions_abs=[[0, 0, 0], [1.5, 1.5, 1.5]],
            )
        )
        self.assertEqual(doc.lattice_abc, ((3.0, 3.0, 3.0), (90.0, 90.0, 90.0)))
        self.assertEqual(
            doc.lattice_cart, ((3.0, 0.0, 0.0), (0.0, 3.0, 0.0), (0.0, 0.0, 3.0))
        )
        self.assertEqual(doc.stoichiometry, [["Cl", 1.0], ["Na", 1.0]])
        self.assertEqual(len(doc.sites), 2)
        self.assertEqual(doc.num_atoms, 2)
        self.assertEqual(doc.concentration, [0.5, 0.5])
        self.assertEqual(doc.positions_abs, [[0.0, 0.0, 0.0], [1.5, 1.5, 1.5]])
        self.assertEqual(doc.positions_frac, [[0, 0, 0], [0.5, 0.5, 0.5]])
        self.assertEqual(doc.formula, "ClNa")
        self.assertEqual(doc.cell_volume, 27.0)
        self.assertEqual(doc.space_group, "Pm-3m")
Пример #5
0
    def test_set_positions(self):
        doc, s = castep2dict(REAL_PATH +
                             "data/Na3Zn4-swap-ReOs-OQMD_759599.castep")
        doc = Crystal(doc)

        copydoc = copy.deepcopy(doc)
        old_pos = np.asarray(doc.positions_frac)
        copydoc.set_positions(np.zeros_like(old_pos), fractional=True)

        np.testing.assert_array_almost_equal(
            np.asarray(copydoc.positions_frac), np.zeros_like(old_pos))
        np.testing.assert_array_almost_equal(np.asarray(copydoc.positions_abs),
                                             np.zeros_like(old_pos))

        self.assertNotAlmostEqual(doc.positions_frac[-1][0], 0.0)
Пример #6
0
    def testSites(self):
        doc, s = castep2dict(REAL_PATH +
                             "data/Na3Zn4-swap-ReOs-OQMD_759599.castep")
        del doc["lattice_cart"]
        crystal = Crystal(doc)
        np.testing.assert_array_almost_equal(crystal[0].coords,
                                             [0.776467, 0.466319, 0.0])

        with self.assertRaises(RuntimeError):
            crystal[0].set_position([0.5, 0.6, 0.7, 0.8], "fractional")
        with self.assertRaises(RuntimeError):
            crystal[0].set_position([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                                    "fractional")
        self.assertEqual([atom for atom in crystal],
                         [atom[1] for atom in enumerate(crystal)])

        atom = Site(
            species="Cl",
            position=[0.2, 0.5, 0.2],
            lattice=[[10, 0, 0], [0, 10, 0], [0, 0, 10]],
        )
        atom2 = copy.deepcopy(atom)
        atom2.species = "Br"

        self.assertEqual(atom.species, "Cl")
        self.assertEqual(atom2.species, "Br")

        atom2.set_position([1.2, -0.5, 0.2], "fractional")
        np.testing.assert_array_almost_equal(
            atom2.displacement_between_sites(atom), [0.0, 0.0, 0.0],
            decimal=10)
        self.assertAlmostEqual(atom2.distance_between_sites(atom),
                               0.0,
                               places=10)
        atom2.set_position([1.3, -0.5, 0.2], "fractional")
        np.testing.assert_array_almost_equal(
            atom2.displacement_between_sites(atom), [1.0, 0.0, 0.0],
            decimal=10)
        self.assertAlmostEqual(atom2.distance_between_sites(atom),
                               1.0,
                               places=10)
        atom2.set_position([1.3, -0.5, 0.3], "fractional")
        np.testing.assert_array_almost_equal(
            atom2.displacement_between_sites(atom), [1.0, 0.0, 1.0],
            decimal=10)
        self.assertAlmostEqual(atom2.distance_between_sites(atom),
                               np.sqrt(2),
                               places=10)
Пример #7
0
 def testBondStats(self):
     doc, s = magres2dict(REAL_PATH + "data/magres_files/NaP_QE6.magres")
     crystal = Crystal(doc)
     print(crystal.bonding_stats)
Пример #8
0
 def testBondLengths(self):
     doc, s = magres2dict(REAL_PATH + "data/magres_files/NaP_QE6.magres")
     crystal = Crystal(doc)
     print(crystal.bond_lengths)
Пример #9
0
 def testVoronoi(self):
     doc, s = magres2dict(REAL_PATH + "data/magres_files/NaP_QE6.magres")
     crystal = Crystal(doc)
     print(crystal.unique_sites)
Пример #10
0
 def testFromMagres(self):
     doc, s = magres2dict(REAL_PATH + "data/magres_files/NaP_QE6.magres")
     crystal = Crystal(doc)
     for atom in crystal:
         print(atom, atom["chemical_shielding_iso"],
               atom["chemical_shift_asymmetry"])