\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