\(\renewcommand\AA{\unicode{x212B}}\)
FindCenterOfMassPosition v2¶
Summary¶
Finds the beam center in a 2D SANS data set.
Properties¶
Name |
Direction |
Type |
Default |
Description |
---|---|---|---|---|
InputWorkspace |
Input |
Mandatory |
||
Output |
Input |
string |
TableWorkspace will contain the center of mass position. When empty, a CenterOfMass output parameter with two elements (x,y) is created. |
|
CenterX |
Input |
number |
0 |
Initial estimate for the beam center in X in meters |
CenterY |
Input |
number |
0 |
Initial estimate for the beam center in Y in meters |
Tolerance |
Input |
number |
0.00125 |
Tolerance on the center of mass position between each iteration in meters. Suggested value is the size of a quarter of a pixel. |
DirectBeam |
Input |
boolean |
True |
When true, the calculation will include the pixels within BeamRadius from the beam center. Since the process is iterative, the pixels masked by DirectBeam=False will move. |
BeamRadius |
Input |
number |
0.0155 |
Radius of the direct beam area, in meters, used the exclude the beam when calculating the center of mass of the scattering pattern. This is ignored when DirectBeam=True |
IntegrationRadius |
Input |
number |
Optional |
Integration radius, in meters, used to include when calculating the center of mass of the scattering pattern. |
Description¶
Finds the beam center using the direct beam method. This algorithm is used by the EQSANS and HFIR SANS reduction.
The position of the beam center \(\vec{p}\) is given by
where \(i\) runs over all pixels within the largest square detector area centered on the initial guess for the beam center position.
The initial guess is (CenterX
, CenterY
) which defaults to the center of the detector.
\(I_i\) is the detector count for pixel \(i\), and \(\vec{d}_i\) is x-y projection of the pixel position.
The range of pixels considered is limited to be those symmetric (in x and y separately) around the previous step’s found beam center.
The calculation above is repeated iteratively by replacing the initial guess with the position found with the previous iteration.
The process stops when the difference between the positions found with two consecutive iterations is smaller than Tolerance
in meters.
The integration range within the symmetric area of the detector can be controlled using BeamRadius
(when DirectBeam=False
) and IntegrationRadius
.
When both are in effect the pixels integrated are those that meet the equation
where \(\vec{p}\) is the beam center from the previous iteration.
Again, when DirectBeam=True
is specified, the lower bound is ignored.
When IntegrationRadius
is not specified, the upper bound is ignored.
Not specifying any of these three parameters uses all data within the symmetric x/y region.
If the Output
property is set, the beam centre will be placed in a table workspace.
Otherwise, the result is placed in an ArrayProperty named CenterOfMass
.
Usage¶
Note
To run these usage examples please first download the usage data, and add these to your path. In Mantid this is done using Manage User Directories.
Example - Find the beam center for a BioSANS data file:
# Load your data file
LoadSpice2D('BioSANS_empty_cell.xml', OutputWorkspace='empty_cell')
# Compute the center position, which will be put in a table workspace
center = FindCenterOfMassPosition('empty_cell', Output='center')
x, y = center.column(1)
print(f"(x, y) = ({x:.4f}, {y:.4f})")
Output:
(x, y) = (-0.0066, 0.0091)
Categories: AlgorithmIndex | SANS
Source¶
C++ header: FindCenterOfMassPosition2.h
C++ source: FindCenterOfMassPosition2.cpp