\Code for a repeated acquisition procedure
\Written for a three-key three-key-color operant chamber
\(like we have at WMU)
\I'll work on cleaning this up and commenting....
\Matt Porritt 5/19/05
\REPEATED ACQUISITION PG 96 POLING BYRNE
\THIS SECTION IS FOR OUTPUTS
^HL = 8 \HOUSE LIGHT
^FAN = 12 \HOUSE FAN
^FOOD = 7 \DA HOPPA
^CENTERR = 4 \CENTER RED LIGHT
^CENTERG = 5
^CENTERW = 6 \CENTER WHITE LIGHT
^LEFTR = 1 \LEFT RED LIGHT
^LEFTW = 2 \LEFT WHITE LIGHT
^LEFTG = 3
^RIGHTR = 9 \RIGHT RED LIGHT
^RIGHTW = 10 \RIGHT WHITE LIGHT
^RIGHTG = 11
\Z1 = LISTEN FOR RESPONSE
\Z2 = CORRECT RESPONSE
\Z3 = SEND PROGRAM BACK TO START TIME OUT
\Z4 = END PROGRAM
\Z5 = COMPLETE CHAIN
\Z6 = BOX CHECK
\A = FIRST RESPONSE
\B = SECOND RESPONSE
\C = THIRD RESPONSE
\D = RECORD ARRAY
\ D(0) = RESPONSES
\ D(1) = REWARDS
\ D(2) = ENDING TIME
\ D(3) = PERCENTAGE CORRECT
\ D(5) = RESPONSES PER MINUTE
\ D(6) = CORRECT RESPONSES
\E = TRIALS
\F = KEEP TRACK ARRAY
\G = CURRENT CORRECT RESPONSE
\H = RESPONSE ARRAY
\J = NUMBER USED TO INCREMENT F
\K = PERCENT IN TRIAL OF WHICH KEY (NOT YET FUNCTIONAL)
\L = PERCENT OF TRIAL ARRAY
\M = SESSION MINUTES
\N = SESSION SECONDS
\S = ACTUAL SECONDS
DIM D = 10
DIM H = 9999
DISKVARS = D, F, H, A, B, C, R
DIM K = 3
LIST F = 10000, 0, 1, 0, 0, 0
DIM R = 75
S.S.1,
S1,
#K1: SET A = 1; SET B = 1; SET C = 1 --->S2
#K2: SET A = 1; SET B = 1; SET C = 2 --->S2
#K3: SET A = 1; SET B = 1; SET C = 3 --->S2
#K4: SET A = 1; SET B = 2; SET C = 1 --->S2
#K5: SET A = 1; SET B = 2; SET C = 2 --->S2
#K6: SET A = 1; SET B = 2; SET C = 3 --->S2
#K7: SET A = 1; SET B = 3; SET C = 1 --->S2
#K8: SET A = 1; SET B = 3; SET C = 2 --->S2
#K9: SET A = 1; SET B = 3; SET C = 3 --->S2
#K10: SET A = 2; SET B = 1; SET C = 1 --->S2
#K11: SET A = 2; SET B = 1; SET C = 2 --->S2
#K12: SET A = 2; SET B = 1; SET C = 3 --->S2
#K13: SET A = 2; SET B = 2; SET C = 1 --->S2
#K14: SET A = 2; SET B = 2; SET C = 2 --->S2
#K15: SET A = 2; SET B = 2; SET C = 3 --->S2
#K16: SET A = 2; SET B = 3; SET C = 1 --->S2
#K17: SET A = 2; SET B = 3; SET C = 2 --->S2
#K18: SET A = 2; SET B = 3; SET C = 3 --->S2
#K19: SET A = 3; SET B = 1; SET C = 1 --->S2
#K20: SET A = 3; SET B = 1; SET C = 2 --->S2
#K21: SET A = 3; SET B = 1; SET C = 3 --->S2
#K22: SET A = 3; SET B = 2; SET C = 1 --->S2
#K23: SET A = 3; SET B = 2; SET C = 2 --->S2
#K24: SET A = 3; SET B = 2; SET C = 3 --->S2
#K25: SET A = 3; SET B = 3; SET C = 1 --->S2
#K26: SET A = 3; SET B = 3; SET C = 2 --->S2
#K27: SET A = 3; SET B = 3; SET C = 3 --->S2
S2,
.1":Z6--->SX
\BOX CHECK
S.S.2,
S1, \TURN ON WHITE, TURN ON HOUSE
#Z6: ON 1, 5, 11, ^HL --->S2
S2, \ON THREE PECKS POKES GOTO GREEN HOPPER UP
3#R1: OFF 1, 5, 11; ON 3, 4, 10, ^FOOD --->S3
S3, \ON THREE CENTER POKES GOTO LAST HOPPER DOWN
3#R2: OFF 3, 4, 10, ^FOOD; ON 2, 6, 9 --->S4
S4, \ON THREE RIGHT POKES OFF ALL LIGHTS FAN ON
3#R3: OFF 2, 6, 9, ^HL; ON ^FAN --->S5
S5,
0.1": --->SX
S.S.3,
S1,
#START: --->S2
S2,
3": ON^HL, ^LEFTW, ^CENTERW, ^RIGHTW; SET G = A; ADD E; Z1 --->S3
S3,
#Z2: ADD D(0); SHOW 1, RESP, D(0); ADD D(6); SHOW 2, CORR, D(6) --->S5
#Z3: ADD D(0); SHOW 1, RESP, D(0) --->S4
S4,
3": --->S2
S5,
.01": OFF^LEFTW, ^CENTERW, ^RIGHTW --->S6
S6,
.01": ON^LEFTG, ^CENTERG, ^RIGHTG, ^HL; SET G = B; Z1 --->S7
S7,
#Z2: ADD D(0); SHOW 1, RESP, D(0); ADD D(6); SHOW 2, CORR, D(6) --->S9
#Z3: ADD D(0); SHOW 1, RESP, D(0) --->S8
S8,
3": --->S6
S9,
.01": OFF^LEFTG, ^CENTERG, ^RIGHTG --->S10
S10,
.01": ON^LEFTR, ^CENTERR, ^RIGHTR, ^HL; SET G = C; Z1 --->S11
S11,
#Z2: ADD D(0); SHOW 1, RESP, D(0); ADD D(6); SHOW 2, CORR, D(6) --->S13
#Z3: ADD D(0); SHOW 1, RESP, D(0) --->S12
S12,
3": --->S10
S13,
.01": OFF^LEFTR, ^CENTERR, ^RIGHTR; ON^FOOD; ADD D(1); SHOW 3, FOOD, D(1); Z5 --->S14
S14,
3": OFF^FOOD --->S2
S.S.4,
S1,
#Z1: --->S2
S2,
#R1: IF G = 1 [@ONETRUE, @ONEFALSE]
@ONETRUE: Z2 --->S1
@ONEFLASE: --->S3
#R2: IF G = 2 [@TWOTRUE, @TWOFALSE]
@TWOTRUE: Z2 --->S1
@TWOFALSE: --->S3
#R3: IF G = 3 [@THREETRUE, @THREEFALSE]
@THREETRUE: Z2 --->S1
@THREEFALSE: --->S3
S3,
.01": OFF^HL, ^LEFTW, ^CENTERW, ^RIGHTW, ^LEFTR, ^CENTERR, ^RIGHTR, ^LEFTG, ^CENTERG, ^RIGHTG; Z3 --->S2
S.S.5, \CLOCK
S1, \ON START DISPLAY CLOCK
#START: SHOW 5, MIN, M; SHOW 6, SEC, N ---> S2
S2, \INCREMENT N BY SECONDS, M BY MINUTES
1": ADD N; IF N=60 [@CLOCKTRUE, @CLOCKFALSE]
@CLOCKTRUE: ADD M; SET N=0; SHOW 5, MIN, M; SHOW 6, SEC, N --->SX
@CLOCKFALSE: SHOW 5, MIN, M; SHOW 6, SEC, N --->SX
S.S.6, \LISTEN FOR 70 REWARDS
S1,
#START: --->S2
S2,
.01": IF D(1) = 70 [@TRIALSTRUE, @TRIALSFALSE]
@TRIALSTRUE: Z4 --->S3
@TRIALSFALSE: --->SX
S3,
.01": --->SX
S.S.7, \LISTEN FOR 60 MINUTES
S1,
#START: --->S2
S2,
.01": IF M = 240 [@TIMETRUE, @TIMEFALSE]
@TIMETRUE: Z4 --->S3
@TIMEFALSE: --->SX
S3,
.01": --->SX
S.S.8 \ACTUAL SECONDS
S1,
#START: --->S2
S2,
1": ADD D(2) --->SX
S.S.9, \CALCULATE AND SHUT DOWN
S1,
#Z4: OFF^HL, ^LEFTW, ^CENTERW, ^RIGHTW, ^LEFTR, ^CENTERR, ^RIGHTR, ^LEFTG, ^CENTERG, ^RIGHTG --->S2
S2,
.01": IF D(0) = 0 [@MATHTRUE, @MATHFALSE]
@MATHTRUE: SET D(3) = 0 --->S3
@MATHFALSE: SET D(3) = (D(6)/D(0)) * 100 --->S3
S3,
.01": IF D(0) = 0 [@MATHTRUE, @MATHFALSE]
@MATHTRUE: SET D(5) = 0 --->S3
@MATHFALSE: SET D(5) = (D(0)/(D(2)/60)) * 100 --->S4
S4,
.1": --->STOPABORTFLUSH
S.S.10, \KEEP TRACK ARRAY
\ F(0) = TRIES TO REINFORCEMENT
\ F(1) = TRIES AT COLOR
\ F(2) = COLOR OF TRIAL
\ F(3) = TRIES AT ONE
\ F(4) = TRIES AT TWO
\ F(5) = TRIES AT THREE
\Z1 = LISTEN FOR RESPONSE
\Z2 = CORRECT RESPONSE
\Z3 = SEND PROGRAM BACK TO START TIME OUT
\Z4 = END PROGRAM
\Z5 = COMPLETE CHAIN
\Z6 = BOX CHECK
S1,
#Z5: SET F(0) = F(0)+10000; SET F(2) = 1; SET F(1) = 0; SET F(3) = 0; SET F(4) = 0; SET F(5) = 0; SET P = 2 --->SX \RESET ARRAY, ADD TO TRIALS
#Z2: SET F(2) = F(2)+1; SET F(1) = 0 --->SX \COLOR OF TRIAL
#Z3: ADD F(P); SET P = 2; --->SX
#Z1: SET F(1) = F(1)+1; ADD P --->SX \TIMES TRIED THIS COLOR
S.S.11, \RESPONSES ARRAY
S1,
#START: --->S2
S2,
#R1: SET H(J) = F(0)+(F(P)*100)+(F(2)*10)+1; ADD J; SET H(J) = -987.987; ADD K(0) --->SX
#R2: SET H(J) = F(0)+(F(P)*100)+(F(2)*10)+2; ADD J; SET H(J) = -987.987; ADD K(1) --->SX
#R3: SET H(J) = F(0)+(F(P)*100)+(F(2)*10)+3; ADD J; SET H(J) = -987.987; ADD K(2) --->SX
\S.S.12, \PERCENT OF WHICH KEY IN TRIAL
\S1,
\ #Z2: SET L(O) = (K(0)/(K(0)+K(1)+K(2))); ADD O --->S2
\S2,
\ .01":SET L(O) = (K(1)/(K(0)+K(1)+K(2))); ADD O --->S3
\S3,
\ .01":SET L(O) = (K(2)/(K(0)+K(1)+K(2))); SET O = O+3 --->S1
S.S.13, \COUNT ERRORS PER BIN
S1,
#START: SET Q = 0 --->S2
S2,
#Z1: --->S3
S3,
#Z3: ADD R(Q) --->SX
#Z5: ADD Q --->S2
|