\(\renewcommand\AA{\unicode{x212B}}\)
CreateEPP v1¶
Summary¶
Creates a nominal EPP table compatible with what is returned by the FindEPP algorithm.
See Also¶
Properties¶
Name 
Direction 
Type 
Default 
Description 

InputWorkspace 
Input 
Mandatory 
An input workspace. 

OutputWorkspace 
Output 
Mandatory 
The calculated output EPP table. 

Sigma 
Input 
number 
0 
The value to fill the Sigma column with. 
Description¶
This algorithm generates an elastic peak position (EPP) table like the one created by the FindEPP algorithm. Unlike FindEPP which finds the elastic peak positions by fitting, CreateEPP calculates the peak position from the instrument geometry and incident energy. The algorithm is can be used in cases where FindEPP fails e.g. due to poor signaltonoise ratio.
The ideal elastic peak position \(t_{EPP}\) corresponds to the timeofflight between the source and the detector:
\(t_{EPP} = (l_1 + l_2) / v\),
where \(l_1\) is the sourcetosample distance, \(l_2\) is the sampletodetector distance and \(v\) is the neutron velocity. The velocity in turn is given by
\(v = \sqrt{2 E_i / m_n}\),
where \(E_i\) is the incident energy and \(m_n\) the neutron mass.
CreateEPP reads \(E_i\) from the ‘Ei’ sample log entry of InputWorkspace.
The columns in the OutputWorkspace are the same as in FindEPP. Since the calculation done by CreateEPP gives only the ideal elastic peak positions, the rest of the columns are filled as follows:
‘Sigma’: set to the Sigma input property.
‘PeakCentreError’, ‘SigmaError’ and ‘HeightError’: set unconditionally to zero.
‘Height’: set to the Y value of the bin at the elastic peak position.
‘chiSq’: set unconditionally to one.
‘FitStatus’: set unconditionally to “success”.
Usage¶
Example  CreateEPP
from mantid.kernel import DeltaEModeType, UnitConversion
import numpy
CreateSampleWorkspace(
OutputWorkspace='exWS',
Function='Flat background',
NumBanks=3,
BankPixelWidth=2,
Xmax=10000,
BinWidth=50,
PixelSpacing=0.01,
BankDistanceFromSample=1.0
)
ws = mtd['exWS']
# Fill the sample workspace with some Gaussian elastic peaks.
Ei = 10.0 # Incident energy, in meV.
def peak(xs, centre): # A helper function to generate a peak.
xs = (xs[:1] + xs[1:]) * 0.5 # Convert bin edges to bin centres.
ys = 10.0 * numpy.exp(numpy.square((xs  centre) / 100))
return ys
instrument = ws.getInstrument()
source = instrument.getSource()
sample = instrument.getSample()
L1 = sample.getDistance(source)
for i in range(ws.getNumberHistograms()):
detector = ws.getDetector(i)
L2 = sample.getDistance(detector)
tof = UnitConversion.run('Energy', 'TOF', Ei, L1, L2, 0.0, DeltaEModeType.Direct, Ei)
ys =ws.dataY(i)
ys += peak(ws.dataX(i), tof)
# The 'Ei' sample log shall hold the incident energy.
ws.mutableRun().addProperty('Ei', Ei, True)
# Compare CreateEPP and FindEPP results.
createEPPWS = CreateEPP(InputWorkspace=ws)
findEPPWS = FindEPP(InputWorkspace='exWS')
epp1 = createEPPWS.cell('PeakCentre', 0)
print('CreateEPP gives {0:.8f} as the first elastic peak position.'.format(epp1))
epp2 = findEPPWS.cell('PeakCentre', 0)
print('FindEPP gives {0:.8f}.'.format(epp2))
Output:
CreateEPP gives 7952.80766719 as the first elastic peak position.
FindEPP gives ....
Categories: AlgorithmIndex  Utility
Source¶
C++ header: CreateEPP.h
C++ source: CreateEPP.cpp