\(\renewcommand\AA{\unicode{x212B}}\)

ReplaceSpecialValues v1

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 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

CheckErrorAxis

Input

boolean

False

Whether or not to also check the error axis values.

UseAbsolute

Input

boolean

True

Whether large and small comparisons should be done on absolute values.

Description

The algorithm searches over all of the values, in Y and Error (provided the checkbox ‘CheckErrorAxis’ is ticked) axes, 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: AlgorithmIndex | CorrectionFunctions\SpecialCorrections

Source

C++ header: ReplaceSpecialValues.h

C++ source: ReplaceSpecialValues.cpp