Stimulus presentation with variable ISI and ITI


Author
Message
flash4life
flash4life
Associate Member (190 reputation)Associate Member (190 reputation)Associate Member (190 reputation)Associate Member (190 reputation)Associate Member (190 reputation)Associate Member (190 reputation)Associate Member (190 reputation)Associate Member (190 reputation)Associate Member (190 reputation)
Group: Forum Members
Posts: 1, Visits: 1

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


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K

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.



zan_i
zan_i
Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)
Group: Forum Members
Posts: 2, Visits: 1

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


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K

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).


zan_i
zan_i
Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)Respected Member (392 reputation)
Group: Forum Members
Posts: 2, Visits: 1

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>


GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search