Ejemplo n.º 1
0
    def test_getUniqueHKLsUsingFilter(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = generator.getUniqueHKLsUsingFilter(
            1.0, 10.0, ReflectionConditionFilter.StructureFactor)

        self.assertEqual(len(hkls), 8)
        self.assertFalse(V3D(2, 2, 2) in hkls)
Ejemplo n.º 2
0
    def structf(self):
        sample_ws = CreateSampleWorkspace()
        LoadCIF(sample_ws, self.cif)
        self.sample = sample_ws.sample().getCrystalStructure()
        self.generator = ReflectionGenerator(self.sample)
        if self.unique == True:
            hkls = self.generator.getUniqueHKLsUsingFilter(
                self.qrange[0], self.qrange[1],
                ReflectionConditionFilter.StructureFactor)
        else:
            hkls = self.generator.getHKLsUsingFilter(
                self.qrange[0], self.qrange[1],
                ReflectionConditionFilter.StructureFactor)

        pg = self.sample.getSpaceGroup().getPointGroup()

        df = pd.DataFrame(data=np.array(hkls), columns=list('hkl'))

        df['d(A)'] = self.generator.getDValues(hkls)
        df['F^2'] = self.generator.getFsSquared(hkls)
        df['hkl'] = hkls
        df['M'] = df['hkl'].map(lambda x: len(pg.getEquivalents(x)))
        df['II_powder'] = df['F^2'] * df['M']
        df['q'] = 2 * np.pi / df['d(A)']
        df['qh'] = df['h'].map(lambda x: np.sign(x) * 2 * np.pi / self.
                               generator.getDValues([V3D(x, 0, 0)])[0])
        df['qk'] = df['k'].map(lambda x: np.sign(x) * 2 * np.pi / self.
                               generator.getDValues([V3D(0, x, 0)])[0])
        df['ql'] = df['l'].map(lambda x: np.sign(x) * 2 * np.pi / self.
                               generator.getDValues([V3D(0, 0, x)])[0])
        self.data = df
    def test_getFsSquared(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = generator.getUniqueHKLs(1.0, 10.0)

        fsSquared = generator.getFsSquared(hkls)

        self.assertEqual(len(fsSquared), len(hkls))
Ejemplo n.º 4
0
    def test_getFsSquared(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = generator.getUniqueHKLs(1.0, 10.0)

        fsSquared = generator.getFsSquared(hkls)

        self.assertEqual(len(fsSquared), len(hkls))
    def test_getUniqueHKLs(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = generator.getUniqueHKLs(1.0, 10.0)

        self.assertEqual(len(hkls), 9)

        self.assertTrue(V3D(2, 2, 2) in hkls)
        self.assertFalse(V3D(1, 0, 0) in hkls)
    def test_getHKLsUsingFilter(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = generator.getHKLsUsingFilter(1.0, 10.0, ReflectionConditionFilter.StructureFactor)

        self.assertEqual(len(hkls), 130)

        # The 222 is gone now
        self.assertFalse(V3D(2, 2, 2) in hkls)
Ejemplo n.º 7
0
    def test_getUniqueHKLs(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = generator.getUniqueHKLs(1.0, 10.0)

        self.assertEqual(len(hkls), 9)

        self.assertTrue(V3D(2, 2, 2) in hkls)
        self.assertFalse(V3D(1, 0, 0) in hkls)
    def test_getDValues(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = [V3D(1, 0, 0), V3D(1, 1, 1)]

        dValues = generator.getDValues(hkls)

        self.assertEqual(len(hkls), len(dValues))
        self.assertAlmostEqual(dValues[0], 5.431, places=10)
        self.assertAlmostEqual(dValues[1], 5.431 / np.sqrt(3.), places=10)
    def test_getHKLs(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = generator.getHKLs(1.0, 10.0)

        self.assertEqual(len(hkls), 138)

        # default is filtering by space group reflection condition
        self.assertTrue(V3D(2, 2, 2) in hkls)
        self.assertFalse(V3D(1, 0, 0) in hkls)
Ejemplo n.º 10
0
    def test_getDValues(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = [V3D(1, 0, 0), V3D(1, 1, 1)]

        dValues = generator.getDValues(hkls)

        self.assertEqual(len(hkls), len(dValues))
        self.assertAlmostEqual(dValues[0], 5.431, places=10)
        self.assertAlmostEqual(dValues[1], 5.431 / np.sqrt(3.), places=10)
Ejemplo n.º 11
0
    def test_getHKLs(self):
        generator = ReflectionGenerator(self.crystalStructure)
        hkls = generator.getHKLs(1.0, 10.0)

        self.assertEqual(len(hkls), 138)

        # default is filtering by space group reflection condition
        self.assertTrue(V3D(2, 2, 2) in hkls)
        self.assertFalse(V3D(1, 0, 0) in hkls)
Ejemplo n.º 12
0
 def get_generator(lattice_parameters, space_group):
     """
     """
     crystal_structure = CrystalStructure(
         ' '.join([str(x) for x in lattice_parameters]), space_group, '')
     generator = ReflectionGenerator(crystal_structure,
                                     ReflectionConditionFilter.Centering)
     return generator
    def _update_distributions_and_weights(self):
        crystal_structure = CrystalStructure(str(self._unit_cell), str(self._space_group), str(self._atoms))
        reflection_generator = ReflectionGenerator(crystal_structure)

        # Calculate all unique reflections within the specified resolution limits, including structure factors
        unique_hkls = reflection_generator.getUniqueHKLs(self.d_min, self.d_max)
        structure_factors = reflection_generator.getFsSquared(unique_hkls)

        # Calculate multiplicities of the reflections
        point_group = crystal_structure.getSpaceGroup().getPointGroup()
        multiplicities = [len(point_group.getEquivalents(hkl)) for hkl in unique_hkls]

        # Calculate weights as F^2 * multiplicity and normalize so that Sum(weights) = 1
        weights = np.array([x * y for x, y in zip(structure_factors, multiplicities)])
        self._parameter_lock.acquire()
        self._peak_weights = weights / sum(weights)

        d_values = reflection_generator.getDValues(unique_hkls)
        self._peak_distributions = [partial(np.random.normal, loc=d, scale=self._relative_sigma * d) for d in d_values]
        self._parameter_lock.release()
Ejemplo n.º 14
0
def compute_dvalues(d_min, d_max, structure):
    generator = ReflectionGenerator(structure)
    hkls = generator.getUniqueHKLsUsingFilter(d_min, d_max, ReflectionConditionFilter.StructureFactor)
    dvalues = np.sort(np.array(generator.getDValues(hkls)))[::-1]
    return dvalues
Ejemplo n.º 15
0
 def test_create(self):
     generator = ReflectionGenerator(self.crystalStructure)
     generator = ReflectionGenerator(self.crystalStructure,
                                     ReflectionConditionFilter.Centering)
Ejemplo n.º 16
0
def compute_dvalues(d_min, d_max, structure):
    generator = ReflectionGenerator(structure)
    hkls = generator.getUniqueHKLsUsingFilter(
        d_min, d_max, ReflectionConditionFilter.StructureFactor)
    dvalues = np.sort(np.array(generator.getDValues(hkls)))[::-1]
    return dvalues