\(\renewcommand\AA{\unicode{x212B}}\)
Table of Contents
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
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. |
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.
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
C++ header: TransformHKL.h (last modified: 2021-03-31)
C++ source: TransformHKL.cpp (last modified: 2021-04-29)