Skip to content

Commit

Permalink
WB: fix recreation of dependent Stimsets from Stimset parameter waves
Browse files Browse the repository at this point in the history
The WB has an issue, where non-existing stimsets are not treated as
needing an update. Thus, combine type stimsets that depend on another
stimset being created first can not be created because the other stimset
is not being created from the parameter waves.

since 792d0d2 (WB: update stimset on changes, 2016-10-31)
  • Loading branch information
MichaelHuth committed Mar 14, 2024
1 parent fd19553 commit 99c0698
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 22 deletions.
33 changes: 11 additions & 22 deletions Packages/MIES/MIES_WaveBuilder.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -65,29 +65,18 @@ Function/Wave WB_CreateAndGetStimSet(setName)

DFREF dfr = GetSetFolder(type)
WAVE/Z/SDFR=dfr stimSet = $setName

if(WB_StimsetIsFromThirdParty(setName))
if(WaveExists(stimSet))
return stimSet
else
return $""
endif
if(WB_StimsetIsFromThirdParty(setName) || !WB_StimsetNeedsUpdate(setName))
return stimSet
endif

needToCreateStimSet = (!WaveExists(stimSet) || WB_StimsetNeedsUpdate(setName))

if(needToCreateStimSet)
// create current stimset
WAVE/Z stimSet = WB_GetStimSet(setName=setName)
if(!WaveExists(stimSet))
return $""
endif

WAVE/Z/SDFR=dfr oldStimSet = $setName
if(WaveExists(oldStimSet))
KillOrMoveToTrash(wv=oldStimSet)
endif
WAVE/Z/SDFR=dfr oldStimSet = $setName
if(WaveExists(oldStimSet))
KillOrMoveToTrash(wv=oldStimSet)
endif

// create current stimset
WAVE/Z stimSet = WB_GetStimSet(setName=setName)
if(WaveExists(stimSet))
MoveWave stimSet, dfr:$setName
WAVE/SDFR=dfr stimSet = $setName
endif
Expand Down Expand Up @@ -212,8 +201,8 @@ static Function WB_StimsetNeedsUpdate(setName)
string stimsets
variable lastModStimSet, numWaves, numStimsets, i

// stimset wave note is too old
if(!WB_StimsetHasLatestNoteVersion(setName))
// stimset does not exist or wave note is too old
if(!WB_StimsetExists(setName) || !WB_StimsetHasLatestNoteVersion(setName))
return 1
endif

Expand Down
55 changes: 55 additions & 0 deletions Packages/tests/Basic/UTF_WaveBuilder.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -382,3 +382,58 @@ Function CombineStimsetSubStrings()
CHECK_GT_VAR(DimSize(wv, ROWS), 0)
CHECK_NO_RTE()
End

static Function CreateDependentStimsetsFromParameterWaves()

string wbPanel, stimsets, refList, setNameF, setNameB, formula
string setNameFormula = "formula"
string setNameBase = "baseSet"
string chanTypeSuffix = "_DA_0"

DFREF dfr = GetWBSvdStimSetParamPath()
KillDataFolder dfr

setNameF = ST_CreateStimset(setNameFormula, CHANNEL_TYPE_DAC)
ST_SetStimsetParameter(setNameF, "Total number of epochs", var = 1)
ST_SetStimsetParameter(setNameF, "Total number of steps", var = 1)
ST_SetStimsetParameter(setNameF, "Type of Epoch 0", var = EPOCH_TYPE_SQUARE_PULSE)
ST_SetStimsetParameter(setNameF, "Duration", epochIndex = 0, var = 10)
ST_SetStimsetParameter(setNameF, "Amplitude", epochIndex = 0, var = 3)

setNameB = ST_CreateStimset(setNameBase, CHANNEL_TYPE_DAC)
ST_SetStimsetParameter(setNameB, "Total number of epochs", var = 1)
ST_SetStimsetParameter(setNameB, "Total number of steps", var = 1)
ST_SetStimsetParameter(setNameB, "Type of Epoch 0", var = EPOCH_TYPE_COMBINE)
formula = "2*" + LowerStr(setNameF) + "?"
ST_SetStimsetParameter(setNameB, "Combine epoch formula", epochIndex = 0, str = formula)
ST_SetStimsetParameter(setNameB, "Combine epoch formula version", epochIndex = 0, str = WAVEBUILDER_COMBINE_FORMULA_VER)

// Retrieve stimsets from parameter waves
DFREF dfr = GetWBSvdStimSetPath()
KillDataFolder dfr
stimsets = ST_GetStimsetList()
stimsets = SortList(stimsets, ";", 16)
refList = AddListItem(setNameBase + chanTypeSuffix, "")
refList = AddListItem(setNameFormula + chanTypeSuffix, refList)
refList = AddListItem(STIMSET_TP_WHILE_DAQ, refList)
refList = SortList(refList, ";", 16)
CHECK_EQUAL_STR(stimsets, refList, case_sensitive=0)

// Retrieve stimsets created from parameter waves
DFREF dfr = GetWBSvdStimSetPath()
KillDataFolder dfr

WAVE/Z baseSet = WB_CreateAndGetStimSet(setNameBase + chanTypeSuffix)
CHECK_WAVE(baseSet, NUMERIC_WAVE)
CHECK_GT_VAR(DimSize(baseSet, ROWS), 0)
WaveStats/Q baseSet
CHECK_EQUAL_VAR(V_max, 2 * 3)
CHECK_EQUAL_VAR(V_min, 2 * 3)

// Check as third party stimsets
DFREF dfr = GetWBSvdStimSetParamPath()
KillDataFolder dfr
stimsets = ST_GetStimsetList()
stimsets = SortList(stimsets, ";", 16)
CHECK_EQUAL_STR(stimsets, refList, case_sensitive=0)
End

0 comments on commit 99c0698

Please sign in to comment.