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)
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))
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)
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)
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()
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
def test_create(self): generator = ReflectionGenerator(self.crystalStructure) generator = ReflectionGenerator(self.crystalStructure, ReflectionConditionFilter.Centering)
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