Beispiel #1
0
 def test_fromStructure_CdSe(self):
     """check SFAverage.fromStructure() for CdSe
     """
     cdse = loadDiffPyStructure('CdSe_cadmoselite.cif')
     sfavg = SFAverage.fromStructure(cdse, self.sftx)
     fcd = self.sftx.lookup('Cd')
     fse = self.sftx.lookup('Se')
     self.assertTrue(isinstance(sfavg.f1sum, float))
     self.assertAlmostEqual(0.5 * (fcd + fse), sfavg.f1avg)
     self.assertAlmostEqual(0.5 * (fcd**2 + fse**2), sfavg.f2avg)
     self.assertEqual(4, sfavg.count)
     self.assertEqual(cdse.composition, sfavg.composition)
     qa = numpy.arange(0, 25, 0.1)
     sfavg2 = SFAverage.fromStructure(cdse, self.sftx, qa)
     self.assertTrue(isinstance(sfavg2.f1sum, numpy.ndarray))
     self.assertNotEqual(sfavg2.f1sum[0], sfavg2.f1sum[-1])
     self.assertEqual(sfavg.f1sum, sfavg2.f1sum[0])
     self.assertEqual(sfavg.f2sum, sfavg2.f2sum[0])
     sfavg3 = SFAverage.fromStructure(cdse, self.sftn, qa)
     self.assertEqual(sfavg3.f1sum[0], sfavg3.f1sum[-1])
     sfavg4 = SFAverage.fromStructure(cdse, 'N', qa)
     self.assertTrue(numpy.array_equal(sfavg3.f1sum, sfavg4.f1sum))
     self.assertTrue(numpy.array_equal(sfavg3.f2sum, sfavg4.f2sum))
     sfavg5 = SFAverage.fromStructure(cdse, 'EN', qa)
     self.assertFalse(numpy.array_equal(sfavg3.f1sum, sfavg5.f1sum))
     self.assertRaises(TypeError, SFAverage.fromStructure,
                       'notastructure', self.sftx)
     self.assertRaises(ValueError, SFAverage.fromStructure,
                       cdse, 'invalid')
     return
Beispiel #2
0
def calc_fs_from_stru_files(*stru_files: str, qa=0) -> List[float]:
    """Calculate the compositional average scattering factor from the structure file."""
    fs = []
    for stru_file in stru_files:
        stru = loadStructure(stru_file)
        f = SFAverage.fromStructure(stru, XTB, qa).f1avg
        fs.append(f)
    return fs
Beispiel #3
0
 def test_from_rutile(self):
     """check SFAverage.fromStructure for pyobjcryst Crystal of rutile.
     """
     rutile = loadObjCrystCrystal('rutile.cif')
     qa = numpy.arange(0, 25, 0.1)
     sfavg = SFAverage.fromStructure(rutile, self.sftx, qa)
     fti = self.sftx.lookup('Ti', qa)
     fo = self.sftx.lookup('O', qa)
     self.assertTrue(numpy.allclose((fti + 2 * fo) / 3.0, sfavg.f1avg))
     fti2, fo2 = fti**2, fo**2
     self.assertTrue(numpy.allclose((fti2 + 2 * fo2) / 3.0, sfavg.f2avg))
     self.assertEqual(6, sfavg.count)