Home
med-pc® iv programmer`s manual
Contents
1. SF BE SURE NOT TO REMOVE THE FAR DIRECTIVE TO THE LEFT THIS PROC DEMONSTRATES WRITING TO A DATA FILE IN THE BACKGROUND Procedure BackProcl MPCGlobal MPCGlobalPtr Box Byte Export Var Data DataRec St String 50 OutF Text I Word Begin With MPCGlobal Do Begin Data BoxPointer Box With Data Data Description Data Header Do Begin St LowerCase SubjectSt txt While St 1 Do Delete St 1 1 Assign OutF Data St Rewrite OutF Vars C Size EXEMPLIFIES HOW TO DETERMINE THE NUMBER OF ELEMENTS ASSOCIATED WITH ANY ARRAY OR VARIABLE THE FIRST ELEMENT OF ARRAYS OR VARIABLES IS REFERENCED AS 0 AND THE SIZE FIELD GIVES THE HIGHEST SUBSCRIPT THE FOLLOWING LOOP WRITES ALL ELEMENTS OF ARRAY C TO THE OUTPUT FILE j For 1 0 To Vars C Size Do Writeln OutF BigArr Vars C StartOffset I 9 2 Close OutF THE FOLLOWING LINE SETS VARIABLE D SO THAT THE CALLING BOX CAN KNOW THAT THE JOB IS DONE ANY VARIABLE OR ARRAY ELEMENT COULD BE SUBSTITUTED j BigArr Vars D StartOffset zd Syntax for addressing a simple Variable End With I IORESULT Removes any error conditions Important if doing file I O BackRequest Box 1 False This must always be included to let MED PC know that the
2. With Data Data Description Data Header Do Begin Str BigArr Vars E StartOffset 19 8 0 Temp While Temp 1 Do Delete Temp 1 1 StrPCopy SubjectSt Temp End With End With End ChangeSNum Background Procedures As mentioned at the beginning of this Appendix there are a variety of Pascal functions that must not be called within Pascal procedures called from directly within an MSN procedure due to their lack of reentrancy There is a way however to use the non reentrant functions the MSN command BKGRND allows the use of these functions within MSN procedures The source code for background procedures must be placed in the file BACKPROC PAS This is a departure from the DOS version of MED PC in which background procedures were contained in USER PAS If you are porting from DOS you should place only the body of the background procedures in the file BACKPROC PAS Do not copy the procedure headers 158 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL In contrast to normal inline User Pascal code procedures called via BKGRND do not execute as soon as they are called from within an MSN procedure INLINE procedures execute completely when called but BKGRND procedures execute in the background where background is defined as time periods during which experimental events are not being serviced as the result of the occurrence of timer interrupts BKGRND procedures do not
3. S2 ps ADD N SHOW 1 Session N 60 IF N 60 lt M True False GTrue IF Q lt B G2True 2False G2True Z2 gt 93 G2False SX GFalse Z2 3 S3 3 STOPABORT Go ahead and save this program as Tutor07B mpc translate compile it and go to MED PC and load run it This program will now stop in one of two ways either because the animal has enough rewards defined by Q or the program has run its course set as one minute Although we have set our array for a much larger number than we would ever need 1000 elements it does not matter the array will seal itself no matter how it stops When the program gets done running make a print out Unlike our last program that had zeros in the array where there were no responses this printout only shows the data collected An example of the data from an IRT 42 is shown below C 0 3 700 0 300 0 200 0 300 0 500 5 0 800 0 200 0 100 0 700 0 100 10 0 200 0 200 0 100 0 100 0 100 15 0 100 0 100 0 100 0 100 0 100 20 8 900 0 500 0 600 0 600 0 500 25 0 500 0 800 0 500 0 500 0 800 30 3 700 1 300 1 100 4 500 0 800 35 0 000 18 100 0 500 0 500 1 400 40 0 700 0 900 As you can tell this was an example of the programming timing out as opposed to getting the maximum numbers of rewards Notice how unlike the print out from the Tutor07A mpc program this printout does not have all of the excessive zeros due to the insertion of the 987 987 command 44 MED ASSOCIAT
4. START BOXES 2 Below is a screenshot produced by the macro Figure 20 Showmessage Place Rat 5 in the chamber PLAYMACRO PLAYMACRO is an extremely useful macro command that provides for nested playback of macros A typical use of PLAYMACRO would be to write a separate macro for each rat in a squad of rats that are simultaneously run A macro called SQUAD1 MAC could then be written that consists of a series of PLAYMACRO commands to execute the macros for each rat For example SQUAD1 MAC could contain the following commands to run the macros for rats 1 4 PLAYMACRO C MEDPC IV MACRO RAT1 PLAYMACRO C MEDPC IV MACRO RAT2 PLAYMACRO C MEDPC IV MACRO RAT3 PLAYMACRO C MEDPC IV MACRO RAT4 MED PC automatically records a completely qualified filename e g C MEDPC IV MACRO MYMACRO MAC when a PLAYMACRO statement is recorded in a macro as the result of playing a macro while recording a macro It is extremely important to remember to specify completely qualified filenames when creating or modifying macros with a text editor MED PC does assume that macros specified in a PLAYMACRO statement are located in the same directory as the macro containing the PLAYMACRO command There is no limit to the depth of nesting of macros This means that it is acceptable for SQUAD1 MAC to execute RAT1 MAC RAT1 MAC could then execute a macro named LOADBOX1 MAC which c
5. gt SX Adding a tenth Z pulse would cause an error condition in the present version of MED PC When the tenth Z pulse in a chain is generated the ERROR indicator on the runtime screen appears and flashes Additionally an entry is made in the journal and the chain of Z pulse is terminated Z pulse chains longer than nine are no longer tolerated Once Z pulse chains longer than two or three are used in a procedure it is very possible that Z Pulses are being substituted for clear procedure logic comparable to using lots of GOTOs in a BASIC program Coordinating Events Across Boxes K Pulses The K pulse bears considerable similarity to the Z pulse in that both may be issued in the output sections of statements and received on the input side Whereas the Z pulse is used to communicate between State Sets within the same Box the K pulse is used to communicate between Boxes An example of a situation in which K Pulses may be useful is yoking procedures in which the behavior of one subject determines the stimuli to which another subject is exposed In the following code example the CONTROL Box is running a procedure that implements a classic auto shaping procedure in which a key light is illuminated following an inter trial interval ITI of random duration with a mean of 20 Pecking the illuminated key produces immediate 4 access to grain In the absence of a key peck the key light is extinguished after 8 and grain is delivered The bird
6. S1 1 SET M 1 SET X 5 52 S2 START ON House S3 S3 XHR LeftLever ON Reward Z1 SX continued on next page 33 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC A Ss START SHOW 2 Responses A gt 52 S2 R LeftLever ADD A SHOW 2 Responses A gt SX Su9 37 S1 Z1 ADD B SHOW 3 Rewards B S2 S2 0 05 OFF Reward gt S1 A few things are worth pointing out You have changed the position of the displays for the response and the reward counters by shifting them over one This should tip you off that we are going to add another counter before these preexisting ones before we are done The other thing we have done is added a set of statements in the beginning of the program that define our constants Since they are statements preceded by a backslash they are not part of the heart of the program They are only there for our convenience It is a wise thing to put the definitions in because we now have more variables that we can change the value of and even more will be able to be changed in the next two Tutorials As it stands now once this program is translated and compiled you will be able to change M Duration of the program and X the Fixed Ratio number Now we need to add our Session Timer which will be our State Set 4 The code is S S 4 Session Timer S1 START SHOW 1 Session N S2 S2 T ADD N S
7. Su9 d Y Session Timer S1 START 52 S25 1 STOPABORT Save this file as Tutor05 mpc and follow the same procedure as before to translate and compile this program and then open it in MED PC load the file issue the START command as you have done in the past and hit the Left Lever repeatedly to get responses and reward counts on the screen As you can see you are clearly on an 10 schedule When one minute has passed and the program has shut down the data is hanging in limbo waiting for your next move Do with the data what you please but DO NOT exit MED PC Instead reload the Box we are going to change this to an FI 15 A Change Variables screen may be brought up by scrolling the mouse first to the Configure option of the menu bar clicking once and then clicking on Changing Variables 28 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Figure 11 Displaying Variables Displaying Variables from Box 1 E Named Vars Wars Refresh 3 Issue Close Help X from Box 1 10 000 5 Select All Deselect Al Changing the value of any selected variable field changes the variable data for the displayed Box You can change all Boxes if you click Select All or only some Boxes by clicking the appropriate number s in the Additional Boxes to Update section of the window For our purposes we only want to change one variable the interval on one B
8. gt NEXT ZN OUTPUT gt NEXT Where N An integer between one and thirty two and is the same in both examples Also note that when used as an output the syntax is ZN but when used as an input the syntax is ZN 4 Also like State Sets and States the numbering of Z Pulses is arbitrary in the sense that they do not have to be sequential they are processed in the order they are read It is recommended however that you keep the numbers sequential to minimize the potential confusion 21 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC In real code it may look more like this 5 8 1 91 START ON HouseLight Z1 S2 IO CAM S1 Z1 gt S2 Rules For Comments Revisited In the second chapter the idea of comments was introduced and we have used them in every program we have written at the beginning of each program before we wrote any real code Comments can also be placed at the END of a line code Once again comments may not occur in the middle of a statement This tactic will be used from here on out in Tutorials to explain why things are written the way they are or placed where they are please note that it will be up to you whether or not you type in these comments in the Tutorials they are there for your benefit only Syntax Input Output gt Next Comment Tutorial 4 Writing an FR 5 Program In this exercise we are going to use parts of the program you wrote for the last Tutorial Th
9. 0 000 S Close Help TE B from Box 1 3000 000 A Select All Deselect 128 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL The Named Variables Dialog corresponding to the sample code following the screen shot Figure 17 Named Variables for Sample Code Displaying Named Variables from Box 1 z 10 000 CS 3000 000 Syntax VAR_ALIAS A B Where A A descriptive label for the variable or array element B The variable or array element Examples Concurrent FR FI VAR_ALIAS FR Size A 1 VAR_ALIAS FI Size Secs B DIM A 10 S FR S1 Set default FR to 10 0 01 SET A 1 10 52 S2 A 1 R1 ON 1 S3 S3 0 1 OFF 1 52 continued on next page 129 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC sl FI Set default FI to 30 Note B will display as 3000 on a system with a 10ms Resolution 0 01 SET B 30 gt S2 2 BHT gt S3 S3 R1 ON 1 gt 54 84 0 1 OFF 1 gt 2 Comment Variable aliases cannot be used within MSN programs instead of variable letters For example the following will not work VAR_ALIAS Response Total A SeSe Ly S1 R1 ADD Response Total SX PRI NTVARS It is often desirable to print only a subset of the variables and arrays in a procedure This is particularly true w
10. 5 1 Print in five space with 3 to left of decimal 1 to right as in 123 1 PRINTFORMAT 7 2 1234 12 PRINTFORMAT 6 0 123456 The use of a PRINTFORMAT statement has no effect upon the internal representation of numbers If multiple PRINTFORMAT statements are used in the same MPC procedure then only the last one is implemented 131 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC If the digits to the left of the decimal point exceeds the total number of spaces set aside by the PRINTFORMAT statement then the general formatting rules are temporarily set aside and the number is printed in as many spaces as are needed to represent the integer portion of the number This may result in the printed line spilling onto the next line of the page If the decimal portion of a number exceeds the space allocated the number printed is rounded to the nearest value PRINTOPTIONS PRINTOPTIONS provides control over the appearance of the headers that appear at the beginning of printouts The headers include information such as the time that the experiment was loaded and the name of the program used to control the experiment There are two options for the appearance of headers FULLHEADERS versus CONDENSEDHEADERS If PRINTOPTIONS is not explicitly specified the default printout is to print a condensed header CONDENSEDHEADERS with no form feed NOFORMFEEDS When specified multiple options are separated by commas and a
11. Feeder RANDD B A SET B B 1 gt S3 In the above example note that dummy data is placed in array A with the LIST command This is done to declare an array to the desired dimension DIM could not be used because RANND requires the array to be declared with the LIST As soon as the USER call is executed the dummy values are replaced with appropriate values for the desired VI The format of this demo USER call is ConstantVI MG P1 P2 P3 where MG The literal string MG is required as the first parameter Pl Name of array P2 Number of elements in array in the example above this number was calculated automatically P3 VI value in seconds don t put after P3 though 155 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Note also that in State 2 B is multiplied by 1 because ConstantVI returns a number not a time value The key to manipulating array A is that X within ConstantVI will be set to the starting address of array A Array Tn is then declared to start at the absolute starting address of variable X The reason why Tn is declared with 1 000 500 elements is to ensure that ConstantVI will work with a MED PC array of any dimension this eliminates the need to alter ConstantVI for different MSN procedures It is vital to not manipulate elements of Tn greater than the upper dimension of the MSN procedure s array A elements of Tn beyond the upper bound of array A are memory
12. Next we will want to add the code for the responses the count and the display In order to do this we must add a new State within State Set 1 This is a sample program Filename Tutor02 mpc Y Date August 8 2004 House gp LeftLever 1 5 5 1 S1 0 01 ON House S2 S2 R LeftLever ADD C SHOW 1 COUNT C SX And just like that your program is now ready to be saved as Tutor02 mpc in the C MED PC IVAMPC directory Once you are satisfied that the program is saved follow the same procedure as before to translate and compile this program and then open it in MED PC If you do not remember how to do this refer back to Chapter Two s Tutorial If the program is running the House Light should turn immediately after loading the program Now reach into the Box and click the Left Lever Notice how the count increments on the screen If it is not going up geometrically 11 12 13 14 15 but instead sporadically 11 16 18 19 22 do not be alarmed The screen update is a low priority function If the responses are rapid the computer is keeping an accurate count of the data but the screen is only updated when the system gets a chance Congratulations you successfully wrote another program You may end your session in the same manner as Tutor01 mpc MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER FOUR Controlling the Beginning and End of a Program Thus far all programs that we
13. Note that each term A 1 and B 2 are enclosed in parentheses In the following expression output 1 will be turned on if either X 3 equals 10 or if A equals 1 and B equals 2 Of course if all three conditions are met output 1 will also be turned on R1 IF X 3 10 OR A 1 AND B 2 ON 1 52 This example also demonstrates the use of mathematical expressions within IF statements Whenever writing IF statements in which parenthetical expressions are used be sure that the number of left and right parentheses are equal Parentheses must be used whenever more than one logical condition is being tested 105 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC The following are examples of illegal tests followed by correct examples 1 A 10RB 2 Illegal no parentheses A 1 OR B 2 Legal 2 A 1 OR B 2 Y Illegal unequal number of parentheses A 1 OR B 2 Legal 3 A 10 OR 5 Illegal each comparison must have 2 terms A 10 OR A 5 Legal Special I dentifiers P1 and or P2 may be a special identifier as listed below One special identifier reflects the specified State Set s current state and is represented by S S 4 Never alter the value of this variable Other special identifiers may be used in expressions in the same way that any variable or array element may be used For example they may participate i
14. Y Sample Program Showing how to Create Incremental Bins V C Array Storing the Number of Responses in 5 Minute Bins V D Experiment Duration with a Default Value of 60 Minutes N Index into the Array DIM C 200 Arbitrary value In this example only 13 elements 0 12 are used one for total response count plus 12 five minute bins 8 5 1 Y Increment Response Count in C 0 Plus Bin C I sl 0 01 SET D 60 I 1 gt S2 S2 START SHOW 1 BIN I 2 Bin Count C 1 3 Tot Count C 0 S3 1 SHOW 1 BIN I 2 Session D gt SX S3 Y Response Count and Display R1 ADD C 0 C I SHOW 2 Bin Count C I 3 Tot Count C 0 SX continued on next page 99 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC A Y Increment to the Next Counter Every 5 Minutes Use a Y Variable and T for a more Flexible Program See S S 3 sl START SET C I 1 987 987 52 S2 5s ADD I SET C I 0 C I 1 987 987 SHOW 1 BIN I 2 Bin Count C I SX S S 3 End the Session After D Amount of Time S1 START SET D D 1 S2 S2 DT gt STOPABORTFLUSH Statistical Commands MSN contains a number of built in statistical commands that compute summary statistics on array elements Either an entire array may b
15. far faster than subjects can respond The minimum response time is not dependent on resolution but rather the response frequency of the hardware Med Associates SmartCtrl Cards use a response frequency of 100 Hz whereas Standard and SuperPort modules range from 7 Hz to 400 Hz m As a fine point two responses occurring less than 10 ms apart will actually be resolved if one occurs before a given interrupt processing sweep and the other occurs after the interrupt Further discussion of theoretical vs practical timing resolutions is provided at the end of this section Order Of Processing Of Boxes After preliminary events have occurred i e recording of inputs individual Boxes are serviced in sequential order beginning with the first active loaded Box Please note that inactive unloaded Boxes receive no processing and lower numbered Boxes are processed before higher numbered Boxes In other words if you have four Boxes but only load Boxes 1 4 and 3 Box 1 will be processed first Box 2 will be ignored Box 3 will then be processed and finally processing will occur on Box 4 Order Of Processing Of Events Within A Box Once processing of a Box s State Sets begins the First State Set of the procedure is serviced Next the remaining State Sets are processed in the order in which they appear in the MPC procedure file or State Table not by the assigned numerical label Processing then proceeds to the next active Box
16. turn on the pellet dispenser and make the transition to S2 Null Transition SX In the aforementioned example a transition was made to S2 after the pellet dispenser was turned on but sometimes we do not want to make a transition to another state it would be better to go nowhere Well MedState Notation can do this with a command we call SX which is known as the Null Transition The significance of this command will be shown shortly but in code it would come after the transition INPUT OUTPUT SX MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC ADD As the name suggests ADD is a mathematical command that will increment a variable by one It is an output command so it will always follow the colon in our code Syntax INPUT ADD X gt NEXT Where X the variable to which the value 1 will be added Real code may look like this S1 1 ADD C gt S2 In this example after one second the value one will be added to the variable C and then the transition will be made to S2 SHOW In the program you wrote at the end of Chapter 2 you knew it was running by watching the light come on and off As explained thus far you would not know your program was running when using an ADD command because there is no feedback associated with it This is why we have the SHOW command When MED PC programs are running the bottom portion of the screen may be used to display data for each active Box in any of the
17. APPENDIX A MedState Notation Commands The chapters of this manual are designed to get one comfortable with the programming of MedState Notation and the introduction to the most frequently used commands Appendix A however lists all MedState Notation commands and is presented in detail with syntax comments examples and discussion They have been grouped as follows Input Section Commands Output Section Commands Mathematical Commands Statistical Commands Decision Functions Array Functions Data Handling Commands Miscellaneous Commands Special Identifiers and Commands that Come Before the First State Set Each command is indexed for convenience Input Commands Start Command START Reacting to Responses R Fixed Time Inputs and Variable Time Inputs T Z Pulses Z K Signals K ORing Inputs Output Commands Controlling Outputs Turning outputs on or off ON and OFF Locking outputs on or off LOCKON and LOCKOFF Turning the PC Speaker on or off ALERTON and ALERTOFF Coordinating Events Across State Sets Z Pulse Generation Coordinating Events Across Boxes Inter Box Communication Via K Commands Performing Computations and Counting Incrementing Variables ADD Decrementing Variables SUB Incrementing or Decrementing to a Limit Value LIMIT Mathematical Assignment SET Recording Frequency Distributions BIN Statistical Functions ARITHMETICMEAN GEOMETRICMEAN and HARMONICMEAN MAXARRAY
18. An Output number One or more Box numbers Example LOCKOFF 3 BOXES 56 9 Turn off Output 3 in Boxes 5 6 and 9 without respect to whether the Output was turned on with LOCKON or ON TIMED OUTPUT turns an Output on for the specified time duration Syntax TIMED OUTPUT P1 DURATION B BOXES P3 Where P1 An Output number P2 The number of seconds during which Output should be on P3 One or more Box numbers Example TIMED_OUTPUT 2 DURATION 2 50 BOXES 1 Turn on Output 2 in Box 1 and turn it off 2 5 seconds later I NPUTBOX NUMERI CI NPUTBOX and TEXTI NPUTBOX INPUTBOX is one of the most powerful macro commands This command allows macros to ask the operator questions and then the results of those questions may be used as parameters for any other commands not just the SET command used in the following example For example a macro could pause to ask the operator to enter the weight of a rat and then that weight could be automatically used later in the macro to set the value of a variable via the SET macro command Consider the following macro LOAD BOX 1 SUBJ Rat 15 EXPT FR GROUP One PROGRAM Concurrent FR FI INPUTBOX Parameters for Rat 15 Enter weight grams 250 Weight SET A VALUE WEIGHT MAINBOX 1 BOXES The first line loads the Box specifying that the Subject is Rat 15 among other parameters and then the second line displays a Dialog Box that will wait until the operator enters the
19. Comments There may be up to 200 SHOW s per Box The SHOW command is a secondary function and may be delayed while Boxes are processed data saved or sent to print manager Stringing is permissible You should not use the following characters in the descriptive label portion of a SHOW statement V ora comma 113 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Example A The following example displays the label Left Lever Presses in the tenth position on the SHOW screen last position in the second line of the SHOW area Every second the value of X will increment by one and will be reflected on the screen S S 1 S1 1 ADD X SHOW 10 Left Lever Presses X SX Example B This example illustrates stringing of parameters in SHOW the use of a constant value 5 01 the con stant ThisValue and a mathematical expression ThisValue 5 LIST A 2 5 ST 1 SHOW 1 Value1 5 01 2 Value2 ThisValue 3 Math A 0 A 1 SX When loaded to Box 1 this example creates the following display 1 VALUE1 5 01 VALUE2 5 MATH 7 Updating the SHOW Display SHOW commands are not displayed in real time When a Box issues a SHOW command the data values are retained but the data will not actually be displayed until the runtime system has time to update the screen The values eventually shown on the screen will reflect the values of their respective variables at the moment that their respective SH
20. For example in the following code S S 2 will be processed prior to S S 1 S S 2 S1 R1 ADD A SX Ss sl R2 ADD B SX 62 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Processing of States The State within each State Set that gets processed depends on the current State of any given State Set When loaded the first State listed will always be the current State of any procedure until the input requirements of that State are met and a transition occurs Again this is independent of the numbering of the States In the State Set that follows S10 will be the current state when the procedure is loaded and will remain current until R1 occurs S S 3 910 481 S5 S5 1 ADD A S10 Processing of Statements within a State As indicated above processing of an MPC procedure file starts with the first State Set listed as being the current State Processing of statements within a State also proceeds from the top down with the caveat that those statements associated with external inputs i e R K 4T and START are processed before those statements associated with internal inputs i e Z Pulses Within each current State processing continues until a statement is encountered in which the stated input condition has been met or until the last statement has been reached In the following example S1 of S S 5 begins by ignoring the Z pulse in line 3 Ass
21. Without the Z pulse the animal could get another reward and the response counter could still be counting after the procedure is terminated This is because of the three second time delay in S3 needed to allow the screen to update before stopping This is an FR 5 Filename Tutor06B mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser Defined Constants A Number of Responses B Number of Rewards M Minutes X Fixed Ratio Y N Session Timer Q Maximum Rewards S S 1 NX Main Control Logic for FR S25 START ON House S3 S3 X R LeftLever ON Reward Z1 SX 22 gt 51 S S 2 S1 START SHOW 2 Responses A S2 continued on next page 35 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC S2 R LeftLever ADD A SHOW 2 Responses A gt SX 4 2 gt S1 Soy S1 Z1 ADD B SHOW 3 Rewards B S2 S2 0 05 OFF Reward S1 S S 4 S1 START SHOW 1 Session N S2 S2 I ADD N SHOW 1 Session N 60 IF N 60 lt M True False As long as Session Time lt M we will Continue True IF B gt Q 2True 2False If Animal has Enough Rewards we will Stop 2True Z2 gt S3 2False gt SX Z Pulse Add
22. Y Recording IRT s S1 START 52 S2 HR Leftlever SET C T s T T 0r ADD Ts SET C I 987 987 SX 422 gt S1 S956 S1 START SHOW 1 Session N S2 S2 ADD N SHOW 1 Session N 60 IF N 60 lt M True False GTrue IF lt B 2True 2False 2True Z2 93 2False gt SX False Z2 3 S3 3 STOPABORT MED PC IV PROGRAMMER S MANUAL 47 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Notice as you run this program how the value of VI is shown on the runtime screen As long as you generate at least five responses you will see that VI will equal 1 5 10 15 19 not in that order before repeating any of those number This is because of the RANDD command If you would like to test it for yourself change RANDD to RANDI to make the selection random with replacement or to LIST to get the numbers to come out sequentially 48 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER TEN An Introduction to the VAR_ ALIAS Command Up until now all of our variables have just been letters e g M Q X etc If the User wanted to change the parameters for the program then they had to know what each variable represented There is a way to present to the User a more meaningful text string for the variable by using the VAR_ALIAS command VAR ALIAS The VAR ALIAS command allows for the creation of Named Variab
23. if the first element of a segment has the largest value and that element is element 5 of the overall array a 5 will be returned rather than element 0 MI NARRAYI NDEX Returns the Index of the smallest value in the array See MAXARRAYINDEX regarding indexing POPULATI ONVARI ANCE Returns the Population Variances of the array segment SAMPLEVARI ANCE Returns the sample variance of the array segment SUMARRAY Returns the Sum of the elements in the array segment SUMSQUAREARRAY Returns the Sum of the squares of the elements in the array segment These commands should be used sparingly It is a reasonable use of processor time to use these commands on an occasional basis on a reasonably sized array segment There are no hard and fast rules but trying to computing the variance of an array of 100 000 elements every 10 msec would likely result in an inability for the system to keep pace On the other hand computing this statistic every minute on 50 elements is probably reasonable As noted above it is likely that a subset of an array will be passed rather than an entire array The reason for this is that arrays often contain several different types of data In addition many experiments collect a variable amount of data For example an experiment that ends after a fixed amount of time may include a variable number of reinforcers in which case the number of latencies to respond to following each reinforcer would vary In this case it would be
24. increments of the system resolution e g a value of 0 751 would be represented on a 10 millisecond system as 75 1 after multiplication by 1 this is not a concern because the system will automatically round the value up to the next multiple of the resolution e g 75 1 would be automatically rounded up to 76 which would introduce only a very slight deviation from the theoretically desired time value If this is a concern you could use inline Pascal to round the time value up or down according to standard rounding rules This is illustrated in the second example below Basic Example BIST V 2 33 4 5 6 7 S1 1 INITCONSTPROBARR V 10 S2 The code above initializes elements 0 through 6 of list V to values of 751 2 425 4 439 6 966 10 364 15 596 and 29 459 respectively Example of Rounding the Value of an Element LISP V 2 1 2 3 4 Sy 6 7 S 9 1 1 INITCONSTPROBARR V 10 52 S2 Lrg RANDD A V SET A A 1 A Round A gt SX Eliminate the Fraction of a Tick 112 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL GETVAL GETVAL is an output command that may be used to get the value of a variable or array element in another Box This command is useful in situations in which it is necessary for one Box to monitor the status of another Box This situation may arise when conducting experiments on yoked subject pairs See use of K Pulses and the special variable nam
25. FROM THE INPUT FILE For I v 0 To Vars C Readln InF BigAr Close InF End If Size Do r Vars C Startoffset I ws THE FOLLOWING LINE SETS VARIABLE D SO THAT THE CALLING BOX CAN KNOW THAT THE JOB IS D ONE ANY VARIABLE OR ARRAY ELEMENT COULD BE SUBSTITUT ED j BigArr Vars D StartOffset continued on next page 162 li 2S ES Syntax for addressing a simple Variable MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL End with IORESULT Removes any error conditions Important if doing file I O BackRequest Box 2 False This must always be included to let MED PC know that the job is done End With End BackProc2j SF SI Compiling Background Procedures BACKPROC PAS is a dynamically linked library DLL rather than a Pascal unit For this reason it is necessary to explicitly manually recompile BACKPROC PAS whenever changes are made Additionally you will need to recompile your BACKPROC PAS whenever you receive MED PC updates including minor version updates This is only necessary if you have custom BACKPROC routines that you wrote it is not necessary if you are not using BACKPROCS BACKPROC PAS may be recompiled by opening Trans and
26. Geeta te bas Geta Pee eee Red ee d dotes ed ee 124 CURRENTYEAR dorg s i G4 ed ye Oh a ed REA eh ed Re TL RR Eee ewe ee Ae eae ES 124 DATE aos Ba hee Bae 121 DATETODAY id siecGoeR ok ek bd rd necne Pond ee A dock e Add 124 DEFAULT PRINTER NAME ex uus hum i i ad a Ee ee a a M Red BO hee ede d 141 171 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC DEFAULT PRINTER SETTINGS sx ka ka s EG x Cae a ead ee a aa A Eu x A rd 140 DELAS dia RO a a A AR AD dice 143 RANA 125 DISECGOLUNAS e ardor i iis de arde drive de dodo de sob Olde De de dede Ph o dede c de o d deb eee 134 DISKEORMAT M n e 134 DISKOPTIONS aa e aa a dee Pada aa ad a Pea dae a aS 134 DISKVARS eue li a AA A A A AA A A ATA ea Ee bas 134 123 ENDHOURS i 2S 4 ESE PA MA pa eed oe 123 ENDMINUTES So a Sc he a id Sees hob bao EAT dcha WG a aR a 123 ubere a aa oe ae le xd Rea x ee a aida EORR UR a 123 ENDSECONDS airada dada ia se eee th ae Bad ashe al La 123 ENDUEAR casi ninos ote eye yh ae E egg wth o a ia 1e yee at ae IP Iter tek Gea 123 EXIT WHEN DONE i3 acm bod e eed ew Y ere Eee ee ahead ee EOEGOX CE R3 ey Ox A 150 EXPNUMBER 0 2202 bit oe dead ed 9 dcm o ed 9e ado edem d debo ded aca d qp ae d dra 12
27. K1 Z1 gt SX 66 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL EXAMPLE C In this code issuing places 5 5 1 S1 into S4 Hence when the Z1 is issued in 5 5 2 5 5 1 S1 is no longer active S4 becomes the active state As a result B and C are not displayed when K1 is issued S S 1 S1 Z1 Z2 gt 52 K1 ADD A SHOW 1 A Value A S4 S2 422 53 0 1 ADD B SHOW 2 B Value B SX S3 0 1 ADD C SHOW 3 C Value C SX 64 1 gt SX S S 2 S1 K1 Zl gt SX EXAMPLE D In the following code K1 causes a transition to S5 in S S 1 In S S 2 it generates Z1 During the Z pulse processing phase S S 1 is in S5 so the Z1 required for transition is received and In State 5 1 is displayed on the screen upon issuance of the first K1 from the keyboard A second K1 will display a 2 a third 3 etc S S 1 S1 HZ1 Z2 gt S2 K1 ADD A SHOW 1 A Value A S5 S2 422 53 0 1 ADD B SHOW 2 B Value B SX S3 0 1 ADD C SHOW 3 C Value C SX S5 Z1 ADD D SHOW 4 In State 5 D SX S S 2 S1 K1 Z1 gt SX 67 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Additional Commentary on Time Based Inputs Time based inputs and T are subject to the same rules and considerations with respect to order of processing a
28. LIST 1 2 3 4 5b 6 7 By 9 LO PRINTCOLUMNS 3 Sus L sl K1 PRINT gt SX PRINTPOINTS The PRINTPOINTS command controls the size of the font used to print data from the Box in which this command is issued The use of this command will override any defaults set within the MED PC menu system Syntax PRINTPOINTS Pl Where P1 The number of points 12 is the default Example in which the data are printed in a small font CISTO 2 2 3 4 By 6 7 9 10 PRINTPOINTS 8 S S 1 S1 K1 PRINT gt SX DI SKVARS DISKFORMAT DISKOPTI ONS DISKCOLUMNS DISKVARS DISKFORMAT DISKOPTIONS and DISKCOLUMNS are analogous to the PRINT commands previously discussed but are completely separate and independent The disk commands determine which variables are saved to the hard disk and the format used during the save Syntax DISKVARS P1 P2 P26 Where P1 P26 are variables or arrays A through Z Syntax DISKFORMAT P1 P2 Where P1 Number indicates the total number of spaces to be occupied by the number including the decimal point P2 Number indicates the number of spaces to be set aside for the decimal portion of the number Syntax DISKOPTIONS P1 Where P1 FULLHEADERS or CONDENSEDHEADERS Syntax DISKCOLUMNS P1 Where P1 The number of columns 134 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Example and Discussion Writing a data file with FLUSH ta
29. Once again follow the same procedure as before to translate and compile this program and then open itin MED PC The bottom window should show that the program Tutor04 was loaded at xx xx your computer clocks current time Now issue the START command as you have done in the past When you have issued the START command hit the Left Lever repeatedly to get responses and reward counts on the screen When one minute has passed and the program has shut down the data is hanging in limbo waiting for your next move Do with the data what you please i e Save Print or Delete This is a good opportunity for you to test your knowledge You are on your way to becoming an expert user 24 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER SIX Establishing Default Values for Variables and Using a Variable Time I nput An Introduction to the SET and T Commands SET SET is used to perform any of four basic mathematical operations involving two or more operands5 The four operators permitted are multiplication division addition and subtractions Although always outputs two forms of this command are possible as indicated by syntax A and syntax B Syntax A INPUT SET P1 P2 Operator P3 gt NEXT Syntax B INPUT SET P1 P2 gt NEXT Where P1 Variable or array element P2 and P3 number variable or array element and Operator a mathematical operation e g or It is important to poin
30. Playback Delay menu option enter 1000 into the text field and select OK This will delay the running of the next macro command by 1 second Now select the Configure Change Variables menu option Select Box 1 and the click on the Named Vars button Change the Session Time to 5 minutes and the Maximum Number of Rewards to 15 and click on the Issue button Close the Displaying Named Variable window by selecting the Close button Now select the Configure Signals menu option Select Box 1 and the Issue START Command option and then click on the Issue button Close the Send Signals to Boxes window by selecting the Close button Now select the Macros Turn Off Macro Recorder menu option Enter the name Tutor10 mac for a file name and select the Save button You have just created your first macro The text of the macro can be viewed by Editor and then opening the file that we just created The text should look as fol LOAD BOX 1 SUBJ 1 EXPT Testing Macro Recorder GROUP 1 PROGRAM TUTOR10 DELAY 10 SET Ses SET Max START BO See Appendix B 00 sion Time VALUE 5 000 MAINBOX 1 BOXES 1 imum Number of Rewards VALUE 15 000 MAINBOX 1 BOXES 1 XES al Page 137 for a complete list of all Macro command and their syntax 75 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL
31. Rewards B S2 S2 0 05 OFF Reward 81 S S 4 Time Increment in 0 1 Second Intervals S1 START 52 S2 0 17 SET T T 0 1 gt SX S S 5 Recording IRT s S1 START gt S2 S2 R LeftLever SET C I Il H T 0 ADD I gt SX 9 916 S1 START gt S2 S2 1 gt STOPABORT 41 MED PC IV PROGRAMMER S MANUAL MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC After opening MED PC load and start the program as you normally would When testing it take care in not pressing the lever more than 50 times remember DIM 49 When your Box times out after one minute go to file and select print At the bottom of your print out you should get something that looks like this C 6 400 0 800 0 400 0 500 0 300 5 3 200 0 500 0 300 0 300 0 900 10 0 300 0 400 0 600 0 300 0 200 15 0 200 0 500 0 200 0 400 0 800 20 1 000 1 200 2 300 0 600 1 000 25 6 400 0 800 0 400 0 500 0 300 30 3 200 0 500 0 300 0 300 0 900 35 0 300 0 400 0 600 0 300 0 200 40 0 200 0 500 0 200 0 000 0 000 45 0 000 0 000 0 000 0 000 0 000 This is your data array The numbers preceding the colon show what the subscript of the first number per row is Each number that follows is the next subscript Therefore looking at the 0 row the value 6 400 A 0 0 800 A 1 0 400 A 2 etc Tutorial 7B Sealing the Array In this Tutorial we are just going t
32. SES aia ws which nd e ec de Ede dedo Ru d e Ede d dodi de Wht ied eed A em ae de 89 174 Copyright O 2006 by Med Associates Inc All rights reserved Published by Med Associates Inc P O Box 319 St Albans Vermont 05478 p 802 527 2343 f 802 527 5095 w www med associates com
33. TO 15 20 25 30 Y Note that each line 30 35 40 45 50 55 NX must end in a comma 60 65 70 75 80 85 except for the last one RANDD RANDD is similar to LIST except that it selects values from a list without replacement A major difference however is that no subscript is specified with this command Again all elements in the array are drawn before any element is repeated RANDD can only operate on arrays declared in a LIST statement Syntax RANDD 1 P2 Where P1 P2 Variable or array element Array from which an item is to be drawn Comments Stringing of parameters is permissible Array P2 must be declared with a LIST statement The maximum number of elements that may be in an array manipulated by RANDD is 501 elements 0 500 The order of the contents of P2 is not affected by RANDD Selection actually takes place from an internal copy created and managed automatically by MED PC Example Items are randomly selected from the LIST however once selected an item is removed from the list until all items have been selected This is selection without replacement The following State Set might turn outputs on in the following order 1 2 3 2 3 1 2 1 3 3 1 2 LIST A 1 2 3 SuSe Ly 21 1 RANDD B A ON B gt S2 S2 1 OFF B gt S1 109 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC RANDI RANDI is similar to RANDD in that it selects valu
34. This demonstrates that it is an input as opposed to an output as it was in State Set 1 5 8 3 Reward Counter and Timer S1 Z1 ADD B SHOW 2 Rewards B S2 S2 0 05 OFF Reward S1 The final bit of code we must write is for the session timer As you can tell it is identical to the session timer used in the previous Tutorial SiS Y Session Timer S1 START 52 S2 1 STOPABORT Since that was the last State Set the final product looks like this This is an FR 5 Filename Tutor04 mpc Y Date August 8 2004 Y This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser S S 1 Main Control Logic for FR S1 START ON House 82 92 54R LeftLever ON Reward Z1 SX continued on next page 23 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC S S 2 This is the State Set that contains the Response Y Count and Display S1 START SHOW 1 Responses A S2 S2 R LeftLever ADD A SHOW 1 Responses A SX S S 3 Reward Timer Count and Display SL Z1 ADD B SHOW 2 Rewards B S2 S2 0 05 OFF Reward S1 S S 4 Session Timer Sl START 52 92 1 gt STOPABORT And just like that your program is now ready to be saved as Tutor04 mpc in your C MED PC IVAMPC directory
35. a AAA AA AA 171 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER ONE Welcome To Programming In MedState Notation Introduction This newly revised manual has been designed to aid all users of the state notation language MedState Notation MSN used with MED PC Version IV The novel user will find that each of the following chapters introduces a couple of commands in MedState Notation and then presents example programs using those new commands Each chapter builds on one another so it is recommended that the manual be read from cover to cover taking the time to try each Tutorial There should be no concerns about having to set aside large blocks of time to read the manual the manual has been written in such a way that no one chapter should take very long to read To get the most from each chapter it is recommended that the reader type in each program in the Tutorial to test their new knowledge Also make sure to save the files with the names suggested or at least keep track of the substituted names The reason is that the following Tutorials build on the previous ones Not only will this make it easier to switch from one Tutorial to the next it will also help create the habit of going back to old code for ideas and or shortcuts in programming The intermediate user may find the chapters of some use but if already familiar with most of the commands it is possible to just flip to the Tutorials at the end of each chapter to brush
36. a letter of the alphabet to be an array precludes its use as a simple variable i e A can not be both an array and a simple variable By default all letters are defined as simple variables Syntax DIM P1 P2 Where P1 A letter of the alphabet to be declared as an array P2 The maximum subscript of the array Because arrays are always zero based zero is the lowest subscript the number of elements is P2 1 The elements range from 0 P2 Comments The total number of variables and array elements per MSN program may not exceed 1 000 000 Example DIM B 10 Declare B as an array with elements 0 10 Susie diy Declaring an Array with the LIST Command List is first placed before State Set 1 to dimension an array and assign a value to each element in an array It can then be used in the output section of a statement to select each value in sequence When the last element in the list has been used selection restarts at the beginning of the list Syntax A Defining the array LIST P1 P2 P3 Pn Where P1 The name of the array to be declared A Z P2 P3 Pn Number Comments Each line must end on a comma CR Syntax B Selecting elements from the array LIST P1 P2 P3 Where P1 Variable or array element P2 Array from which an item is to be drawn P3 Variable or array element used as subscript to array P2 125 MED PC IV PROGRAMMER S MANUAL MED ASSOCIAT
37. and MINARRAY MAXARRAYINDEX and MINARRAYINDEX POPULATIONVARIANCE and SAMPLEVARIANCE SUMARRAY and SUMSQUAREARRAY 77 MED PC IV PROGRAMMER S MANUAL Decision Functions Logical Comparisons IF Probability Gates WITHPI Array Functions Sequentially Selecting Items from an Array LIST Random Selection Without Replacement RANDD Random Selection With Replacement RANDI Copying Elements of One Array to Another COPYARRAY Setting All Array Elements to Zero ZEROARRAY Initializing Array to Constant Probability Values INITCONSTPROBARR Get Variable Array Value from Another Box GETVAL Displaying Printing and Saving Data Displaying Data Onscreen SHOW Clearing the Onscreen Data CLEAR Printing Data PRINT Writing Data to Disk Under Program Control FLUSH Stopping the Procedure STOPKILL STOPABORT STOPABORTFLUSH Miscellaneous Output Commands DATE and TIME BKGRND Special Identifiers BOX SUBJ ECTNUMBER EXPNUMBER and GROUPNUMBER STARTMONTH STARTDATE and STARTYEAR STARTHOURS STARTMINUTES and STARTSECONDS ENDMONTH ENDDATE and ENDYEAR ENDHOURS ENDMINUTES and ENDSECONDS CURRENTMONTH CURRENTDATE and CURRENTYEAR CURRENTHOURS CURRENTMINUTES and CURRENTSECONDS SECSTODAY DATETODAY BTIME Commands that Come Before the First State Set Declaring Arrays DIM Dimensioning Arrays Declaring an Array with the LIST Command 78 MED ASSOCIATES INC MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUA
38. be our fixed interval We are going to default it to 10 but later in this Tutorial we will see how to change this interval without changing the code All of the SET code will be inserted into State Set 1 S1 0 01 SET X 10 52 S2 Converts time into MED PC clock ticks Y Interrupts see User s Manual for additional Y information on runtime system START ON House SET X X 1 gt S3 1 SHOW 1 FI X SX Next add the time command T with Variable X as State 3 of State Set 1 S3 X T 54 The final product should look like this This is an FI Filename Tutor05 mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 ll N rd Reward In this code this is a Pellet Dispenser S S Ly Main Control Logic for FI S1 0 01 SET X 10 gt S2 S2 START ON House SET X X 1 gt S3 1 SHOW 1 FI X SX S3 XHT gt 54 continued on next page 27 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC S4 dR LeftLever ON Reward 21 53 S S 2 This is the State Set that contains the Reward Y Count and Display S1 START SHOW 2 Responses A S2 S2 R LeftLever ADD A SHOW 2 Responses A SX 5 8 3 Reward Timer S1 Z1 ADD B SHOW 3 Rewards B S2 S25 0 05 OFF Reward S1
39. compiling one of the programs that you wrote with the Build option Guidelines for writing and calling BKGRND procedures BKGRND procedures are called from the output section of MSN statements Syntax BKGRND X Where 1 lt X lt 10 BKGRND procedures are not declared in the INTERFACE section of BACKPROC PAS but are placed in BACKPROC PAS anywhere after IMPLEMENTATION BKGRND procedures must always be declared as follows Syntax Procedure BackProcl MPCGlobal MPCGlobalPtr Box Byte Export Where BackProcl corresponds to BKGRND 1 BackProc2 corresponds to BKGRND 2 etc The procedure header of a BKGRND procedure must be preceded by a far compiler directive F Follow the procedure with F The last line of the procedure should contain BackRequest Box 1 False where the numeral corresponds to the number of the BKGRND procedure Note if a BKGRND procedure appears to execute repeatedly even though it is called only once from the MSN procedure verify that the present statement is included and that it s second subscript is properly defined Do not remove or alter the initialization section of USER PAS this is the last block of code in USER PAS prior to END Multiple Boxes may simultaneously request the same BKGRND procedure without problems for MED PC will properly track which boxes have requested the procedure 163 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC The same Box may have multiple simulta
40. final variation on the syntax permits labels for true and false conditions to be omitted When this syntax is used output commands are enclosed in square brackets following the logical comparison If the logical comparison is TRUE then the commands enclosed in the brackets are executed and the transition indicated to the right of the arrows is executed If the logical comparison is FALSE then transition to SX automatically occurs This is illustrated by the following 5 5 1 51 10 ADD A IF A 10 ON 1 52 S2 0 1 SET A 0 OFF 1 gt 51 Example F functions equivalently to Example E This format requires a pair of square brackets even if they enclose nothing For example S S 1 S1 10 ADD A IF A 10 S2 Compound IF Statements IF statements may be constructed such that several logical conditions must be met in order for the expression to evaluate as TRUE This may be accomplished by placing each set of logical criteria in parentheses and connecting each set with AND OR NOT AND NOT or OR NOT Parentheses serve to denote the order in which expressions are evaluated in much the same way that parentheses control execution of algebraic expressions in SET statements Logical expressions are always evaluated first within the deepest level of parentheses Examples In the following expression output 1 is turned on only if A equals 1 and B equals 2 R1 IF A 1 AND B 2 ON 1 52
41. have wrote have begun to run the second they were loaded For our purposes this was fine there was no reason for them wait before running This is usually not the case however Your experiment may require you to load more than one Box and have them run simultaneously or perhaps you want to have the program all ready to go before loading your test subject in the chamber In either case starting the program upon loading is not what we would want to do This chapter will deal with how to avoid that problem as well as how to have your program stop without having to issue the stop session command START As already stated execution begins as soon as the procedure was loaded in our earlier programs The START command will give us the ability to load a procedure but hold procedure initiation until a signal is given by the experimenter This is especially useful when loading several Boxes because this enables the experimenter to place multiple subjects in experimental chambers and then start their sessions simultaneously Syntax START OUTPUT gt NEXT Real code may look like START ON House 82 This means Wait until a START command has been issued and when it has turn on the House Light and make the transition to State 2 We will get into what it means to issue a START command in the Tutorial STOPABORT and STOPKILL These two commands cause the program that is running to immediately stop executing Any outputs cu
42. in State 2 during Z pulse processing 8 During Z pulse processing only Z Pulses serve as input all other inputs are ignored 9 Processing priority rules for stacked Z Pulses are analogous to those for external inputs 10 Any new Z Pulses issued during Z pulse processing are held until the bottom of the State Table is reached at which time a new Z pulse processing pass will be initiated A During any given Z pulse processing pass only Z Pulses generated during the immediately preceding pass will be presented during the present pass B Up to 9 consecutive Z pulse processing passes may occur If a tenth pass is required to resolve the actions of the State Table processing of the State Table will be terminated and the on screen error indicator will be activated with a corresponding entry made in the Journal This is done to avoid the occurrence of endless loops which could indefinitely delay processing of events in other Boxes The Box will however be processed at the beginning of the next processing sweep C Within a State Set a new State entered during a given Z processing pass becomes the current State when and if a subsequent Z processing pass occurs Thus if transition from 51 to S2 occurs as the result of a Z pulse and another processing pass is occasioned by the generation of Z Pulses during the earlier pass S2 will be the current state in which further Z Pulses may be detected The final State that results from transitio
43. in the YOKED Box receives the same pattern of stimuli and reinforcers but that bird has no control over the events The following pair of procedures one for the control Box and the other for the yoked Box illustrates the use of K Pulses NOTE WITHPI is explained on page 106 Y Auto shaping Procedure for the Control Box Feeder E HouseLight 2 KeyLight 3 Su Ss Ly S1 START ON HouseLight S2 continued on next page 92 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL S2 20 Mean ITI Tell Yoked Box When ITI is Over by Y Sending a K1 pulse 1 WITHPI 500 ON KeyLight K1 53 S3 Tell Yoked Box That the Feeder is on by Sending a K2 pulse R1 8 OFF KeyLight ON Feeder K2 54 S4 4 OFF Feeder 82 Y Auto shaping Procedure for the Yoked Box Feeder Ec HouseLight 2 KeyLight 3 SiS Ly S1 START ON HouseLight S2 92 Y Kl pulse Sent by Control Box When KeyLight Turned on K1 ON KeyLight S3 S3 Y K2 pulse Sent by Control Box When RF Starts K2 OFF KeyLight ON Feeder S4 S4 4 OFF Feeder gt S2 K Pulse Theory Of Operation And Technical Details When a K pulse is issued it is not immediately available as an input to statements and does not become available to other statements and Boxes until the beginning of the next interrupt the next time Boxes a
44. is particularly useful for continuous running applications COPYARRAY takes three arguments the source array from which data are to be copied the target array to which data will be copied and the number of elements of the source to copy to the target Copying always starts with the first element of the source array element 0 and data are always placed into the target array starting at element 0 of the target The number of elements of the source array that are copied should never exceed the size of the target array If an attempt is made to copy too many elements to the target array a MED PC runtime error message will be generated 110 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Syntax COPYARRAY P1 P2 P3 Where P1 The source array from which data will be copied P2 The array into which data will be copied P3 The number of elements of P1 to copy to P2 P1 P2 must be the name of an array P3 Variable constant number array element or mathematical expression Example In the following example the current cumulative response totals on inputs 1 3 are transferred from array A to array B every 5 and then printed This technique ensures that all data are printed from the same moment See description of PRINT command DIM A 2 DIM B 2 PRINTVARS B 8 5 1 S1 R1 ADD A 0 SX R2 ADD A 1 SX R3 ADD A 2 SX SuSe S1 5 COPYARRAY A B 3 PR
45. is set to 10 In S2 A responses on input 1 turns on output 1 presumably connected to a pellet dispenser and transitions to S3 S3 turns the output off after 100 milliseconds and returns to S2 for another ratio run Now consider the following macro LOAD BOX 1 SUBJ 1 EXPT FR Demo GROUP 2 PROGRAM A2 SET A VALUE 20 MAINBOX 1 BOXES 1 If this macro is executed on a fast computer it is possible that the Box will load and A will be set to 20 in less than 10 milliseconds If that happens then 10 milliseconds after the program loads S1 of the program will set A back to 10 The following macro avoids this problem by introducing a delay of 20 milliseconds after the Box is loaded LOAD BOX 1 SUBJ EXPT FR Demo GROUP 2 PROGRAM A2 DELAY 20 SET A VALUE 20 MAINBOX 1 BOXES 1 Editing Macros It is often desirable to make changes to macros For example it may be necessary to change a parameter value in a SET statement the macro equivalent to Configure Change Variables Existing macros may be edited by selecting Macros Editor from the main menu A simple text editor will then appear and existing macros may be opened for editing using the editor s File menu One of the best ways to edit existing statements within a macro is to use the editor s powerful editing templates by positioning the cursor on the line that needs to be edited and then selecting the Ins
46. locations assigned to other variables and arrays The Procedure ConstantVI is provided below in its entirety It may also be found along with other procedures in the USER PAS file supplied with the MED PC software Procedure ConstantVI MPCGlobal MPCGlobalPtr Var X N Integer VI Extended Var nteger Terml Term2 Extended Tn Array 1 1000500 of Extended Absolute X Begin With MPCGlobal Do Begin Terml 1 Ln N For 1 to N Do Begin f lt N Then Term2 Ln N I Else Term2 0 Tn I VI Termi N I Term2 N 1 1 Ln N 1 1 End For End With End ConstantVI w Warning Array Accesses Must be Within the Declared Range of the Array Under DOS releases of MED PC it was acceptable with user written code to read from beyond the ends of an array without adverse consequences Windows does not tolerate this and will issue GPFs General Protection Faults For this reason it is essential to stay within array bounds even when reading array elements For example assuming that the following declaration was made in an MSN program DIM X 10 one must not issue a statement such as Y BigArr Vars X StartOffset 11 156 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Accessing Arrays by Using DataRec A very effective universal method for accessing both variables and arrays is to p
47. may be printed on the same page BOX PRINTER SETTINGS Syntax BOX PRINTER SETTINGS PRINTWIDTH P1 PRINTDECIMALS P2 PRINTCOLUMNS P3 PRINTPOINTS P4 PORTRAIT NOFORMFEEDS BOXES P5 140 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL DEFAULT_PRINTER_SETTINGS Syntax DEFAULT PRINTER SETTINGS PRINTWIDTH P1 PRINTDECIMALS P2 PRINTCOLUMNS P3 PRINTPOINTS P4 LANDSCAPE FORMFEEDS Where P1 The print width B The print decimals C The print columns D The print points E One or more Box numbers Examples BOX PRINTER SETTINGS PRINTWIDTH 12 PRINTDECIMALS 3 PRINTCOLUMNS 5 PRINTPOINTS 12 PORTRAIT NOFORMFEEDS BOXES 1 2 3 Printouts for Boxes 1 2 and 3 should contain 5 columns of numbers printed in 12 point characters Each number should be printed in a field 12 characters wide with 3 digits to the right of the decimal point The paper will be in an upright orientation Portrait and a page will not be ejected following each Box Note that BOX PRINTER SETTINGS will only affect currently loaded boxes DEFAULT PRINTER SETTINGS PRINTWIDTH 8 PRINTDECIMALS 2 PRINTCOLUMNS 10 PRINTPOINTS 10 LANDSCAPE FORMFEEDS Default printouts should contain 10 columns of numbers printed in 10 point characters Each number should be printed in a field 10 characters wide with 2 digits to the right of the decimal point The paper will be in sideways Landscape orientat
48. menu system or from within a MedState Notation procedure the request is not immediately fulfilled A finite amount of time is required for the runtime system to generate the printout Until the printout is generated the data values within a printout may float during the period between the printing request being issued and the time at which the data are actually printed For example consider the following code DIM A 2000 DIM Z 2000 S S a 1 ADD A 0 Z2 2000 PRINT gt SX In this example the values of A 0 and Z 2000 are incremented every second and will always be equal If a request to print is made after the Box has finished running the values of data printed for A 0 and Z 2000 will be identical However if the data for this procedure are printed while the Box is still active the values of both variables will continue to increment while the runtime system is con structing the printout Different values are likely to be printed for the two variables with the value of Z 2000 being larger than that of A 0 because variables and arrays are printed in alphabetical order The basis for the discrepancy is that it takes time to generate a printout and A 0 will be placed on the printout before Z 2000 There are however several different ways to ensure that data on a printout are frozen at the time of a printing request 1 Issue a print command after a procedure has finished its work and it s data valu
49. name of an installed printer surrounded by single quotes Example DEFAULT PRINTER NAME Acrobat PDFWriter Send the printout to the Acrobat PDFWriter SET SET is a macro command that may be used to change the value of variables array elements and named variables This command is equivalent to the Configure Change Variables menu command SET may only be used to alter the values of variables in currently running boxes Syntax SET P1 VALUE P1 MAINBOX P1 BOXES P1 Where P1 zThe variable or array element to alter P2 The value to which A should be set P3 The Box to be affected P4 zOne or more additional boxes whose variables should be affected The BOXES argument must not be omitted even if the MAINBOX and BOXES arguments are identical Example 1 SET X VALUE 10 1 MAINBOX 3 BOXES 3 Variable X is set to 10 1 in Box 3 Note that the BOXES argument must be specified even though MAINBOXES and BOXES are both set to 3 Example 2 SET D 29 VALUE 3 MAINBOX 1 BOXES 1 2 3 Array element D 29 is set to 3 in Boxes 1 through 3 Example 3 SET FRSize VALUE 10 000 MAINBOX 1 BOXES 1 Set named variable FRSize to 10 in Box 1 Note that the variable name must be in quotation marks 142 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL DELAY This menu option is available only while recording a macro This option is used to insert a time delay into a macro so that th
50. necessary to track the last array element into which data were recorded and pass this to the statistics command Example RF EU StartRatio 2 Pellet 1 DIM C 200 SiS 1 FR 5 1 START gt S2 S2 5 R1 ON Pellet Z RF HARMONICMEAN D C 0 I ADD I SHOW 1 Harmonic Mean D S3 93 0 1 OFF Pellet Z StartRatio S2 S S 2 Time Each Ratio S1 START S2 continued on next page 101 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC S2 Z RF gt S3 0 1 SET C I C I 0 1 gt SX S3 Z StartRatio S2 This FR 5 program displays the Harmonic Mean of the duration in seconds of ratio completions Notice that a variable is used in the call to HARMONICMEAN to indicate the last element in the C array that should be included in the calculation Variable tracks the number of completed ratios and is incremented after the call to HarmonicMean Decision Functions IF IF permits the values of two numeric parameters a numeric parameter and a variable or two variables to be compared Several syntaxes are permissible Six comparisons Operators are permitted Equal To lt Less Than lt Less Than or Equal To gt Greater Than gt Greater Than or Equal To lt gt Not Equal To Syntax A IF P1 Operator P2 Labell Label2 Labell Output Section gt Transition Label2 Output Section gt
51. new State Set to have our program stop on its own so type the following at the bottom of the new program SiS SI START gt S2 S2 1 gt STOPABORT So your final product should look like this This is a sample program Filename Tutor03 mpc Date August 8 2004 House ot LeftLever 1 S S 1 si START ON House S2 S2 R LeftLever ADD C SHOW 1 Count C SX SS S1 START gt 82 S2 1 STOPABORT MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC And just like that your program is now ready to be saved as Tutor03 mpc in your C MED PC IV MPC directory Once again follow the same procedure as before to translate and compile this program and then open it in MED PC Notice how unlike before the house light is not on But look at the bottom window it shows that the program Tutor03 was loaded at xx xx your computer clocks current time This shows that the Box was indeed loaded and is now awaiting your start command Figure 8 Program in MED PC So let us issue the start command Scroll your mouse to the menu bar and click first on Configure and then on Signals A window will pop up giving you more options MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Figure 9 Send Signals to Boxes Send Signal to Moxos E Command bo rn The Issue START command
52. off 2 ms after being turned on rather than the 10 ms separation specified by the procedure NOTE This is not a cumulative source of errors and would never be any greater than the resolution value An extremely important point to bear in mind is that this discussion reflects a very unlikely situation in which the system oscillates from moment to moment between the Boxes requiring substantial time to process and the Boxes requiring minimal processing time The actual behavior of a MED PC system can be expected to be closer to one in which any given Box is processed at intervals approximating the nominal resolution value because the demands of the Boxes average out with some Boxes active on one sweep and others active on the next This is especially true when the Boxes have timers with minimum durations of at least twice the resolution value The error in practice will also usually be much smaller than the resolution value provided that the average sweep duration displayed on screen by the A indicator on the status line is appreciably less than the resolution value 69 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER THIRTEEN An Introduction to Macros What are Macros and Why Should Use Them The macro feature is one of the key aspects of the system and no user should ignore this feature Macros are text files that automate sequences of operator actions A common use for macros is to automate the loading of a set o
53. pare ad es ane ah Ae ute as aah a rn pa td C 144 STARTDATE i de ue a Oe Ahead ee ded ee Ob eee lk AS Re RIO 123 STARTR OUR CTI 123 STARTMINUTES AGRAR DE x EER RA REGSGe4eRGne RS ERE iE bd ndo dus 123 STARTMON TL uis dk 4 4 eder de o ded dci dide de ad dede do de Ro ds Bod eae Rid a oss 123 STARTSECONDS pirsa amg exe Gee He ae ae A E na ARE UR m dede Rid ed eid Ge a 123 SIARTYEAR So ds de kk Ra ES GE Ra el a EE ARR Gd ed Gee RS Bed 123 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC STOPABORT imd ea Hae Ea a AA rack ak A AAA 120 138 STOPABORTFLUSH A AO A E OA 121 138 STORE daba cada dam ad 120 139 SUB 202 add eibar add de ia Dee db Bed te dol 96 SUBECTNUMBER ara ri ab ori ro as Ete bee 123 SUMARRAY 2 5444 EO A A AR B fh oko Ad X o3 405 a e a cR CR a RU a wade 101 SUMSOUAREARRAY ADA A eR Red LR RORIS AAA 101 TEXTINPUTBOX siasa iru acidic d QR A en diet aan Wood aed ak ote whole a diii ae o pa es 148 MME eed eee hi ered beh ae od A A a IW ed Bek x 121 TIMED GOUT RUM esos ara ar denen a a ich Ge ed At dpe et eh Dera 146 VAR ALIAS usara i ha eer Eee eae ae a be ee ata BA ae a eem Bae RUD d 128 WITHIN se al a wR ea ae dig le aa Eek athe arate lt gh Eee ca do 106 YZ2KEOMPENANT seve gs ai Ret ge eee ee S n uie 136 ZEROARRAY AS a OR Red P a AA dbs 111 ZEPU
54. sa Hebe tLe ui OU t e Pee Le OR Y 3 79 Output Section Commands ler hens 85 Turning Outputs On and Off zie siti paaris iki gitad eiki A 86 Coordinating Events Across State Sets 89 Coordinating Events Across BoxeS 2 45 20 eb s eh o E EE 3h ER ee d 92 Mathematical Commands me s ssir scettr A a A RP ed 96 Statistical COMMANAS 22 tama wie d ades Ro ax du Ted A a Ted 100 Decision suh m a de d odo RE bdo ec de e ded es odi ede hehe e bebe bans 102 Array FUNCIONE s e rr oe aoe bce tach bee ee OE Oe Ghee a ee eee teas 107 Data Handling Commands 2225 2 3 ba eon oes Pek oa Pea Oka wad E ewe Pee 113 Stopping the Procedure iud as bo eed do ae pe eed eae Wet as e od aed ee A 120 Miscellaneous Commands hh rhe 121 Listing of Special IdentifierS ooo 123 Commands that Come Before the First State Set o o e e 125 Appendix Bs A A A AA 137 Appendix C ex k A REOR A RR a eee a ee A 153 Inline Pascal Procedures iesu ero Eom ko R A RR RGR EROR A ea 153 Background Procedures s ca cirer ah RR a a Ra See ee Sead e Pee 158 Importing Inline amp Background Pascal Code from Earlier MED PC Versions 164 MED PC s Internal Data Structures saa nama daaraan aoia ed ta e mue a dua i a aaia auai a 164 INDEX a oe aa a
55. that is not placed before State Set 1 It is an output command that may be used to generate printouts from within the code Just like with printing from the menu bar unless you specify differently using the aforementioned commands PRINT will print everything All printing is done through the Windows Print Manager In the event that the printer is offline or out of paper or there is some other problem Windows will present a Dialog Box indicating the nature of the problem It is generally best to correct the problem and the select RETRY Data will not generally be lost under such circumstances Syntax INPUT PRINT gt NEXT Real code may look like this S2 30 PRINT STOPABORTFLUSH 57 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Tutorial 10 Bringing it all Together For this Tutorial open up Tutor09 mpc and make the following changes noted in bold and save it as Tutor10 mpc This is a VR 10 Filename Tutor10 mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser Defined Variables A Number of Responses Number of Rewards Data Array Output Array Max Time in Minutes Session Timer PLI 048 tu Maximum Reward VAR_ALIAS Session Time M Y Default 1 minute VAR_ALIAS Maximum Number of Rewards Default 10 D
56. the With MPCGlobal Do End construct Procedure ADDAB MPCGlobal MPCGlobalPtr Num1 Num2 Extended Var Result Extended Begin With MPCGlobal Do Begin Result Numl Num2 End With End ADDAB 154 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL 3 A copy of the procedure declaration must be placed between the INTERFACE and MPLEMENTATION keywords as follows NTERFACE Procedure ADDAB MPCGlobal MPCGlobalPtr Num1 Num2 Extended Var Result Extended MPLEMENTATION Accessing Arrays By Passing Their Starting Address As Untyped VAR Parameters INLINE procedures designed to manipulate arrays are somewhat more complicated to handle particularly because arrays cannot be passed to the procedure in the same fashion as a simple variable A convenient way to manipulate an array however is to pass it as an untyped variable parameter and declare an array to reside at the starting address of the variable To utilize the ConstantVI procedure listed below one would write MED PC code similar to the following Feeder 1 ETST A 1 2 3 4 5 0 7 8 9 10 11 12 13 14 15 17 18 19 20 SS dl 1 ConstantVI MG A Round Sizeof A Sizeof A 0 30 gt 52 S2 START RANDD B A SET B B 1 gt S3 S3 BHT gt S4 S4 R1 ON Feeder S5 S5 0 1 OFF
57. the yoked auto shaping code has been modified so that Box 1 will issue K1 and K2 whereas Box 3 will issue K3 and K4 to communicate with Box 4 This is accomplished by incorporating a special variable named BOX into commands that receive and issue K Pulses BOX is always equal to the Box number of the Box in which the MSN program is running In the control procedure in the following code example the K pulse in State 2 would be K1 when the procedure is running in Box 1 because BOX would equal 1 Similarly when running in Box 3 the same statement would issue K3 In the yoked procedure K BOX 1 would respond to issued by Box 1 when running in Box 2 because BOX would equal 2 When running in Box 4 the yoked procedure would respond to K3 Box 3 s first K pulse By alternating between Control and Yoked Boxes any number could run the same procedure Y Modified Auto shaping Code Demonstrating the use of the BOX Variable Y Auto shaping Procedure for the Control Box Feeder ill HouseLight KeyLight S S 1l SI START ON HouseLight S2 S2 20 Mean ITI Tell Yoked Box When ITI is Over by Y Sending a K pulse Equal to this Box s BOX number 1 WITHPI 500 ON KeyLight K BOX 53 S3 Tell Yoked Box that the Feeder is on by Sending a Y K pulse Equal to this Box s BOX number plus 1 R1 8 OFF KeyLight ON Feeder K BOX 1 54 S4 4
58. 0 S2 FRR1 ON 2 gt 53 S3 2 OFF 2 gt S1 BKGRND BKGRND is an output command that may be used to run certain procedures in the background BKGRND procedures must be written in the file Backproc pas that is included with MED PC Up to ten 1 10 different BKGRND procedures may be declared at one time Multiple boxes may simultaneously request the same BKGRND procedure without problems because MED PC will properly track which Boxes have requested the procedure The same Box may have multiple simultaneous active requests for different BKGRND procedures but note that a single Box may not request the same BKGRND procedure a second time until its previous request has been completed Syntax BKGRND P1 Where P1 a number from 1 to 10 inclusive Example S S 1 ST 1 BKGRND 5 S2 For more information on the BKGRND procedures please see Appendix C Page 153 122 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Listing of Special I dentifiers BOX This identifier is synonymous and reflects the Box number of the Box in which the MSN procedure is executing BOX may be especially useful in conjunction with inter Box communication see section on inter Box K Pulses Under no circumstances should this value be altered with a SET command SUBJ ECTNUMBER EXPNUMBER GROUPNUMBER These values reflect the Subject Experiment and Group numbers of the subject in the Box in which the experiment is exe
59. 1 ADD A ON 5 gt 53 1 State Sets do not need to be numbered consecutively nor do they need to be in ascending order since State Sets are processed in the order in which they appear in a procedure but each State Set MUST have a unique number MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Typing Conventions Case Is Irrelevant Upper and lower case letters may be freely intermixed and used in any manner that best clarifies source code for a procedure Spacing And Blank Lines Spacing and blank lines are ignored Again this feature may be used to make source code statements as clear and as easy to read as possible Rules For Comments Comments are notes placed into the code that do not get translated into PASCAL Comments may be placed on their own lines or following the end of any line containing MedState Notation code Comments always begin with a backslash Please note that this is the same character as the DOS path separator not the arithmetic division symbol Comments may not occur in the middle of a statement Legal examples This is a comment before State Set 1 S S 1 8 8 1 Y This is a comment before State 1 sl Input Output gt Next Illegal examples Input This is the House Light Output gt Next Integers Integers are whole or counting numbers such as 0 5 112 and 3000 which do not contain decimal points A few commands logically require the use of integ
60. 1 ADD A SHOW 1 K1 Count A SX K Pulses should not be used in place of Z Pulses although superficially similar these commands have different purposes K Pulses are used for communication between Boxes whereas Z Pulses are designed for communication between State Sets within Boxes K Pulses have the same priority level as normal MSN commands Unlike Z Pulses K commands are treated as normal inputs in the sense that when K s are stacked with other commands the topmost statement will be processed in the event of a tie For example in the following code in the event of a simultaneous K1 and 481 transition would be to S2 K1 gt 52 R1 gt 53 Processing Efficiency of the K pulse As noted above do not treat K Pulses as interchangeable with Z Pulses One reason for this concern is that issuing a K pulse from within an MSN procedure generates a considerable amount of overhead because each Box must be processed to determine whether the occurrence of the K pulse necessitates any transitions between states When a is issued from the keyboard it is not presented simultaneously to all Boxes Instead the operator specifies a list of one or more Boxes to receive the K Furthermore MED PC automatically spaces the delivery of keyboard K s across Boxes to help distribute the processing load This is in contrast to the situation when K s are issued from an MSN procedure in which case the K is issued simultaneously to all
61. 1 BIN C A 0 1 5 Start End SET A 0 gt S1 0 1 ADD A SX 98 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL In this example the frequency distribution is recorded into array C from element C 0 through element C 10 C Start marks the first element of the distribution and will also contain the total frequency recorded i e C Start 1 C Start 2 C End A is a variable containing the current value to be categorized Values greater than the category assigned to C End are placed in C Start 1 the second element in the BIN array The 0 1 indicates that the data is being recorded with a resolution of 0 1 and the 5 indicates that each BIN is to be five seconds wide Given the values above and a subject that responds 50 times with IRT s between 0 1 seconds and some indeterminate maximum the following data array might result ELEMENT BIN RANGE IN SECONDS RESPONSES C 0 Total Responses 50 CE Greater than 45 3 2 00 5 3 C 3 5 1 10 5 C 4 0 15 7 5 15 1 20 8 6 20 1 25 9 C 7 25 1 30 6 C 8 30 1 35 4 C 9 35 1 40 3 C 10 40 1 45 2 The aforementioned example serves to BIN inter response times Sometimes it is desirable to BIN a response count by the elapsed time The following example illustrates this with an FI20 schedule Note This does not require the BIN command
62. 200 available positions numbered 1 200 Syntax INPUT OUTPUT SHOW P Label X NEXT Where P Position 1 200 must be defined Label is a user defined name for that position 1 200 that must begin with a letter and X is the variable value listed in position 1 200 Real code may look like this R2 ADD A SHOW 1 Center Key A SX Where after one response on input 2 we will add one to the variable A and finally the value of variable A will be displayed on the screen in position 1 and to the left of the value will be the label Center Key before making the null transition Tutorial 2 Expanding your first program In this exercise we are going to expand on the program you wrote in the first Tutorial Whether you want to open Tutor01 mpc and make these changes and save as Tutor02 mpc or just start fresh is up to you The goal of this program will be to have a count appear on the screen every time the left lever is pushed MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Once again open your text editor TRANS and type in the following This is a sample program Filename Tutor02 mpc Date August 8 2004 House 1 LeftLever 1 S S S1 0 01 ON House S2 Note that the House Light is an output whereas the Left Lever is an input That is why both constants can be defined as 1 If there was anything in this program thus far that you did not understand please refer back to Chapter Two
63. 234 67 1234 67 1234 67 1234 67 1234 67 1234 67 1234 67 1234 67 1234 67 1234 67 1234 67 1234 672 1234 677 5 5 1 SL 1 PRINT gt STOPKILL The code above will produce a printout similar to the following Start Date 03 10 91 End Date 03 10 91 Subject 0 Experiment 0 Group 0 Box 1 Start Time 14 11 32 End Time 14 11 33 Source Code PRINTSAM A 0 1234 67 1234 67 1234 67 1234 67 1234 67 1234 67 1234 67 7 1234 67 1234 67 1234 68 A second option is whether a form feed is issued after each Box is printed so that data for each Box begins at the top of the page NOFORMFEEDS is the default setting but FORMFEEDS causes the printouts to begin at the top of pages Note that individual form feeds may also be issued from within the runtime menu system PRI NTORI ENTATI ON This command is used to override system defaults with respect to whether a given printout occurs in Landscape sideways or Portrait standard orientation The MED PC default is Portrait Syntax PRINTORIENTATION P1 Where P1 Portrait or Landscape PRINTCOLUMNS The PRINTCOLUMNS command controls the number of columns in which the contents of arrays are printed The use of this command will override any defaults set within the runtime menu system Syntax PRINTCOLUMNS P1 Where P1 The number of columns 133 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Example in which the C array will be printed in 3 columns
64. 3 FIEENAME eR ire xa det ah A eg xXx dele ed E aia A we ari 137 FLESH s ia gu opa dac a M A OCHO RUE ee SOR CR CERRO RA Xd S 119 GEOMETRICMEAN Cusco p qe uec horum P RCRORUP OR Rom O a Ee X CRT SRL es 100 GETVA PDT 113 GROUPNUMBER 2284428440455 64 madera iaa Ra AAA A 123 HARMONDOMEAWN od A A A A PI OX om e e 100 Era ta A Be A AR AA a ER e Ro ad 102 INFTEONSTPROBARR gt uu aaa ai a En A AA A A 112 UNPUMBOX caco a paa bares ae a a ia A Ad o a a bara a tes 146 rra EUR baer ed aaa a dome 92 144 LIMIT Senora Beek ce a Ae eae BAe e BE AI E RO ER Ee 97 LIST ans ard 534 2258 159 rr AAA ADA 108 125 LOAD arias ara oh A ENE Dae eee ge Ae A 137 LORI nd a a ee a A ee 86 146 LOURUNM ci ad e e rada dd aa da 86 146 LOG OPMONS ordo rei do dede de 9 torera 3 d dedo ovis de ded aod de Qaod de d io 150 MAXARRAY ad Rue d xm Ear mad y Ue A aod RR a A AUR HER Rd RIPE 100 MAXARRAYINDEX aeg EE RC eR X god E ORC Qe ke 101 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL MINARRAY 24023 5 ia a e dad wok AA EE GEES EE SA ER EES 100 MINARRAYVINDEX 2 xe td aa i a Ed 101 MODIFY IDENTIFIERS 9 o deb achat bake bath Oa a ke aha a A aes Aa Pee 138 NUMERTCIUNPUTBOA 00 00 i iede d a eh Oe 3 o hea ee Bd bb debe hee Awd bbe awed 147 QT C ee a E Be Ged at Gace ee Ease om Bee eee a 86 145 ON dudes kk eee eed oa ede ed eee eee a ed be
65. B Appendix B lists all Macro commands in detail with syntax comments examples and discussion Each command is indexed for convenience LOAD LOAD is the macro equivalent to the File Open Session menu selection Syntax LOAD BOX P1 SUBJ P2 EXPT P3 GROUP P4 PROGRAM P5 Where P1 The Box to be loaded 1 lt P1 lt 16 P2 2 The Subject number P3 The Experiment number P4 The Group number P5 The program name P5 must be the name of a compiled MSN program Example LOAD BOX 1 SUBJ 3 EXPT 22 GROUP 15 PROGRAM BIGEXPT Open a session in Box 1 for Subject 3 Experiment 22 Group 15 Run the program named BIGEXPT FI LENAME Custom filenames may be associated with an experimental session with the FILENAME macro command Syntax FILENAME BOX P1 P2 Where P1 is a Box number P2 is a filename The filename may be any legal Windows filename up to 255 characters An illegal filename will be detected when an attempt is made to write data to the illegally named file and a dialog box will be presented The dialog will permit correction of the filename If a file by the same name already exists the data from the current session will be appended to the existing data Example FILENAME BOX 3 R29AMPH 001 COMMENT Comments may be associated with an experimental session with the COMMENT macro command Comments appear at the end of printouts and data files Syntax COMMENT BOX P1 P2 Where P1 is a Box number
66. Boxes hence issue K Pulses from within MSN procedures sparingly This is not to discourage their use but rather to point out that they should not be used with abandon The Special Variable BOX It is often desirable to have an MSN procedure reacts to K Pulses conditionally upon which Box issued the K pulse Consider the yoked auto shaping paradigm presented above In that example the control Box issues K1 and K2 to indicate to the yoked Box the occurrence of critical events As long as only one Box is running the control procedure and only one is running the yoked procedure at any given time everything will work fine Consider though what would happen if Boxes 1 and 3 were simultaneously running the control procedure while Boxes 2 and 4 were running the yoked procedure Whenever a stimulus change would occur in Box 1 or 3 stimulus changes would occur in both Boxes 2 and 4 the two yoked Boxes would each be yoked to two control Boxes One way around this problem would be to write a separate control procedure for Box 1 that issues K1 and K2 and a different control procedure for Box 3 that issues K3 and K4 This solution would work but would require writing and maintaining multiple copies of essentially the same procedure 94 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL A more elegant solution to this problem is to adjust the number of the K pulse on the basis of which Box is issuing or receiving the K pulse In the following example
67. Chapter Seven 2 5 2255 359225 5 23 523 52324922555 31 Decisions Decisions Decisions e he ss 31 Introducing the IF Statement xis ui a a a AA A 31 Chapter Eight 6 4445 9 9 4 99 88 3919088 1629084 78 809 AI AAA A AA 39 An Introduction to Arrays Part One hr rs 39 Chapter NING soni AA a 45 Array Commands As Outputs x ssa obera aae 4a Doe Kk ER ead we eee E X E deus d 45 An introduction to the LIST RANDI AND RANDD commands 45 Chapter Ten suos Ge ewe a A a a 49 An Introduction to the VAR ALIAS 8 4 49 Chapter Eleven isos R68 0888 A 55 The Data Has Been Collected Now What o oo 55 An introduction to Print and Disk Commands 55 Chapter Twelve o REOR ina ra a A tenni terraa 61 S How DOES This WOEIK s coeds is A A AAA A Rue opus 61 The MED PC Theory Of Operation o oo eee 61 Chapter Thirteen eee eee ara 71 An Introduction te Macros treco ssa a VR dox ge RU ee XU are aol a alae e OR ee 71 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Appendix A 0000 bodes A a A A AAA 77 Input Section Commands es rre amg
68. D B SHOW 2 Second B SX UJ S S 3 S1 R1 ADD C SHOW 3 Third C SX Explicit Time Inputs Seconds and Minutes Time specified in terms of seconds or minutes may be used as an input condition Syntax P1 or P2 Where P1 P2 number or constant Comments Seconds 2 Minutes Legal Examples a 1 ON 1 gt SX b 0 5 ON 1 SX 5 2 ON 1 gt SX d 0 5 ON 1 gt SX e Dur 2 S S 1 91 Dur S2 8 A variety of modular and stand alone interface cards are available The most common input is a 28 VDC ground signal or a TTL 5VDC sinking logic signal 80 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Illegal Example f A ON 1 SX As can be seen in the examples above time may be specified as decimal quantities unless P1 is a constant When a fractional minute is specified example c above the decimal portion corresponds to fractional minutes not seconds When specifying time values it is most precise to use values that are multiples of the temporal resolution declared during the installation procedure typically 10 milliseconds Time values falling between two multiples will be treated as the higher of the multiples For example MED PC handles 0 245 as 0 25 Time values are reset upon entry to a state A fundamental rule is that only one time expression may occur within a single state The followin
69. ES INC Comments Stringing is permissible The value of P3 is automatically incremented by the LIST command Assignments to P3 through other commands will affect the selection of subsequent items via the LIST command i e it is possible to skip or retrace elements in the array via manipulation of the P3 subscript This must be done with caution however as an illegal subscript value will be ignored by MED PC reverting your array back to subscript zero Array P2 may be declared with LIST or DIM statement Examples and Discussion Running the following procedure would result in the following pattern of outputs 1 2 3 1 2 3 1 2 3j eth Example A LIST A 1 2 3 S S 1 LIST B A K ON B gt S2 S2 1 OFF B gt 51 In the first LIST statement above an array named A is declared The lowest element of an array is always referenced as Element 0 Element 0 contains the value 1 Element 1 contains the value 2 and Element 2 contains the value 3 One second after this procedure is loaded the statement LIST B A K sets B equal to the value element K of array A Since all variables are automatically set to 0 at the beginning of program the value of B is set equal to A 0 and ON B causes output 1 to be turned ON One second later output 1 is turned OFF in State 2 Following assignment of the value of A K to B 1 is automatically added to the value of K so that the next time the list statement
70. ES INC MED PC IV PROGRAMMER S MANUAL CHAPTER NI NE Array Commands As Outputs An introduction to the LIST RANDI AND RANDD commands The previous chapter dealt with a way to transform a variable into an array just by assigning it a dimensional value This was a nice way to collect and sort data Arrays can be used for more than just data collection they can also be used as control variables in a program This chapter will deal with how to set up and use arrays in outputs LIST as a definer of arrays Unlike DIM which only allows you to set up the shell of an array that must be filled in or sealed LIST allows you to set up an array with assigned values LIST is best used in conjunction with an out put function this will be demonstrated a bit later When used to define the syntax of LIST is LIST X V1 V2 V3 Where X is any available variable and V1 V2 and V3 are all values assigned to the new array X LIST as an output The second use of the LIST command is found in the output section of statements This must be used in conjunction with LIST as a definer The basic idea behind these two commands is that LIST first defines the array at the beginning of a program Later in the program when you want to draw from this array the LIST as an output will draw each number one at a time and sequentially until the pro gram is done or the numbers have all been used If the latter occurs LIST simply starts again at the begin
71. HOW 1 Session N 60 IF N 60 gt M True False True S3 Therefore when the Session Timer gt M time to Stop False SX But if Session Timer M go no where S3 3 gt STOPABORT Your program is ready to be saved as Tutor06A mpc translated and compiled When you open MED PC to test it run it first as is After seeing that it times out after a minute but acts as a FR 5 when it is running reload the Box with Tutor06A and change variables X to 10 and M to 1 5 before issuing the start command Notice now how it is running as a FR 10 for a minute and a half 34 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Tutor06B mpc We are doing a couple of interesting things in this program As the chapter would lead you to believe the primary purpose of this program is to see how a nested IF statement works State 2 of State Set 4 contains our nested IF statement In order to make it work we had to revisit a couple familiar topics First we needed to SET a variable back in State Set 1 to allow us to have something to nest Looking at the comments it is seen that our variable Q is going to be the maximum number of rewards the animal will be allowed The second topic revisited is Z Pulses We had a Z pulse in this program already to signal the Reward Timer The new Z pulse serves the purpose of terminating certain program functions after our Session Timer times out or the animal has enough rewards
72. IM C 999 LIST D 1 5 10 15 19 PRINTORIENTATION LANDSCAPE PRINTCOLUMNS 4 PRINTOPTIONS FULLHEADERS FORMFEEDS PRINTVARS A B C S S 1 NX Main Control Logic for VR Sl 0 001 SET Q 10 M 1 gt S2 S2 START ON House gt S3 S3 1 RANDD X D SHOW 2 VI X gt S3 S4 XSR LeftLever ON Reward 21 S2 22 gt 51 continued on next page 58 MED ASSOCIATES INC S S 1 S1 0 001 5 S2 START ON House S3 qs RANDD Ds S4 X R LeftLever Z2 gt S1 ON Sua Sl START SHOW 3 Main Control Logic for 1 83 SHOW 2 VI Reward Y Response Counter VR 82 X gt 83 Z1 gt 52 92 S2 R LeftLever 422 gt S1 ADI D S 9 35 sis Z1 A DD B S2 0 05 0FF Reward Responses A A SHOW Reward Counter gt S1 T T gt 3 Responses A SHOW 4 Rewards B S2 MED PC IV PROGRAMMER S MANUAL gt SX 0 1 Second Intervals Sx 0 987 987 SX SS Time Increment in S1 START S2 S2 0 1 SET T T 0 1 gt S S45 Y Recording IRT s S1 START S2 92 R LeftLever SET C I SET C I 422 gt S1 S S 6 S1 START SHOW 1 Session N
73. INT SX From A to B Copy 3 Elements 0 1 2 and then Print ZEROARRAY This command sets all of the elements of an array to 0 The command takes the name of the array to zero as its only argument Syntax ZEROARRAY P1 Where P1 Must be the name of an array declared by LIST or DIM Example Sus m S1 5 COPYARRAY A B 3 ZEROARRAY A PRINT SX The above uses the same S S 2 from the COPYARRAY example however this time the counter in array A is also zeroed every 5 111 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC INITCONSTPROBARR The INITCONSTPROBARR command is used to initialize the values of an array to the progression defined by the Hoffman Fleschler constant probability distribution This distribution is frequently used to determine the intervals comprising variable interval schedules Syntax INITCONSTPROBARR P1 P2 Where P1 An array defined by the List directive P2 The mean value of the array Comments INITCONSTPROBARR only works with arrays defined with the LIST command The array must not be defined with a DIM command The particular values listed in the definition of the array are irrelevant they will be over written when this command executes If using the resulting array elements in conjunction with the T operator to measure time be sure to multiply each array element by 1 or 1 to scale the values to units of time Although the resulting time values may not be even
74. L Declaring Constants and Named Variables Constants Named Variables VAR_ALIAS Controlling the Appearance of Printouts and Disk Files Printout Appearance Options Disk File Appearance Options Year 2000 Compatibility The Y2KCOMPATIBILITY directive Input Section Commands START START is used to hold a State Set in a given State until the START command is issued via the keyboard by the operator START may appear in any State Set and may appear more than once This command is useful for allowing the operator to load procedures and place subjects in chambers before actually initiating the experimental session as well as allowing the setting of variable values either from the keyboard or via macros Syntax P1 START Where P1 Number constant variable array element or special identifier Comments P1 since it is unclear when specifying a count would be useful it is generally not stated and defaults to 1 Examples and Discussion START 52 Y Go to State 2 following START START ON 1 gt S2 Turn on 1 and go to State 2 following START 5 START S2 Wait for 5 START commands before proceeding Y to State 2 Remember MED PC procedures actually begin to execute as soon as they are loaded START does not initiate the procedure it is merely a mechanism for holding a State Set in a given State until the operator provides keyboard input Also START and program Start Dates and Times in MED PC prin
75. LIMIT X 3 10 SX S S 1 This Code Fragment Subtracts 1 from X Every Second S1 Y X will Achieve and Hold a Value of 5 1 LIMIT X 1 5 SX SET SET is used to perform any of four basic mathematical operations involving two or more operands Any mathematical function provided by Pascal Delphi can also be inserted within a MSN statement using In Line Pascal See Appendix C Two forms of this command are possible as indicated by syntax A and syntax B Four Operators are permitted Division Multiplication Addition Subtraction Syntax A SET P1 P2 Operator P3 Syntax B SET P1 P2 Where P1 variable or array element P2 and P3 number variable or array element Operator or 97 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Comments Stringing is permissible P2 and or P3 may be followed by or to assign a time value to a variable or array element Assigning a new value to a constant is not permissible It will not produce a translator error but will produce a Delphi compiler error during compilation typically of the form Undefined Label In the original MED PC complicated math expressions had to be broken into pieces For example SET A 1 2 10 4 3 may have been written SET A 2 10 A A 4 A A 2 Since Version 2 0 of MED PC DOS complex expressions can be written directly this example is now written as SET A 1 2 10 4 3 Ex
76. M A2 SET A VALUE 20 MAINBOX 1 BOXES 1 If this macro is executed on a fast computer it is possible that the Box will load and A will be set to 20 in less than 10 milliseconds If that happens then 10 milliseconds after the program loads S1 of the program will set A back to 10 143 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC The following macro avoids this problem by introducing a delay of 20 milliseconds after the box is loaded LOAD BOX 1 SUBJ 1 EXPT FR Demo GROUP 2 PROGRAM A2 DELAY 20 SET A VALUE 20 MAINBOX 1 BOXES 1 1 SENDING START K Pulses and Responses to Boxes A set of three macro commands provides equivalents to the menu commands for sending signals to boxes available in the dialog box accessible from Configure Signals START BOXES Syntax START BOXES Optional Parameter SYNCH Example 1 START BOXES 5 6 9 Send a START signal to Boxes 5 6 and 9 Example 2 START BOXES 1 3 SYNCH Send a START signal to Boxes 1 and 3 and have them start on the same clock tick K Syntax K A BOXES B Where A A K signal B One or more Box numbers Optional Parameter SYNCH Example 1 K 5 BOXES 1 Send K5 to Box 1 Example 2 K 10 BOXES 8 9 SYNCH Send synchronized K10 to Boxes 8 and 9 144 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL R Syntax KA BOXES B Where A A K Signal B One or more Box numbers Optional P
77. M C 2 DEMONSTRATE READING IN A FILE AS IN CONTINUOUS SESSIONS SS 1 Sl Y Request User written Background Proc 2 read in Y data and session parameters presumably Y determined by last session s performance 0 1 BKGRND 2 gt S2 S2 Y Wait until the Background Proc sets D so that we Y know that the file has been read 0 1 IF D 1 gt 53 93 Show em for demo s sake 0 1 SHOW 1 C 0 C 0 2 C 1 2 C 1 3 C 2 2 C 2 84 S4 Y Simulate setting the values based on some pseudo behavior K1 ADD C 1 SHOW 2 C 1 C 1 SX K2 ADD C 2 SHOW 3 C 2 C 2 gt SX K3 S5 Let K3 simulate some basis for ending the session 1 ADD C 0 SHOW 1 C 0 C 0 gt SX S5 0 1 SET D 0 BKGRND 1 gt 86 S6 Y Don t go immediately into STOPABORT or STOPKILL Y Wait until background Proc says done via D 1 0 1 IF D 1 gt STOPKILL 160 MED ASSOCIATES INC The following is the code for BKGRND procedure 1 This procedure will generate an error if it cannot write to the data file MED PC IV PROGRAMMER S MANUAL
78. MED PC IV PROGRAMMER S MANUAL SOF 700W DOC 003 Rev 3 0 Copyright O 1999 2006 Med Associates Inc amp Thomas A Tatham All Rights Reserved Med Associates Inc P O Box 319 St Albans Vermont 05478 Trademarks MED PC WMPC MED PC IV MedState Notation Med Associates Inc Registered Trademarks MED PC Med Associates Inc Turbo Pascal Borland International Inc MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL TABLE OF CONTENTS Chapter One 6 6 4 5 654 545 08 0008900058408 520029 DOS ee FES 1 Welcome To Programming In MedState Notation 1 Chapter TWO cca ceca nissan ewes ce eee OR OR ees 3 An Introduction to the Basic Concepts of Programming lees 3 Chapter Three ss rain aaa ee Ded RC ween SOR ES a a ers 11 An Introduction to R SX ADD and SHOW Commands 11 Chapter Four 2266s tena ca tee cae eee CN ee Se ee ee ee eee ee A 15 Controlling the Beginning and End of a Program sasaaa aaa 15 Chapter Five uds ke bees eee ee eee A AA 21 Creating a Program for an FR Schedule sassa cca ee 21 An Introduction to Z Pulses and Adding a Counter to Inputs o 21 Chapter SIX ic a A E AR Cee A RRA RC a a 25 Establishing Default Values for Variables and Using a Variable Time Input 25 An Introduction to the SET and T Commands 25
79. MER S MANUAL APPENDIX C MED PC allows for the inclusion of User written Pascal routines directly in programs written in MSN This is sometimes useful when it is necessary to perform complex online calculations that might otherwise be impractical to perform using standard MSN statements There are two mechanisms for including Pascal routines in MSN programs The first mechanism is referred to as Inline Pascal and consists of placing Pascal source code directly in an MSN program Inline Pascal code is executed as soon as it is encountered and is suitable for most tasks The second mechanism is known as a Background Procedure and consists of placing a reference to a Pascal procedure subroutine in an MSN program Unlike Inline Pascal code Background procedures are not executed immediately Instead they are executed whenever MED PC has unused processing time available Background procedures are suitable for very time consuming complex calculations or for tasks such as writing to the disk or printer that may take an indeterminate amount of time Inline Pascal Procedures An interesting feature of MedState Notation is that it allows programmers fluent in Pascal to use inline Pascal In other words it is possible to include straight Pascal commands in the output section of a MedState Notation statement This facility allows one to directly insert Pascal commands ina MedState Notation procedure To place Pascal statements in an output section involv
80. NUAL INDEX MINUTES na a a a Ree a DS as TAR A AE A A A Sede a 80 A A A ANA 85 ETT O A A RN 80 HK ct hb ithe che habe iaa daa AAA aaa a A AAA 83 FR ar ir ars a E a a Wee is 79 FSTART 22 es nab ee ed o3 E bk Ga A A A Ea dus 79 EN ia PTT 81 DM Ries e Belated Te Raha Ahh a Gt Ache TEA RA Ed he aes ai Ree Alay Bed 83 ADD 232545 radares Ld EGUR OR ed ee Ee Ed ee FOX GR X E BOY Go 96 ALERTORE tioi emona CIS O a Seed a peek ILE a a 88 Dou pri ud A a dd e a 88 ARITHMETICMEAN oz rdg de ate Ro ll eet ad Go de d POR a Er bc P VOR ad a RO d ae BO 100 BIN Mc 98 BKGRND 22445 siria atada xd rd ad a a ad e eed 122 BOX A cian booed had eet edhe EO vv 123 BOX PRINTER rara ed EEUU hah a ee a nih edie Be a ce ee eae Ree d 141 BOX PRINTER SETTINGS 425 22 Re RE Ran eee ipen Seek Ea Se RR eee a4 3 PR 140 M I gh neh a de eke 124 CLEAR RR RRA 115 COMMENT s sie ti a hed ei dh Bd dd maid hed ee dd de bee ed ak del i A dd dae e Ad 137 Sunc cAMP aa o A e E Y bye ck Space ee Ske Si E 127 COPYARRAY 223454028445 e a a E ERG ee EE PS ERS ES EE A Ee 110 CURRENTIDATIE oe Pes dog EAE E PR ee eA OR A Pel A de ES 124 CURRENTHOURS cT 124 CURRENTMINUTES timean Rd v6 ehh eak kay SP ako E d eh ed 4 124 CURRENTMONTE 646 tM 24 bee ha ee Pace he 9S bee eee ng E boohoo 124 CURRENTSECONDS 5 52 had Oe
81. OFF Feeder gt 82 Y Auto shaping Procedure for the Yoked Box Feeder il HouseLight KeyLight S S 1 S1 START ON HouseLight S2 S2 Y K pulse Sent by Control Box when KeyLight Turned On Y Look for the First K pulse of the Preceding Box K BOX 1 ON KeyLight 53 continued on next page 95 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC S3 K pulse Sent by Control Box when RF Starts Look for the Second K pulse of the Preceding Box K BOX OFF KeyLight ON Feeder S4 S4 4 OFF Feeder gt S2 Mathematical Commands ADD ADD is generally used to increment a variable or array element by 1 It performs the same function as SETA A 4 1 Syntax ADD P1 Where P1 variable or array element Comments Stringing Variables with Comma separation permissible Examples S1 1 ADD C SX Every Second Add 1 to the Value OIC R2 ADD X Y Z A I SX Every Response From Input 2 Add 1 Y to the Value of Variables X Y Z and Array Element A T SUB SUB is used to decrement a variable or array element by 1 It performs the same function as SETA A 1 Syntax SUB P1 Where P1 variable or array element Comments X Stringing Variables with Comma separation permissible Examples S1 1 SUB C SX Every Second Subtract 1 from the Y Value of C R2 SUB X Y Z A I SX Every Response From I
82. OFF 1 2 Feeder A K X S2 LOCKON and LOCKOFF LOCKON and LOCKOFF commands supplement ON and OFF and like ON and OFF may be issued from the menu system or from the output section of an MSN statement but with somewhat different effects They are more powerful versions of ON and OFF in the sense that an output turned on by ON may be shutoff by either OFF or LOCKOFF but an output turned on by LOCKON may only be shut off by LOCKOFF Essentially until a LOCKOFF is issued OFF will not deactivate an output activated by LOCKON In contrast LOCKOFF will shut off an output irrespective of whether it was activated by ON or LOCKON 86 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL If an output has been turned on by ON and a LOCKON for the same output is issued the output is upgraded from ON status to LOCKON status Outputs activated by LOCKON remain on even after a Box is unloaded by STOPKILL or STOPABORT and are not even turned off when the system is shutdown and the CPU is turned off The only way to shut off an output activated by LOCKON is by executing a LOCKOFF LOCKON and LOCKOFF are especially useful in conjunction with an output that must be left on even when Boxes wired to it are not running An example of this requirement arises chamber ventilation fans are controlled by MED PC subjects still need fresh air even when their Box is not running Another application of LOCKON might be a light attached to the door of a running ro
83. OW commands were issued n practice the SHOW screen is usually updated within a small fraction of a second after any changes are made by active Boxes most users would probably not even notice that updates are not in real time except in the case of displaying running response totals for rapidly responding subjects in which case the response total shown on the screen will discontinuously count up For example a pigeon responding in a Box controlled by the following code would most likely produce SHOW output that appears on the screen as a discontinuously incrementing counter perhaps incrementing as 3 7 8 12 etc Example A FEEDER 5 S S 1 sl 20 R1 ADD Y SHOW 2 RFS Y ON FEEDER S2 S2 2 OFF FEEDER gt S1 5 5 2 sl R1 ADD X SHOW 1 RESPS X gt SX 114 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Example B In the above sample the displays are not present until the animal begins responding SHOW 1 or responds 20 times SHOW 2 Show Labels may be displayed even while variable values are zero to confirm that a program is running with the following changes to the above code 85 8 1 81 START SHOW 1 RESPS X 2 RFS Y 92 S2 20 R1 ADD Y SHOW 2 RFS Y ON FEEDER 53 S3 2 OFF FEEDER gt S1 CLEAR Remove SHOW Counters CLEAR works in conjunction with SHOW As its name suggests CLEAR blanks out SHOW command output Fo
84. P2 is the comment 137 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Comments may be up to 256 characters in length but fewer than 256 characters may appear on print outs unless a sufficiently small font is used Example COMMENT BOX 5 Morphine 10 0 mg kg 10 min pretreat MODIFY IDENTIFIERS MODIFY IDENTIFIERS is the macro command for changing the Subject Experiment and Group identi fiers associated with a session that is in progress Session identifiers are used to generate filenames and appear on printouts and in data files Syntax MODIFY IDENTIFIERS BOX A SUBJECT B EXPERIMENT C GROUP D Where A A Box number B A Subject number C An Experiment number D A Group number Example MODIFY_IDENTIFIERS BOX 1 SUBJECT 2 EXPERIMENT 3 GROUP 4 Box 1 has been loaded The command changes the Session Identifiers The command line will be updated and printouts and data files subsequently generated will reflect the new values STOPABORTFLUSH STOPABORTFLUSH is the macro equivalent to the MSN command STOPABORTFLUSH and the menu command File Close session in conjunction with the Stop Save Data Write Data to Disk option This command ends an experimental session and automatically writes the data to disk Syntax STOPABORTFLUSH BOXES P1 Where P1 One or more Box numbers Example STOPABORTFLUSH BOXES 2 5 Close the sessions in Boxes 2 and 5 then write the data
85. Procedure STOPABORT and STOPKILL These commands are actually the names of two special transitions They are placed following a transition arrow and cause the procedure to immediately stop executing Any outputs currently turned on get shut off immediately unless turned on by LOCKON In addition the Box s status lines on the monitor are cleared The difference between STOPABORT and STOPKILL is that STOPABORT retains the values of all variables and array elements in memory for subsequent dumping into a file Flush and print can be executed before the dump The data from procedures terminated by STOPKILL is not recoverable the data is not placed in the dump queue STOPABORT and STOPKILL automatically perform the same functions as their manual equivalents on the close sessions window Please see the MED PC User s Manual on how to save your data manually Syntax Input Output gt STOPABORT Input Output gt STOPKILL 120 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Example Sud S1 10 R1 ADD A ON 1 S2 S2 2 OFF 1 IF A 50 STOPABORT STOPABORTFLUSH STOPABORTFLUSH is identical to STOPABORT in that it is a transition that turns off all outputs and stops procedure execution Additionally this command causes the data to be written to disk automatically File structure is determined by the internal file format declared during installation and any DISK commands prior to State Set 1 Fi
86. S2 continued on next page 59 ADD I 1 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC S2 1 ADD N SHOW 1 Session N 60 IF N 60 lt M True False GTrue IF Q lt B 2True 2False G2True 22 S3 2False gt SX GFalse Z2 S3 S3 5 PRINT STOPABORTFLUSH Translate and compile the program as usual open it in MED PC and run After one minute you should get a print out of the data you specified in a landscape format The data file on the other hand will contain all variables and arrays in the default format This is the first program we have written with a STOPABORTFLUSH command in it We did this so a data file would be made and you could compare your printout with the data file The data file was saved under MED PC s automatic naming system unless you changed that yourself Consult your MED PC User s Manual for an explanation of how and where MED PC saves files if necessary Congratulations you now have all the building blocks necessary to program in MedState Notation 60 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER TWELVE So How Does This Work The MED PC Theory Of Operation This chapter is written for the experienced MED PC user or for one who has read the rest of this manual and is interested in some of the background information A thorough understanding of this chapters content although not required to begin using the system is invaluable when
87. S2 HK This command like the Z pulse may be found in either the input or the output section of a statement It may be used to communicate with procedures via the keyboard and may also be used to allow Boxes to communicate with one another See the description of K Pulses in the section of this chapter covering output commands When placed in the input section of a MSN statement they perform in a manner analogous to responses R Indeed the syntax rules for K are identical to those for R One common use for K is in yoked experiment using the special identifier BOX as the P2 parameter K is unrelated to the variable K 83 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Syntax 2 Where P1 amp P2 Number constant variable mathematical expression array element or special identifier Comments P1 defaults to 1 if not stated P2 must be in the range 1 100 Examples and Discussion Example A Yoked Shock NOTE BOX is explained on page 123 S oc S1 K BOX 1 ON Shock S2 S2 2 OFF Shock gt S1 Example B Free or Shaping pellet NOTE Logical OR is explained on page 85 S os S1 START S2 S2 K100 A R1 ON 1 S3 Reinforce After Every A Responses or a Free Reinforcer if Operator Y Issues K100 S3 0 1 OFF 1 ADD C IF C gt B GEnd Continue End gt STOPABORT Session Ends After B Rei
88. THMETICMEAN GEOMETRICMEAN HARMONICMEAN MAXARRAY MINARRAY MAXARRAYINDEX MINARRAYINDEX POPULATIONVARIANCE SAMPLEVARIANCE SUMARRAY SUMSQUAREARRAY decision functions IF WITHPI array functions LIST RANDD RANDI COPYARRAY ZEROARRAY INITCONSTPROBARR GETVAL data handling SHOW CLEAR PRINT FLUSH stopping the procedure STOPABORT STOPKILL STOPABORTFLUSH miscellaneous commands DATE TIME BKGRND and special identifiers BOX ANIMALNUMBER EXPNUMBER GROUPNUMBER STARTMONTH STARTDATE STARTYEAR STARTHOURS STARTMINUTES STARTSECONDS ENDMONTH ENDDATE ENDYEAR ENDHOURS ENDMINUTES ENDSECONDS CURRENTMONTH CURRENTDATE CURRENTYEAR CURRENTHOURS CURRENTMINUTES CURRENTSECONDS SECSTODAY DATETODAY BTIME 85 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Turning Outputs On and Off ON ON is used to turn outputs on Turning on an already active output has no effect Syntax ON P1 Where P1 number constant variable array element or mathematical expression Comments Comma separation permissible Examples Activate a stimulus light output 1 and grain feeder output 2 for 4 seconds Feeder 2 S S 1 S1 R1 ON 1 Feeder S2 S2 4 OFF 1 Feeder 81 OFF OFF turns off the specified output It is the opposite of ON Syntax OFF P1 Where P1 Number constant variable array element or mathematical expression Comments Comma separation permissible Example ST R1
89. Transition Syntax B IF P1 Operator P2 Labell1 Labell Output Section gt Transition Syntax C IF P1 Operator P2 Output Section gt Transition Where P1 amp P2 Constant number variable array element or special identifier as described below Labell amp Label2 Any text label must be preceded by Output Section Any legal output command s Transition Any legal Transition such as SX STOPABORT STOPKILL or S1 532 given that 51 532 is a valid State within the same State Set Comments Unlimited nesting is permissible Labell is the true condition and Label2 is the false condition In syntax B and C a transition to SX with no output command occurs when the test condition is not met i e when the test condition is false The three syntax variations may be freely intermixed when nesting Labels are arbitrary and need not match but must begin with 102 MED ASSOCIATES INC Examples and Discussion Example A Because labels are arbitrary spelling does not need to be consistent If the comparison evaluates as TRUE then the following statement on the next line is executed If the comparison is FALSE then the statement two lines down is executed 9 8 1 51 481 ADD A OFF1 ON 2 52 S2 2 OFF 2 IF A 100 True False True gt STOPABORT False ON 1 S1 S Se S1 R1 ADD A OFF1 ON 2 S2 S2 2 OFF 2 IF A 100 GTrue Fals
90. True False S2 Array Functions Data that has been entered into arrays via a LIST declaration may be accessed via the commands LIST RAND and RANDI LIST successively draws values from an array RANDI randomly selects with replacement from an array while RANDD selects without replacement from an array 107 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC LIST List is first placed before State Set 1 to dimension an array and assign a value to each element in an array It can then be used in the output section of a statement to select each value in sequence When the last element in the list has been used selection restarts at the beginning of the list Syntax A Defining the array LIST P1 P2 P3 Pn Where P1 The name of the array to be declared A Z P2 P3 Pn Number Comments Each line must end on a comma CR Syntax B Selecting elements from the array LIST P1 P2 P3 Where P1 Variable or array element P2 Array from which an item is to be drawn P3 Variable or array element used as subscript to array P2 Comments Stringing is permissible The value of P3 is automatically incremented by the LIST command Assignments to P3 through other commands will affect the selection of subsequent items via the LIST command i e it is possible to skip or retrace elements in the array via manipulation of the P3 subscript This must be done with caution however as an illegal subscript
91. Y T gt SX A useful trick for time variables is to set the numeric value only and convert this value to internal time units only when the procedure is started This makes it possible for technicians to change the value of A in the following example without understanding time conversions For example Si Su Ls Sl 1 SET A 5 S2 S2 HSTART SET A A 1 S3 1 SHOW 1 A Value A SX S3 AST ON 1 54 84 1 OFF 1 gt S3 Time I nputs Less Than the Resolution Value The minimum amount of time that an MSN procedure can time is equal to the resolution parameter declared during installation A system set up with 10 ms resolution can not time events less than 01 On a system with 10 ms resolution the following code would increment A every 10 ms If the resolution was 25 ms then A would increment every 25 ms Using time inputs less than the resolution value causes no particular stress to MED PC run time programs just be advised that they become equal to the resolution value SS S1 0 001 ADD A SX Increments A every 10ms not every 1ms A possibly less obvious situation arises when programs are run without an interface and the PC s internal clock as opposed to the MED crystal timer is used for timing since the PC s timer cannot time in units less than 66 ms this value becomes the effective resolution If timing seems to be slow or inaccurate while debugg
92. ables and arrays associated with the Box s data are stored in a contiguous block that may be thought of as one big array known as Data BigArr The location of a given variable within Data BigArr is stored within Data Description Vars in the form of a StartOffset from the beginning of Data BigArr To manipulate a variable such as C one manipulates the corresponding element of Data BigArr Variable C for example is accessed as BigArr Vars C StartOffset 157 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Array elements may be accessed in an analogous fashion by adding the array element number to the StartOffset of the array For example to add array elements C 0 and C 1 and place the result in D 10 one could use the following code BigArr Vars D StartOffset 10 BigArr Vars C StartOffset 0 BigArr Vars C StartOffset 1 All MSN special identifiers except S S may be referenced directly in USER procedures by their usual name provided that the references occur within the scope of With Data Data Description Data Header Do as illustrated above For example to change a Subject Number to the value of array element E 19 one could use the following code Procedure ChangeSNum MPCGlobal MPCGlobalPtr Box Byte Var Data DataRec Temp String ReturnCode Integer Begin With MPCGlobal Do Begin Data BoxPointer Box
93. aks down the 12 spaces into 8 reserved for the integer part of the number to the left of the decimal 1 for the decimal and 3 spaces for numbers right of the decimal An example of a number printed in 12 3 format the meaning of 12 3 will be detailed below is 12345678 123 In many instances it is useful to print data in other formats particularly when trying to increase the amount of data printed per page Placing a PRINTFORMAT statement before the first State Set of the procedure you can control the printed format of numbers Syntax PRINTFORMAT P1 P2 Where P1 The number indicates the total number of spaces to be occupied by the number including the decimal point and P2 is the number indicating the number of spaces to be set aside for the decimal portion of the number PRINTFORMAT Examples PRINTFORMAT 5 1 Print in five space with 3 to left of decimal 1 to right as in 123 1 PRINTFORMAT 7 2 e g 1234 12 PRINTFORMAT 6 0 e g 123456 The use of a PRINTFORMAT statement has no effect upon the internal representation of numbers If multiple PRINTFORMAT statements are used in the same MPC procedure then only the last one is implemented If the digits to the left of the decimal point exceeds the total number of spaces set aside by the PRINTFORMAT statement then the general formatting rules are temporarily set aside and the number is printed in as many spaces as are needed to represent the integer porti
94. all the building blocks necessary to write any program you could imagine The next chapter will cover some obscure commands that you may or may not find use ful in your programming If you are interested in getting more in depth in any of the commands pre sented here flip to Appendix A for a list of all commands and their syntax Good luck in your MED PC programming endeavors 53 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER ELEVEN The Data Has Been Collected Now What An introduction to Print and Disk Commands Up to this point we have seen how to assign variables create and fill arrays and print this data Having never used all of our variables we have had zeros next to those unassigned Over the course of an experiment however this can result in cluttered data files and an exorbitant amount of numbers to slug through to get to the data needed With MED PC you can establish which data are to be printed and or saved As you will soon see there are times when the printing PRINT and data saving DISK commands overlap When this occurs only the syntax of the PRINT command will be shown but it will be explained that DISK can be used in place of PRINT As you go through this chapter all of these commands unless explicitly stated are written as stand alone statements and must precede the first State Set Like the DIM command from Chapter Eight or the VAR_ALIAS command from Chapter Ten Setting the Orientation of Pr
95. alues to constants e g prior to the first State Set FIVal 30 2 Do not attempt to change the value of a constant within a State Set e g 1 SET FIVal 60 SX 127 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Named Variables VAR_ ALIAS Command MED PC IV allows you to create names for variables that will appear in the Variable Changing dialog and Box Loading Expert of the runtime system This allows technicians to set parameter values using meaningful labels For example the VAR_ALIAS command may be used so that the technician will be able to set the value of a variable named FR Size rather than an obscure array element such as C 10 Note that variable aliases do not have any use within the body of MSN programs they are simply directives placed before the first State Set that establish meaningful aliases essentially synonyms for program variables Below is an example of the standard dialog used in the runtime system to view and manipulate variables and array elements This dialog is very useful for experts but may be more intimidating to less experienced technicians than the second screen shot The second screen shot illustrates the use of the VAR_ALIAS command and was produced by the sample code below Figure 16 Change Variables Displaying Variables from Box 1 B D E Named Vars 3000 000 0 000 0 000 0 000 y 0 000 0 0 000 Wars Refresh T 0 000 Issue T
96. amArrType The following record definitions are found within MEDTYPES DCU and are used to define data structures referenced in the data definitions of individual MSN procedures RecordRecPtr RecordRec RecordRec Record St String20 String20 String 20 Next Pointer End VarRec Record VarKind HasList Byte Size Integer StartOffset Integer End DescriptionRec Record RecordSize Longint Vars Packed Array A Z of VarRec PPrintoutDescription DPrintoutDescription TUserPrinterSettings ThePrinter Pointer PPrintOptions PPrintWidth PPrintDecimals PA H PI_P PQ X PY_Z Byte DPrintOptions DPrintWidth DPrintDecimals DA DI_P DO X DY Z Byte TimeDurs Times Ins Integer RecordH RecordT Packed Array 1 2 of RecordRecPtr AddRecord Byte Y2KCompliant Boolean VarAliasList TStringList FlushPermission Boolean End continued on next page 165 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC HeadRec Record Source String80 String80 String 80 StartMonth StartDate StartYear EndMonth EndDate EndYear SubjectNumber ExpNumber GroupNumber BoxNumber StartHours StartMinutes StartSeconds EndHours EndMinutes EndSeconds Y2KStartYear Real SubjectSt ExpSt GroupSt ShortString TheLibHandle THandle FileName ShortString Comments ShortString End The procedure h
97. amples 1 SET A 5 A C B K SX R3 SET A 5 A B C SX Note Multiple Operations BIN BIN is an output command that can be used to generate frequency distribution as data is collected The frequency distribution is output into a range of array elements specified in the call to BIN The width of each Bin in the frequency distribution is user controllable The first Bin always contains the total frequency or total number of all categorized events and the second Bin always contains the total number of events with values greater than that represented by the last Bin Like any array the BIN data array must be dimensioned prior to State Set 1 Syntax BIN P1 P2 P3 P4 P5 P6 Where P1 Array which will hold the frequency distribution P2 A variable or array element containing the number to be added to the frequency distribution P3 The units of P2 If one is recording time then P3 is how frequently P2 is incremented P4 The width of each bin or cell of the distribution P5 Array element variable constant or number denoting the first counter or array element containing the BIN distribution It is also the element into which the total frequency will be recorded P6 Array element variable constant or number denoting the last counter or array element into which the BIN distribution is recorded Example Start 0 End 10 DIM C 10 Nn I R
98. ams have only had one State Set and in the last chapter there was no need for our two State Sets to communicate with one another MedState Notation utilizes Z Pulses to communicate between State Sets Z Pulses 47 It is often convenient to break procedures into multiple State Sets Indeed procedures composed of multiple State Sets are more readable and easier to modify than single State Set procedures and Z Pulses provide a convenient means for communicating among State Sets Let us say that the left key s red stimulus is flashed on off whenever the FR 5 contingency has not been satisfied but is turned off during feeder operation You may be able to write a program that had all of this in one State Set but it would be confusing and have the potential to be prone to programming errors It would be easier to program the flasher as a separate State Set and then turn it off and on as needed i e when the test animal has or has not met the conditions you define Like State Sets and States Z Pulses must be numbered but the highest Z pulse may not be greater than 324 Unlike any of the other commands which fit nicely in our INPUT OUTPUT gt NEXT format as either an INPUT an OUTPUT or a NEXT Z Pulses are unique in that each Z pulse acts as either an input or an output Although this concept may seem confusing at first if you think about the role that the Z pulse plays it makes sense it communicates between two State Sets Syntax INPUT ZN
99. ams terminate with the command STOPABORTFLUSH Syntax SAVE MANUAL SAVE_FLUSH SAVE_FLUSH is the macro equivalent to the menu command File Save Data Flush This command will write to disk any data that were saved with either an MSN STOPABORT command or the menu equivalent All data will be written to disk using MED PC generated file names based on the file nam ing scheme selected during installation of MED PC Note that this command is unnecessary when MSN programs terminate with the command STOPABORTFLUSH Syntax FLUSH PRINT Data may be printed under macro control using the macro command PRINT Data will be printed only for boxes that are currently running Syntax PRINT BOXES A 139 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Where A One or more box numbers Example PRINT BOXES 3 4 Print data for boxes 3 and 4 BOX_PRINTER_SETTINGS DEFAULT_PRINTER_SETTINGS The appearance of printouts may be controlled by two macro commands BOX_PRINTER_SETTINGS is equivalent to the menu selection File Print Format Specific Boxes and DEFAULT_PRINTER_SETTINGS is equivalent to File Print Format Default Settings These commands differ only in that the former defines printing parameters for specific Boxes while the latter defines default settings that will be in effect for all Boxes for the remainder of the session The default settings are those that MED PC uses when a Box is loaded Howe
100. arameter SYNCH Example 1 R 5 BOXES 1 Send R5 to Box 1 Example 2 R 10 BOXES 8 9 SYNCH Send synchronized R10 to Boxes 8 and 9 Synchronizing the Occurrence of Signals By default MED PC staggers the occurrence of signals when more than one Box has been indicated in the Boxes panel This feature promotes processing efficiency However it is sometimes necessary to simultaneously issue a signal to multiple Boxes This need may arise for example when conducting yoked procedures Signals may be issued simultaneously by checking the box labeled Synchronize Occurrence ON OFF LOCKON LOCKOFF and TI MED_ OUTPUT A set of five macro commands provide equivalents to the output controls available in the Dialog Box accessible from Configure Outputs ON turns Outputs on Syntax ON P1 BOXES P2 Where P1 P2 An Output number One or more Box numbers Example 3 BOXES 56 9 Turn on Output 3 in Boxes 5 6 and 9 OFF turns Outputs off Syntax OFF P1 BOXES P2 Where P1 P2 An Output number One or more Box numbers Example OFF 5 BOXES 1 Turn off Output 5 in Box 1 145 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC m LOCKON locks Outputs on Syntax LOCKON P1 BOXES P2 Where P1 P2 An Output number One or more Box numbers Example LOCKON 3 BOXES 56 9 Lock Output 3 on in Boxes 5 6 and 9 LOCKOFF locks Outputs off Syntax ON P1 BOXES P2 Where P1 P2
101. as one array G declared by DIM G 10 Each MPC procedure has an array of pointers to data structures TEST1Rec is an array of pointers to a type of data structure appropriate to TEST1 MPC The type of the array is MPCProgramArrType which consists of an array of 16 pointers to MPCProgramType Each element of MPCProgramArrType is of MPCProgramType and contains all of the data associated with a box running TEST1 MPC If TEST1 MPC were loaded into Box 3 Element 3 of MPCProgramRec would be assigned memory via NEW Within the MPCProgramType are two nested records Description and Header which contain definitions of all simple MED PC variables within A Z and all MED PC arrays within A Z The order in which these records variables and arrays are declared is always in a constant order 1 Description 2 Header 3 Simple variables in alphabetical order 4 Arrays in alphabetical order The two records Description and Header are defined within MEDTYPES DCU Description contains miscellaneous information about the MPC procedure and the Box running the procedure Its fields have the following functions RecordSize is set to the number of bytes occupied by a given Box s data structure after the Box s data structure has been assigned memory by NEW It is used primarily to free the memory occupied by a Box s data after the Box is unloaded In the example it is the size of an element of TEST1ArrType VARS is an array th
102. ass the Box number of the calling Box as well as character variables corresponding to the names of the MED PC variables and arrays to be manipulated The ADDAB procedure call could be rewritten as ADDAB MG Box A B C where Box is the MSN special identifier that reports the Box in which the procedure is running The Pascal procedure would be rewritten as follows Procedure ADDAB MPCGlobal MPCGlobalPtr Box Byte Varl Var2 Var3 Char Var Data DataRec DataRec is compatible with all MED PC data structures Begin With MPCGlobal Do Begin Data BoxPointer Box The following With statement simplifies references to the data for the present Box With Data Data Description Data Header Do Begin BigArr Vars Var3 StartOffset accesses the data associated with Var3 In the example above above Variable C will be referenced The 2nd and 3rd terms reference Variables A and B BigArr Vars Var3 StartOffset BigArr Vars Varl StartOffset BigArr Vars Var2 StartOffset End with End with End ADDAB In the preceding example Data refers to the block of memory starting at the address held in BoxPointer Elements of the BoxPointer array are automatically set to the starting address of the data structure for each active Box In brief Data maps onto the data associated with Box s data The vari
103. at describes the way in which each MED PC letter is utilized It is especially useful to understand the use of this array when writing INLINE or BKGRND Pascal procedures The elements of VARS are indexed by characters A Z For example information about Box 3 s use of C is contained in TEST1Rec 3 Description VARS C assuming Box 3 is loaded with TEST1 MPC Within VARS the following fields are defined VarKind 0 indicates that the letter is a simple variable 1 denotes an array HasList 1 indicates that the array was declared via the LIST command 166 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Size This contains the total number of data elements occupied by the data structure For a simple variable Size always equals 1 For arrays Size always equals the largest subscript plus 1 Array G dimensioned internally as 0 10 as the result of the MED PC statement DIM G 10 as a Size of 11 StartOffset Because the order in which Description Header the simple variables and the arrays is declared is always constant the data associated with the simple variables and arrays is always located in a fixed location in memory relative to the starting address of the overall data structure This allows the relative location of each variable and array to be recorded in StartOffset where a StartOffset of 0 indicates that the variable or array starts immediately after Header A StartOffset of 1 indicates that the variable or array s
104. code For a discussion on this command see the next section of this Appendix Commands that come before the first State Set 123 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC CURRENTMONTH CURRENTDATE CURRENTYEAR CURRENTHOURS CURRENTMI NUTES CURRENTSECONDS These variables reflect the Date and Time at approximately the time they are accessed in an expression It is important to recognize that CURRENTSECONDS is not a precise reflection of the present time Under some circumstance this variable and all other CURRENT variables may be a few seconds behind the actual value of the computer s clock because their values are updated only as MED PC has spare time remaining after servicing Boxes These values are in no way related to the internal timing of experimental events experimental events are timed independently of the computer s clock For a precise access to time utilize BTIME These values may be altered but it is pointless to do so because MED PC will automatically correct them within a few seconds of their alteration SECSTODAY This variable is a single variable that contains the cumulative number of seconds past midnight SECSTODAY is subject to the same accuracy limitations as CURRENTSECS SECSTODAY is useful for recording the approximate accurate to within a few seconds time of day when an event occurs It is no more or less accurate than CURRENTHOURS CURRENTMINUTES and CURRENTSECONDS but does allow one to condense the inf
105. cuting These values may be safely altered with a SET command but be aware that the Box s status line on the runtime screen will not be automatically updated to reflect changed values STARTMONTH STARTDATE STARTYEAR STARTHOURS STARTMI NUTES STARTSECONDS These values reflect the Date and Time at the moment when the current Box was loaded with the Open Session menu selection They are equal to the values displayed on the runtime screen on the Box s status line STARTYEAR is a 2 digit number reflecting the last 2 digits of the year For example in 1991 STARTYEAR will equal 919 Note the use of the term start in this context bears no relationship to the issuance of a START command from the keyboard Procedures actually start the instant they are loaded These values may be safely altered with a SET command but be aware that the Box s status line on the runtime screen will not be automatically updated to reflect changed values ENDMONTH ENDDATE ENDYEAR ENDHOURS ENDMI NUTES ENDSECONDS These variables are set equal to the Date and Time when the Box s execution is terminated with KILL ABORT or ABORTFLUSH During procedure execution these variables are normally equal to 0 These values may be altered during procedure execution with a SET statement but when procedure execution terminates they will be automatically changed to the Date and Time of termination 9 You must use a four digit date if the Y2KCOMPLIANT command is used in your
106. d Variables Number of Responses Number of Rewards Data Array Output Array Max Time in Minutes 23 3 Session Timer M CP CER E MEE EE ge Maximum Reward 10 VAR_ALIAS Session Time Defaul minute VAR_ALIAS Maximum Number of Rewards M Q Defaul DIM C LIST 999 D 1 19 5 10 154 S S VR S1 0 001 5 1 Main Control Logic for ET 1 gt S2 Q S2 START ON House 3 S3 Is D SHOW 2 VI X gt S3 S4 X R LeftLever Z2 gt S1 ON Reward Z1 gt S2 S S 2 S1 START Response Counter SHOW 3 Responses A gt 52 S2 R LeftLever HZ2 gt S1 SX ADD A SHOW 3 Responses A gt continued on next page 50 MED ASSOCIATES INC MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Sis sd Reward Counter S1 Z1 ADD B SHOW 4 Rewards B S2 S2 0 05 OFF Reward S1 S S 4 Time increment in 0 1 Second Intervals S1 START S2 S2 0 1 SET T T 0 1 SX S S 5 Y Recording IRT s S1 START S2 S2 R LeftLever SET C I T T 0r ADD I SET C I 987 987 SX 422 gt S1 S S 6 S1 START SHOW 1 Session N S2 S2 EAE ADD N SHOW 1 Session N 60 IF N 60 lt M True False GTru
107. d recorded Thus if a R1 has occurred in Box 1 and a R1 has occurred in Box 3 these events will be noted and made available to the respective Boxes when the Boxes are serviced soon to commence Any keyboard R s presented from the keyboard since the initiation of the last processing sweep will be merged with any that were read from the input cards For example if a keyboard R1 was recently generated for Box 3 and a hardware R2 for Box 3 was also recorded both R1 and R2 will be presented to Box 3 during the present sweep Only one instance of a given response for a single Box may occur during a single sweep Thus if R1 was issued from both the keyboard and was present on the interface for the same Box since the last interrupt only one instance of the R1 will be presented to the Box A statement of the form 2 R1 gt S2 would require a response on another sweep in order for a transition to S2 to occur Similarly if the subject responded twice on the same input between the occurrences of two interrupts only one response would be counted 6l MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Before becoming alarmed that a response may be missed remember that m For years 50ms was the finest resolution provided by any programming system Responses are latched in the hardware buffer until read contact does not have to be coincident with the interrupt Most users install their systems with a resolution of 10 milliseconds
108. d variable in this example it is set to a value of 1 Example 8 8 75 S1 START ON 1 SI 14 gt 2 Exi H x l S2 X T OFF 1 gt S1 Please note as with explicit time values only one time command per state may be present so the following example of code is illegal S1 X T SX 1 gt SX Tutorial 5 Creating an Fl Schedule Start by opening Tutor04 mpc and make the following changes changes noted in bold and appropriate comments are made off to side This is an FI Filename Tutor05 mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser S S 1 Y Main Control Logic for FI 927 Changed S1 to S2 START ON House WILL BE ADDING CODE HERE 53 S4 Changed S2 to SA R LeftLever ON Reward Z1 SX Delete 5 Before R Suo x2 S1 START SHOW 2 Responses A S2 Was SHOW 1 S2 dR LeftLever ADD A SHOW 2 Responses A gt SX S S 3 S1 Z1 ADD B SHOW 3 Rewards B S2 Was SHOW 2 26 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL S2 0 05 OFF Reward S1 S S 4 S1 START gt 852 S2 1 STOPABORT Next we will add our SET code The variable we are going to set is X which in this program will
109. e GTrue STOPABORT GF ON 1 gt S1 GFalse and GF Are Not Required to Match The legal examples above illustrate a situation in which a R1 increments a reinforcement counter turns off a stimulus light turns on a feeder and goes to S2 After 2 the feeder output is turned off and variable A the reinforcement counter is tested If the value of A is now 100 then the statement associated with the label True is executed and the procedure terminates If the value is less than 100 the statement following the label False is executed the stimulus is turned ON and transition takes place back to S1 Example B When a label is in the input section of a statement a colon must follow it even when there is no output section to the statement Illegal Examples S S 1 S1 R1 ADD A OFF 1 ON 2 52 S2 2 OFF 2 IF A 100 T GF QT gt STOPABORT Missing After Label GF ON 1 gt S1 103 MED PC IV PROGRAMMER S MANUAL MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Example C Careful attention to proper syntax is important for certain errors are not detected by the translator and will result in Pascal errors An error which the translator does not detect but which will cause pro grams to malfunction is to have a transition arrow after labels For example 1 IF A True False 82 Example D Although not permitted by earlier versions of MED PC IF statements
110. e IF Q lt B G2True 2False G2True Z2 S3 G2False SX GFalse Z2 93 S3 3 STOPABORT Now start MED PC and use the Experiment Loading Wizard to load the Tutor09 mpc program into Box 1 If the Wizard does not start automatically when MED PC is started then start it manually by going to File and then selecting Wizard for Loading Boxes When the sixth screen of the Experiment Loading Wizard is reached the User should see the following 51 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Figure 12 Experiment Loading Wizard Session Time Maximum Number of Rewards By changing the Session Time and the Maximum Number of Rewards on this screen the User will effectively be changing the value of the variables M and Q respectively The User can also change the Named Variables once MED PC has started by going to Configure and selecting Change Variables After selecting the appropriate Box they can either change the variables M and Q directly or they can click on the button that says Named Vars This button will produce the following screen Figure 13 where they can change the value of the more familiar Named Variables 52 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Figure 13 Named Vars Displaying Hamad Variables from lox 1 Session Time Maximum Mumber at Rewards dd Congratulations you have now mastered
111. e goal of this Tutorial will be to write a program that works on a Fixed Ratio Schedule Once again open your text editor TRANS and type in the following This is an FR 5 Filename Tutor04 mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser S S 1 NX Main Control Logic for FR Si START ON House 952 Next we will want to add the code for the responses remember this is an FR 5 as well as a means of keeping count of the responses in another State Set In order to do this we must add a new State with in State Set 1 S2 54R LeftLever ON Reward Z1 SX 22 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL The Z pulse Z1 is what will let us record our rewards in another State Set which we will program later Now we will program our response count and set it up to display on the screen S S 2 This is the State Set that contains the Response Y Count and Display S1 This will now put label the Responses Y and its value A on screen until the Y START command is issued START SHOW 1 Responses A S2 S2 R LeftLever ADD A SHOW 1 Responses A SX Now it is time to insert the code for that reward counter and timer In order to do this we will have to use the Z pulse generated in State Set 1 Note how the Z pulse has a sign in front of it
112. e macro playback will pause for the specified time duration The value must be specified in milliseconds No delay will occur while the macro is being recorded Syntax DELAY P1 Where P1 zThe number of milliseconds for which macro playback should be delayed Example Delay 1000 Pause the macro for 1 second Example of the Utility of Delays This command can be useful when it is necessary to wait for a program to complete some action before the macro continues For example an MSN program might be written so that it immediately sets default values for variables It would be convenient to be able to use a macro to load the program allow the defaults to be set and then over ride some of the values Without a time delay between loading the program and over riding the defaults it would be possible to change the variables in the macro and to then have the MSN program change the values back to their defaults Consider the following MSN program FR Program A FR Size SS Siz 0 01 SET A 10 gt S2 S2 A R1 ON 1 53 S3 0 1 OFF 1 gt S2 This program arranges a simple FR Ten milliseconds after loading A is set to 10 In S2 A responses on Input 1 turns on Output 1 presumably connected to a pellet dispenser and transitions to S3 S3 turns the Output off after 100 milliseconds and returns to S2 for another ratio run Now consider the following macro LOAD BOX 1 SUBJ EXPT FR Demo GROUP 2 PROGRA
113. e passed to the command or a range of array elements may be specified In most instances passing a range of array elements will be preferable if the amount of data cannot be predicted in advance Each command follows the same syntax Syntax Command 1 P2 P3 P4 Where Command is the name of the statistical command P1 An array element or variable that will receive the result of the calculation P2 Array containing the source data For GeometricMean and HarmonicMean the array must not contain any zeros P3 Index of first array element to include in calculation This will often be zero but may be any value less than or equal to the maximum array element P4 Index of the last array element to include in the calculation This will often be the last array element into which data have been recorded Statistical commands ARI THMETI CMEAN Computes the Arithmetic Mean of the array segment HARMONICMEAN Computes the Harmonic Mean of the array segment There may not be any zeros in the array segment GEOMETRI CMEAN Computes the Geometric Mean of the array segment There may not be any zero s in the array segment MAXARRAY Returns the Largest value in the array segment MI NARRAY Returns the Smallest value in the array segment 100 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL MAXARRAYI NDEX Returns the Index subscript of the largest value in the array segment The Index is relative to the entire array In other words
114. e strung together note that this is like the way that parentheses control execution of algebraic expressions in SET statements The syntax would look like this INPUT IF A 1 AND B 2 True False GTrue S2 GFalse SX 32 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Real Code may look like this Sav Sl 1 IF R 100 OR M 60 True GFalse GTrue S2 GFalse SX S2 3 STOPABORT Tutorial 6A Using A Single Command as a Session Timer At this point you know how to write change your program translate compile it load it change the variables and run it For the second two uses of the IF command only the final product is going to be given to you with the changes from Tutor06A mpc shown in bold although a short explanation to why changes were made will be given for Tutor6B mpc Write and test both of them and if you have any problems refer to earlier Tutorials The first step is to open Tutor04 mpc and make the following changes noted in bold This is an FR schedule Filename Tutor06A mpc Date August 8 2004 This section is for Inputs LeftLever 1 Y This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser Y Defined Variables A Number of Responses Y B Number of Rewards M Minutes X Fixed Ratio Y N Session Timer S S 1 NX Main Control Logic for FR
115. e weed RE va XR RE Se os 86 145 PEAYMACRO A a he ed ae Se aA ed Re a coge ha de BEE amp ed 149 POPULATIONVARIANGE 22 4 egi a a A aye Xt EUR A wae hod ne ok age ok wh ab hd a RR 101 PRINT cava ed ee e448 dk kx x PG ee ea ee OR VOR EpL Od EX LG ROGA 115 139 PRINTCOEUMNS sp apne peia A pero Oe Seg UR Rer PIS Bendre DR CEN eh bread em Sis 133 PRINTEORMAT Saeed E e voa Bae hohe nie ded ambae dre de aea e d 131 PRINTOPTEONS 3 a hed un Room ah AA A CA RON vos AA ACA RA A ICE d d A e do 132 PRINTORTENTATION coria dts E erm detur dites E d dU eye ae age ATE a Ded 133 PRINTPOINTS 3 23 dox ek don ek ERG Rd rk woe Pond pu da tion ee edo 134 PRINTVMARS 42e debe ue homo n XU bat ae PPE d d CRI dE dh a e Res ed Re dd 130 RANDD arta dare eiie dtes anar a oat atk Gg ara tees 109 RANDI uuumiokg RUE be da Se ade Wau s Bee Eee SRE OER SG SEGRE RE GU X qc Ed xg 110 RESETSERRORS 5 tios Sark ere Oe eee et uut en ee eai eee ete eS oe ay gee eee oe oe 151 ACEITE 144 SAMPLEVARLANCE gt sna add 04 8 goo me MR Red uk Ed d bod om En e d dd om Bae de doe o C 101 SAVE FLUSH estr rd E AP ee eee n Eius 139 SAVE MANUAL A GC ERG ORS BEE Rex XR RE 139 SECSTODAY dui dates NN 124 JL e iaa a a ate hae A oe dica paa tai toa E 97 142 SHOW uuesares pardas n4 ehh e bbb 113 SHOWMESSAGE iR ERREUR OS T OR E era RORIS Ee GR ee Pg ee 148 START BOXES
116. econds of the first response which is probably physically impossible Stated differently transition to S2 will not occur until a clock tick occurs in which no R1 has occurred and the elapsed time is gt 10 since entry into 51 S 9 1 S1 R1 ADD A SX 10 92 Accuracy of the MED PC System The Med Associates Inc millisecond timer which generates the interrupt signal features a precise microsecond crystal with an accuracy of 0 00196 Keep in mind that all PC s are sequential processors and therefore can only do one thing at a time although by virtue of their speed they appear to do multiple tasks simultaneously The actual processing speed of any system depends upon the number and complexity of the procedures run but the resolution of timed events is determined by the interrupt interval resolution set during the running of the Hardware Configuration Utility Some users may wish to think of this as one clock tick Theoretically it is possible to err in timing by one clock tick as is the case with all timing systems In practical applications however this becomes a concern only when several conditions are met i e the processing time for all Boxes is both inconsistent and at times approaches the resolution value and time durations have been set equal to the resolution value The MED PC system provides a speed warning system that monitors the average processing or sweep time This does not inhibit the performance of the s
117. ed Syntax GETVAL P1 P2 P3 Where P1 The variable or array element in the present Box to be set P2 The Box number from which a datum is requested P3 The variable or array element whose value is being read Example S S 1 51 1 GETVAL A 2 B SX Set A equal to the value of variable B in Box 2 Sometimes it is desirable to get a variables value from a prior day s run for the same Box See Appendix C Page 153 for an advanced programming technique to call Backproc pas for this propose Data Handling Commands SHOW SHOW may be used to display data on the screen while a procedure is running Each SHOW command takes three arguments The first is the screen position 1 200 the second is the descriptive label and the third is a number variable or constant to be displayed on the screen Each of up to 16 procedures may independently display the values of up to 200 variables along with descriptive labels on the screen See the MED PC User s Manual for full details on how these are displayed on the screen Syntax SHOW P1 P2 P3 Where P1 Whole number in range 1 200 expressed as an array element variable constant or number P2 A descriptive label that may contain upper and lower case letters spaces and digits The label may be up to 255 characters long but shorter descriptions are more practical P3 Number variable constant array element or mathematical expression
118. ed for when Elapsed Time M It will send both 8 8 1 S3 and S S 2 S2 back to Sl False Z2 S3 S3 3 STOPABORT Tutor06C mpc The primary purpose of this program is to see how a compound IF statement works State 2 of State Set 4 contains our compound IF statement and in this example it simplifies the information in Tutor06B mpc s into four lines from six NOTE CHANGES IN BOLD ARE CHANGES FROM Tutor06B MPC This is an FR 5 Filename Tutor06C mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser continued on next page 36 MED ASSOCIATES INC Defined Variables Number of Responses Number of Rewards Minutes Fixed Ratio Session Timer Lo 4 4 27 7 so Coax SU Maximum Rewards sde S2 STAI RT ON House gt 83 S3 X R LeftLever 422 gt S1 ON Reward S 9 2 51 START SHOW 2 Responses A Main Control Logic for MED PC IV PROGRAMMER S MANUAL ER Z1 SX S2 S2 SR LeftLever 422 gt 51 A DI SHOW 2 D A S dg S1 Z1 A DD B SHOW 3 Rewards S2 0 05 OFF Reward S1 S S 4 91 START S2 qp ADD N SHOW 1 Session F N 60 gt M OR Z2 53 SX True Fal
119. edure from within the MSN procedure 2 The Pascal procedure placed within the USER PAS file 3 The header for the procedure placed between the INTERFACE and IMPLEMENTATION keywords appearing at the top of the USER PAS file Below is a simple example of an INLINE Pascal procedure The procedure simply adds A and B and places the result in C The procedure call is like any Pascal procedure call and must be terminated by a semicolon The entire procedure call must be enclosed by tildes An extremely important detail is that the first parameter of the procedure call should always be MG The reasons for this requirement are subtle and beyond the scope of the present discussion but be sure to observe this requirement Failure to do so could result in unpredictable program behavior and even system crashes Note that A B and C may be passed directly one need not be concerned about how MED PC differentiates between an A belonging to Box 1 versus an A belonging to Box 2 1 Sample MSN procedure S S 1 SL T7 ADD A B ADDAB MG A B C gt S2 Call ADDAB Given MG and Y Variables A amp B Return with Value C S2 1 SHOW 1 A A 2 B B 3 C C gt S1 2 ADDAB would be placed anywhere in USER PAS after the IMPLEMENTATION keyword Note that MPCGlobal of type MPCGlobalPtr is the first parameter Furthermore all code of the procedure must be nested within the scope of MPCGlobal i e
120. er 90 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Example C S S 1 FR 1 Si Start gt S2 92 481 Z1 gt 53 S3 Z3 S2 S 94 25 Record Data S1 21 ADD A SHOW 1 Reinforcers A Z2 SX 529 34 Deliver Reinforcer si 422 ON 1 52 S2 2 OFF 1 Z3 S1 Z pulse Depth Checking It has been possible under previous releases to cause a runtime program to lock up from a never ending sequence of Z Pulses If a very long yet finite sequence is generated program performance may suffer greatly Indeed most excessively long Z pulse sequences are probably errors rather than planned actions Generally speaking do not use Z Pulses to repeat other input statements HR K or START It is more efficient to repeat the input statement in multiple State Sets In those instances where a substance such as a latency counter is activated with START for the first trial and a Z pulse in subsequent trials the input may be OR d or simply disregard the previous rule Example A S S9 l SL Z1 1 1 Z1 SX Will Cause a MED PC Runtime Error Example B A limit of nine consecutive Z Pulses is now considered acceptable For example the following is acceptable S S 1 S1 1 Z1 gt SX S 9 2 S1 HZ1 Z2 SX continued on next page 91 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC S S 3 SL Z2 Z3 gt SX Sos S1 4 6
121. ers but MED PC automatically converts numbers to integer format where necessary by rounding them to the nearest whole number For example ON 1 9 or ON 2 1 are illogical but will not cause difficulties because MED PC will automatically convert both to ON 2 The only place where proper use of integers is required is in declaring constants and in numbering State Sets and States Constants Constants are a convenient means for substituting words for frequently used integers Constants must be declared prior to the first State Set and may be up to 55 characters in length They must be preceded by a caret and the first character must be a letter followed by any mix of letters and numbers Spaces are ignored An example declaring Feeder follows MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Feeder 1 SSL S1 Input ON Feeder gt S2 S2 2 OFF Feeder gt 51 Constants must be declared as having an integer value and time may not be assigned to a constant For example Feeder 1 1 and FeederDur 2 are illegal As constants are represented as integer whole numbers it is illegal to attempt to assign the value of a variable to a constant during program execution Up to 1000 constants may be declared in a single procedure but values that may be assigned to a constant are restricted to a range from 32768 to 32767 The use of constants cannot be emphasized enough Constant
122. ert Edit Command at Cursor option The following screen shot shows the resulting window 72 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Figure 14 Macro Editor Macro Editor LOAD mh spen Group PM ve The parameters for the LOAD command may be edited using this dialog and any changes made within the dialog will be reflected in the text of the macro after clicking the OK button New commands may be added to existing macros using similar Dialog Boxes To add a new command to an existing macro position the cursor where the new command is desired then select the Insert menu option The menu then presents a list of commands that may be inserted Choosing a command then presents a dialog box similar to the example above to simplify creating the command Figure 15 Configure Menu Options A A D Asociate ME D PC Ele par search Edi Comer Cursor Open Mena Commands MRAM TIM TEST all LOAD 1 SUE PLENAME GERRI chance varable Vale few Menu Crear pere Mera Cone P E coman Da un and putra on Off porn a eaput tf kodon Tum output on and lave on even fF HED PC dened Lockolf pcosie of Lokon Timed put Turn output on then shut off alter X seconds 73 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Note Not all of the menu options are displayed Playing Macros Playback of an existing
123. es and arrays A Z are printed To print selected variables place a PRINTVARS directive before the first State Set of the procedure PRINTVARS must come before the first State Set Syntax PRINTVARS P1 P2 P26 Where 26 are the variables or arrays A through Z that you want printed Real Code may look like this PRINTVARS A B C D F G Z Condensed vs Full Headers PRI NTOPTI ONS PRINTOPTIONS provides control over the appearance of the headers that appear at the beginning of printouts as well as when to print your data The headers include information such as the time the experiment was loaded and the name of the program used to control the experiment There are two options for the appearance of headers FULLHEADERS vs CONDENSEDHEADERS For when to print your data the options are FORMFEEDS or NOFORMFEEDS If FORMFEEDS is selected the printout will occur when data is queued to be printed i e when a Box is done running If NOFORMFEEDS is selected MED PC will print only when a page of data is in the queue If PRINTOPTIONS is not explicitly specified the default printout is to print a condensed header and no form feed When specified commas separate multiple options and any option not specified will stay at its default value Syntax PRINTOPTIONS P1 P2 Where P1 FULLHEADERS or CONDENSEDHEADERS and P2 FORMFEED OR NOFORMFEED Printing Data PRI NT PRINT is the only command in this section
124. es from a list Again no array subscript is specified RANDI randomly draws with replacement from an array however so elements can be repeated and may not occur an equal number of times unless run over a long period of time RANDI can only operate on arrays declared in a LIST statement Syntax RANDI P1 P2 Where P1 P2 Variable or array element Array from which an item is to be drawn Comments Stringing of parameters is permissible Array P2 must be declared with a LIST statement The maximum number of elements that may be in an array manipulated by RANDI is 501 elements 0 500 The order of the contents of P2 is not affected by RANDI Selection actually takes place from an internal copy created and managed automatically by MED PC Example The actual order of selection is totally random A single item may be selected more than once even though some items have not been selected This is selection with replacement The following order of outputs might occur 3 1 1 2 1 3 2 2 1 3 LIST A 1 2 3 SS RANDI B A ON B 82 S2 Lts QFE B gt Sl COPYARRAY COPYARRAY is an output command that may be used to transfer the contents of one array to another This command simplifies and speeds the transfer of data between arrays and can be used to move an entire array to a buffer array for saving while continuing to collect data Copying the contents of one array to another
125. es simply enclosing the Pascal statements with the character The following example would compute and set MSN variable A to the value of Pi S S 1 S1 0 01 A Pi gt S2 S2 1 SHOW 1 Pi A SX For code too lengthy to place directly in the output statement or code that will be used by several procedures writing functions which can be called from MedState Notation procedures might be more useful The appropriate place to put such functions would be inside the file USER PAS Several examples of User procedures are provided in USER PAS USER procedures are executed immediately upon being encountered in an output statement and hence compete with normal MSN statements for processing time Under earlier versions of MED PC there were important restrictions on inline procedures that reflected the fact that MED PC was based on 16 bit technology and that certain Pascal functions were not re entrant In practical terms this meant that some functions could not be called from inline Pascal without risking a system crash This is not a concern under MED PC IV due to the 32 bit architecture of this version Memory allocation routines and other functions that were not re entrant under earlier versions of Windows may now be safely employed within Inline Pascal procedures 153 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Writing INLINE Pascal Procedures INLINE Pascal procedures consists of three parts 1 A call to the proc
126. es will no longer change The preceding code example could be changed to DIM A 2000 DIM Z 2000 SSL 1 ADD A 0 2000 gt SX S S uA S1 60 PRINT STOPABORT Y Values will stop changing when this line executes 117 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC 2 Transfer the to be printed data to special arrays or variables that won t be updated during the time between a printing request and the generation of the printout The code example could become DIM A 2000 DIM B 1 DIM Z 2000 PRINTVARS B Si S L sl K1 SET B 0 A 0 B 1 Z 2000 PRINT SX Freeze the data and Print the values Y by issuing K1 from the keyboard 1 ADD A 0 2000 SX 3 Transfer an entire array with the COPYARRAY command DIM A 2 DIM B 2 PRINTVARS B Si Loy S1 R1 ADD A 0 SX R2 ADD A 1 SX R3 ADD A 2 SX SiS Si 5 COPYARRAY A B 3 PRINT SX From A to B Copy 3 Elements 0 1 2 and then Print 4 Print data after a Box has stopped executing but before it s data is written to disk and before the Box is reloaded Simply put if a Box isn t running its data values can t change In many instances it may not even matter whether data values float particularly when the printout is being generated to get a quick look at the data as opposed to generati
127. ession has been running for less than an hour the system waits coded for by Cont gt SX When an hour has passed the program transitions to S2 where it waits three second before shutting down therefore the screen can be updated the reward can be given etc A Z pulse has been added that can be used where a function is terminated immediately e g a response contingent statement or counter Nested commands statements are not limited to only one set of options they can also be nested The syntax is nearly the same as a non nested if with the exception being that the nested commands must be organized sequentially 1 IF A gt X FirstTrue FirstFalse FirstTrue IF B gt X SecondTrue SecondFalse SecondTrue IF C gt X ThirdTrue ThirdFalse ThirdTrue S2 GThirdFalse S3 GSecondFalse 3 FirstFalse S3 In the above example all three variables A B and C must be greater than or equal to X for the statement to transition to 52 Any False outcome results in a transition to S3 Compound IF commands IF statements also may be constructed so that several logical conditions are evaluated in a single expression This may be accomplished by placing each set of logical criteria in parentheses and connecting each set with AND OR NOT AND NOT or OR NOT Parentheses must be used to denote the order in which expressions are evaluated if multiple expressions ar
128. eused until the other two numbers have been selected Tutorial 8 Using the List As a definer And RANDD To Set Up a VI Schedule We are going to add change a few lines of code from the Tutor07B mpc As done in the past the changes are shown below in bold Make the changes save as Tutor08 mpc translate compile and then go to MED PC and test the program This is a VR 10 Filename Tutor08 mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser Defined Variables A Number of Responses B Number of Rewards C Data Array D Output Array M Max Time in Minutes N Session Timer X O Maximum Reward DIM C 999 S S 1 NX Main Control Logic for VR Sd START ON House SET Q 10 SET M 1 gt S2 continued on next page 46 MED ASSOCIATE S INC S2 1 RANDD X D SHOW 2 VI X 83 S3 X4R LeftLever ON Reward Z1 S2 422 gt S1 SuSe Response Counter S1 START SHOW 3 Responses A gt 52 S2 R LeftLever ADD A SHOW 3 Responses A gt SX 4 2 gt S1 Sou Reward Counter S1 Z1 ADD B SHOW 4 Rewards B S2 S2 0 05 OFF Reward S1 S S 4 Time increment in 0 1 Second Intervals S1 START S2 S2 0 1 SET T T 0 1 gt SX 98
129. f boxes along with the setting of key session parameters Virtually any command that can be issued from the keyboard can also be issued from a macro file Users of MED PC are strongly encouraged to use macros rather than have technicians enter long sequences of commands This greatly speeds up many routine tasks and dramatically simplifies the technician s use of the system Consequently the use of macros dramatically reduces technician errors Creating Macros It is easy to create a macro All that you need to do is turn on the macro recorder and then use the menu system to carry out whatever tasks you would like to automate For example you could turn on the macro recorder and then load several boxes and set parameters You may then turn off the macro recorder and save the macro to a file Turning On Off the Macro Recorder The macro recorder may be turned on by either clicking the cassette icon on the tool bar or by select ing the Macros Turn On Macro Recorder menu option During recording the text Recording Macro appears at the bottom of the main Window of MED PC The macro recorder may be turned off by either clicking the cassette icon on the tool bar or by selecting the Macros Turn Off Macro Recorder menu option Selecting this option presents a file dialog that allows the User to specify the name of an existing macro which would be overwritten or a new file name It is acceptable to save macros in directories othe
130. f which type of chambers is actually being run outputs five and six are turned on to extend or retract the levers if present Input sharing is also permissible and might be used as a panic button to cause all Boxes to shut off simultaneously via a push button wired to a single shared input Entering a keyboard response R that is not matched by a hardware input has no effect WARNING Assigning a procedure to a Box that does not have a hardware input corresponding to an input that the procedure attempts to read would result in a stream of continuous responses being produced 87 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC ALERTON ALERTON produces a 500 Hz tone via the PC s speaker The tone is alternately on and off for 500 ms If multiple Boxes issue ALERTON a single alternating tone is produced one cannot identify the number of Boxes that have issued the ALERTON ALERTOFF ALERTOFF cancels the tone A single ALERTOFF cancels the tone until the next ALERTON Thus several Boxes could issue an ALERTON but a single ALERTOFF would entirely eliminate the tone A common use for ALERTON will be to signal the end of a session as follows 82571 S1 10 R1 ON 1 52 S2 2 OFF 1 gt S1 S92 S1 30 ALERTON 2 S2 K1 ALERTOFF gt SX ALERTON may only be turned on from within an MSN procedure but ALERTOFF may either be issued from within a procedure or by using a functionally equivalent comma
131. g USER PAS and BACKPROC PAS is no longer necessary 6 Note that the fundamental data type for MED PC IV variables and arrays is now the 10 Byte Extended as opposed to the Real type used in earlier versions The Extended type is a floating point implementation so functions used with earlier Reals generally work with Extended MED PC s Internal Data Structures This section describes the internal structure of the data structures associated with Boxes as they execute It is not necessary for most MSN programmers to read or understand this section but this information is provided for the benefit of sophisticated Pascal programmers Every effort will be made to maintain compatibility with the following definitions across future releases of MED PC but no guarantees are offered 164 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Each compiled MPC procedure has a unique nested record definition Whenever a given MPC procedure is loaded with the runtime load command an element of the appropriate record is created with Pascal s NEW procedure Below is an example of the definition created by TRANS IV for a MPC procedure named TEST1 MPC Type MPCProgramType Record Description DescriptionRec Header HeadRec A B C D E F H 1 JY K L M N O P Q R S T U V W X Y Z Extended G Packed Array 0 10 Of Extended End MPCProgramArrType Packed Array 1 16 of MPCProgramType Var MPCProgramRec MPCProgr
132. g is illegal and will produce a translator error message S S 1 S1 1 ON 1 52 2 OFF 2 52 Variable Time Inputs T Time values may also serve as inputs without an explicit declaration This may be accomplished by using T preceded by a variable containing a specified amount of time Syntax P1 T Where Pl a variable array element or mathematical expression LEGAL EXAMPLES Example A SI 1 ON 1 5 X 2 14 gt 2 Ei H S2 X T OFF 1 S1 Example B LIST X 1 2 37 SuSe T Eug 1 ON 1 gt S2 S2 X 0 T OFF 1 gt S1 In Example A X is set equal to one second and then used in State 2 as the parameter to T The effect of the procedure segment is to repeatedly turn output 1 on for 1 and off for 1 Example B manipulates output 1 in a similar fashion but demonstrates the use of an array element as the parameter A common misconception is that array variables may be set to time values only through a list declaration The following examples in which B 0 5 and B 1 10 are equivalent 81 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC LIST B 5 10 START SET B 0 5 B 1 10 gt 52 As with explicit time values only one time command per state may be present S94 1 Illegal Example Sl XHT SX 1 gt SX S94 1 Illegal Example Sl X T gt SX
133. g will be nearly blank if all options are set to blank However the events are not lost all events for the entire session would be displayed if the options were later enabled Syntax LOG OPTIONS KEYBOARD A MACROS B ERRORS C BOXES D Where A ON or OFF to determine whether keyboard and mouse events are displayed B ON or OFF to determine whether macro commands are displayed C ON or OFF to determine whether error messages are displayed D ON or OFF to determine whether events generated by MSN statements such as session termination commands STOPABORT STOPKILL and STOPABORTFLUSH are displayed Example LOG OPTIONS KEYBOARD ON MACROS OFF ERRORS ON BOXES ON The log will display all entries except for commands executed by macros 150 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL RESET_ERRORS RESET_ERRORS is the macro equivalent to the menu command View Reset Error Indicator The error indicator appearing at the bottom of the screen may be reset under macro control by issuing the command RESET_ERRORS This command takes no arguments The error indicator consists of the words ERRORS CHECK LOG The error indicator appears whenever an error is detected within MED PC or within an MSN program The error indicator will reappear after being reset in case of any subsequent errors Errors may be viewed using the Session Log Syntax RESET ERRORS 151 MED ASSOCIATES INC MED PC IV PROGRAM
134. gin execution of the procedure Heavy disk activity could also slow the response time to BKGRND procedures Due to the indeterminacy of the delay until a BKGRND request is processed it is important to issue requests for BKGRND procedures only at times when it is possible to wait long enough for the request to be honored and the procedure executed Convenient times might include the beginning and end of sessions during long inter trial intervals time outs between multiple schedule components etc The example below demonstrates how to call and write a BKGRND procedure It shows how to write a data file at the end of a session that contains information that will be read at the beginning of the next session This example could serve as the basis for developing MSN code for continuous experimental sessions in which the events of one experimental session are used to define the contingencies for a subsequent session In 5 9 1 S1 BKGRND procedure 2 is requested and transition to S2 occurs Note that transition from S2 will not occur until D equals 1 Examination of the Pascal code for BKGRND procedure 2 below shows that D is set to 1 after the data file is read Thus D indicates whether the BKGRND procedure has finished execution Of course any variable could be used for this purpose but D was chosen for the present example In the present example the data file will have the same name as the Subject running in the Box that called the BKGRND proced
135. gt Sl R2 Z1 84 S4 422 52 Y Reinforcer State Set S1 START S2 S2 421 ON 2 S3 S3 2 OFF 2 Z2 82 Z Pulses can be tremendously useful but they must be used wisely When a Z pulse is generated it does not get processed immediately Instead a record of all Z Pulses generated during a pass through the State Sets of a procedure are recorded and then a second pass is immediately made through the State Sets If more Z Pulses are generated then yet another pass through the State Sets occurs Each pass of course requires processing time A situation to avoid is having one Z pulse lead to the immediate generation of another Z pulse then another etc Below is an example of poor programming utilizing Z Pulses which could produce a loop that the runtime system will treat as an error after 10 iterations Example B S S 51 START Z3 Z1 gt 52 S2 Z1 ON 1 Z2 gt S3 3 Z2 OFF 1 Z3 gt 51 While it is unlikely that one will ever write a series of statements as aberrant as the set above it is still important to avoid generating chains of Z Pulses wherever possible The following example is inefficient for a Z1 is used as input in S1 of S S 2 to immediately generate a Z2 which is then used in S S 3 to produce a reinforcer Although the following code will not cause a system lock up it could result in some system performance falling on a slower comput
136. he result of a transition to STOPABORT or STOPABORTFLUSH Both of these commands also terminate execution of the program However it is sometimes desirable to write data to the disk and then continue execution of the program This may be accomplished by placing the FLUSH command in the output section of an MSN statement Syntax FLUSH 119 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Comments The data is written to disk without any user intervention similar to the effects of STOPABORTFLUSH except that program execution continues Any formatting specified by DISKVARS or other formatting commands will influence the format of the resulting disk file The name of the data file will correspond to the naming scheme specified during installation of the system and multiple flushes will cause data to be appended to the same file multiple files will not be created regardless of the number of flushes from within the same session Note these data files are distinct from the automatic backup file maintained by MED PC IV Examples and Discussion S S 1 S1 START gt S2 S2 R1 ADD A SX S942 S1 START gt S2 S2 10 FLUSH gt SX In this very simple example issuing START causes both State Sets to enter State 2 In State Set 1 every response increments variable A In State Set 2 all data for the session is written to the disk every 10 minutes without any user intervention Stopping the
137. hen many of the variables are used internally by the procedure and do not contain data Additionally when collecting hundreds or thousands of data points per session it would be convenient to be able to print a few key indices to the printer after every session and yet be able to save the detailed counters to disk file for later analysis The above objectives may be accomplished by using the PRINTVARS command This command may be used to declare a list of variables that will be printed whenever a PRINT command is issued The PRINTVARS command affects printing irrespective of whether the command to print was issued from within a state table or by a keyboard command The PRINTVARS command in no way affects the variables that will be written to disk but a parallel command DISKVARS is provided In the absence of a PRINTVARS directive all variables and arrays A Z are printed To print selected variables place a PRINTVARS directive before the first State Set of the procedure The exact placement of PRINTVARS does not matter provided that it is before the first State Set Syntax PRINTVARS P1 P2 P26 Where P1 P26 are variables or arrays A through Z Comment PRINTVARS must be placed before the first State Set 130 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL In the following example the PRINTVARS directive specifies that printouts should contain only variables arrays A J K DIM J 5 PRINTVARS A J K Pri
138. ial every response adds to array C and then the array is tested If our statement is true transition takes place to the first statement the collection of IRT s without terminating the procedure Note the program will end when the session timer tells it to do so If the statement is false however the seal of our array is moved over one spot The advantage of course being that the array is always sealed in case of a true statement or a premature stop but the seal can always be moved Tutorial 7A Using the DIM command Once again we are going to modify the FR 5 program from Tutor04 mpc So go ahead and open that file and make the following changes marked in bold saving it as Tutor07A mpc and translate compile it as you have done in the past This is an FR 5 Filename Tutor07A mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser continued on next page 40 MED ASSOCIATES INC Y Defined Variables A Number of Responses B Number of Rewards Data Array DIM C 49 S S 1 Main Control Logic for FR S1 START ON House 82 9S2 54R LeftLever ON Reward Z1 SX 25624 Response Counter S1 START SHOW 1 Responses A S2 S2 R LeftLever ADD A SHOW 1 Responses A SX 5 32 Reward Counter S1 Z1 ADD B SHOW 2
139. ing a procedure without an interface test the program with an interface 82 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Internal Representation of Time Time values in seconds or minutes are represented internally as the numeric value multiplied by the result of 1000 the systems resolution value in seconds or minutes For example on a system with 10 ms resolution the variable A in the following expression would be internally set to 100 by MED PC R1 SET A 1 SX Examining A with the VARS command or in a MED PC printout would show that A 100 A useful trick for displaying time values with SHOW commands is to divide the value by 1 or 1 depending on the units of the time value prior to display For example HIST B 17 2 3 SSL Le START RANDI A B SHOW 1 TIME A 1 SX Z Z pulses as inputs Z Pulses are used to communicate between State Sets and are generated in the output section of a MSN statement See the output commands section of this Appendix When placed in the input section of a MSN statement they perform in a manner analogous to responses R Z is unrelated to the variable Z Syntax P1 ZP2 Where P1 amp P2 Number constant variable mathematical expression array element or special identifier Comments P1 defaults to 1 if not stated P2 must be in the range 1 32 P1 is reset upon entry to the state Example 5 8 1 91 Z1 ON 1
140. intouts PRI NTORI ENTATI ON This command is used to override system defaults with respect to whether a given printout occurs in Landscape sideways or Portrait standard orientation Syntax PRINTORIENTATION direction Where Direction is Landscape or Portrait Setting the of Columns on Printouts PRINTCOLUMNS on Data files DISKCOLUMNS PRINTCOLUMNS controls the number of columns in which the contents of arrays are printed The use of this command will override any defaults set within the MED PC menu system which is five columns This command functions in combination with PRINTORIENTATION PRINTPOINTS and PRINTFORMAT If the total line space available is exceeded the column function may be automatically truncated Syntax PRINTCOLUMNS X Where X is the number of columns The DISKCOLUMNS command will do the same thing but to the data file Its syntax is identical Controlling Font Size on Printouts PRI NTPOI NTS PRINTPOINTS controls the size of the font used to print data from the Box in which this command is issued The use of this command will override any defaults set within the MED PC menu system Syntax PRINTPOINTS X Where X is the number of points 12 is the default 55 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Controlling the Printouts Data Files PRI NTFORMAT DI SKFORMAT By default MED PC automatically sets aside 12 spaces for each number to be printed It bre
141. ion and a page will be ejected after each Box is printed Note that DEFAULT PRINTER SETTINGS will NOT affect currently loaded Boxes but will alter the default settings for any subsequently loaded Boxes BOX PRINTER NAME DEFAULT PRINTER NAME The printer used to produce printouts may be selected by two macro commands BOX PRINTER NAME is equivalent to the Printer dropdown box in the menu selection File Print Format Specific Boxes and DEFAULT PRINTER NAME corresponds to the Printer dropdown box in the menu selection File Print Format Default Settings These commands differ only in that the former defines printing parameters for specific Boxes while the latter defines default settings that will be in effect for all Boxes for the remainder of the session The default settings are those that MED PC uses when a Box is loaded However the default settings may be over ridden for specific Boxes by subsequently executing BOX PRINTER NAME from within a macro or by using the equivalent menu or MSN commands 141 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC BOX PRINTER NAME Syntax BOX PRINTER NAME P1 BOXES P2 Where P1 The name of an installed printer surrounded by single quotes P2 A list of box numbers Example BOX PRINTER NAME HP LaserJet 6P BOXES 1 2 3 Printouts for Boxes 1 2 and 3 will be printed on the HP Laserjet 6P DEFAULT PRINTER NAME Syntax DEFAULT PRINTER NAME P1 Where P1 The
142. is executed the array index K for array A is equal to 1 giving B a value of 2 to turn ON output 2 The LIST command continues to select successive array elements until the end of the list is reached When the last element has been accessed the array index K is reset back to 0 Example B LIST Ai 5 10 15 20 25 30 Y Note that each line 30 35 40 45 50 55 Y must end in a comma 60 65 70 75 80 85 except for the last one 126 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Declaring Constants The clarity of MSN programs may be enhanced through the use of constants Constants are user defined meaningful names that may be used in place of whole numbers in MSN programs Constants are particularly useful for providing logical names for output numbers and Z pulses Constant names must always begin with a carat Syntax CONSTANT Pl Where CONSTANT the name you are assigning P1 the Input or Output number being assigned to a constant The following code illustrates several uses of constants Inputs LeftKey 1 Outputs Feeder 1 Light 2 Z Pulses RFBegin 1 RFEnd 2 Offsets into C Array RFS 0 Y Counter 0 will count RFS DIM C 5 S S 1 S1 0 01 ON Light S2 S2 104R LeftKey ON Feeder Z RFBegin ADD C RFS 53 S3 2 OFF Feeder Z RFEnd S2 Comments 1 It is acceptable to assign time v
143. job is done End With End BackProc1 161 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC The following is the code for BKGRND procedure 2 This procedure will not generate an error message if it cannot read from the data file SF 1 THE I DIRECTIVE PREVENTS THE T IF THE FILE DOESN T EXIST THIS PROC DEMONSTRATES READING FROM A DATA Procedure BackProc2 MPCGlobal MPCGlobalPtr Var PROGRAM FROM CRASHING FILE IN THE BACKGROUND Box Byte Export Data DataRec St String 4 InF Text Le Word Begin With MPCGlobal Do Begin Data BoxPointer Box With Data Data Description Data Header Do Begin St LowerCase SubjectSt While St 1 Do Delete St 1 1 Assign InF Data St Reset InF f IORESULT 0 Then Begin EXE Vars C Size EXEMPLIFIES HOW TO DETERMINE THE NUMBER OF ELI MENTS ASSOCIATED WITH ANY ARRAY OR VARIABLE THE FIRST ELEMENT OF ARRAYS OR T VARIABLES IS REFERENCED AS 0 AND THE SIZE FIELD GIVES THE HIGHEST SUBSCRIPT THE FOLLOWING LOOP READS ALL ELEMENTS OF ARRAY C
144. kes place in the background which is to say that FLUSH does not cause any interference with the speed and efficiency with which experimental events are processed the data is written when the processor has free time It is important to note that the amount of time that it takes to write a disk file is indeterminate it is not advisable to make changes to the data structure s being written to disk until one may be reasonably certain that the data has actually been transferred to disk For a discussion of an analogous issue with the PRINT command refer to the section of the manual covering that command A way to cope with the indeterminacy is to collect data into one array and then periodically copy the contents of that array to a second array See COPYARRAY Page 110 and then write the second array to disk Declare Array s A and B with elements 0 99 DIM A 99 DIM B 99 Declare that only Array B will be written to disk DISKVARS B SS diy S1 START gt 82 S2 Whenever a Response on Input 1 occurs do the following 1 Record the Elapsed Time since the last Response into A I 2 Clear X so that the Elapsed Timer is reset 3 Update I so that the next Response is recorded into the next element of A 4 If 100 Inter Response times have been recorded its time to transfer data to disk by doing the following A Transfer the data to B so that the data is not altered by sub
145. l be printed on the printer This variable is affected by the PRINTFORMAT command 167 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC PPrintDecimals The number of digits to be printed to the right of the decimal point on printouts This variable is affected by the PRINTFORMAT command PA_H Each bit of this variable encodes whether a given MED PC variable or array in the range A through H will be printed The value of this variable is 255 by default but is altered by the PRINTVARS command The value of A will be printed when the low order bit is set to 1 similarly the value of H is printed when the high order bit is set to 1 For example a value of 131 binary 10000011 would print A B and H PI_P PQ_X and PY_Z These variables are analogous to PA_H DPrintOptions DA_H DI_P DQ_X and DY_Z These variables are analogous to PPrintOptions PA_H through PY_Z except that they control the internal structure of disk files TimeDurs Times Ins RecordH RecordT and AddRecord These variables are presently not used and may be dropped in subsequent releases Y2KCOMPLI ANT is set to true if the Y2KCOMPLIANT directive is present before the first State Set of the MSN program By default this variable is set to false VarAliasList This is a TStringList that contains the names of all variable aliases and the variables or array elements to which they refer FlushPermission Used internally to indicate
146. le naming defaults to the scheme declared during installation unless a custom file name is assigned from the Open Session window Executing STOPABORTFLUSH will cause all data waiting to be written to the disk to be transferred to disk even if the data is awaiting transfer as the result of other Boxes executing STOPABORT Syntax Input Output gt STOPABORT Example SS S1 R1 ADD A SX R2 ADD B SX SS S1 60 STOPABORTFLUSH Miscellaneous Commands DATE and TI ME These commands return information about the Date and Time Having access to this may be useful in IF statements for setting experimental parameters on the basis of Time or Date information Syntax DATE P1 P2 P3 TIME P1 P2 P3 Where P1 P2 P3 Variable or array element Information returned by DATE into the parameters P1 Month P2 Day P3 Year 121 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Information returned by TIME into the parameters P1 Hours 12 or 24 hour based on Windows setting P2 Minutes P3 Seconds Example In the following example the calendar information is returned by DATE If the first parameter A returns 10 then F is set equal to 5 establishing an FR 5 If the month is equal to anything other than 5 then the FR is set equal to 10 S S 1 S1 START DATE A B C IF A 10 OctFR NotOctFR OctFR SET F 5 52 FR 5 NotOctFR SET F 10 gt S2 FR 1
147. les For example the VAR ALIAS command may be used so that the User will be able to set the value of a variable named Maximum Reward rather than an obscure variable such as Q Note that variable aliases do not have any use within the body of MSN programs they are simply directives placed before the first State Set that establish meaningful aliases essentially synonyms for program variables Syntax VAR ALIASA B Where A B A descriptive label for the variable or array element The variable or array element Comments This command doesn t fit into the INPUT OUTPUT NEXT format it must always be placed somewhere before S S 1 Real code may look like this VAR ALIAS SoftCR Data Array Yes 1 No 0 A 6 DIM A 6 S Sad 0 01 SET A 6 1 gt 82 S2 START gt S3 The above code will allow the User to decide if they wish to record SoftCR data before they issue the START command Tutorial 9 Using the VAR_ALIAS Command In this Tutorial we are going to add change a few lines of code from the Tutor08 mpc As done in the past the changes are shown below in bold Make the changes save as Tutor09 mpc and translate compile 49 MED PC IV PROGRAMMER S MANUAL This is a VR 10 Filename Date Tutor09 mpc August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser Define
148. lick MAKE There should now be a letter M a tab space or two away from the file name now click OK Your program should now automatically translate Parse and compile When it is done close TRANS and open MED PC Figure 5 Translate specily Piles lo Dranslale Scrolling the mouse to the menu bar click first on File and then on Open Session Open Tutor01 mpc 3 Note If you chose to use another text editor save your file and close your text editor then open TRANS and follow the above directions MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Figure 6 Open Experimental Session Open Exporimontal 5ezzlon After one second the house light should come on for five seconds turn itself off for one second and repeat this cycle until the session is closed To close the session scroll and click once again to File on the menu bar and click on Close Sessions A pop up window should now appear Figure 7 Close Experimental Sessions Close Experimental Sessions x Command ta Issue Stop Save Data Write Data to Disk Stop amp bortFlush Stop Save Data Stop bort f Stop Abandon Data StopKll Select All Deselect All MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Select the check Box next to Box 1 and then select the Stop Abandon Data StopKill radio button Note that the light turning on and off continues as you are in this windo
149. macro may be initiated by selecting Macros Play Macro Selecting this command displays a file dialog An existing macro may be played by either typing in the name of the macro or by clicking on the appropriate name Macros need not reside in the default macro directory C MED PC IV MACRO It may be more convenient to store macros for various projects in distinct directories Getting the Most Out of Macros Use macros to load experiments and set parameters that do not change from session to session m Use the PLAYMACRO command to have one macro play another Rather than placing the commands to load all Boxes in a single macro record separate macros for each subject Then create a macro to load the set of subjects this macro merely consists of a series of PLAYMACRO commands that call each of the individual macros This greatly simplifies maintenance of macros and increases flexibility m n many experiments the contingencies change in some systematic fashion from session to session This lends itself to creating one macro to load the Boxes that the operator would always run as the first macro for setting up the session The technician could then run a second macro that sets session parameters appropriate to the contingencies du jour For example the first macro that is always run might be named Squad1 and then the technician would load either Left Lever or Right Lever depending on which lever is designated active for
150. may be nested more than one deep In the following example variables A B and C are all tested with respect to Variable X If all three are greater than or equal to X then transition is to State 2 If any variable fails the test then transition is to State 3 Seo ls S1 1 IF A gt X FirstTrue FirstFalse FirstTrue IF B gt X SecondTrue SecondFalse SecondTrue IF C gt X ThirdTrue ThirdFalse ThirdTrue S2 GThirdFalse S3 GSecondFalse 3 FirstFalse S3 The labels used with the IF command are arbitrary For example in the above example if A gt X is false then execution immediately drops down to the statement on the same tab regardless of whether FirstFalse is properly spelled It is however mandatory to use a label Also a colon must follow the label even if there is no output section as in FirstFalse gt S3 Example E A variation on the IF command is to specify only the true alternative If the conditions tested by the IF are not met then transition to SX automatically occurs without being stated This is illustrated with Example E S S 1 S1 10 ADD A IF A 10 GO 800 ON 1 S2 S2 0 1 SET A 0 OFF 1 gt S1 In Example E no transition will take place in State 1 until A is equal to 10 When A 10 is true transition to State 2 will occur 104 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Example F A
151. n logical tests with IF statements be part of assignments with SET and may serve as prefixes or suffixes to K R Z etc MED PC does not prevent one from changing the value of these identifiers with a SET command but do so only with caution These variables are also available for use in inline PASCAL expressions Examples and Discussion Example A 1 IF S S 3 5 ON 1 S2 The IF command makes a logical comparison on the basis of whether State Set 3 is currently in State 5 f the comparison is true output 1 is turned ON and a transition is made to State 2 NOTE A complete list of the variables that may be queried can be found in the Special Identifiers section on Page 123 WI THPI WITHPI is a probability gate that samples with replacement WITHPI functions act a lot like an IF statement but truth or falsity of decisions depend upon probabilistic decisions As with IF it may be used with three different syntaxes Probabilities are always specified as chances out of ten thousand Syntax A WITHPI P1 Labell Label2 Labell Output Section gt Transition Label2 Output Section gt Transition Syntax B WITHPI P1 Label1 Labell Output Section gt Transition Syntax C WITHPI P1 Output Section Transition 106 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Where P1 Constant number variable or array element Labell Label2 Any text label containing only letters O
152. nd from the runtime menu system It is also possible to produce beeps whenever all Boxes are shut off by enabling the Tone Alert When Done toggle within the runtime menu system The beeps produced by this menu selection are functionally equivalent to those produced by ALERTON and may be canceled either from the menu or by ALERTOFF Even if inline Pascal code is used to produce tones it is still possible to simultaneously use the ALERTON ALERTOFF features Note that ALERTON is easier to use than inline Pascal produced beeps because it is unnecessary to handle timing or other details of producing beeps Additionally the beeping will persist even when all Boxes are unloaded The duration of beeps produced by ALERTON may show considerable variation and may temporarily be suspended during some especially time intensive menu tasks This is especially likely to happen while writing files to disk As soon as disk writing is finished the beeping will resume 88 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Coordinating Events Across State Sets Z Pulses A construct known as a Z pulse may be used to communicate among State Sets Z Pulses are generated in the output section of statements but may also function as inputs to other statements refer back to the Input command section for more details on this use of Z Pulses Z Pulses may have values falling between 1 and 32 They can be an invaluable means for coordinating the action of multiple Sta
153. nd the consequences of stacking as is true of the other external inputs K R and START but a few points may not be readily apparent 1 Timers continue to time even when stacked with other external inputs but cannot cause a transition to SX to the same State or to another State unless they are processed prior to other inputs for which an input actually occurred Once a timer has elapsed it will continue to be eligible to cause a transition provided that the current State has not changed until it is the first statement capable of causing a transition 2 It is never a good idea to stack timers with durations equal to the system resolution above other external inputs for the other inputs will never receive processing because the timer will always cause a transition 3 Timers with durations equal to the system resolution may be stacked beneath other inputs Note intervals specified for less than the resolution interval the interrupt sweep interval will be processed as though they were equal to the resolution interval 4 n the following situation imagine a system resolution of 10 milliseconds and that an R1 occurs and the 10 time duration times out on the same interrupt sweep within the 10 millisecond window between interrupts In this unlikely occurrence A will be added and transition to S2 will occur during the subsequent interrupt or 10 01 after entry into the state provided that another R1 does not occur within 10 millis
154. neous active requests for different BKGRND procedures but note that a single Box may not request a BKGRND procedure a second time until its previous request has been completed Several BKGRND procedures have been included in BACKPROC PAS but Users may feel free to replace them with their own code subject to the limitations described Importing Inline amp Background Pascal Code from Earlier MED PC Versions Recommended Steps 1 Read all documentation on Inline Pascal and Background Procedures After doing so the following instructions should make sense The following references should be read Appendix C Inline Pascal Procedures Background Procedures 2 Do not try to edit an existing User pas file for use in MED PC IV Instead copy all inline routines to the USER PAS supplied with MED PC IV 3 Add the MPCGlobal MPCGlobalPtr declaration to all procedure headers and add MG to all calls to these procedures 4 Verify that all array references are within the legal bounds of the array declarations 5 Copy the CONTENTS of any user written BACKGROUND procedures to the MED PC IV supplied file BACKPROC PAS Do not copy the procedure header declarations from earlier BACKPROC PAS files The present step is unnecessary if you are not porting any background procedures Unlike earlier versions of MED PC BACKPROC PAS and USER PAS are now automatically recompiled whenever any MPC programs are translated Explicitly recompilin
155. nforces Cont gt SX Example C SSL 1 HR ON Pellet gt S2 K1 STOPABORT S2 0 05 OFF Pellet S1 84 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL OR It is often desirable to permit several conditions to cause transfer to the same output section For example to allow presses on either a left lever or a right lever to produce reinforcement one could write the following code S S 1 S1 R1 ON 1 gt S2 R2 ON 1 gt S2 82 6 155 OFF 1l gt S1 A more desirable way to code this however is to use a logical OR indicated by placing an exclamation point I between two or more input commands For example the following code indicates that either R1 or R2 is acceptable S Sw S1 FRI R2 ON 1 gt S2 S2 0 1 OFF 1 gt S1 Output Section Commands Overview Output section commands fall between the colon and arrow of a statement Multiple output commands may be separated by semicolons while multiple parameters for the same command are separated by commas An example of separating output commands is S1 R1 ON 1 5 ADD X SX The output section commands are divided into those responsible for turning outputs and the PC Speaker on and off ON LOCKON OFF LOCKOFF ALERTON ALERTOFF State Set communication Z pulse inter Box communication K pulse mathematical commands ADD SUB LIMIT SET BIN statistical commands ARI
156. ng archival printouts Additionally if small amounts of data are printed the time interval between printing the first and last values will typically be quite small and often not detectable In addition to the asynchrony between printing the first and last data elements within a Box that may arise when printing while a Box is running the amount of time it takes for a printout to appear on the printer varies according to a variety of factors Typically a printout is generated within seconds after a request This may change though if a large number of printing requests have preceded the present request or if a great deal of disk writing activity is underway Specifically printout generation does not occur while disks files are being written 118 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Queuing of Printouts and Availability of Data for Printing When a request to print data is received by MED PC the request is placed in a queue or waiting line until MED PC has time to process the request Assuming that MED PC is not occupied performing other tasks the printout is generated in memory before actually being sent to the printer During printout formation the on screen memory indicators will rapidly run down until only about 5K remain As the printout actually gets sent to the printer memory locations are constantly released As memory again becomes available more printout is formed in memory A request to print data will be fulfilled
157. ning of the list The following would successively display the numbers 1 2 and 3 on the screen and demonstrates the two uses of LIST LIST G 1 2 3 S S 1 1 LIST F G H SHOW 1 FVAL F gt SX RANDI RANDI is similar to LIST as an output and is used in to automatically select data from an array set up with LIST as a definer The difference between LIST and RANDI is that while LIST pulls its values from the array sequentially RANDI pulls them randomly with replacement The following example shows how the program above could use the RANDI command LIST G 1 2 3 SSL 1 RANDI F G SHOW 1 FVAL F gt SX 45 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Note that a subscript variable is not specified for the array variable as was the case with the LIST command The subscript is selected randomly as a function of RANDI Also unlike the LIST program that would present the data 1 2 3 1 2 3 this program might cause the numbers 2 2 1 3 2 1 3 to be successively displayed on the screen so the average if allowed to run over time would be 1 2 3 RANDD RANDD is closely related to RANDI with the difference lying in that RANDD randomly selects from an array but without replacement Substituting RANDD in the examples of code used above might cause the numbers 1 3 2 2 1 3 2 3 1 to be successively displayed on the screen the point being that any one number cannot be r
158. nput 2 Y Subtract 1 from the Value of Y Variables X Y Z and Array Element A T 96 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL LIMIT Increment or Decrement to a Bound This function may be used to increment or decrement a variable Importantly a limit is specified beyond which the variable will not be incremented or decrement This function should be used when it is specifically desired to limit the value of a variable it should not be used as an alternative to ADD SUB or SET in cases where those functions will suffice The processing overhead or performance penalty associated with LIMIT is somewhat higher than that associated with the alternative functions This is not to say that LIMIT should not be used when necessary but rather that it should not be used indiscriminately Syntax LIMIT P1 P2 P3 Where P1 Variable or array element to be incremented or decremented It may not be a constant or a fixed number P2 A variable array element constant or number specifying the numerical value by which P1 will be incremented or decremented each time LIMIT is executed P3 The maximum or minimum value of P1 Once reached this value will be held no matter how many times LIMIT is executed S S 1 This code Fragment Adds 2 to X Every Second S1 Y X will Achieve and Hold a Value of 10 1 LIMIT X 2 10 SX S S 1 This Code Fragment Adds 3 to X Every Second S1 X will Achieve and Hold a Value of 9 1
159. ns during Z pulse processing will remain of course the current State when external inputs are processed upon occurrence of the next interrupt EXAMPLES The following code results in a SHOW display as soon as K1 is issued of A Value with a value of 1 in position 1 and C Value incrementing in position 3 B Value is never displayed and subsequent occurrences of are not reflected in A Value since S S 1 remains in S3 after processing is complete 65 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC EXAMPLE A This illustrates that processing of Z Pulses continues and progressions through more than one State may occur during Z pulse processing SSL S1 HZ1 Z2 gt S2 K1 ADD A SHOW 1 A Value A SX 925 Z2 S3 Z2 detected in same Clock Tick in which it is issued 0 1 ADD B SHOW 2 B Value B SX Never executed Z2 always occurs immediately S3 0 1 ADD C SHOW 3 C Value C gt SX S S 2 S1 K1 Z1 SX EXAMPLE B The following code changes the second statement in State Set 1 so that transition occurs to S1 replacing SX The result however is exactly the same as in Example A S S 1 S1 HZ1 Z2 gt S2 K1 ADD A SHOW 1 A Value A S1 S2 422 53 0 1 ADD B SHOW 2 B Value B SX S3 0 1 ADD C SHOW 3 C Value C SX S S 2 S1
160. ntouts will contain Variables A amp K and Array J This statement has no effect on what is written to disk S Sel S1 60 PRINT gt STOPABORT Y Print variables specified by PRINTVARS from within state table after 1 hour PRI NTFORMAT MED PC automatically prints numbers such that 12 spaces are set aside for each number with 8 digits reserved for the integer part of the number to the left of the decimal 1 space is used for the decimal and 3 spaces are provided for the decimal portion of the number An example of a number printed in 12 3 format the meaning of 12 3 will be detailed below is 12345678 123 In many instances it is useful to print data in other formats particularly when trying to increase the amount of data printed per page Placing a PRINTFORMAT statement before the first State Set of the procedure will control the printed format of numbers PRINTFORMAT takes one argument consisting of a decimal number in which the integer to the left of the decimal indicates the total number of spaces to be occupied by the number and the decimal portion indicates the number of spaces to be set aside for the decimal portion of to be printed numbers Syntax PRINTFORMAT P1 P2 Where P1 Number indicates the total number of spaces to be occupied by the number including the decimal point P2 Number indicates the number of spaces to be set aside for the decimal portion of the number Examples PRINTFORMAT
161. number and constants and variables in place of the number are not permissible The periods following each S and the comma following the number are required States The basic unit of a State Set is the State At any given moment a procedure can be thought of as being in a given State When a procedure begins to execute it is always in the first i e top most State States are indicated by 54 where an integer between one 1 and thirty two 32 with the same restrictions on numbering as indicated for State Set numbering Statements General Description Statements are within States and are made up of commands Comparing the basic elements of a program e g State Set State and Statements to the components of a book the State Sets are the chapters the States are the paragraphs within those chapters the Statements are the sentences and the commands are the words The Components of a Statement A statement is composed of three components an Input Section an Output Section and a Transition The input section consists of the commands to the left of the colon the output section is between the colon and the arrow and the transition is to the right of the arrow A statement may be thought of as an IF THEN GOTO statement For example the following statement means IF Input occurs THEN Output and GOTO Next Input Output gt Next Actual code may look like this R
162. ny option not specified will stay at its default value Several samples are provided below The FORMFEEDS option specifies that a page will be ejected from the printer after every PRINT command whereas NOFORMFEEDS indicates that the data from one Box should be printed immediately after the last Box s data without ejecting a page Syntax PRINTOPTIONS P1 P2 FULLHEADERS or CONDENSEDHEADERS FORMFEEDS or NOFORMFEEDS Where P1 P2 Comments Note that DOS versions of MED PC also provided for an additional parameter 80 vs 132 columns The translator will still accept these parameters in the service of downward compatibility but these options have no effect on the appearance of printouts under the present version These differences reflect fundamental differences in the approach taken to printing in Windows vs DOS Although there is no equivalent to the column width options 80 vs 132 the present version of MED PC can control the font size and hence the amount of data on the page via the PRINTORIENTATION PRINTCOLUMNS and PRINTPOINTS commands that have been provided as enhanced alternatives to the older system Commas separate multiple options CONDENSEDHEADERS and NOFORMFEEDS are the default settings and need not be specified The order of options is irrelevant 132 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Examples and Discussion PRINTVARS A PRINTFORMAT 9 2 PRINTOPTIONS FULLHEADERS LIST A 1
163. ny subsequent line of the program and it may be used more than once either in subsequent INPUTBOX commands or in other macro commands such as SET or LOAD The results stored in macro variables may be used in ANY macro command not just SET No validation is performed on the User s response the User is allowed to enter anything or even leave the field blank If the response will be used to set a variable value it would be preferable to use NUMERICINPUTBOX see below NUMERI CI NPUTBOX The syntax of this command is identical to INPUTBOX but the user is required to enter a number that may include a decimal point If the User leaves the input field blank or the field contains non numeric information such as letters a message will be displayed and the user will be required to enter a different response This command is preferred over INPUTBOX if the response will be used with a SET command to avoid attempting to set a program variable to something other than a number which would cause an error 147 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC TEXTI NPUTBOX The syntax of this command is identical to INPUTBOX but the User is required to enter a response that contains something other than spaces If the User leaves the input field blank or the field contains only spaces a message will be displayed and the User will be required to enter a different response Input Box Editor Entering the parameters for the INPUTBOX c
164. o make some changes to Tutor07A mpc are noted in bold This is an FR 5 Filename Tutor07B mpc Date August 8 2004 This section is for Inputs LeftLever 1 This section is for Outputs House 1 Reward 2 In this code this is a Pellet Dispenser Y Defined Variables A Number of Responses B Number of Rewards C Data Array M Max Time in Minutes Y N Session Timer X Q Max Rewards DIM C 999 continued on next page 42 The changes to be made MED ASSOCIATES INC S S 1 NX Main Control Logic for FR Sl START ON House SET Q 5 SET M 1 gt S2 S2 54R LeftLever ON Reward Z1 SX 422 gt S1 9 9425 Response Counter S1 START SHOW 2 Responses A S2 S2 R LeftLever ADD A SHOW 2 Responses A SX 422 gt 51 SS 3 Reward Counter S1 Z1 ADD B SHOW 3 Reward B S2 S2 0 05 OFF Reward S1 S S 4 Time Increment in 0 1 Second Intervals ST START 52 S2 0 1 SET T T Q 1 gt SX S S45 Y Recording IRT s S1 START 52 92 R LeftLever SET C I T T 0 ADD I SET C I 987 987 SX Z2 gt S1 S S 6 Si START SHOW 1 Session N S2 continued on next page 43 MED PC IV PROGRAMMER S MANUAL MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC
165. o this approach is that the record is completely self documenting in the sense that the fields of VARS provides complete information about whether a letter is a variable or an array via the VarKind field and the number of elements associated with the letter To access data in USER procedures by way of DataRec one must pass the Box s number to the Pascal procedure contained in the USER PAS for example Procedure Demo MPCGlobal MPCGlobalPtr Box Byte Next a variable that points to a structure of type DataRec should be declared Var Data DataRec Begin With MPCGlobal Do Begin Within the body of the procedure Data should be set to point to the data associated with the Box so that the Box s data may be accessed The address of the Box s data is stored by MED PC within BoxPointer Data BoxPointer Box Accessing the data within Data is simplified by using Pascal s WITH keyword to partially de reference Data The following WITH block allows all fields within the Description and Header records to be accessed without the prefix DATA Additionally BigArr may be referenced without the prefix DATA With Data Data Description Data Header Do Begin User Pascal code goes here End with End with End Demo An example using DataRec was provided in the Inline Pascal Procedures Section 169 MED ASSOCIATES INC MED PC IV PROGRAMMER S MA
166. om The output that drives the light could be shared by all Boxes and LOCKON d by each Box as it loads By using LOCKON the light is not shutoff every time a Box terminates because of automatic shutoff outputs activated by ON When all sessions have finished the technician could execute a keyboard macro to LOCKOFF the relevant output to extinguish the light For further discussion of output sharing refer to the next section Overlapping Inputs and Outputs Syntax LOCKON P1 or LOCKOFF P1 Where P1 Number constant variable array element or mathematical expression Comments Comma separation permissible Overlapping Inputs and Outputs It is an acceptable practice to have a given bit on an input or output card assigned to more than one logical Box For example all Boxes might have output one mapped to output card 780 Bit 1 This kind of output sharing is used in one of the beta testing labs where every Box turns on output 1 upon loading This output is mapped to port 780 Bit 1 in all Boxes and is connected to a relay that turns on all of the chamber ventilation fans It is also okay for a Box to attempt to turn on an output it doesn t have For example some operant chambers may have lever extension solenoids but some of the others do not The chambers with solenoids are wired to six outputs whereas the remaining Boxes each have four outputs Never the less a single procedure is used to run both types of chambers Irrespective o
167. ommand or the numeric or text variants is greatly simplified by using the macro editor Macros Editor The macro editor allows you to construct an INPUTBOX command using a dynamic mockup of the input box as illustrated below Figure 19 Editing Inputbox Editing Input Hox MED Tike of input box Parameters tor Rati Input prompt Enter weight gras vae ofinput 50 Variable to receive input Weigh arameters for Ral 15 Enter weight grams _X caca 9 SHOWMESSAGE This command is used to display messages during macro playback When a SHOWMESSAGE command is encountered the macro pauses and displays a dialog box with the text contained in the macro The macro resumes execution after the technician clicks the OK button This command is useful for prompting the technician before some further macro action occurs Syntax SHOWMESSAGE P1 Where P1 A string of text enclosed in e g Put Rat 5 in the chamber Comments SHOWMESSAGE can only be added to macros via the macro editor there is no way to place a SHOWMESSAGE in a macro while recording the macro 148 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Example The following macro loads Rat 5 into Box 2 and then displays a Dialog Box After the technician clicks the OK button the macro resumes and issues a start command LOAD BOX 2 SUBJ 5 EXPT Demo GROUP One PROGRAM Concurrent FR FI SHOWMESSAGE Place Rat 5 in the chamber
168. on of the number This may result in the printed line spilling onto the next line on the page If the decimal portion of a number exceeds the space allocated the number printed is rounded to the nearest value Remember to save the data in the same format just replace the word PRINT with DISK and follow all of the same rules Controlling the Selection of Variables or Arrays on Printouts Data Files PRI NTVARS DI SKVARS It is often desirable to print only a subset of the variables and arrays in a procedure This is particularly true when many of the variables are used internally by the procedure and do not contain data Additionally when collecting hundreds or thousands of data points per session it would be convenient to be able to print a few key indices to the printer after every session and yet be able to save the detailed counters to disk file for later analysis 56 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL The above objectives may be accomplished by using the PRINTVARS command This command may be used to declare a list of variables that will be printed whenever a PRINT command is issued The PRINTVARS command affects printing irrespective of whether the command to print was issued from within a state table or by a keyboard command The PRINTVARS command in no way affects the variables that will be written to disk but a parallel command DISKVARS is provided As seen in previous Tutorials by default all variabl
169. ormation contained in those three variables into a single number This allows one to record the time of occurrence of events in a minimum number of array locations Subsequent data analysis software could be used to reconstruct hour minute and second information DATETODAY DATETODAY is a single number that condenses CURRENTYEAR CURRENTMONTH and CURRENTDATE into a single number in the format YYMMDD For example June 2 1990 would be expressed as 900602 BTI ME This number is based upon MED PC s internal timer interrupt system BTIME is used internally to time experimental events BTIME is set to 0 when MED PC is loaded and continues to increment throughout the session every time an interrupt occurs BTIME increments 1000 RESOLUTION times per second where RESOLUTION is the timing resolution declared during installation On a 50 ms system BTIME increments 20 times per second On a 20 ms system BTIME increments 50 times per second BTIME may be useful for recording elapsed times but there is no particular advantage to this technique over recording elapsed time by incrementing a MED PC variable on a periodic basis with conventional MSN timing statements BTIME must never be altered 124 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Commands that Come Before the First State Set DIM Dimensioning Arrays DIM is used to define dimension the size of arrays Like variables array names are letters of the alphabet however declaring
170. ould execute yet another macro However macro calls must not be recursive or circular For example SQUAD1 MAC must not attempt to play itself by executing PLAYMACRO C MEDPC IV SQUAD1 MAC A subtler situation occurs when two or more macros create a circular chain of macro calls For example if MACRO1 MAC contains a call to MACRO2 MAC MACRO2 MAC must not attempt to play MACRO1 MAC Recursive or circular macro calls are detected automatically by MED PC and result in termination of macro execution In addition an error message is entered in the log 149 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Syntax PLAYMACRO P1 Where P1 The file name of a macro including the full path name Example PLAYMACRO C Mymacros FR mac Play a macro named C Mymacros FR mac EXIT_WHEN_DONE The macro command EXIT_WHEN_DONE is equivalent to the menu command File Exit When All Boxes are Finished The purpose of this feature is to cause MED PC to shutdown automatically as soon as no Boxes are active Syntax EXIT WHEN DONE P1 Where P1 ON or OFF ON enables the feature and sets the checkmark on the corresponding menu item OFF disables the feature and removes the corresponding checkmark from the menu LOG_OPTIONS The display options for the session log may be set via the macro command LOG_OPTIONS This command does not affect what is recorded in the log but rather what is presently displayed in the log In other words the lo
171. ows will present a dialog box indicating the nature of the problem It is generally best to correct the problem and the select RETRY Data will not generally be lost under such circumstances Syntax PRINT must be in output section Comment PRINT takes no arguments Example The following code illustrates a FI 10 interval schedule with two a second reinforcement Each response is added to variable A At the end of 60 minutes a complete annotated printout will occur of all variables even though only the A variable may have a value other than 0 No data is saved to disk Sos Sil 10 S2 S2 R1 ON 1 gt 53 S3 2 OFF 1 ADD B S1 So Si R1 ADD A SX S S 3 sl 60 PRINT gt S2 S2 1 gt STOPKILL Printing Issues Different procedures in the same runtime program may use different formats Different MPC procedures may use different combinations of printer options without interfering with the options specified by other procedures even when different procedures with different combinations of options are being run in multiple Boxes For example if Box 1 uses portrait and Box 2 uses landscape each Box s data will print properly Printouts reflect data values at the moment of actual printing not values at the time of printing requests 116 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL When a request is made to print a Box s data either from the
172. ox Box 1 If you look back at the code you wrote for this pro gram the variable X is the interval value So click in the text Box next to the letter X In the lower right hand corner of the Change Variable window there is a text Box whose title is now X from Box 1 and whose default value is 10 To change this program to an FI 15 replace 10 with 15 and click Issue You now have an 15 You can tell this by looking at the runtime screen Note how the value displayed is now 15 You can run the program if you would like or you can close it now From the Window s Desktop reopen MED PC and reload Tutor05 Now look at the run time screen Note how it reads Fl 10 This is because the Change Variables screen does not change the code only the value of the variable for the procedure currently being run Once you close MED PC the change goes away You can change it back upon reopening the MED PC or even change it multiple times in one session depending on how the code is written In the current example changes made after the START command is issued would result in an error unless the value changed is in MED clock ticks 29 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER SEVEN Decisions Decisions Decisions Introducing the IF Statement Until this point the programs that have been written have been very straightforward They have all followed a pattern of do one
173. r example one might SHOW successive IRT s or other events in a trial up to 200 and then issue CLEAR 1 200 to erase the output of those SHOWs in preparation for the next trial CLEAR may be used to remove any sub range of counters and may take variables numbers calculations or constants as arguments Syntax CLEAR P1 P2 Where P1 number variable array element or constant P2 number variable array element or constant Comment 1 lt P1 lt 200 i e P1 between 1 and 200 inclusive P1 lt P2 lt 200 i e P2 greater than or equal to P1 and less than or equal to 200 It is not necessary to include a CLEAR command to initialize or clear the output left behind by one Box when the Box is reloaded Each Box s SHOW area is automatically cleared when a Box is loaded The following examples are all legal 210 CLEAR 40 50 SX 60 R1 CLEAR A B SX R2 CLEAR FIRST LAST gt SX PRINT PRINT is an output command that may be used to generate printouts By default all variables and array elements are printed when this command is used However considerable control may be exerted over the appearance and contents of printouts through the PRINTVARS PRINTFORMAT and PRINTOPTION commands 115 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC All printing is done through the Windows Print Manager In the event that the printer is offline or out of paper or there is some other problem Wind
174. r than the default macro directory C MED PC IV MACRO Insert Macro Playback Delay This menu option is available only while recording a macro This option is used to insert a time delay into a macro so that the macro playback will pause for the specified time duration The value must be specified in milliseconds No delay will occur while the macro is being recorded Syntax DELAY A Where A The number of milliseconds for which macro playback should be delayed The following example will pause the macro for 1 second DELAY 1000 71 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Example of when to use the DELAY command This command can be useful when it is necessary to wait for a program to complete some action before the macro continues For example an MSN program might be written so that it immediately sets default values for variables It would be convenient to be able to use a macro to load the program allow the defaults to be set and then over ride some of the values Without a time delay between loading the program and over riding the defaults it would be possible to change the variables in the macro and to then have the MSN program change the values back to their defaults Consider the following MSN program FR Program A FR Size 5 5 1 S1 0 01 SET A 10 52 S2 ASR1 ON 1 gt 83 S3 0 1 OFF 1 gt S2 This program arranges a simple FR Ten milliseconds after loading A
175. radio button is already highlighted so all you should need to do is click on the Check Box next to BOX 1 Once both are selected as demonstrated above press the ISSUE button The program is now running Like you did in the previous Tutorial press the Left Lever a couple times to get a few counts on the screen After one minute the House Light should go off the counter will no longer go up with subsequent lever pushes and the information next to Box 1 should be gone and the word Closed should appear This demonstrates that your program was successfully STOPABORTed Keep in mind your data is still in memory and MED PC knows this To test this try to close MED PC You will get a Warning window with the following message Boxes still running data not printed macro recorder is on or data not dumped Close MED PC Choose No Going back to File select Print and check BOX 1 and then click OK Figure 10 Boxes to Print Boxes to Print x MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC You should now have a print out of your data from that Experiment It is up to you if you want to save this data or close without saving Congratulations you have now written three programs 20 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER FIVE Creating a Program for an FR Schedule An Introduction to Z Pulses and Adding a Counter to Inputs Until the last chapter all of our progr
176. rat s weight See Figure 18 146 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Figure 18 Inputbox Parameters for Rat 15 ES Enter weight grams A key thing to notice about the INPUTBOX command above is that the last parameter is Weight Weight is a variable that could have been named anything and is not displayed on the screen However the variable is used to store the value that was entered into the input field by the operator It is this variable 96 Weight that is then used in the SET command as the value to be assigned to the MSN variable A Syntax INPUTBOX P1 P2 P3 P4 Where P1 A quoted string containing the title for the input box displayed at the top of the dialog box P2 The text of the input prompt that appears in the middle of the dialog box P3 A default value for the user s response the operator may modify this value or click OK to accept the default P4 A macro variable in which to store the response Comments There is no limit to the number of INPUTBOX commands that could be included in a macro so it would be feasible to construct an extended interaction with the operator that could be used to set up a series of experimental sessions Macro variables do not need to be declared use any desired word However it would be a good idea to prefix variable names with a symbol such as 96 to make it easier to read and debug the macro The value stored in the macro variable may be used in a
177. re serviced For illustrative purposes assume that the system resolution is set to 10 ms and the control procedure is running in Box 1 and the yoked procedure is running in Box 2 When the control Box issues K1 the K1 is entered into a queue a waiting list Although Box 2 will be serviced immediately after Box 1 within a millisecond the K1 will not be presented to Box 2 Instead when the next interrupt occurs about 10 ms later the K1 is removed from the queue and made available to both Boxes 1 and 2 and Box 2 will then react to the K1 Stated succinctly K Pulses are placed in a queue until the next processing sweep interrupt occurs If more than one Box issues the same K pulse within the same processing sweep only one K pulse will be issued For example if Box 1 is counting the number of K1 pulses that occur and Boxes 2 and 3 simultaneously issue K1 Box 1 will detect only 1 K pulse Similarly if the same K pulse is issued several times within the same output statement the net effect will be the same as if the K pulse was issued only once For example 1 K1 gt SX is equivalent to 1 gt SX When a Box issues a K pulse it is available to all active Boxes on the next processing sweep Also a Box may react to one of its own K Pulses The following procedure could both issue and count the occurrence of 1 93 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC SSL sl 1 K1 gt SX S S 2 ST K
178. require real time to execute for they are executed entirely in the background This means that irrespective of how complex or time consuming the procedure is it will not interfere with the processing of experimental events BKGRND is an output command that merely requests execution of a given User written Pascal procedure Unlike inline procedures the exact time at which a BKGRND procedure is executed is not predictable but there are methods that may be employed to determine whether a BKGRND procedure has in fact executed a technique for doing so is illustrated below BKGRND procedures are not called from MSN procedures via enclosure in tildes Instead one issues the BKGRND output command accompanied by a number from 1 to 10 The numeric parameter indicates which of up to 10 different User written BKGRND procedures should be called As soon as the BKGRND command is executed a request is made to MED PC s internal routines to process the BKGRND request as soon as some processing time is available Under normal circumstances the BKGRND procedure will be executed within a few tens or hundreds of milliseconds depending upon the processor on which MED PC is executing the number of active Boxes etc If MED PC is operating near capacity in the sense that the average cycle time the A indicator on line one of the MED PC runtime screen approaches the resolution value declared during installation then it may take a second or two to be
179. response via interface modules ii K Used to input a signal from another Box iii Used with a numerical value to time in seconds e g 5 iv Used with a numerical value to time in minutes e g 2 v HT Used with a variable to define a timed input vi START A User issued command 2 Z Pulses are ignored during the processing of external inputs 3 Processing is done in a top down fashion A The first State Set listed is processed first followed by the subsequent State Sets in the order LISTED State Set numbers 1 to 32 do not determine processing order B Within a State Set the current State is processed i The current State at the beginning of program execution is that which is physically first in the State Set ii The current State is changed as the result of transitions that occurs when a statement s input requirements are satisfied A state change resulting from an external input becomes the current state for the processing of Z pulses C Statements within a State Set are processed in a top down fashion with the proviso that Z Pulses are ignored during the processing of external inputs 4 Processing of a State stops as soon as a statement s input requirements are satisfied A As inputs K s R s and START s are encountered the counters associated with them are incremented as appropriate As soon as the input side of a statement is satisfied any subsequent counted inputs do not have their co
180. rrently turned on get shut off immediately i e whether the program is in the middle of a procedure or not everything stops In addition the Box s status lines on the monitor are cleared The difference between STOPABORT and STOPKILL is that data collected up to the STOPABORT command can still be salvaged by saving and or printing it i e it is still in memory whereas STOPKILL wipes the data from the memory These commands are special transitions Syntax INPUT OUTPUT gt STOPABORT INPUT OUTPUT gt STOPKILL Real code may look like this 2 gt STOPABORT Or 2 STOPKILL So this is saying after 2 minutes make the transition to stop but leave the data in memory or stop and wipe the memory clean MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC STOPABORTFLUSH Like STOPABORT STOPABORTFLUSH is a special transition that turns off all outputs and stops procedure execution Instead of keeping the data in memory however STOPABORTFLUSH will save the data to the hard drive and then wipe the memory clean Syntax INPUT OUTPUT gt STOPABORTFLUSH Real code may look like this 60 STOPABORTFLUSH Where after 60 minutes the program will stop the Box status will clear the data will be saved to disk and the memory will be wiped clean Multiple Commands So far we have been following the format one INPUT OUTPUT AND NEXT per line Since there are cases where this is not prac
181. s tremendously improve the readability of a procedure and can substantially reduce debugging time They also greatly ease the difficulty associated with the understanding a procedure written by someone else or simply written years earlier A very good practice is to define and use constants to refer to all inputs and outputs Tutorial 1 Writing your first program Now you have the basic terminology and concepts down to write a simple program This will replace the vague notions of Input Output and Next from the previous sections and replace them with concrete example of code In this exercise you will learn how to arrange State Sets States and Statements as well as learn the proper use of Statements Constants Inputs and Outputs For this example we will assume that the operant chamber is equipped with a House Light although any output device can be used The first step is to open TRANS Scrolling the mouse to the menu bar first click File and then click New 2 Please note that any ASCII text editor may be used to type the initial code If a text editor other than the one supplied with TRANS is used however you must save the text as unformatted ASCII or DOS text and it must be saved with the extension MPC where is your filename MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Figure 1 New File Screen Mata untitled Second we will type in our comments Remember it does not matter wha
182. se S3 STOPAI BORT B gt Responses A gt SX B gt S2 SHOW 1 Session N S2 N 60 Q True False 37 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER El GHT An Introduction to Arrays Part One The variables used so far have all been simple non array variables Any variable A to Z can also be designated as an array with from 2 to 1 000 001 elements Although there are certain restrictions when using arrays over all this is a very powerful means of collecting data and controlling your program This chapter will deal with a way that you can use arrays to collect data The General Concept Behind Arrays Once a variable has been assigned or defined as an array the elements within that array are identified with subscripts of that variable where the first element is always numbered 0 zero and each successive element is consecutively numbered The individual elements of an array are always accessed through subscripts In other words the first piece of data in array A would be placed in element 0 and would be referenced by A 0 while the third piece of data would be placed in element 2 and referenced by A 2 If properly defined this could continue up to the 1 000 001 piece of data that would be placed in element 1 000 000 and referenced by A 1000000 This however would have to be the last piece of data for not only the array but for the Box It would also have
183. sequent responses prior to MED PC B Set all elements of A to 0 so that new data may be logged into A Also set I to 0 so that recording resumes at the beginning of A C Issue the FLUSH command to request writing the elements of B to disk as time permits 5 Transition is to S2 so that the 0 1 IRT timer is reset N N N N N N N N N N having an opportunity to transfer the data to disk N N N N N N N whenever a response occurs S HR1 ET A I X X 0 ADD I F 100 Write NotYet Write COPYARRAY A B 100 ZERROARRAY A SET I 0 FLUSH S2 NotYet gt S2 continued on next page 135 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC 0 1 SET X X 0 1 SX This line is the IRT timer Y For some applications ADD X may be substituted Y in the Output Section for SET X X 0 1 Y2KCOMPLI ANT Y2K issues A new MSN directive Y2KCOMPLIANT has been created The command gets placed before the first State Set and takes no arguments The consequence of including this directive is that all years are 4 digits on printouts disk and paper and in all data files Syntax Y2KCOMPLIANT Example DISKOPTIONS FULLHEADERS PRINTOPTIONS FULLHEADERS Y2KCOMPLIANT S S 1 sl 1 gt SX 136 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL APPENDIX
184. t is said in the comment section it is only there for your convenience Figure 2 Comments 2 TRANS IV untitled Filename Tutor01 wpc Date August 8 2004 Next we will define our constants This is a simple program with only one input time and one output the House Light Therefore we will define one constant for the House Light and we will call it House MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Figure 3 Defining Constants 72 TRANS IV untitled Filename Turari mpe Pares August 8 2004 House 1 As previously mentioned time will be our input In MedState Notion we do not write out minutes or seconds Instead seconds are represented by a double quotation mark and minutes are represented by a single quotation mark In this example our first input will be one second 1 and the second input will be five seconds 5 Figure 4 Inputs 7 TRANS IV T untitled This is a sample program Filename utori mpe Dare Awgust Y 2004 House 1 Bl 1 ON Houses HI 5 t OFF House 51 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Save this file as Tutor01 mpc in your C MED PC IV MPC folder Once you are satisfied that the program is saved scroll the mouse across the menu bar click Translation and follow that up by clicking Translate and Compile3 Highlight the filename Tutor01 mpc with your mouse and c
185. t out that the stringing of elements with in the program is permissible i e P2 or P3 may be followed by or to assign a time value to a variable with each operation separated by a comma Variables may also be set to seconds or minutes Assigning a new value to a constant however is not permissible Real code may look like this 1 SET A 5 A B C K SX R3 SET A 5 A B C SX START SET A A 1 One last side note on the set command in the past complicated math expressions had to be broken into pieces MedState Notation has now been extended so that complex expressions e g 1 2 10 4 3 may now be written directly SET A 1 2 10 4 3 Variable Time Inputs T Time may be explicitly defined in terms of minutes 10 ten minutes or seconds with a whole or decimal number 3 5 three and one half seconds Variable time inputs using the T command are also possible Regardless if the time values are explicit or variable time always serves as an input in MedState Notation When it is desirable to change the value of a time variable T is preceded by a variable containing a specified amount of time 5 Any mathematical function provided by Turbo Pascal can also be inserted within a MedState Notation statement using In Line Pascal 25 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Syntax X T OUTPUT gt NEXT Where X is a predefine
186. tarts in the second element of the data area 6 bytes after the start Note that this value is expressed in terms of data elements not bytes In TEST1Rec A has a StartOffset of 0 B has a StartOffset of 1 etc Because G begins immediately after the simple variables its StartOffset is 25 Of course if another array started after G its StartOffset would not be 26 but rather 36 The use of StartOffset is considerably simpler than it sounds and is useful in USER code primarily in conjunction with the DataRec structure defined in a later section PPrintoutDescription and DPrintoutDescription These variables control the appearance of printouts and disk files These variables contain data related to the choices made in the printer configuration dialog and may also be set by MSN program options The structure of these records follows Type PuserPrinterSettings TUserPrinterSettings TuserPrinterSettings Record FWidth Integer Decimals Integer Columns Integer Points Integer Orientation Integer CondensedHeaders Integer FormFeeds Integer FontName PrinterName String End PPrintOptions This variable encodes the printer options selected by entering the PRINTOPTIONS command prior to the first state set Each bit reflects the presence or absence of a particular printer option PPrintWidth This is the total field width including decimal point and decimal digits in which data wil
187. te Sets Syntax Where P1 zNumber constant variable array element or mathematical expression with value in the range 1 32 Warning It is the programmer s responsibility to ensure that P1 is in range 1 32 If this range is not observed particularly if violated with a constant variable array element or mathematical expression no warning message will be generated and unpredictable problems will result when programs are running Examples and Discussion Example A The following example demonstrates the use of Z Pulses to coordinate an FR 10 on input 1 an Fl 30 on input 2 and reinforcement When either schedule is satisfied a Z1 is generated in the relevant output section For example when the FR 10 is completed a Z1 is generated The Z1 then serves as an input to S2 or 3 of 5 5 2 depending on whether or not 30 have elapsed driving S S 2 to S4 Simultaneously the Z1 also serves as an input in S2 of S S 3 causing an output channel to turn on and transition to S3 After 2 a Z2 is generated which then serves as an input to 53 of S S 1 and S4 of 5 5 2 driving them both back to S2 SSL FR 10 on Input 1 91 START gt 52 S2 Z1 gt 53 10 R1 Z1 gt 83 S3 Z2 gt S2 9 8 2 FI 30 on Input 2 S1 START S2 S2 Z1 54 30 gt S3 continued on next page 89 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC S3 421
188. the session For more complex experiments it may be desirable to create a whole series of contingency containing macros named according to the date or phase of the experiment m Include reminders for technicians by using the SHOWMESSAGE command m Rather than having technicians enter parameters via the Configuration Change Variables dialog present custom dialogs that contain meaningful queries that automatically plug the results into the appropriate macro command such as SET Custom dialogs that prompt for inputs may be added to macros using the INPUTBOX NUMERICINPUTBOX and TEXTINPUTBOX macro commands 74 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Tutorial 11 Creating Your Own Macro We are now goin 11 into Box 1 Step 1 Step 2 Step 3 Step 4 Step 5 Step 6 Step 7 Step 8 Step 9 Step 10 Step 11 Step 12 Step 13 Step 14 Congratulations selecting Macro lows g to create a macro that can load the Tutor10 mpc program that we created in Chapter Start MED PC and then start the macro recorder by selecting Macros Turn On Macro Recorder Next select File Open Session menu option Now select the Tutor10 mpc procedure enter 1 for the Subject and Group enter Testing Macro Recorder for the Experiment and select the OK button Close the Open Experimental Session window by selecting the Close button Now select the Macro Enter Macro
189. thing until completed then another then another until either get tired of watching e g the House Light blinking on and off or time is up e g Tutorial 5 By utilizing the command we are able to have programs come to a proverbial fork in the road and the path they take is contingent on whether or not a criterion you have established has been met There are many variations to the IF command and this chapter will deal with three of them As a result there will be three versions of the Tutorial at the end of this chapter so that you can see how they would all work in the code An overview of IF IF is an output command that compares the values of two numeric parameters a numeric parameter and a variable or two variables The basic syntax of IF regardless of function is6 INPUT IF Pl Operator P2 Labell Label2 Labell Output NEXT 1 GLabel2 Output NEXT 2 Where P1 and P2 are constants numbers variables etc Operator is one of six comparisons operators that are permitted Equals Less Than Less Than or Equal To lt Greater Than gt Greater Than or Equal To gt or Not Equal To lt gt and Label is a condition that must be met e g True or False Note the 9 must be present before the Label but the label itself is purely subjective IF as a session timer We have been using a crude version of a session time for a few Tutorials now The set
190. tical e g If you want to ADD to a variable and simultaneously SHOW the variable on the screen MedState Notation allows for the stringing together of multiple commands In order to do this semicolons are used to separate the parameters of a command from the following command Syntax INPUT OUTPUT 1 OUTPUT 2 gt NEXT Real code may look like this R LeftLever ADD C SHOW 1 Count C SX Tutorial 3 Expanding your last program to control itself In this exercise we are going to expand on the program you wrote in the second Tutorial The goal of this program will be to demonstrate how to issue a start command and have your program stop on its own You will also learn what you can do once the program stops Once again open your text editor TRANS and type in the following This is a sample program Filename Tutor03 mpc Date August 8 2004 House 1 LeftLever 1 Sess S1 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Next we want to add the code for the responses the count and the display In order to do this we must add a new State within State Set 1 This is a sample program Filename Tutor03 mpc Date August 8 2004 House zr LeftLever 1 5 5 1 S1 This we will fill in S2 R LeftLever ADD C SHOW 1 Count C SX Now we need to add our start command so under State Set 1 State 1 type START ON House 82 We need to add a
191. to be the only variable defined because the limit is 1 000 001 elements per Box i e one array of 1 000 001 or two arrays of 500 000 each one array of 500 000 plus 5 arrays of 100 000 each etc 7 DIM Command The size of the array must be stated before the first State Set As with all MSN variables the values of array elements are always equal to 0 until explicitly changed In a case where you would want your program to fill in your array with data through the course of an experiment i e the array is to be created empty the DIM dimensional command is very useful Syntax DIM X Where X The number of elements you want defined Comments This command doesn t fit into the INPUT OUTPUT gt NEXT format it must always be placed somewhere before S S 1 Remember arrays start with element zero so if you wanted an array with 25 elements to fill with data you write it as Example DIM 24 7 An attempt to further explain this concept using this example would probably result in more confusion then actual help All that needs to be kept in mind when programming is that the maximum number of variables and variable subscripts is 1 000 001 For example you could define 21 variables and set up 4 arrays with 249995 elements to satisfy the 1 000 001 cap or another program with 16 variables 1 array of 800000 another array of 150000 and 1 array of 49985 Also keep in mind this is only a cap not a requirement there is nothing
192. to disk STOPABORT STOPABORT is the macro equivalent to the MSN command STOPABORT and the menu command File Close Session in conjunction with the Stop Save Data option This command ends an experimental session The data is saved but is not automatically written to disk Syntax STOPABORT BOXES P1 Where P1 One or more boxes to load 138 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Example STOPABORT BOXES 1 3 4 5 Close the sessions in Boxes 1 3 4 and 5 and save the data STOPKI LL STOPKILL is the macro equivalent to the MSN command STOPKILL and the menu command File Close Session in conjunction with the Stop Abandon Data option This command ends an experi mental session and abandons the data the data cannot be subsequently saved to disk Syntax STOPKILL BOXES P1 Where P1 One or more Box numbers Example STOPKILL BOXES 2 Close the session in Box 2 SAVE_MANUAL SAVE_MANUAL may be used in macros to write data to disk This command is the macro equivalent to the menu command File Save Data Manually This command will write to disk any data that were saved with either an MSN STOPABORT command or the menu equivalent Before writing data to disk a dialog box will be presented for each file The dialog box provides the opportunity to change the MED PC generated filename or to abandon the data Note that this command is unnecessary when MSN pro gr
193. touts and data files are unrelated FR R is satisfied by Responses resulting either from keyboard simulation or from satisfying the electrical requirement of an input on the Med Associates interface8 It has two parameters P2 that specifies a logical input number and P1 that specifies the number of responses that must occur to progress to the output section of the statement Syntax 148 2 Where P1 amp P2 number constant variable mathematical expression array element or special identifier 79 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Comments P1 defaults to 1 if not stated P2 must be a legal input in the range 1 80 defined in the MPC2INST DTA file Examples and Discussion 5 R3 ON 1 SX In the preceding example Output 1 will be turned on after five responses have occurred on Input 3 If P1 is omitted as in R3 ON 1 SX P1 defaults to 1 and the first response will turn on Output 1 P1 is reset upon entry to a state R is unrelated to the variable R A common misconception of beginning MSN programmers is that an external input may be detected in only one State Set at a time In actuality a single R K or START may be detected and processed in multiple State Sets without penalty of efficiency or processing speed In the following example an occurrence of 481 would place three SHOW s on the screen S S 1 S1 R1 ADD A SHOW 1 First A SX S S 2 1 R1 AD
194. trying to determine why a particular program does not perform as anticipated Time Based Interrupts Many of the features of the current version of MED PC are possible because it is an interrupt based system Most of the time MED PC is occupied by performing non critical non experimental operations such as responding to user keystrokes displaying the output of SHOW commands writing to disk and the printer etc Periodically these activities are interrupted and attention is shifted to active Boxes These interrupts occur immediately regardless of what actions the computer is performing Even in the middle of writing to disk the occurrence of an interrupt immediately shifts attention to the experimental Boxes The frequency with which interrupts occur and Boxes are serviced is equal to the system resolution value declared during system installation with the Hardware Configuration For example on a system installed with 10 ms resolution the Boxes are serviced every 10 ms In the discussions that follow it will be assumed that a system with 10 ms resolution is applicable These timed based interrupts are generated by crystal controlled interrupt hardware on the interface card that plugs into the chassis of the PC Noting And Reacting To Inputs As soon as an interrupt occurs any ongoing activity is suspended and processing of all active Boxes commences Before any individual Boxes are processed the status of all inputs is read an
195. uming a R1 has occurred prior to the initiation of the current sweep the internal variable that tracks the total number of responses on R1 in 5 5 5 Sl is incremented The current State remains S1 since two Rl1s are required to cause a transition to S2 Additionally processing of the State proceeds downward to line 5 because the input requirement was not satisfied and no transition either to SX the same State or to a different State has occurred If an R2 occurs the R2 input count will be incremented but since three R2s are required processing continues within S1 Line 8 is then processed and if Z1 is issued i e if 1 second has elapsed a second sweep of the procedure begins in which only Z pulse inputs are processed Now processing of S S 5 Sl issues a transition to S3 not shown If S S 5 Sl is re entered all counters are reset to zero Example 5 5 5 Line 1 S1 Line 2 Z1 gt S3Y Line 3 24R1 S2 Line 4 3 R2 54 Line 5 S 9 6 Line 6 Sis Line 7 1 Z1 SX Line 8 63 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC A Review of the General Principles When reading this section there is something very important to keep in mind Although it may take up to a few minutes for us to read this review all of this is occurring in the FIRST MILLISECOND of each 10 ms interrupt 1 External inputs are processed first A External inputs refer to i HR Used to input a
196. unters incremented i This is true irrespective of whether the satisfied statement is performing a transition to SX the same State or a different State ii Although there are no counters associated with time based inputs the effect of a time based transition is analogous to that of the counted inputs in that satisfaction of a time based input also halts further processing of the present State 5 All Z Pulses issued in the output section of statements during the processing of external inputs are noted and held for use as input during the Z pulse processing phase A Only one instance of a given Z pulse is recorded during processing of external inputs but more than one different Z pulse may be counted If for example a time based statement issues two ZI s in its output section the effect of doing so does not differ from issuing a single Z1 Similarly issuing Z1 from multiple States is equivalent to issuing a single Z1 64 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL 6 After the completion of processing of external inputs one or more passes is made through the State Table provided that at least one Z pulse was issued during the external processing phase 7 The current State of a given State Set during Z pulse processing is that State it was left in at the conclusion of external input processing Thus if the current State of a State Set changes from State 1 to State 2 during external processing Z Pulses will be processed
197. up has been after one minute stop everything no matter what Since we were not running very complex programs you have probably not noted a problem with this If there were a lot of things going on in the program it would be possible for the screen data not to agree with the saved data the saved data would be higher and correct but the screen may not have time to update or the program may stop in the middle of an event like issuing a reward Neither of these are ideal situations 6 Please note there are three syntaxes that can be used to write an IF statement This chapter will only show how to use the most complete syntax that can be used in any situation As time goes on and you become more comfortable with programming in MedState Notation you may choose to look in Appendix A MedState Notation Commands for examples of how to use the other abbreviated syntaxes 31 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Assume that your experiment is running for sixty minutes real code may look like this 929 55 Si 1 ADD N IF N 60 gt M TrueEnd FalseContinue GEnd Z5 gt 52 Cont gt SX S2 3 gt STOPABORT What this is doing is adding the variable N every second and then converting the new value N to minutes Since your session timer represented by variable M is set for 1 hour or sixty minutes this statement is set to stop the program at an hour or any fraction above it If the s
198. up on MedState Notation The experienced user who is switching from MED PC for DOS or WMPC to MED PC Version IV may want to look at the first Tutorial to see the differences in translating and compiling in MED PC Version IV and any refreshers needed for codes can be answered in Appendix A There is also a new chapter on how to write and use Macros Software Backup In this age of hard drives and CD ROMS many people overlook the need to back up their software We at Med Associates however advise everyone to make a backup of their programs and or data on a daily or weekly basis Before Getting Started In order to get the most out of the Tutorials at the end of each chapter we recommend that MED PC Version IV be installed on the hard drive and configured for the existing hardware before starting to read this manual If necessary consult the MED PC Version IV manual for step by step directions MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER TWO An Introduction to the Basic Concepts of Programming State Sets MedState Notation procedures are organized into blocks of code called State Sets There may be as many as 32 State Sets within a single procedure with each State Set functioning autonomously with apparent simultaneity as though each is an independent program Within MedState it is represented by the S S where is a number between one 1 and thirty two 32 1 There may be no decimal point in the
199. ure plus a txt extension and will be saved in your MED PC IViData folder Example MED PC IV DATA animal 4500 txt The data file consists of the elements of array C MED PC automatically passes the Box number to a BKGRND procedure when it is called but note that no other parameters are passed to the procedure As a result all parameters used by the procedure must be contained within MSN arrays and variables Using D as a flag to indicate completion of the BKGRND procedure and reading data directly to and from C illustrates this aspect of utilizing BKGRND procedures 159 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Another mandatory aspect of employing BKGRND procedures is that the last line of the procedure MUST be BackRequest Box 1 False where the 1 is the number of the BKGRND procedure notice that both BKGRND procedures shown below include this line except that the second subscript varies as a function of the number of the BKGRND procedure This statement is important for it informs MED PC that the procedure has finished executing for the requested box The MSN code below also illustrates writing a data file at the end of the session Importantly notice that transition to STOPABORT does not occur until D has been set to 1 after being cleared before the request for BKGRND 1 this ensures that the procedure is executed before STOPABORT MSN Illustration using BKGRND Procedure calls DI
200. utput Section Any legal output command s Transition Any legal Transition such as SX STOPABORT STOPKILL or S1 532 given that 51 532 is a valid state within the same State Set Comments Nesting is permissible using the first Syntax Stringing is not permitted Labels are arbitrary but must begin with When a label is in the input section of a statement it must be followed by even when there is no output section to the statement Examples and Discussion Example A Because labels are arbitrary spelling does not need to be consistent If the probability gate evaluates as TRUE then the following statement on the next line is executed If the probability gate is FALSE then the statement two lines down is executed Sa Sl R1 WITHPI 5000 Reinforcement No Reinforcement RF ON 1 gt 52 NORF gt SX S2 2 OFF 1 gt S1 In Example A every response in State 1 has a pseudo randomly determined probability of 5000 10000 5096 of causing transition to the true alternative GRF in which case reinforcement is delivered and transition to State 2 will occur Changing the parameter from 5000 to 1000 would specify that response 1 would have a 1096 1000 10000 probability of resulting in transition to State 2 Example B An error which TRANS does not detect but which will cause programs to malfunction is to have a transition arrow after labels For example 1 WITHPI 1000
201. value will be ignored by MED PC reverting your array back to subscript zero Array P2 may be declared with LIST or DIM statement Examples and Discussion Running the following procedure would result in the following pattern of outputs 1 2 3 1 2 3 1 2 Su ens Example A LIST A 1 2 3 SeSel LIST B A K ON B gt 2 S2 1 OFF B gt S1 In the first LIST statement above an array named A is declared The lowest element of an array is always referenced as Element 0 Element 0 contains the value 1 Element 1 contains the value 2 and Element 2 contains the value 3 108 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL One second after this procedure is loaded the statement LIST B A K sets B equal to the value of element K of array A Since all variables are automatically set to 0 at the beginning of program execution the value of B is set equal to A 0 and ON B causes output 1 to be turned ON One second later output 1 is turned OFF in State 2 Following assignment of the value of A K to B 1 is automatically added to the value of K so that the next time the list statement is executed the array index K for array A is equal to 1 giving B a value of 2 to turn ON Output 2 The LIST command continues to select successive array elements until the end of the list is reached When the last element has been accessed the array index K is reset back to 0 Example B LIST A 5
202. ver the default settings may be over ridden for specific Boxes by subsequently executing BOX_PRINTER_SETTINGS from within a macro or by using the equivalent menu selection or equivalent MSN commands BOX_PRINTER_SETTINGS and DEFAULT_PRINTER_SETTINGS provide control over six aspects of printing 1 PRINTWIDTH PRINTWIDTH is the number of spaces occupied by each number on the printout For example a width of 12 would permit display of up to 11 digits plus a decimal point The number of digits to the left and right of the decimal point are controlled by the PRINTDECIMALS parameter below The default PRINTWIDTH is 12 2 PRINTDECIMALS PRINTDECIMALS controls the number of digits displayed to the right of the decimal point The default value of three specifies that three digits will be printed to the right of decimal points 3 PRINTCOLUMNS PRINTCOLUMNS specifies the number of columns of data that will be printed on the printout Five columns are printed by default 4 PRINTPOINTS PRINTPOINTS specifies the point size of the characters printed The default value is 12 5 PORTRAIT or LANDSCAPE These mutually exclusive alternatives determine whether the paper is oriented in Portrait upright or Landscape sideways mode The default is PORTRAIT 6 FORMFEEDS or NOFORMFEEDS These mutually exclusive alternatives determine whether the output from each Box is printed on a fresh page The default is NOFORMFEEDS indicating that multiple data sets
203. w This is because the STOPKILL command does not get sent until you click OK Congratulations you just wrote ran and closed your first program in MedState Notation using MED PC Version IV MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL CHAPTER THREE An Introduction to R SX ADD and SHOW Commands In the previous chapter we used time as our only input Although time is used quite often as inputs what may be of more interest to us as researchers is the input from our test animal on a response lever lickometer nose poke etc Also remember back to what was being displayed on the MED PC window as you ran your first program not much This chapter will explain how to write code for the recording of mechanical inputs as well as how to display the information on the screen FR R is in the simplest terms the code for the response of a test animal on a Med Associates input device e g a lever In order for R to have any meaning in a program you must specify what device the response is on as well as the number of times the response must happen So the syntax is Number of times R Device that is collecting input OUTPUT gt NEXT So real code may look like 5 R LeftLever gt S4 Which means After five presses of the Left Lever make the transition to State 4 Or dR RightLever ON Pellet 52 Which means After one press of the Right Lever MedState Notation has a default of one for R
204. whenever any of the following conditions are met 1 The print request is issued while the Box is still running 2 The Box is not running but the Box was terminated by an ABORT as opposed to KILL and the Box has not been reloaded and the data has not yet been written to disk The moment data is written to disk or abandoned print requests will no longer be honored However if a print request has been issued one may immediately write data to disk and or reload the Box without adversely affecting the printout the request will be honored Note though that in systems running under tight memory constraints the release of memory normally associated with writing data to disk will be delayed until the data is finished being printed 3 The Box is not running but a request to print the Box s data is still in the print queue This feature may be of little practical value Example 60 PRINT gt STOPKILL Y Data will print even though transition is to STOPKILL Y because the print request was issued before the STOPKILL Miscellaneous The End Date and End Time indicators on printouts will be set to 0 when a print request is issued from within a procedure or when a print is issued from the keyboard and the Box is still running unless the Print the time not 00 00 00 data option is selected in the Hardware Configuration Utility FLUSH Under typical scenarios MSN programs are designed such that data is written to disk as t
205. whether the data may be written to disk automatically versus requiring user intervention The following fields comprise the Description record Source This string contains the name of the MPC procedure running in the current Box StartMonth StartDate StartYear EndMonth EndDate EndYear SubjectNumber ExpNumber GroupNumber BoxNumber StartHours StartMinutes StartSeconds EndHours EndMinutes and EndSeconds These variables comprise the special identifiers described in detail in Appendix A DataRec Universal Access to a Box s Data The Definition of DataRec DataRec Record Description DescriptionRec Header HeadRec BigArr Array 1 1000500 of Extended End 168 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL Explanation of DataRec DataRec is a record definition that is not directly involved in defining the data structure for MPC procedures but is compatible with all possible data definitions for MSN procedures The fields of the nested Description and Header records provide access to all information about printing and disk options variable definitions etc as described above BigArr is an array that starts at the same address as the data for a given Box A Box s variables and array elements may be located and accessed within BigArr by using the information contained within VARS The primary purpose of DataRec is to provide a universal mechanism for accessing the data associated with a Box The key t
206. wrong with setting up a program with 3 variables and an array with 50 elements 39 MED PC IV PROGRAMMER S MANUAL MED ASSOCIATES INC Using An Array To Record I RT s An especially useful application of an array is the recording of Inter Response Time IRT data If your array is dimensioned smaller than the number of IRT s you will get an error message from MED PC when an attempt is made to use an array element that does not exist Sealing An Array If defining your array too small results in an error then it only makes sense that you would want to typically pad your array with more elements than you expect to use But what if for example you assign the array to have 500 elements DIM 499 but your animal only responds 25 times The result would be 25 points of data followed by 475 empty elements represented by zeros Although better than an error message this is hardly ideal The secret is to seal your array so that only data recorded is displayed and all superfluous elements are excluded from the data file This is done with the MedState Notation 987 987 command In order to use this command it must be done in conjunction with the SET command e g SET X 987 987 The real code would look like this S2 dR LeftLever SET C I T T 0 ADD 1 IF B gt Q GTrue GFalse True S1 False SET C I 987 987 gt SX In this example which will be seen again in the Tutor
207. ystem in any way but alerts the user to possible procedure shortcomings before they become a problem Remember this is an interrupt based system Interrupts are extremely precise and all external inputs both responses and timed events are serviced prior to further processing 68 MED ASSOCIATES INC MED PC IV PROGRAMMER S MANUAL At the risk of making MED PC appear less accurate than it really is the following illustration demonstrates a worst case situation for MED PC Consider a computer that just barely keeps up with the 10 millisecond resolution set during installation and 16 Boxes are running the same procedure This procedure is designed to turn an output alternately turned on and off every 10 ms The results are that Box 1 performs exactly as expected but the timing in Box 16 is somewhat less precise This is because Box 1 is always serviced immediately after initiation of a sweep In contrast the processing of Box 16 is dependent on the amount of time it takes to process the preceding 15 Boxes on each sweep A scenario in which a sweep is initiated illustrates the potential problems that this could pose and Boxes 1 through 15 require 9 ms to process Box 16 s output would be toggled on 9 ms after initiation of the sweep and the next sweep would occur 1 ms later If on the second sweep Boxes 1 through 15 required very little time to process such that Box 16 is serviced 1 ms after initiation of the sweep its output would be turned
Download Pdf Manuals
Related Search
Related Contents
取扱説明書 スライドベーン流量計 D6200 WiFi DSL Modem Router User Manual Colocación de las pilas Componentes Configuración Calibración Bedienungsanleitung Bedienungsanleitung Heavy Duty Programmable ACTi I51 surveillance camera Emerson MPR15 Series Switch User Manual Sioux Tools MICRO POLISHER 5202 User's Manual Windsor MINI CARPET EXTRACTOR MPRO 10080390 User's Manual Untitled Copyright © All rights reserved.
Failed to retrieve file