Millisecond Forums

Stimulus presentation with variable ISI and ITI

https://forums.millisecond.com/Topic10374.aspx

By flash4life - 5/1/2013

Hello,


if this question has already been answered before, I apologize, but I did not find any appropriate solution for my problem yet - therefore I would be glad, if someone could help me! I just started working with Inquisit, therefore my knowledge is very limited.


We want to have trials, where the interstimulus and intertrial intervals are variable - e.g. ISI 900-1500 ms and ITI 1500-2000ms.


We tried the following (which did not work):


<expressions>
/ randomISI = 3400 + round(rand(900, 1500))
/ randomITI = 3400 + expressions.randomisi + round(rand(1900, 2600))
/ trialtimeoutRandom = (3400 + expressions.randomiti + expressions.randomisi)
</expressions>


<trial soznegselbst>
/ stimulustimes = [0=fixation; 500=erasefixation, textsocialselbst; 3400=erasewords; expressions.randomISI = facesneutral; 5400 = erasepics]
/ trialduration = expressions.trialtimeoutRandom
</trial>


First stimulus is "textsocialselbst", which should be erased after 2900ms (therefore, at 3400 "erasewords" appears). The next stimulus is a picture (facesneutral), which should appear anytime between 4300 and 4900 (randomISI should specify that time). The picture should be erased after 500ms, the time until the next trial should vary between 1900 and 2600 ms.


Inquisit produces the following error message when I try my approach: "Missing ',' or '-' before ' expressions.randomISI '." I guess the reason is that I cannot put expressions.randomISI as a time-value into the /stimulustimes code line. Does anybody know a solution for that issue?


I hope that I managed to describe my problem properly so that somebody is able to help me!


Thank you very much in advance.


Best regards,
Fabian

By Dave - 5/1/2013

For the 'facesneutral' and 'erasewords' stimuli at least you will have to work with the setstimulustime() function which can be found in the documentation for the <trial> element.


You cannot use expressions directly in /stimulustimes.


By zan_i - 9/3/2013

Fabian,


I have been having a similar issue. In my case, I want trials where the fixation cross duration is variable between 750 and 1500 ms. Did you ever find a solution to this problem?


Thanks,


Zan

By Dave - 9/3/2013

As already mentioned in my reply: You can achieve dynamic stimulus timings via trial functions such as setstimulustime(), insertstimulustime() etc. as detailed in the language reference for the <trial> element.


EDIT: Here's a quick, self-contained example illustrating one way to use these functions:


<list fixationduration>
/ items = (500, 5000, 10000)
</list>


<trial mytrial>
/ ontrialbegin = [trial.mytrial.setstimulustime(text.a, list.fixationduration.nextvalue);
    trial.mytrial.insertstimulustime(text.b, list.fixationduration.nextvalue)]
/ ontrialend = [trial.mytrial.resetstimulusframes()]
/ stimulustimes = [0=fixation]
/ validresponse = (57)
</trial>

<text fixation>
/ items = ("+")
</text>

<text a>
/ items = ("A")
/ position = (45%, 50%)
</text>

<text b>
/ items = ("B")
/ position = (55%, 50%)
</text>

<block myblock>
/ trials = [1-3=mytrial]
</block>


Alternatively, you can simply have your fixation cross displayed by a separate <trial> element and control / change its duration via the /trialduration attribute (which does accept variables).

By zan_i - 9/4/2013

Thanks for this! I will try this method, too. I just had success with using fixation cross as a separate trial, then blocking them such that the even numbers were fixation crosses and odd numbered trials were my stimuli/"real" trials. Here is my abbreviated syntax for future viewers:



<expressions>


/fixduration = rand(750,1500)


</expressions>



<trial fixation>


/stimulustimes = [0=fixation]


/trialduration = (expressions.fixduration)


/correctresponse = (noresponse)


</trial>



<trial ANG_congR>


/stimulustimes = [0=ANGfacesR,NEUfacesL; 125=eraser,probeR]


/correctresponse=("I")


/validresponse=("E","I")


/pretrialpause=0


/timeout=3000


</trial>



<block practiceblock>


/trials=[1=blockpause; 2,4,6,8,10,12,14,16,18,20=fixation; 3,5,7,9,11,13,15,17,19,21=noreplace(ANG_congR)]


/preinstructions=(intro1, intro2, intro3)


/recorddata=false


/postinstructions= (begin)


</block>