Contents
To overcome some of the problems of the Pawley method as experienced at the time, Armel le Bail took a wholly different approach to the extraction of the peak intensities from the powder profile. The method uses a two-step cyclic process. As with the Pawley method, the instrument geometry parameters and peak profile parameters are fitted by a standard least-squares methods. However, the intensities of the individual peaks are not treated as least-squares parameters and are never refined.
The purpose to develop Le Bail fit algorithm in Mantid is to calibrate powder diffractometer instrument profile parameters. LeBailFit itself cannot solve the problem. Thus a set of algorithms have been implemented to work with LeBailFit.
The refinement result of LeBailFit can be saved to Fullprof .irf file by SaveFullprofResolution from the output peak profile parameter table workspace.
If the starting values of instrument geometry parameters, such as Dtt1, Dtt1t, Dtt2t, Zero, Zerot, are off too much, calling LeBailFit even in Monte Carlo mode with large number of Monte Carlo cycles may not render an acceptable solution. FitPowderDiffPeaks and RefinePowderInstrumentParameters are designed to refine those geometry parameters in this case. These 2 algorithms will fit each peak individually and refine geometry parameters against peaks’ centre in d-spacing vs. TOF, respectively.
Here is a recommended workflow to calibrate powder diffractometer’s peak profile.
The data for this script are present in the system tests directory.
# Load data
LoadAscii(Filename=r'PG3_11485-1.dat',OutputWorkspace='PG3_11485',Unit='TOF')
# Create input workspaces for Le Bail fit
CreateLeBailFitInput(ReflectionsFile=r'LB4844b1.hkl',
FullprofParameterFile=r'2011B_HR60b1.irf',
LatticeConstant='4.1568899999999998',
InstrumentParameterWorkspace='Bank1InstrumentParameterTable1',
BraggPeakParameterWorkspace='BraggPeakParameterTable1')
# Initial Le Bail fit in calculation mode to see how far the starting parameters are off
LeBailFit(InputWorkspace='PG3_11485',
OutputWorkspace='PG3_11485_Calculated_0',
InputParameterWorkspace='Bank1InstrumentParameterTable1',
OutputParameterWorkspace='TempTable',
InputHKLWorkspace='BraggPeakParameterTable1',
OutputPeaksWorkspace='BraggPeakParameterTable2',
Function='Calculation',
BackgroundType='Chebyshev',
BackgroundParameters='0,0,0', # No background at first
UseInputPeakHeights='0',
PeakRadius='8',
Minimizer='Levenberg-Marquardt')
# Fit the instrumental geometry-related parameters. Dtt1, Dtt1t, Dtt2, Zero, Zerot,
# Step 1: Fit single diffraction peaks
FitPowderDiffPeaks(InputWorkspace='PG3_11485',
OutputWorkspace='Bank1FittedPeaks',
BraggPeakParameterWorkspace='BraggPeakParameterTable2',
InstrumentParameterWorkspace='Bank1InstrumentParameterTable1',
OutputBraggPeakParameterWorkspace='BraggPeakParameterTable2_0',
OutputBraggPeakParameterDataWorkspace='BraggPeakParameterTable2_P',
OutputZscoreWorkspace='BraggPeakParameterTable2_Zscore',
MinTOF='15000',MaxTOF='49387',UseGivenPeakCentreTOF='0',
MinimumPeakHeight='0.29999999999999999',
PeaksCorrelated='1',
MinimumHKL='12,12,12',
RightMostPeakHKL='2,0,0',
RightMostPeakLeftBound='46000',
RightMostPeakRightBound='48000')
# Step 2: Refine geometry-related parameters. Dtt1, Dtt1t, Dtt2, Zero, Zerot,
RefinePowderInstrumentParameters(InputPeakPositionWorkspace='BraggPeakParameterTable2_P',
OutputPeakPositionWorkspace='PG3_11485_PeakPositions',
InputInstrumentParameterWorkspace='Bank1InstrumentParameterTable1',
OutputInstrumentParameterWorkspace='Bank1InstrumentParameterTable1_01',
RefinementAlgorithm='OneStepFit')
# Create a workspace containing background of diffraction data to fit background polynomial
ProcessBackground(InputWorkspace='PG3_11485',
OutputWorkspace='PG3_11485_Background',
Options='SelectBackgroundPoints',
LowerBound='5053',
UpperBound='49387',
BackgroundPoints='5243,8910,11165,12153,13731,15060,16511,17767,19650,21874,23167,24519,36000,44282,49000',
NoiseTolerance='0.10000000000000001')
# Fit background function
Fit(Function='name=Polynomial,n=6,A0=0.558765,A1=-3.36699e-05,A2=-9.89997e-10,A3=2.29598e-13,A4=-1.07727e-17,A5=2.10058e-22,A6=-1.49446e-27',
InputWorkspace='PG3_11485_Background',
MaxIterations='1000',
Minimizer='Levenberg-MarquardtMD',
CreateOutput='1',
Output='PG3_11485_Background',
StartX='5053',EndX='49387')
# Use LeBailFit to calculate the diffraction pattern to see whether the refined geometry-related parameters are good as starting value
LeBailFit(InputWorkspace='PG3_11485',
OutputWorkspace='CalculatedPattern0',
InputParameterWorkspace='Bank1InstrumentParameterTable1_01',
OutputParameterWorkspace='Bank1InstrumentParameterTable1_0',
InputHKLWorkspace='BraggPeakParameterTable1',
OutputPeaksWorkspace='BraggPeakParameterTable2_0',
Function='Calculation',
BackgroundParametersWorkspace='PG3_11485_Background_Parameters',
UseInputPeakHeights='0',PeakRadius='8',Minimizer='Levenberg-Marquardt')
# Use LeBailFit to refine POWGEN's instrument profile parameters by Monte Carlo algorithm
LeBailFit(InputWorkspace='PG3_11485',
OutputWorkspace='PG3_11485_MC_1000',
InputParameterWorkspace='Bank1InstrumentParameterTable1_0',
OutputParameterWorkspace='Bank1InstrumentParameterTable_MC',
InputHKLWorkspace='BraggPeakParameterTable1',
OutputPeaksWorkspace='BraggPeakParameterTable3',
FitRegion='5053,49387',
Function='MonteCarlo',
BackgroundParametersWorkspace='PG3_11485_Background_Parameters',
UseInputPeakHeights='0',
PeakRadius='8',
Minimizer='Levenberg-Marquardt',
Damping='0.90000000000000002',
NumberMinimizeSteps='1000',
FitGeometryParameter='1',
RandomSeed='1000',
AnnealingTemperature='10',
DrunkenWalk='1')