Millisecond Forums

Eyetracking port (event) markers

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

By esummerell - 2/22/2022

Hi there, 

I am trying to add in event markers for an eyetracking study, but am having trouble getting them to reliably display. For example, with the code below I cannot get markers to send for the stimulusframes where inquisit is pulling a stimulus using the 'noreplacenorepeat' function. What am I doing wrong? Please help :) 

Thanks,
Liz

<port drink>
/port = eyetracker
/items = (1)
</port>

<port face>
/port = eyetracker
/items = (2)
</port>

<port mask>
/port = eyetracker
/items = (3)
</port>

<port blank1>
/port = eyetracker
/items = (4)
</port>

<trial practice>
/ontrialbegin = [values.picturename1=picture.1practice_WM.currentitem]
/stimulustimes = [0=noreplacenorepeat(picture.Neutraldrinks), drink; 1700=blank, blank1; 1800=noreplacenorepeat(picture.1practice_WM), face; 3600=picture.mask_practice_WM, mask]
/timeout = parameters.stimulusduration
/ ontrialend = [values.actual_crowd_mean=picture.1practice_WM.currentitemnumber; values.drink=0; values.crowdgender=2; values.crowdrace=1; values.rt = likert.practiceangerlikert.latency;
values.picturename1=0]
/ recorddata = true
/ screencapture = true
/ branch = [return likert.practiceangerlikert]
/ datastreams = (eyetracker)
</trial>
By Dave - 2/23/2022

esummerell - 2/23/2022
Hi there, 

I am trying to add in event markers for an eyetracking study, but am having trouble getting them to reliably display. For example, with the code below I cannot get markers to send for the stimulusframes where inquisit is pulling a stimulus using the 'noreplacenorepeat' function. What am I doing wrong? Please help :) 

Thanks,
Liz

<port drink>
/port = eyetracker
/items = (1)
</port>

<port face>
/port = eyetracker
/items = (2)
</port>

<port mask>
/port = eyetracker
/items = (3)
</port>

<port blank1>
/port = eyetracker
/items = (4)
</port>

<trial practice>
/ontrialbegin = [values.picturename1=picture.1practice_WM.currentitem]
/stimulustimes = [0=noreplacenorepeat(picture.Neutraldrinks), drink; 1700=blank, blank1; 1800=noreplacenorepeat(picture.1practice_WM), face; 3600=picture.mask_practice_WM, mask]
/timeout = parameters.stimulusduration
/ ontrialend = [values.actual_crowd_mean=picture.1practice_WM.currentitemnumber; values.drink=0; values.crowdgender=2; values.crowdrace=1; values.rt = likert.practiceangerlikert.latency;
values.picturename1=0]
/ recorddata = true
/ screencapture = true
/ branch = [return likert.practiceangerlikert]
/ datastreams = (eyetracker)
</trial>

You cannnot use a selection mode and regular selection in a single frame. Note that the selection mode is totally unncessary in your case, simply remove it.

/stimulustimes = [0=picture.Neutraldrinks, drink; 1700=blank, blank1; 1800=picture.1practice_WM, face; 3600=picture.mask_practice_WM, mask]
By esummerell - 2/23/2022

Hi Dave, 

Thanks so much for your response. You're right the selection mode is redundant here (this is a practice trial), but will be necessary in later parts of the experiment. Do you have a suggestion for how I can make sure that I have some kind of marker for these kinds of stimuli in order to match it up with eyetracking data for analysis?

Thanks,
Liz
By Dave - 2/23/2022

esummerell - 2/23/2022
Hi Dave, 

Thanks so much for your response. You're right the selection mode is redundant here (this is a practice trial), but will be necessary in later parts of the experiment. Do you have a suggestion for how I can make sure that I have some kind of marker for these kinds of stimuli in order to match it up with eyetracking data for analysis?

Thanks,
Liz

selectionmodes in /stimulustimes or -frames are rarely necessary and should be generally avoided (they don't do what you think or want them to do in 99% of cases). Please explain why you believe them to be necessary here.
By esummerell - 2/23/2022

You know what, I think you're right! This is an example of a later trial:

<trial AsingleWF_001>
/stimulustimes = [0=noreplacenorepeat(picture.Alcoholdrinks); 1700=blank; 1800=replace(picture.1WF_001); 3600=picture.mask_WF_001]
/timeout = parameters.stimulusduration
/recorddata = true
/ branch = [return likert.angerlikert_WF_001]
/ ontrialend = [values.actual_crowd_mean=picture.1WF_001.currentitemnumber;
        values.drink=1;
            values.crowdgender=1;
            Values.crowdrace=1]
</trial>

Where picture.Alcoholdrinks is:

<picture Alcoholdrinks>
/items = Alcoholdrinks
/select =noreplace
/size = (80%, 80%)
</picture>

<item Alcoholdrinks>
/1="1P_1.jpg"
/2="1P_2.jpg"
/3="1P_3.jpg"
/4="1P_5.jpg"
/5="1P_6.jpg"
/6="1P_7.jpg"
/7="1P_8.jpg"
/8="1P_9.jpg"
/9="1P_11.jpg"
/10="1P_12.jpg"
/11="1P_13.jpg"
/12="1P_14.jpg"
/13="1P_15.jpg"
/14="1P_16.jpg"
/15="1P_17.jpg"
/16="1P_18.jpg"
</item>

So if I remove the 'noreplacenorepeat' from the trial like you are suggesting, do I just need to ensure that the /item for the picture.Alcoholdrinks is 'noreplacenorepeat' and the same for picture.1WF_001?
By Dave - 2/23/2022

esummerell - 2/23/2022
You know what, I think you're right! This is an example of a later trial:

<trial AsingleWF_001>
/stimulustimes = [0=noreplacenorepeat(picture.Alcoholdrinks); 1700=blank; 1800=replace(picture.1WF_001); 3600=picture.mask_WF_001]
/timeout = parameters.stimulusduration
/recorddata = true
/ branch = [return likert.angerlikert_WF_001]
/ ontrialend = [values.actual_crowd_mean=picture.1WF_001.currentitemnumber;
        values.drink=1;
            values.crowdgender=1;
            Values.crowdrace=1]
</trial>

Where picture.Alcoholdrinks is:

<picture Alcoholdrinks>
/items = Alcoholdrinks
/select =noreplace
/size = (80%, 80%)
</picture>

<item Alcoholdrinks>
/1="1P_1.jpg"
/2="1P_2.jpg"
/3="1P_3.jpg"
/4="1P_5.jpg"
/5="1P_6.jpg"
/6="1P_7.jpg"
/7="1P_8.jpg"
/8="1P_9.jpg"
/9="1P_11.jpg"
/10="1P_12.jpg"
/11="1P_13.jpg"
/12="1P_14.jpg"
/13="1P_15.jpg"
/14="1P_16.jpg"
/15="1P_17.jpg"
/16="1P_18.jpg"
</item>

So if I remove the 'noreplacenorepeat' from the trial like you are suggesting, do I just need to ensure that the /item for the picture.Alcoholdrinks is 'noreplacenorepeat' and the same for picture.1WF_001?

(1) Selection modes in /stimulustimes DO NOT control how a stimulus element selects its items. That is controlled by the stimulus element's /select attribute.

Selection modes in /stimulustimes control which stimulus element is presented as in

<block myblock>
/ trials = [1-4 = example]
</block>

<trial example>
/ stimulusframes = [1=replace(text.a, text.b)]
/ validresponse = (57)
</trial>

<text a>
/ items = aitems
/ select = sequence
</text>

<text b>
/ items = bitems
/ select = noreplace
</text>

<item aitems>
/ 1 = "A1"
/ 2 = "A2"
/ 3 = "A3"
/ 4 = "A4"
</item>

<item bitems>
/ 1 = "B1"
/ 2 = "B2"
/ 3 = "B3"
/ 4 = "B4"
</item>


<trial example> in the above will sometimes display the stimulus element <text a>, and other times the stimulus element <text b>. Notice that how text a and b select their items is an entirely separate issue.

(2) I don't see how noreplacenorepeat in the <picture>'s /select would make sense or be necessary. It has 18 unique items, there is nothing that could possibly repeat. noreplace should be what you want.