Skip to content

Commit

Permalink
Merge pull request #2063 from AllenInstitute/bugfix/2063-fix_wb_stims…
Browse files Browse the repository at this point in the history
…et_recreation

WB: fix recreation of dependent Stimsets from Stimset parameter waves
  • Loading branch information
t-b authored Mar 15, 2024
2 parents a5e672e + 99c0698 commit 0a673e6
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 0a673e6

Please sign in to comment.