Skip to content

Commit 4bef6fc

Browse files
committed
SF: Add operation extract to retrieve a single dataset from a multi ds result
The API is: extract(multi_dataset, index) extract returns a single dataset. Added test
1 parent 88b68db commit 4bef6fc

File tree

5 files changed

+76
-1
lines changed

5 files changed

+76
-1
lines changed

Packages/MIES/MIES_Constants.ipf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2540,6 +2540,7 @@ StrConstant SF_OP_TPSS = "tpss"
25402540
StrConstant SF_OP_TPINST = "tpinst"
25412541
StrConstant SF_OP_TPBASE = "tpbase"
25422542
StrConstant SF_OP_TPFIT = "tpfit"
2543+
StrConstant SF_OP_EXTRACT = "extract"
25432544
///@}
25442545

25452546
StrConstant SF_PROPERTY_TABLE = "Table"

Packages/MIES/MIES_SweepFormula.ipf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ Function/WAVE SF_GetNamedOperations()
9898
SF_OP_MERGE, SF_OP_FIT, SF_OP_FITLINE, SF_OP_DATASET, SF_OP_SELECTVIS, SF_OP_SELECTCM, SF_OP_SELECTSTIMSET, \
9999
SF_OP_SELECTIVSCCSWEEPQC, SF_OP_SELECTIVSCCSETQC, SF_OP_SELECTRANGE, SF_OP_SELECTEXP, SF_OP_SELECTDEV, \
100100
SF_OP_SELECTEXPANDSCI, SF_OP_SELECTEXPANDRAC, SF_OP_SELECTSETCYCLECOUNT, SF_OP_SELECTSETSWEEPCOUNT, \
101-
SF_OP_SELECTSCIINDEX, SF_OP_SELECTRACINDEX, SF_OP_ANAFUNCPARAM, SF_OP_CONCAT, SF_OP_TABLE}
101+
SF_OP_SELECTSCIINDEX, SF_OP_SELECTRACINDEX, SF_OP_ANAFUNCPARAM, SF_OP_CONCAT, SF_OP_TABLE, SF_OP_EXTRACT}
102102

103103
return wt
104104
End

Packages/MIES/MIES_SweepFormula_Executor.ipf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,9 @@ Function/WAVE SFE_FormulaExecutor(STRUCT SF_ExecutionData &exd, [variable srcLoc
469469
case SF_OP_DATASET:
470470
WAVE out = SFO_OperationDataset(exdop)
471471
break
472+
case SF_OP_EXTRACT:
473+
WAVE out = SFO_OperationExtract(exdop)
474+
break
472475
case SF_OP_SELECTVIS:
473476
WAVE out = SFOS_OperationSelectVis(exdop)
474477
break

Packages/MIES/MIES_SweepFormula_Operations.ipf

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,24 @@ Function/WAVE SFO_OperationDataset(STRUCT SF_ExecutionData &exd)
742742
return SFH_GetOutputForExecutor(output, exd.graph, SF_OP_DATASET)
743743
End
744744

745+
// extract(<dataset>, index)
746+
Function/WAVE SFO_OperationExtract(STRUCT SF_ExecutionData &exd)
747+
748+
variable idx
749+
string opShort = SF_OP_EXTRACT
750+
751+
SFH_CheckArgumentCount(exd, opShort, 2, maxArgs = 2)
752+
753+
WAVE/WAVE datasets = SFH_GetArgumentAsWave(exd, opShort, 0)
754+
idx = SFH_GetArgumentAsNumeric(exd, opShort, 1)
755+
SFH_ASSERT(idx < DimSize(datasets, ROWS), "index out of range")
756+
757+
WAVE/WAVE output = SFH_CreateSFRefWave(exd.graph, opShort, 1)
758+
output[0] = datasets[idx]
759+
760+
return SFH_GetOutputForExecutor(output, exd.graph, opShort)
761+
End
762+
745763
Function/WAVE SFO_OperationDerivative(STRUCT SF_ExecutionData &exd)
746764

747765
variable numArgs

Packages/tests/Basic/UTF_SweepFormula_Operations.ipf

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3665,3 +3665,56 @@ static Function TestOperationTable()
36653665
val = JWN_GetNumberFromWaveNote(output, SF_PROPERTY_TABLE)
36663666
CHECK_EQUAL_VAR(val, 1)
36673667
End
3668+
3669+
static Function TestOperationExtract()
3670+
3671+
string str, wavePath
3672+
string win
3673+
3674+
win = GetDataBrowserWithData()
3675+
3676+
str = "extract(1)"
3677+
try
3678+
WAVE data = SFE_ExecuteFormula(str, win, singleResult = 1, useVariables = 0)
3679+
FAIL()
3680+
catch
3681+
PASS()
3682+
endtry
3683+
3684+
str = "extract(1,1,1)"
3685+
try
3686+
WAVE data = SFE_ExecuteFormula(str, win, singleResult = 1, useVariables = 0)
3687+
FAIL()
3688+
catch
3689+
PASS()
3690+
endtry
3691+
3692+
str = "extract(1,a)"
3693+
try
3694+
WAVE data = SFE_ExecuteFormula(str, win, singleResult = 1, useVariables = 0)
3695+
FAIL()
3696+
catch
3697+
PASS()
3698+
endtry
3699+
3700+
str = "extract(1,0)"
3701+
WAVE data = SFE_ExecuteFormula(str, win, singleResult = 1, useVariables = 0)
3702+
CHECK_EQUAL_WAVES(data, {1}, mode = WAVE_DATA)
3703+
3704+
str = "extract(a,0)"
3705+
WAVE data = SFE_ExecuteFormula(str, win, singleResult = 1, useVariables = 0)
3706+
Make/FREE/T ref = {"a"}
3707+
CHECK_EQUAL_WAVES(data, ref, mode = WAVE_DATA)
3708+
3709+
str = "extract([1,2],0)"
3710+
WAVE data = SFE_ExecuteFormula(str, win, singleResult = 1, useVariables = 0)
3711+
CHECK_EQUAL_WAVES(data, {1, 2}, mode = WAVE_DATA)
3712+
3713+
str = "extract(dataset(1,2),0)"
3714+
WAVE data = SFE_ExecuteFormula(str, win, singleResult = 1, useVariables = 0)
3715+
CHECK_EQUAL_WAVES(data, {1}, mode = WAVE_DATA)
3716+
3717+
str = "extract(dataset(1,2),1)"
3718+
WAVE data = SFE_ExecuteFormula(str, win, singleResult = 1, useVariables = 0)
3719+
CHECK_EQUAL_WAVES(data, {2}, mode = WAVE_DATA)
3720+
End

0 commit comments

Comments
 (0)