Millisecond Forums

two-step memory retrieval task - Problems with stimulus list consistency when conditionally branching

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

By tbiba - 5/25/2020

Greetings, 

I am new to Inquisit and I have searched existing posts for an answer to my question however I am having an additional problem. Most likely it is a simple fix however some additional guidance would be very helpful!

Background:  I am looking to create a two-step memory retrieval task. First at encoding, subjects view a series of images and make either a size, naturalness, or shade judgment. At retrieval subjects first make a recognition memory judgment ("old","new"). If they select old, then they make a source memory judgment ("size","naturalness,"shade") indicating what response they had made previously to this image at encoding. I was able to use existing posts to the forum to figure out the conditional branching, to enable the source memory trial to initiate only when subjects make an old response.

Problem:  However, currently if I make an old judgment (on image 1 - 8ball) then a new judgment (on image 2 - wrench) and then another old judgment (on image 3 - accordion), the image that appears for the subsequent source memory task is image 2 (wrench) rather than image 3 (accordion), even though I am on the third trial. As it is unclear to me precisely how Inquisit keeps track of the trial index in this instance I presume this means that the two trial types (the item memory trail element and the source memory trial element) and their sequence coding operate independently from one another? Is there a way to have the source memory task trial index tag along with the item memory trial index, so that image 3 (accordion) will be presented when I make the second source memory judgment in this example?

 I have included the code only for the retrieval portion of the experiment here for the sake of concision, but please let me know if any additional code and/or more elaboration would be at all helpful! Many thanks!

<item retObjects1>
/1 = "images/8ball.jpg"
/2 = "images/adjustablewrench01b.jpg"
/3 = "images/accordion01.jpg"
/4 = "images/acousticguitar02.jpg"
</item>

<picture retObjectsItem1>
/ items = retObjects1
/ select = sequence
/ size = (400, 400)
/ erase = false
</picture>

<picture retObjectsSource1>
/ items = retObjects1
/ select = sequence
/ size = (400, 400)
/ erase = false
</picture>

<block ret1block>
/ trials = [1-4 = ret1_item]
/ preinstructions = (retinstruc1)
/ errormessage = false
/ postinstructions = (retfeedbackpage1)
</block>


<trial ret1_item>
/ stimulusframes = [1=retObjectsItem1; 400=blank; 1=leftreminderret; 1=rightreminderret]
/ validresponse = ("1", "2")
/ beginresponsetime = 0
/ numframes = 400
/ responseinterrupt = immediate
/ branch = [
  if (computer.scancodetochar(trial.ret1_item.response) == "1")
  trial.ret1_source;
]
/ timeout = 8000
</trial>


<trial ret1_source>
/ stimulusframes = [1=retObjectsSource1; 400=blank; 1=Lightreminderret; 1=Natreminderret; 1=Sizereminderret]
/ validresponse = ("j","k","l")
/ beginresponsetime = 0
/ numframes = 400
/ responseinterrupt = immediate
/ timeout = 8000
</trial>

By Dave - 5/25/2020

tbiba - 5/25/2020
Greetings, 

I am new to Inquisit and I have searched existing posts for an answer to my question however I am having an additional problem. Most likely it is a simple fix however some additional guidance would be very helpful!

Background:  I am looking to create a two-step memory retrieval task. First at encoding, subjects view a series of images and make either a size, naturalness, or shade judgment. At retrieval subjects first make a recognition memory judgment ("old","new"). If they select old, then they make a source memory judgment ("size","naturalness,"shade") indicating what response they had made previously to this image at encoding. I was able to use existing posts to the forum to figure out the conditional branching, to enable the source memory trial to initiate only when subjects make an old response.

Problem:  However, currently if I make an old judgment (on image 1 - 8ball) then a new judgment (on image 2 - wrench) and then another old judgment (on image 3 - accordion), the image that appears for the subsequent source memory task is image 2 (wrench) rather than image 3 (accordion), even though I am on the third trial. As it is unclear to me precisely how Inquisit keeps track of the trial index in this instance I presume this means that the two trial types (the item memory trail element and the source memory trial element) and their sequence coding operate independently from one another? Is there a way to have the source memory task trial index tag along with the item memory trial index, so that image 3 (accordion) will be presented when I make the second source memory judgment in this example?

 I have included the code only for the retrieval portion of the experiment here for the sake of concision, but please let me know if any additional code and/or more elaboration would be at all helpful! Many thanks!

<item retObjects1>
/1 = "images/8ball.jpg"
/2 = "images/adjustablewrench01b.jpg"
/3 = "images/accordion01.jpg"
/4 = "images/acousticguitar02.jpg"
</item>

<picture retObjectsItem1>
/ items = retObjects1
/ select = sequence
/ size = (400, 400)
/ erase = false
</picture>

<picture retObjectsSource1>
/ items = retObjects1
/ select = sequence
/ size = (400, 400)
/ erase = false
</picture>

<block ret1block>
/ trials = [1-4 = ret1_item]
/ preinstructions = (retinstruc1)
/ errormessage = false
/ postinstructions = (retfeedbackpage1)
</block>


<trial ret1_item>
/ stimulusframes = [1=retObjectsItem1; 400=blank; 1=leftreminderret; 1=rightreminderret]
/ validresponse = ("1", "2")
/ beginresponsetime = 0
/ numframes = 400
/ responseinterrupt = immediate
/ branch = [
  if (computer.scancodetochar(trial.ret1_item.response) == "1")
  trial.ret1_source;
]
/ timeout = 8000
</trial>


<trial ret1_source>
/ stimulusframes = [1=retObjectsSource1; 400=blank; 1=Lightreminderret; 1=Natreminderret; 1=Sizereminderret]
/ validresponse = ("j","k","l")
/ beginresponsetime = 0
/ numframes = 400
/ responseinterrupt = immediate
/ timeout = 8000
</trial>


<picture retObjectsItem1>
/ items = retObjects1
/ select = sequence
/ size = (400, 400)
/ erase = false
</picture>

<picture retObjectsSource1>
/ items = retObjects1
/ select = picture.retObjectsItem1.currentindex
/ size = (400, 400)
/ erase = false
</picture>

Also see https://www.millisecond.com/support/docs/v5/html/howto/howtopairs.htm
By tbiba - 5/25/2020

Hi Dave, 

Thanks so much! Works like a charm! Also I appreciate the reference and I find this very useful to help begin to build up my inquisit knowledge.

Thomas