\(\renewcommand\AA{\unicode{x212B}}\)
Table of Contents
Name | Direction | Type | Default | Description |
---|---|---|---|---|
InputWorkspace | Input | MatrixWorkspace | Mandatory | An input workspace. |
OutputWorkspace | Output | MatrixWorkspace | Mandatory | An output workspace. |
Axis1Binning | Input | dbl list | Mandatory | A comma separated list of first bin boundary, width, last bin boundary. Optionally this can be followed by a comma and more widths and last boundary pairs. Negative width values indicate logarithmic binning. |
Axis2Binning | Input | dbl list | Mandatory | A comma separated list of first bin boundary, width, last bin boundary. Optionally this can be followed by a comma and more widths and last boundary pairs. Negative width values indicate logarithmic binning. |
UseFractionalArea | Input | boolean | False | Flag to turn on the using the fractional area tracking RebinnedOutput workspace .Default is false. |
Transpose | Input | boolean | False | Run the Transpose algorithm on the resulting matrix. |
The bin parameters are used to form an output grid. A positive \(\Delta x_i\,\) makes constant width bins, whilst negative ones create logarithmic binning using the formula \(x(j+1)=x(j)(1+|\Delta x_i|)\,\). The overlap of the polygons formed from the old and new grids is tested to compute the required signal weight for the each of the new bins on the workspace, like in Rebin v1, and the errors are summed in quadrature, as:
where \(F_i = A^{\mathrm{overlap}}_i / A^{\mathrm{old}}_i\) is the ratio of the overlap area of the new and old bin over the area of the old bin.
If the input workspace is not of type: RebinnedOutput, and the UseFractionalArea option is set to True, the algorithm will assume that the input fraction is unity. This is correct if this workspace has not been previously rebinned, but will give incorrect error (standard deviation) estimates if it has been rebinned.
The algorithms currently requires the second axis on the workspace to be a numerical axis so ConvertSpectrumAxis v2 may need to run first.
Example - A simple example using the fractional area
ws = CreateSampleWorkspace()
#Convert the Spectrum Axis to theta
wsc = ConvertSpectrumAxis(ws,"theta")
rb = Rebin2D(wsc,[0,100,20000],[0,0.01,1.2],UseFractionalArea=True)
print("Bins in the X axis: {}".format(rb.blocksize()))
print("Bins in the Y axis: {}".format(rb.getNumberHistograms()))
Output:
Bins in the X axis: 200
Bins in the Y axis: 120
Example - Transposing the Result
ws = CreateSampleWorkspace()
#Convert the Spectrum Axis to theta
wsc = ConvertSpectrumAxis(ws,"theta")
rb = Rebin2D(wsc,[0,100,20000],[0,0.01,1.2],Transpose=True)
print("Bins in the X axis: {}".format(rb.blocksize()))
print("Bins in the Y axis: {}".format(rb.getNumberHistograms()))
Output:
Bins in the X axis: 120
Bins in the Y axis: 200
Example - Rebinning twice preserves signal/errors
import numpy as np
# prepare an input workspace
theta_tof = CreateSampleWorkspace()
theta_tof = ConvertSpectrumAxis(theta_tof, "theta")
theta_tof_rb1 = Rebin2D(theta_tof, '100,400,20000', '0, 0.001,1', UseFractionalArea=True)
theta_tof_rb2 = Rebin2D(theta_tof_rb1, '100,400,20000', '0, 0.004,1', UseFractionalArea=True)
theta_tof_rb_final = Rebin2D(theta_tof, '100,400,20000', '0, 0.004, 1', UseFractionalArea=True)
print(f'Signal difference = {np.median(np.abs(theta_tof_rb_final.readY(0) - theta_tof_rb2.readY(0))):.3f}')
print(f'Errors difference = {np.median(np.abs(theta_tof_rb_final.readE(0) - theta_tof_rb2.readE(0))):.3f}')
Signal difference = 0.000
Errors difference = 0.000
Categories: AlgorithmIndex | Transforms\Rebin
C++ header: Rebin2D.h (last modified: 2021-03-31)
C++ source: Rebin2D.cpp (last modified: 2021-03-31)