'-------------------------------------------------------------------------------- ' 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 '-------------------------------------------------------------------------------- var lightPhase; 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("x"); goalTime := MaxTime() + 5; ToolbarInit%(); Yield(); test% := 7; ' GAP B case test% = 7 then 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("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 expmtLoc% := 2; ' This check is for the 'T-35' test if rep% < nBlocks% then prePostNum := 1; endif else expmtLoc% := 1; endif ToolbarSineStart%(); ' BLOCK: TEST case test% = 2 then SampleKey("X"); goalTime := MaxTime() + testLength; testrep% := testrep% + 1; if testrep% = nTestreps% then test% := 3; rep% := rep% + 1; else test% := 0; endif; ToolbarSineStart%(); ' BLOCK: TRAIN case test% = 3 then SampleKey("x"); SampleKey("X"); goalTime := MaxTime() + runLength; if rep% < (nBlocks%+1) then prevTime := MaxTime(); measuredZeroChair := ChanMeasure(hhposCh%, 2, prevTime-2, prevTime-.5); measuredZeroDrum := ChanMeasure(htposCh%, 2, prevTime-2, prevTime-.5); SampleKey( "M" ); sineOn% := 1; Yield(); ToolbarSet(SinePos, "Sine Off",ToolbarSineStop%); 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%() DlgCreate("Experiment settings"); 'Start new dialog DlgInteger(1,"Number of run-test blocks",0,100,0,0,1); DlgInteger(2,"Number of tests per block",1,100,0,0,1); 'set to 0 if not using Chair DlgReal(3,"Run length (s)",0,5000); DlgReal(4,"Test length (s)",0,5000); DlgList(5,"Expmt mode", "x0|x2s"); dlgList(6, "Head Phase of Light On", "ipsi|contra"); DlgInteger(6,"Light flash on?)",0,1,0,0,"0|1"); DlgShow(nBlocks%, nTestreps%, runLength, testLength, expmtMode, lightPhase, flashon%); docase case expmtMode = 0 then 'x0 sinPhDrum := 90; sinPhChair := 90; sinAmpChair := 10; sinAmpDrum := 10; case expmtMode = 1 then 'x2 sinPhDrum := -90; sinPhChair := 90; sinAmpChair := 10; sinAmpDrum := 10; endcase; if testStim > 0 then ToolbarPulseConfig%() endif; SetSequencerValues(); Return(1); End