Loops
How loops work
Experiments done with infants and toddlers usually consist of a series of trials, in which the stimuli used or side of presentation may vary from trial to trial, but the core structure of every trial is the same. Rather than writing a long protocol file that separately specifies every trial with a unique set of steps, you can specify the trial structure once, then use a loop to repeat it.
A LOOP statement will cause the steps in between the specified step number and the step in which the LOOP
statement is defined to be executed. This occurs repeatedly, until the loop statement's terminating conditions have been satisfied.
The following example is the entire test phase of a preferential looking study with trials shown in a fixed order. The entire study runs via looping over a set of 3 steps that comprise an attention getter and a trial.
When running the protocol, we begin, as always, at STEP 1
. The test phase starts, and the first attention getter video plays until the experimenter indicates the participant is ready for a trial. The first trial stimulus is chosen from the list of stimuli, displayed, and played to the end. The loop step (the step that contains the LOOP
statement) is STEP 5
. When it is reached, execution jumps back to STEP 2
, and proceeds again through steps 3 and 4, and onto 5. Upon reaching the LOOP
statement again, it again jumps back to 2, and proceeds through the steps. This repeats a total of 23 times, displaying a total of 24 attention-getters and trials (the one original execution of steps 2-4, plus the 23 times it looped over that sequence.)
Loops can be nested within each other, allowing for concise specification of experiments with a block structure. Below is the test phase of a headturn preference study that consists of 3 blocks. Each block is comprised of 4 trials, for a total of 12 trials. Before each trial, the participant is oriented to a neutral position (center), and then the trial begins once they reorient in the direction where the light has begun flashing and from which the audio will play.
Steps 11-15 specify a sequence of centering the participant and playing a trial, which is a unit that repeats throughout the experiment. These steps are looped over in STEP 16
, which specifies to execute this sequence three additional times so that the first block contains four trials. Once the first block is finished, the LOOP
statement in STEP 17
is reached, which has it jump back to STEP 10
to select the next block of stimuli to present. The inner loop in STEP 16
is executed just as before, playing the four trials in this block also. STEP 17
is reached again, and execution jumps back to STEP 10
to select the third block, and the nested loops work in the same way to play four trials here. Now that STEP 17
has had its loop repeated the required two times, we move to STEP 18
and the phase ends.
Be careful with trial/phase start and stop flags, in relation to where loops are placed. In the above example, STEP 9
contains only the flag to start the test phase, and we loop to STEP 10
to repeat a block. If we had started the test phase in the step that was looped to, we would repeat it at every block - and we want the phase to only start once. Therefore, it should be outside the loop.
Loop terminating conditions
Just like step terminating conditions, loop terminating conditions can be combined together for more complex end conditions. They can be joined by an AND, such that both conditions must be met:
Or by an OR, such that only one condition need be met before ending the loop.
TIMES looped
This loops back to the specified step, executes all the intervening steps in order, and loops again until it has completed the entire loop the specified number of times. For example,
The above loop would execute STEP 1
five times, in addition to the first execution before the loop step was reached. Therefore, we would select and display an image from the group dogs
a total of 6 times.
EMPTY
Rather than specifying a set number of times to loop, you can also loop until a particular group has no remaining options for selection.
For example,
The above loop would run until all the tags in dogs
have been marked as selected, and none are eligible to be chosen by the TAKE
statement - in this case, the loop would repeat 5 times, in addition to the first selection, for a total of 6 items displayed.
TIME elapsed
It is also possible to execute a loop until at least a certain amount of time has elapsed since the looping began.
In the above example, images are selected randomly (with replacement) and displayed for 5 seconds each, with the section looped for a total of 55 seconds. Importantly, the timer for the loop begins when the UNTIL
statement is reached for the first time - which is after the first tag from dogs
is selected and displayed for 5 seconds. Therefore, images of dogs are displayed for a total of 60 seconds.
Like all loop termination conditions, UNTIL TIME
conditions are only evaluated when execution reaches the loop step (STEP 2
, in the above example) again. If the specified time is met in the middle of a loop sequence, the current run of the loop will be allowed to finish before the terminating condition is met and execution continues to later steps in the protocol file.
As an illustration of the above point: If each image in the example above were shown for 6 seconds rather than 5, the 55-second timer would be met 1 second into displaying the 10th image (9th from within the loop). This last image would continue to be displayed for its full 6 seconds, then the timer would be checked upon reaching STEP 2
. Therefore we would be displaying images for a total of 66 seconds (6 from the initial execution of STEP 1
+ 55 seconds of the loop + 5 seconds to finish the in-progress loop sequence).
KEY
As of BITTSy version 1.33, you can also loop until a particular key is currently active.
It is important again to note that loop terminating conditions are evaluated only when execution reaches the loop step. Therefore, if the loop was set to run UNTIL KEY X
, and the experimenter pressed X followed by another key while the loop was still executing, the loop would not end: when the terminating condition was checked, some other key was the most recent key.
This terminating condition is useful in cases in which you wish to use a loop to run through a set of trials until an experimenter makes some judgment that the child is "done." For example, this could be used for an experimenter to end a phase if some more desirable terminating condition (e.g. accumulated looking time) cannot be met, while still allowing the child to continue to participate in the subsequent parts of a study. It can also be used for studies in which the variable of interest is how many trials are shown before the child makes some overt behavioral response, such as imitating a person on a screen, pointing, or saying an answer.
Looking-controlled end conditions
Often we want to repeat the presentation of a stimulus or set of stimuli until the child has reached a particular level of attention toward the stimuli - either they've looked a set amount, or they've reached a particular point of boredom or inattention. This can be achieved by setting up these trials within a loop, and looping until some looking-controlled end condition is met.
TOTALLOOK
This loop terminating condition is met when the time a participant spends looking toward a tag, totaled across all its presentations in a given phase of the experiment, meets the given threshold.
The example above is a common one used in HPP studies, where two training stimuli alternate until both reach a fixed criterion. But this has at times been criticized because if one of the two music files reaches criterion and the other does not, it will continue to loop - and the loop could mean that it keeps playing the stimulus that had already reached criterion, rather than the one that still needed to do so. This could result in OVER familiarizing one of the two stimuli (or habituating to it) before the other one reaches criterion. This can be solved with JUMP
statements - see the example here for a solution to this exact problem.
TOTALLLOOKAWAY
This works identically to TOTALLOOK
, but rather than totaling up time when an experimenter indicated the participant was looking at the given tag as it was presented, uses the time spent not looking toward the tag. Time when the tag was not active (not being displayed/played) does not count as time looking away from that tag; only time when the child could have been looking at it but was recorded as looking some other way (with any key that was not assigned to the tag's current side) is counted.
CRITERIONMET
See the section on habituation for more about the CRITERIONMET
condition.
Last updated