$$\renewcommand\AA{\unicode{x212B}}$$

Rebin2D v1¶

Summary¶

Rebins both axes of a 2D workspace using the given parameters

Properties¶

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.

Description¶

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:

$Y^{\mathrm{new}} = \sum_i Y^{\mathrm{old}}_i F_i$
$E^{\mathrm{new}} = \sqrt{\sum_i (E^{\mathrm{old}}_i)^2 F_i}$

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.

Note

Rebin2D looks at the histogram representation of the input workspace, so while it will accept EventWorkspaces, number of bins will affect the numerical results.

Requirements¶

The algorithms currently requires the second axis on the workspace to be a numerical axis so ConvertSpectrumAxis v2 may need to run first.

Usage¶

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

Source¶

C++ header: Rebin2D.h

C++ source: Rebin2D.cpp