Skip to content

Self-paced reading

Present sentences one segment at a time, advanced by the space bar, with a reading time recorded per segment and sentences shuffled as whole units.

Use this for the moving-window reading paradigm: the participant reveals a sentence piece by piece with the space bar, and the time spent on each segment is your measure of processing load. Putting the whole sentence on one screen loses exactly that per-segment timing, and shuffling all rows freely would tear sentences apart mid-stream. One row per segment gives you one reaction time per segment, and a structure spec keeps each sentence’s rows together while the sentences themselves change order between participants.

typecontentstimFormatstim1sentencetrialOrderkeyboardkeybutton1
instructionsRead each sentence one piece at a time. Press SPACE to reveal the next piece. After each sentence, answer the question with Y or N.NEXT
testwordThe lawyer11: groupShuffle sentencespace
testwordquestioned the witness11space
testwordwho seemed nervous11space
testwordthroughout the trial.11space
testwordDid the witness seem nervous?11y ny
testwordThe gardener21space
testwordwatered the roses21space
testwordthat had wilted21space
testwordin the summer heat.21space
testwordHad the roses wilted?21y ny
testwordThe pilot31space
testwordchecked the instruments31space
testwordbefore the storm31space
testwordreached the airfield.31space
testwordDid the pilot check the instruments?31y nn

Each segment is one test row with stimFormat = word, so the segment text stays on screen until the space bar is pressed, and each row’s reaction time in the results is the reading time for that segment. The comprehension question is just another test row in the same file, with y n on keyboard and the correct answer in key, so comprehension accuracy is scored like any other trial.

The sentence column tags every row of a sentence, question included, with the sentence’s number. All rows carry the group tag 1 in trialOrder, and the first row adds the structure spec groupShuffle sentence (specs go on the first row of the group only; the other rows take the bare tag). The spec is what randomises the group: a trialOrder group keeps its trial-file order unless a word moves it, and groupShuffle supplies its own randomness, so it needs no separate shuffle word. At runtime the sentences are shuffled as whole units: sentence order varies across participants, but within each sentence the segments and the trailing question keep their file order.

The question rows must be test rows, not form rows: a spec run is split into separate pools wherever the type changes, so a form row in the middle would break the sentences into fragments that no longer shuffle as units.

The sentence column itself is a custom column; it changes nothing on screen and passes through to the results, where it labels every segment with its sentence for analysis.

  • Scenario-level units: tag all sentences of one scenario with a shared scenario column and spec groupShuffle scenario instead, and whole scenarios shuffle while everything inside keeps its order.
  • randomBlock does the same unit-shuffle without the spec machinery (same number on every row of a sentence): use it when the file mixes trial types inside a unit, since it does not split at type boundaries. The spec form used here composes with a sample or groupSample spec in the same trialOrder cell when you need one too (structure specs cannot mix with select, nor with the ordering constraints).
  • Enforce a minimum reading time per segment with a min: response window (for example responseWindow = min:200): a press in the first 200 ms is buffered and only advances the segment when the minimum ends, so a held-down or bounced space bar cannot rush through segments faster than the minimum.