Skip to content

Commit

Permalink
Merge pull request #1972 from AllenInstitute/feature/1972-Update_Acqu…
Browse files Browse the repository at this point in the history
…ire_NG_for_Sutter

Sutter preparation: Adaptation of Acquire_NG for sutter hardware
  • Loading branch information
t-b authored Jan 17, 2024
2 parents fd8c36a + 782486f commit b8e5b69
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 24 deletions.
8 changes: 4 additions & 4 deletions Packages/tests/HardwareBasic/UTF_BasicHardwareTests.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -615,26 +615,26 @@ static Function UnassociatedChannelsAndTTLs_REENTRY([str])
CHECK_WAVE(settings, TEXT_WAVE)

// fetch some labnotebook entries, the last channel is unassociated
Make/FREE/T expectedUnits = {"pA", "pA", "V"}
for(k = 0; k < DimSize(ADCs, ROWS); k += 1)
[WAVE settings, index] = GetLastSettingChannel(numericalValues, $"", j, "AD ChannelType", ADCs[k], XOP_CHANNEL_TYPE_ADC, DATA_ACQUISITION_MODE)
CHECK_EQUAL_VAR(settings[index], DAQ_CHANNEL_TYPE_DAQ)

[WAVE settings, index] = GetLastSettingChannel(numericalValues, textualValues, j, "AD Unit", ADCs[k], XOP_CHANNEL_TYPE_ADC, DATA_ACQUISITION_MODE)
WAVE/T settingsText = settings
str = settingsText[index]
expectedStr= "pA"
CHECK_EQUAL_STR(str, expectedStr)
CHECK_EQUAL_STR(str, expectedUnits[k])
endfor

Make/FREE/T expectedUnits = {"mV", "mV", "V"}
for(k = 0; k < DimSize(DACs, ROWS); k += 1)
[WAVE settings, index] = GetLastSettingChannel(numericalValues, $"", j, "DA ChannelType", DACs[k], XOP_CHANNEL_TYPE_DAC, DATA_ACQUISITION_MODE)
CHECK_EQUAL_VAR(settings[index], DAQ_CHANNEL_TYPE_DAQ)

[WAVE settings, index] = GetLastSettingChannel(numericalValues, textualValues, j, "DA Unit", DACs[k], XOP_CHANNEL_TYPE_DAC, DATA_ACQUISITION_MODE)
WAVE/T settingsText = settings
str = settingsText[index]
expectedStr= "mV"
CHECK_EQUAL_STR(str, expectedStr)
CHECK_EQUAL_STR(str, expectedUnits[k])
endfor

// test GetActiveChannels
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -687,7 +687,7 @@ static Function TPDuringDAQTPAndUnAssoc_REENTRY([str])
CHECK_EQUAL_WAVES(channelTypes, {DAQ_CHANNEL_TYPE_TP, DAQ_CHANNEL_TYPE_DAQ, DAQ_CHANNEL_TYPE_TP, DAQ_CHANNEL_TYPE_DAQ}, mode = WAVE_DATA)

WAVE/T units = AFH_GetChannelUnits(configWave)
CHECK_EQUAL_TEXTWAVES(units, {"mV", "mV", "pA", "pA"}, mode = WAVE_DATA)
CHECK_EQUAL_TEXTWAVES(units, {"mV", "V", "pA", "V"}, mode = WAVE_DATA)

WAVE numericalValues = GetLBNumericalValues(str)
WAVE textualValues = GetLBTextualValues(str)
Expand Down
78 changes: 59 additions & 19 deletions Packages/tests/UTF_HardwareHelperFunctions.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -1420,39 +1420,87 @@ Function AcquireData_NG(STRUCT DAQSettings &s, string device)

REQUIRE(WindowExists(device))

#ifdef TESTS_WITH_SUTTER_HARDWARE
Duplicate/FREE s.hs, sutterRequirementCheck
sutterRequirementCheck[] = s.aso[p] == 1 && s.hs[p] == 1
if(!(sum(sutterRequirementCheck) == 1 && sutterRequirementCheck[0] == 1))
INFO("SUTTER hardware currently supports only 1 HS")
CHECK(0)
UnRegisterIUTFMonitor()
Abort
endif

WAVE deviceInfo = GetDeviceInfoWave(device)
#endif

for(i = 0; i < NUM_HEADSTAGES; i += 1)

PGC_SetAndActivateControl(device, "Popup_Settings_Headstage", val = i)
PGC_SetAndActivateControl(device, "button_Hardware_ClearChanConn")

if(!s.hs[i])
ctrl = GetPanelControl(i, CHANNEL_TYPE_HEADSTAGE, CHANNEL_CONTROL_CHECK)
PGC_SetAndActivateControl(device, ctrl, val=CHECKBOX_UNSELECTED, switchTab = 1)
if(s.hs[i] == 0)
#ifndef TESTS_WITH_SUTTER_HARDWARE
PGC_SetAndActivateControl(device, "button_Hardware_ClearChanConn")
#endif
continue
endif

if(IsEmpty(s.st[i]))
CHECK(s.TP)
else
ctrl = GetPanelControl(s.da[i], CHANNEL_TYPE_DAC, CHANNEL_CONTROL_WAVE)
PGC_SetAndActivateControl(device, ctrl, str = s.st[i])
endif

#ifndef TESTS_WITH_SUTTER_HARDWARE
PGC_SetAndActivateControl(device, "Popup_Settings_VC_DA", str = num2str(s.da[i]))
PGC_SetAndActivateControl(device, "Popup_Settings_IC_DA", str = num2str(s.da[i]))
PGC_SetAndActivateControl(device, "Popup_Settings_VC_AD", str = num2str(s.ad[i]))
PGC_SetAndActivateControl(device, "Popup_Settings_IC_AD", str = num2str(s.ad[i]))
#endif

if(s.aso[i] != 1)
#ifdef TESTS_WITH_SUTTER_HARDWARE
INFO("Unassociated channel %d is setup on an existing HS", n0=i)
CHECK_GT_VAR(i + 1, deviceInfo[%DA])
#endif
#ifndef TESTS_WITH_SUTTER_HARDWARE
PGC_SetAndActivateControl(device, "button_Hardware_ClearChanConn")
#endif
ctrl = GetPanelControl(s.da[i], CHANNEL_TYPE_DAC, CHANNEL_CONTROL_GAIN)
PGC_SetAndActivateControl(device, ctrl, val=1)
ctrl = GetPanelControl(s.da[i], CHANNEL_TYPE_DAC, CHANNEL_CONTROL_CHECK)
PGC_SetAndActivateControl(device, ctrl, val=CHECKBOX_SELECTED)
ctrl = GetPanelControl(s.da[i], CHANNEL_TYPE_DAC, CHANNEL_CONTROL_UNIT)
PGC_SetAndActivateControl(device, ctrl, str="V")
ctrl = GetPanelControl(s.ad[i], CHANNEL_TYPE_ADC, CHANNEL_CONTROL_GAIN)
PGC_SetAndActivateControl(device, ctrl, val=1)
ctrl = GetPanelControl(s.ad[i], CHANNEL_TYPE_ADC, CHANNEL_CONTROL_CHECK)
PGC_SetAndActivateControl(device, ctrl, val=CHECKBOX_SELECTED)
ctrl = GetPanelControl(s.ad[i], CHANNEL_TYPE_ADC, CHANNEL_CONTROL_UNIT)
PGC_SetAndActivateControl(device, ctrl, str="V")

continue
endif
// associated HS below here
ctrl = GetPanelControl(i, CHANNEL_TYPE_HEADSTAGE, CHANNEL_CONTROL_CHECK)
PGC_SetAndActivateControl(device, ctrl, val=CHECKBOX_SELECTED, switchTab = 1)

#ifdef TESTS_WITH_SUTTER_HARDWARE
INFO("Associated HS %d does not exist on this Sutter HW setup", n0=i)
CHECK_LT_VAR(i, deviceInfo[%DA])
INFO("Requested DA channel %d for HS %d does not match fixed DA channel of Sutter HW setup", n0=s.da[i], n1=i)
CHECK_EQUAL_VAR(i, s.da[i])
INFO("Requested AD channel %d for HS %d does not match fixed AD channel of Sutter HW setup", n0=s.ad[i], n1=i)
CHECK_EQUAL_VAR(i, s.ad[i])
#endif

if(s.amp && activeHS < 2)
// first entry is none
PGC_SetAndActivateControl(device, "popup_Settings_Amplifier", val = 1 + activeHS)

PGC_SetAndActivateControl(device, "button_Hardware_AutoGainAndUnit")
endif

if(IsEmpty(s.st[i]))
CHECK(s.TP)
else
ctrl = GetPanelControl(s.da[i], CHANNEL_TYPE_DAC, CHANNEL_CONTROL_WAVE)
PGC_SetAndActivateControl(device, ctrl, str = s.st[i])
endif

if(!IsEmpty(s.ist[i]))
ctrl = GetPanelControl(s.da[i], CHANNEL_TYPE_DAC, CHANNEL_CONTROL_INDEX_END)
PGC_SetAndActivateControl(device, ctrl, str = s.ist[i])
Expand All @@ -1470,14 +1518,6 @@ Function AcquireData_NG(STRUCT DAQSettings &s, string device)
PGC_SetAndActivateControl(device, ctrl, val = 1)
DoUpdate/W=$device

if(!s.aso[i])
// clear the headstages channel connection and make the DA and AD channels unassociated
PGC_SetAndActivateControl(device, "button_Hardware_ClearChanConn")

ctrl = GetPanelControl(i, CHANNEL_TYPE_HEADSTAGE, CHANNEL_CONTROL_CHECK)
PGC_SetAndActivateControl(device, ctrl , val=CHECKBOX_UNSELECTED)
endif

activeHS += 1
endfor

Expand Down
7 changes: 7 additions & 0 deletions Packages/tests/UTF_TestNWBExportV1.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,13 @@ static Function TestTimeSeries(fileID, device, groupID, channel, sweep, pxpSweep
conversion = ReadAttributeAsNumber(channelGroupID, "data", "conversion")
CHECK_CLOSE_VAR(conversion, MILLI_TO_ONE, tol = 1e-5)

unit = ReadTextAttributeAsString(channelGroupID, "data", "unit")
base_unit_ref = "V"
CHECK_EQUAL_STR(unit, base_unit_ref)
elseif(!CmpStr(unit_ref, "V"))
conversion = ReadAttributeAsNumber(channelGroupID, "data", "conversion")
CHECK_CLOSE_VAR(conversion, 1, tol = 1e-3)

unit = ReadTextAttributeAsString(channelGroupID, "data", "unit")
base_unit_ref = "V"
CHECK_EQUAL_STR(unit, base_unit_ref)
Expand Down
10 changes: 10 additions & 0 deletions Packages/tests/UTF_TestNWBExportV2.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,16 @@ static Function TestTimeSeries(fileID, filepath, device, groupID, channel, sweep
// translate back to hardcoded units
base_unit_ref = "volts"

CHECK_EQUAL_STR(unit, base_unit_ref)
elseif(!CmpStr(unit_ref, "V"))
conversion = ReadAttributeAsNumber(channelGroupID, "data", "conversion")
CHECK_CLOSE_VAR(conversion, 1, tol = 1e-3)

unit = ReadTextAttributeAsString(channelGroupID, "data", "unit")

// translate back to hardcoded units
base_unit_ref = "volts"

CHECK_EQUAL_STR(unit, base_unit_ref)
elseif(IsEmpty(unit_ref)) // TTL data
conversion = ReadAttributeAsNumber(channelGroupID, "data", "conversion")
Expand Down

0 comments on commit b8e5b69

Please sign in to comment.