Usage¶
Main classes¶
Main classes and corresponding objects are tabulated below:
Classes |
Objects |
---|---|
|
Lattice Parameters |
|
Atom |
|
Atom with its fractiontal coordinates in a unit cell |
|
Unit cell |
|
Ideal Polycrystalline specimen |
|
Single-crystal specimen |
|
Nonideal Polycrystalline specimen |
|
X-ray spectrum |
|
Miller index triplet |
|
1D diffraction curve |
|
2D diffraction pattern |
|
Planar detector |
|
Cylindrical detector |
Examples¶
Bragg diffraction of an ideal polycrystalline specimen¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from datad import unitcell_Ta, Detector, PolyXtal, Curve1D, Xray
if __name__ == "__main__":
Ta = PolyXtal(unitcell_Ta)
xray = Xray.from_wavelength(1.54)
c1d = Curve1D(Ta, xray)
c1d.calc_peaks(
max_tth=115,
is_degree=True)
detector = Detector(
normal=(0, 0, 1), vx=(1, 0, 0),
sizex=50, sizey=25,
dist=10,
ponix=25, poniy=25 / 2)
detector.project_peaks(
c1d,
inc=(0,0,-1), vx=(1,0,0))
detector.calc_to_pic(
tth_res=0.08, ps=0.01, is_degree=True)
detector.save_pic("ta.tif")
|
Cylindrical detector¶
Class CylindricalDetector
is a subclass of Detector
and its methods is identical to
that of Detector
except for instantiation. For example, one can instantiate a CylindricalDetector
as follows:
1 2 3 4 5 6 7 8 9 | from datad import CylindricalDetector
detector = CylindricalDetector(
normal=(0, 0, 1), vx=(1, 0, 0),
sizex=90, sizey=10,
dist=10,
ponix=10, poniy=5,
radius=30,
start_angle=5, is_degree=True)
|
Laue diffraction of a single-crystal specimen¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from datad import UnitCell, Pattern2D, SingleXtal, Xray
from numpy import linspace
if __name__ == "__main__":
unitcell_KCl = UnitCell.from_array(
(3.634, 3.634, 3.634, 90, 90, 90),
(("K", (0, 0, 0)), ("Cl", (0.5, 0.5, 0.5)),),
is_degree=True)
KCl = SingleXtal.from_rcp_vectors(
unitcell_KCl,
x=(1, 0, 0),
z=(0, 0, 1))
KCl.strain(0.1, 0, 0, 0, 0, 0)
KCl.rotate_by_axis_angle(
axis=(1, 1, 1),
angle=30,
is_degree=True)
xray = Xray.from_energy(linspace(1, 100, 500))
p2d = Pattern2D(
KCl, xray,
inc=(0, 0, -1), vx=(1, 0, 0))
p2d.calc_peaks(sort_by="intensity")
# initialize a detector
detector.project_peaks(p2d)
detector.calc_to_pic(
ps=0.01,
sigmax=10, sigmay=10)
|
Laue diffraction of a nonideal polycrystalline specimen¶
NonidealPolyXtal
is identical to SingleXtal
except their instantiation methods.
One can instantiate a texture-free nonideal polycrystalline specimen with 10000 grains as follows:
1 | npx = NonidealPolyXtal.uniform(unitcell, 10000)
|
If a user-defined texture is desired, a space-separated text file containing the discrete
orientation distribution function (ODF) is needed, along with the static method NonidealPolyXtal.from_odf()
:
1 2 3 4 5 6 | npx = NonidealPolyXtal.from_odf(
unitcell,
"odf.txt", is_degree=True,
phi1_col=3, Phi_col=4, phi2_col=5, intensity_col=6,
num_grains=50000,
phi1_prec=5, Phi_prec=5, phi2_prec=5)
|