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

CompareMDWorkspaces v1

Summary

Compare two MDWorkspaces for equality.

Properties

Name

Direction

Type

Default

Description

Workspace1

Input

IMDWorkspace

Mandatory

First MDWorkspace to compare.

Workspace2

Input

IMDWorkspace

Mandatory

Second MDWorkspace to compare.

Tolerance

Input

number

0

The maximum amount by which values may differ between the workspaces.

MDEventTolerance

Input

number

1e-07

The maximum amount by which values may differ between 2 MDEvents to compare.

CheckEvents

Input

boolean

True

Whether to compare each MDEvent. If False, will only look at the box structure.

Equals

Output

boolean

Boolean set to true if the workspaces match.

Result

Output

string

String describing the difference found between the workspaces

IgnoreBoxID

Input

boolean

False

To ignore box ID-s when comparing MD boxes as Multithreaded splitting assigns box id-s randomly

Description

Compare two MDWorkspaces (MDEventWorkspace or MDHistoWorkspace) to see if they are the same. This is mostly meant for testing/debugging use by developers.

What is compared: The dimensions, as well as the signal and error for each bin of each workspace will be compared.

MDEventWorkspace : the events in each box will be compared if the CheckEvents option is checked. The events would need to be in the same order to match.

Usage

Example - compare two MD workspaces:

# create sample inelastic workspace for MARI instrument containing 1 at all spectra
ws1=CreateSimulationWorkspace(Instrument='MAR',BinParams='-10,1,10',UnitX='DeltaE')
AddSampleLog(ws1,'Ei','12.','Number')
# create the copy of first workspace
ws1a=ws1
# create second workspace which has different signals
ws2=ws1*2;
# Convert to MD
mdWs1 =ConvertToMD(InputWorkspace=ws1,QDimensions='|Q|',QConversionScales='Q in A^-1',SplitInto='100,100',MaxRecursionDepth='1')
mdWs1a=ConvertToMD(InputWorkspace=ws1a,QDimensions='|Q|',QConversionScales='Q in A^-1',SplitInto='100,100',MaxRecursionDepth='1')
mdWs2=ConvertToMD(InputWorkspace=ws2,QDimensions='|Q|',QConversionScales='Q in A^-1',SplitInto='100,100',MaxRecursionDepth='1')
# compare the workspaces
comp_rez1=CompareMDWorkspaces(mdWs1,mdWs1a)
comp_rez2=CompareMDWorkspaces(mdWs1,mdWs2)

# print comparison results
print("Workspaces mdWs1 and mdWs1a are equal? : {0}  : Comparison result: {1}".format(comp_rez1[0], comp_rez1[1]))
if comp_rez2[1].count('Box signal does not match (18360 vs 36720)') == 1:
    result = 'Box signal does not match (18360 vs 36720)'
else:
    result = comp_rez2[1]
print("Workspaces mdWs1 and mdWs2  are equal? : {0} : Comparison result: {1}".format(comp_rez2[0], result))

Output:

Workspaces mdWs1 and mdWs1a are equal? : True  : Comparison result: Success!
Workspaces mdWs1 and mdWs2  are equal? : False : Comparison result: Box signal does not match (18360 vs 36720)

Categories: AlgorithmIndex | MDAlgorithms\Utility\Workspaces

Source

C++ header: CompareMDWorkspaces.h

C++ source: CompareMDWorkspaces.cpp