# This file is part of xrayutilities.
#
# xrayutilities is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
# Copyright (C) 2012 Dominik Kriegner <dominik.kriegner@gmail.com>
from math import sqrt
import numpy
import xrayutilities as xu
# define elements
In = xu.materials.elements.In
P = xu.materials.elements.P
# define materials
InP = xu.materials.InP
InPWZ = xu.materials.InPWZ
# approximate version of other hexagonal polytypes
ainp = InP.a
InP4H = xu.materials.Crystal(
"InP(4H)",
xu.materials.SGLattice(186, ainp / sqrt(2), 2 * sqrt(4/3.) * ainp,
atoms=[In, In, P, P],
pos=[('2a', 0), ('2b', 1/4.),
('2a', 3/16.), ('2b', 7/16.)]))
for energy in [8041]: # eV
lam = xu.en2lam(energy) # e in eV -> lam in angstrom
print(' %d eV = %8.4f A' % (energy, lam))
print('------------------------------------------------------------------'
'-----------------')
print('material | peak | omega | 2theta | phi | '
'tt-om | |F| ')
print('------------------------------------------------------------------'
'-----------------')
exp111 = xu.HXRD(InP.Q(1, 1, -2), InP.Q(1, 1, 1), en=energy)
exphex = xu.HXRD(InPWZ.Q(1, -1, 0), InPWZ.Q(0, 0, 1), en=energy)
# InP ZB reflections
reflections = [[1, 1, 1], [2, 2, 2], [3, 3, 3],
[3, 3, 1], [2, 2, 4], [1, 1, 5]]
mat = InP
for hkl in reflections:
qvec = mat.Q(hkl)
[om, chi, phi, tt] = exp111.Q2Ang(qvec, trans=True)
F = mat.StructureFactor(qvec, exp111._en)
F /= mat.lattice.UnitCellVolume()
print('%8s | %15s | %8.4f | %8.4f | %8.4f | %8.4f | %8.2f '
% (mat.name, ' '.join(map(str, numpy.round(hkl, 2))), om, tt,
phi, tt - om, numpy.abs(F)))
print('------------------------------------------------------------------'
'-----------------')
# InP WZ reflections
reflections = [[0, 0, 2], [0, 0, 4], [1, -1, 4], [1, -1, 5], [1, -1, 6]]
mat = InPWZ
for hkl in reflections:
qvec = mat.Q(hkl)
[om, chi, phi, tt] = exphex.Q2Ang(qvec, trans=True)
F = mat.StructureFactor(qvec, exphex._en)
F /= mat.lattice.UnitCellVolume()
print('%8s | %15s | %8.4f | %8.4f | %8.4f | %8.4f | %8.2f '
% (mat.name, ' '.join(map(str, numpy.round(hkl, 2))), om, tt,
phi, tt - om, numpy.abs(F)))
print('------------------------------------------------------------------'
'-----------------')
# InP 4H
reflections = [[0, 0, 4], [0, 0, 8], [1, -1, 9], [1, -1, 10], [1, -1, 11]]
mat = InP4H
for hkl in reflections:
qvec = mat.Q(hkl)
[om, chi, phi, tt] = exphex.Q2Ang(qvec, trans=True)
F = mat.StructureFactor(qvec, exphex._en)
F /= mat.lattice.UnitCellVolume()
print('%8s | %15s | %8.4f | %8.4f | %8.4f | %8.4f | %8.2f '
% (mat.name, ' '.join(map(str, numpy.round(hkl, 2))), om, tt,
phi, tt - om, numpy.abs(F)))
print('------------------------------------------------------------------'
'-----------------')