\(\renewcommand\AA{\unicode{x212B}}\)

TransformHKL v1

../_images/TransformHKL-v1_dlg.png

TransformHKL dialog.

Summary

Specify a 3x3 matrix to apply to (HKL) vectors as a list of 9 comma separated numbers. Both the UB and HKL values will be updated

Properties

Name Direction Type Default Description
PeaksWorkspace InOut IPeaksWorkspace Mandatory Input Peaks Workspace
Tolerance Input number 0.15 Indexing Tolerance (0.15)
HKLTransform Input dbl list 1,0,0,0,1,0,0,0,1 Specify 3x3 HKL transform matrix as a comma separated list of 9 numbers
FindError Input boolean True Whether to obtain the error in the lattice parameters. Set this to false if there are not enough peaks to do an optimization
NumIndexed Output number   Gets set with the number of indexed peaks.
AverageError Output number   Gets set with the average HKL indexing error.

Description

Given a PeaksWorkspace with a UB matrix stored with the sample, this algorithm will accept a 3x3 transformation matrix \(M\), change \(UB\) to \(UBM^{-1}\) and map each \((HKL)\) vector to \(M(HKL)\). For example, the transformation with elements 0,1,0,1,0,0,0,0,-1 will interchange the \(H\) and \(K\) values and negate \(L\). This algorithm should allow the user to perform any required transformation of the Miller indices, provided that transformation has a positive determinant. If a transformation with a negative or zero determinant is entered, the algorithm with throw an exception. The 9 elements of the transformation must be specified as a comma separated list of numbers.

Usage

Example:

ws=LoadIsawPeaks("TOPAZ_3007.peaks")
FindUBUsingFFT(ws,MinD=8.0,MaxD=13.0)

print("Before Transformation:")
print(ws.sample().getOrientedLattice().getUB())

#This HKLTransform is a matrix that will swap H and K and negate L
TransformHKL(ws,HKLTransform="0,1,0,1,0,0,0,0,-1")
print("\nAfter Transformation:")
print(ws.sample().getOrientedLattice().getUB())

Output:

Before Transformation:
[[ 0.01223576  0.00480107  0.08604016]
 [-0.11654506  0.00178069 -0.00458823]
 [-0.02737294 -0.08973552 -0.02525994]]

After Transformation:
[[ 0.00480107  0.01223576 -0.08604016]
 [ 0.00178069 -0.11654506  0.00458823]
 [-0.08973552 -0.02737294  0.02525994]]

Example - skipping error calculation

In special cases, users may not have enough peaks to find the error. For example, if peaks are constrained to two dimensions in HKL space, the error calculation will fail. In this case, FindError=False can be specified to skip the calculation. In this case, the lattice parameter error will be set to zero.

ws = CreatePeaksWorkspace(OutputType='LeanElasticPeak', NumberOfPeaks=0)

SetUB(ws, 5, 6, 7, 90, 90, 120)

ws.addPeak(ws.createPeakHKL([1, 2, 0]))
ws.addPeak(ws.createPeakHKL([0, 0, 3]))

TransformHKL(ws, tolerance=0.15, HKLTransform='0,1,0,1,0,0,0,0,-1', FindError=False)

print('peak(0) = ', ws.getPeak(0).getHKL())
print('peak(1) = ', ws.getPeak(1).getHKL())

ol = ws.sample().getOrientedLattice()
print('ea = ', ol.errora())
print('eb = ', ol.errorb())
print('ec = ', ol.errorc())
print('ealpha = ', ol.erroralpha())
print('ebeta = ', ol.errorbeta())
print('egamma = ', ol.errorgamma())

gives

peak(0) =  [2,1,0]
peak(1) =  [0,0,-3]
ea =  0.0
eb =  0.0
ec =  0.0
ealpha =  0.0
ebeta =  0.0
egamma =  0.0

Categories: AlgorithmIndex | Crystal\Peaks

Source

C++ header: TransformHKL.h (last modified: 2021-03-31)

C++ source: TransformHKL.cpp (last modified: 2021-04-29)