Skip to content

SOA manipulation

Vary the interval between prime onset and target onset across conditions using per-screen presTime lists.

Priming and cueing designs often manipulate stimulus-onset asynchrony (SOA): how long after the prime appears the target follows. Writing a single duration into presTime cannot do this, because it only times one screen and says nothing about when the next stimulus starts. The clean construction is a two-screen trial where the first entry of a per-screen presTime list is the SOA itself. If you also need a visual mask between prime and target, start from the Masked priming recipe instead.

typestimFormatstim1stim2presTimeISIresponseWindowkeyboardkeycondition1condition2
testwordDOCTORNURSE100;50002000f jfsoa100related
testwordTABLENURSE100;50002000f jfsoa100unrelated
testwordBREADBUTTER200;50002000f jjsoa200related
testwordCLOUDBUTTER200;50002000f jjsoa200unrelated
testwordKITTENDOG400;50002000f jfsoa400related
testwordPENCILDOG400;50002000f jfsoa400unrelated

Participants judge whether the target (the second word) names a living thing, F for living and J for not.

ISI set to 0 is what makes this a two-screen trial: stim1 (the prime) takes screen 1, and the single entry pushes stim2 (the target) onto screen 2. A 0 is a real break with a zero-millisecond gap, so the target replaces the prime immediately. That is the whole trick: with no gap, the SOA equals the prime’s display time, and the first entry of the presTime list sets it per row. 100;500 gives a 100 ms SOA, 400;500 a 400 ms one, each tagged in condition1 for analysis; condition1 and condition2 are pure metadata, echoed into every saved results row.

The second presTime entry keeps the target up for 500 ms. The numeric responseWindow of 2000 opens at target onset and closes 2000 ms later, so responses arriving after the target has been hidden still count, and reaction time is measured from target onset, which is exactly where an SOA design wants the clock to start. A trial with no response records timeout.

Two presTime rules keep the file honest. First, entries that are not numbers are dropped silently, shifting every later duration one screen earlier, so a stray typo in the first entry would quietly turn your SOA into the target duration. Second, you do not have to trust the nominal values: display times are quantised to screen refreshes, and test trials record the per-screen times actually shown in the presTime_ms results column, so the realised SOA of every trial can be checked in the results.

  • Put the manipulation in the gap instead: keep presTime at 100;500 and vary ISI (0, 100, 300); the SOA is then the first presTime entry plus the ISI gap, with a blank screen between prime and target.
  • Draw the SOA at random per row with a presTime first entry of 100|200|400; the draw happens once per row when the experiment loads, not per presentation.
  • Tighten or relax the deadline by changing the responseWindow timeout; recorded timeout responses show when it is too strict.
  • For a masked variant, switch to image stimuli and add a mask; the mask never loads on word trials (see the Masked priming recipe).