https://github.com/RaymondLab/Code
Tip revision: f562b26a59ee1fe18ddbdd35eb072e822e4e0f63 authored by Katie Li on 14 November 2022, 22:02:35 UTC
Matlab files on D241B setup
Matlab files on D241B setup
Tip revision: f562b26
Experiment_Default.s2s
'--------------------------------------------------------------------------------
' IMPORT RIG-SPECIFIC PARAMETERS AND UNIVERSAL PARAMETERS
'--------------------------------------------------------------------------------
#include "C:\\Users\\Public\\RaymondLabCode\\Experiment Protocols\\RigChoice.s2s"
#include "C:\\Users\\Public\\RaymondLabCode\\Experiment Protocols\\Parameters_Universal.s2s"
'--------------------------------------------------------------------------------
' MAIN PROGRAM
'--------------------------------------------------------------------------------
ToolbarConfig();
'--------------------------------------------------------------------------------
' Toolbar Callbacks
'--------------------------------------------------------------------------------
Func ToolbarIdle%()
'This function calls repeatedly whenever nothing else is happening
'if runExmpt=1, it is used to run a full expmt automatically. -HP
'expmtMode: 0=habit, 1=0x, 2=2x, 3=ipsi stim, 4=contra stim
'test: 0=wait, 1=test, 2=train
' Check a valid sampling view is running
var currView := ViewKind();
if currView <> 0 then
return 1;
endif;
' Keep sine wave from drifting
if MaxTime() > (prevTime + 1/sinHzChair) then
if driftFix = 1 then
driftFix%();
endif;
endif;
'If an experiment is running:
if runExpmt% = 1 then
'Check the time. Seconds is the current time - compare it to the goal time of each segment
if MaxTime() > goalTime then
docase
' GAP A
case test% = 0 then
SampleKey("0");
SampleKey("x");
goalTime := MaxTime() + 5;
ToolbarInit%(); Yield();
test% := 7;
' GAP B
case test% = 7 then
SampleKey("7");
goalTime := MaxTime() + 5;
ToolbarInit%(); Yield();
' Go to Pre/Post or Train/Test Section
docase
' PRE & POST Tests
case expmtLoc% = 1 then
test% := 1;
' TEST/TRAIN Blocks
case expmtLoc% = 2 then
test% := 2;
' If you have already done the test/train blocks, quit instead.
if rep% = (nBlocks%+1) then
ToolbarQuitExpmt%();
Return(1);
endif
endcase
runFlash(); Yield();
ToolbarInit%(); Yield();
' PRE AND POST TEST
case test% = 1 then
SampleKey("1");
SampleKey("X");
goalTime := MaxTime() + testLength;
test% := 0;
' Keep track of how many PRE/POST tests that you've run
prePostNum := prePostNum + 1;
if prePostNum > 2 then '*** Change to 1 for two pre- and post-tests 24June2022 ***
expmtLoc% := 2;
' This check is for the 'T-35' test
if rep% < nBlocks% then
prePostNum := 1;
endif
else
expmtLoc% := 1;
endif
if expmtMode = 5 then
ToolbarStepOn%();
else
ToolbarSineStart%();
endif;
' BLOCK: TEST
case test% = 2 then
SampleKey("2");
SampleKey("X");
goalTime := MaxTime() + testLength;
testrep% := testrep% + 1;
if testrep% = nTestreps% then
test% := 3;
rep% := rep% + 1;
else
test% := 0;
endif;
' Start correct Stim, STEP or SINE
if expmtMode = 5 then
ToolbarStepOn%();
else
ToolbarSineStart%();
endif;
' BLOCK: TRAIN
case test% = 3 then
SampleKey("3");
SampleKey("x");
SampleKey("X");
goalTime := MaxTime() + runLength;
if rep% < (nBlocks%+1) then
docase
'3 = ipsi, 4 = contra
case expmtMode = 3 or expmtMode = 4 then
ToolbarStimOn%();
'1 = x0, 2 = x2
case expmtMode = 1 or expmtMode = 2 then
ToolbarLightOn%();
'5 = step
case expmtMode = 5 then
ToolbarStepOff%(); Yield();
ToolbarLightOn%(); Yield();
ToolbarStepOn%();
endcase;
else
ToolbarSineStop%();
ToolbarStepOff%();
expmtLoc% := 1;
endif;
if rep% = nBlocks% then
expmtLoc% := 1;
endif
test% := 0;
testrep% := 0;
endcase;
endif;
endif;
Return(1);
End
'--------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
' Configure expmt settings window
'--------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
Func ToolbarConfigExpmt%()
var movementType;
var learningType;
var stimType;
var lightType;
var optoType;
var gp%;
DlgCreate("Experiment Settings", 0, 0, 50); 'Start new dialog
DlgInteger(1,"Number of test/train blocks",0,100,0,0,1);
DlgInteger(2,"Number of tests per block",1,100,0,0,1);
DlgReal(3,"Train length (s)",0,5000);
DlgReal(4,"Test length (s)",0,5000);
DlgList(5,"Movement Type", "sine|step");
DlgList(6,"Learning Type", "x2 (gain up)|x0 (gain down)|OKR (drum only)|habituation (chair only)");
DlgList(7,"Opto During Training", "none|ipsi|contra");
DlgList(8,"Light During Training", "Always On|none|match Opto");
DlgShow(nBlocks%, nTestreps%, runLength, testLength, movementType, learningType, optoType, lightType);
' DlgCreate("Experiment Settings", 0, 0, 50); 'Start new dialog
' DlgInteger(2,"Number of test/train blocks",0,100,0,0,1);
' DlgInteger(3,"Number of test/train blocks",0,100,0,0,1);
' DlgInteger(5,"Number of test/train blocks",0,100,0,0,1);
' DlgInteger(6,"Number of test/train blocks",0,100,0,0,1);
' gp% := DlgGroup("CHAIR",1,1,48,3);
' gp% := DlgGroup("DRUM",1,4,48,3);
' DlgShow(nBlocks%, stimType, lightType, gp%, movementType, learningType);
'--------------------------------------------------------------------------------
' MOVEMENT AND LEARNING TYPES
'--------------------------------------------------------------------------------
docase
' SINE
case movementType = 0 then
docase
' SINE | x2
case learningType = 0 then
sinPhDrum := -90;
sinPhChair := 90;
sinAmpChair := 10;
sinAmpDrum := 10;
' SINE | x0
case learningType = 1 then
sinPhDrum := 90;
sinPhChair := 90;
sinAmpChair := 10;
sinAmpDrum := 10;
' SINE | drum only
case learningType = 2 then
sinPhDrum := 90;
sinPhChair := 90;
sinAmpChair := 0;
sinAmpDrum := 10;
' SINE | chair only
case learningType = 3 then
sinPhDrum := 90;
sinPhChair := 90;
sinAmpChair := 10;
sinAmpDrum := 0;
endcase;
ToolbarSineConfig%()
' STEP
case movementType = 1 then
docase
' STEP | x2
case learningType = 0 then
step_AmpChair := 10;
step_AmpDrum := -10;
' STEP | x0
case learningType = 1 then
step_AmpChair := 10;
step_AmpDrum := 10;
' STEP | drum only
case learningType = 2 then
step_AmpChair := 0;
step_AmpDrum := 10;
' STEP | chair only
case learningType = 3 then
step_AmpChair := 10;
step_AmpDrum := 0;
endcase;
StepConfigWindow%()
endcase;
'--------------------------------------------------------------------------------
' STIM TYPES
'--------------------------------------------------------------------------------
docase
' none
case optoType = 0 then
stepStim := 0;
' ipsi
case optoType = 1 then
ToolbarPulseConfig%()
' contra
case optoType = 2 then
ToolbarPulseConfig%()
endcase;
SetSequencerValues();
Return(1);
End