ReplaceSpecialValues v1

../_images/ReplaceSpecialValues-v1_dlg.png

ReplaceSpecialValues dialog.

Summary

Replaces instances of NaN and infinity in the workspace with user defined numbers. If a replacement value is not provided the check will not occur. This algorithm can also be used to replace numbers whose absolute value is larger than a user-defined threshold.

Properties

Name Direction Type Default Description
InputWorkspace Input MatrixWorkspace Mandatory The name of the input workspace
OutputWorkspace Output MatrixWorkspace Mandatory The name to use for the output workspace (can be the same as the input one).
NaNValue Input number Optional The value used to replace occurrences of NaN (default: do not check).
NaNError Input number 0 The error value used when replacing a value of NaN
InfinityValue Input number Optional The value used to replace occurrences of positive or negative infinity (default: do not check).
InfinityError Input number 0 The error value used when replacing a value of infinity
BigNumberThreshold Input number Optional The threshold above which a number (positive or negative) should be replaced. (default: do not check)
BigNumberValue Input number 0 The value with which to replace occurrences of ‘big’ numbers.
BigNumberError Input number 0 The error value used when replacing a ‘big’ number
SmallNumberThreshold Input number Optional The threshold below which a number (positive or negative) should be replaced. (default: do not check)
SmallNumberValue Input number 0 The value with which to replace occurrences of ‘small’ numbers.
SmallNumberError Input number 0 The error value used when replacing a ‘small’ number

Description

The algorithm searches over all of the values in a workspace and if it finds a value set to NaN (not a number), infinity, larger or smaller than the ‘big’/’small’ threshold given then that value and the associated error is replaced by the user provided values.

If no value is provided for either NaNValue, InfinityValue, BigValueThreshold or SmallValueThreshold then the algorithm will exit with an error, as in this case it would not be checking anything.

The algorithm can also handle event workspaces.

Usage

Example

import numpy as np
ws = CreateSampleWorkspace(BankPixelWidth=1)

yArray = np.array(ws.readY(0))
yArray[0] = 8e80
yArray[1] = float("inf")
yArray[2] = float("-inf")
yArray[3] = float("NaN")
yArray[4] = 8e-7
ws.setY(0,yArray)

ws = ReplaceSpecialValues(ws,NaNValue=0,InfinityValue=1000,
 BigNumberThreshold=1000, BigNumberValue=1000,
 SmallNumberThreshold=1e-6, SmallNumberValue=200)

print("i\tBefore\tAfter")
print("-\t------\t-----")
for i in range(5):
    print("{}\t{}\t{}".format(i, yArray[i],ws.readY(0)[i]))

Output:

i       Before  After
-       ------  -----
0       8e+80   1000.0
1       inf     1000.0
2       -inf    1000.0
3       nan     0.0
4       8e-07   200.0
import numpy as np
ws = CreateSampleWorkspace(BankPixelWidth=1)

value1 = 1.00000004
value2 = 1.00000003
valueDiff = value1 - value2

wsYArray = np.array(ws.readY(0))
wsYArray[0] = valueDiff
ws.setY(0, wsYArray)
ws = ReplaceSpecialValues(ws, SmallNumberThreshold=1e-6)

print("Before\t\t After")
print("{0:.11e}\t{1:.1f}".format(wsYArray[0], ws.readY(0)[0]))

Output:

Before                After
9.99999993923e-09   0.0

Categories: Algorithms | CorrectionFunctions\SpecialCorrections

Source

C++ source: ReplaceSpecialValues.cpp (last modified: 2016-11-16)

C++ header: ReplaceSpecialValues.h (last modified: 2016-11-16)