Add a drop-off feature into my experiment


Author
Message
Maren
Maren
Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)
Group: Forum Members
Posts: 5, Visits: 24
Hi!

I am aiming to program a procedure into my task, but I do not know whether this is even possible, or how this would be programmed, which is why I wanted to ask for help!

During my experiment, there is a learning phase. Usually during this phase, participants need to learn word pairs, and then are tested on their memory. What I was thinking to integrate was a drop-off procedure for the memory test. Thus, the participant needs to recall every response correctly once to get to the next stage. More specifically, upon seeing the first word of the pair:
if the individuals recalls the second word of the word pair correctly, this pair is dropped off the list of the to-be-learned words
if the individuals incorrectly/or fails to recall the second word of the word pair, this pair remains in the to-be-learned words, and appears again in the test.

This process would ideally continue until all words are correctly recalled once. When this is the case, the participant would move on to the next stage.

Would this be possible to program? And if yes, would you have an idea as to how (?), as I am really struggling to even imagine the code for this.

Thank you very much for the help!!
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: 13K, Visits: 105K
Maren - 3/15/2021
Hi!

I am aiming to program a procedure into my task, but I do not know whether this is even possible, or how this would be programmed, which is why I wanted to ask for help!

During my experiment, there is a learning phase. Usually during this phase, participants need to learn word pairs, and then are tested on their memory. What I was thinking to integrate was a drop-off procedure for the memory test. Thus, the participant needs to recall every response correctly once to get to the next stage. More specifically, upon seeing the first word of the pair:
if the individuals recalls the second word of the word pair correctly, this pair is dropped off the list of the to-be-learned words
if the individuals incorrectly/or fails to recall the second word of the word pair, this pair remains in the to-be-learned words, and appears again in the test.

This process would ideally continue until all words are correctly recalled once. When this is the case, the participant would move on to the next stage.

Would this be possible to program? And if yes, would you have an idea as to how (?), as I am really struggling to even imagine the code for this.

Thank you very much for the help!!

This is certainly possible to program. See e.g. https://www.millisecond.com/download/library/v6/karpickeroediger2008/karpickeroediger2008/karpickeroediger2008.manual

Maren
Maren
Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)
Group: Forum Members
Posts: 5, Visits: 24
I have incorporated it now into my script. I have four conditions of word pairs. The idea is that this drop-off learning procedure continues until all targets of the pairs from all conditions are recalled correctly once (upon seeing the cue of the pair). What I cannot seem to get running is *not specifying a trial number* in the block section, this is why it continues to only run the number that I indicate there. This is why I also do not know whether I coded the drop-off procedure correctly. 

If you see mistakes in my code, I would appreciate it a lot if you could help me!
Thank you so so much!

I am attaching my script document to this message, as well as posting it under here:

<parameters>
/wordHeight = 5%                        
/phase1Timeout = 5000                    
/phase1incorrect = 2500
</parameters>

*****WORD LISTS******
<item Suppressioncue>
/ 1="VAULT"
/ 2="SERVANT"
/ 3="HELM"
/ 4="NEEDLE"
/ 5="OFFICER"
/ 6="WAFFLE"
/ 7="DOUGH"
/ 8="JOURNEY"
/ 9="CRADLE"
/ 10="REMOVE"
/ 11="FOSSIL"
/ 12="DIET"
</item>

<list Suppressioncuelist>
/ poolsize = 12
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Baselinecue>
/ 1="HUG"
/ 2="PICNIC"
/ 3="LENS"
/ 4="JOGGER"
/ 5="STUMBLE"
/ 6="ACCIDENT"
/ 7="GATE"
/ 8="BEACH"
/ 9="RUG"
/ 10="SOIL"
/ 11="NIGHTCLUB"
/ 12="NAIL"
</item>

<list Baselinecuelist>
/ poolsize = 12
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Recallcue>
/ 1="DECAY"
/ 2="VITAMIN"
/ 3="GLOW"
/ 4="NAPKIN"
/ 5="LAWN"
/ 6="ALERT"
/ 7="AVENUE"
/ 8="POLISH"
/ 9="PENCIL"
/ 10="DECISION"
/ 11="HIVE"
/ 12="ANTLER"
</item>

<list Recallcuelist>
/ poolsize = 12
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Fillercue>
/ 1="BOND"
/ 2="GARAGE"
/ 3= "ACID"
/ 4= "PRIZE"
/ 5= "LEAP"
</item>

<list Fillercuelist>
/ poolsize = 5
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>


<item Suppressiontarget>
/ 1="GOLD"
/ 2="QUEEN"
/ 3="OPERA"
/ 4="DOCTOR"
/ 5="BLUE"
/ 6="MAPLE"
/ 7="SALT"
/ 8="TROUSERS"
/ 9="PARENT"
/ 10="CANCER"
/ 11="DINOSAUR"
/ 12="CREAM"
</item>

<list Suppressiontargetlist>
/ poolsize = 12
/ selectionmode = list.Suppressioncuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Baselinetarget>
/ 1="ROSE"
/ 2="HILL"
/ 3="PHYSICS"
/ 4="COLLIE"
/ 5="CLOWN"
/ 6="SNOW"
/ 7="TRAIN"
/ 8="AFRICA"
/ 9="WOOL"
/ 10="TOMATO"
/ 11="LIPSTICK"
/ 12="PICTURE"
</item>


<list Baselinetargetlist>
/ poolsize = 12
/ selectionmode = list.Baselinecuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Recalltarget>
/ 1="CARBON"
/ 2="LEMON"
/ 3="GHOST"
/ 4="FORK"
/ 5="BEEF"
/ 6="ROBBERY"
/ 7="MILE"
/ 8="DIAMOND"
/ 9="GLUE"
/ 10="JUDGE"
/ 11="HEXAGON"
/ 12="RIFLE"
</item>

<list Recalltargetlist>
/ poolsize = 12
/ selectionmode = list.Recallcuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Fillertarget>
/ 1 = "WEDDING"
/ 2 ="BENCHPRESS"
/ 3= "DYNAMITE"
/ 4= "QUIZ"
/ 5 = "BALLET"
</item>

<list Fillertargetlist>
/ poolsize = 5
/ selectionmode = list.Fillercuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

******VALUES****************

<values>
/stopblock=0

/index_Baselinecueword = 0
/index_Suppressioncueword = 0
/index_Recallcueword = 0
/index_Fillercueword = 0

/index_Baselinerecallword = 0
/index_Suppressionrecallword = 0
/index_Recallrecallword = 0
/index_Fillerrecallword = 0

/Baselinecueword = ""
/Suppressioncueword = ""
/Recallcueword = ""
/Fillercueword = ""

/Baselinerecallword = ""
/Suppressionrecallword = ""
/Recallrecallword = ""
/Fillerrecallword = ""

/trialCount = 0
/ncorrect=0

/countPhaseI = 0
</values>

********STIMULI***********

<text Suppressioncue>
/ items = ("<%item.Suppressioncue.item(values.index_Suppressioncueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text Baselinecue>
/ items = ("<%item.Baselinecue.item(values.index_Baselinecueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text Recallcue>
/ items = ("<%item.Recallcue.item(values.index_Recallcueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text Fillercue>
/ items = ("<%item.Fillercue.item(values.index_Fillercueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text Suppressiontarget>
/ items = ("<%item.Suppressiontarget.item(values.index_Suppressioncueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue

</text>

<text Baselinetarget>
/ items = ("<%item.Baselinetarget.item(values.index_Baselinecueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue
</text>

<text Recalltarget>
/ items = ("<%item.Recalltarget.item(values.index_Recallcueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue
</text>

<text Fillertarget>
/ items = ("<%item.Fillertarget.item(values.index_Fillercueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue
</text>

******LISTS*******************

<list teststateSuppression>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1)
/ selectionmode = values.Suppressioncueword
</list>

<list teststateRecall>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1)
/ selectionmode = values.Recallcueword
</list>

<list teststateBaseline>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1)
/ selectionmode = values.Baselinecueword
</list>

<list teststateFiller>
/ items = (1,1,1,1,1)
/ selectionmode = values.Fillercueword
</list>

<list itemnumberSuppression>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12)
</list>


<list itemnumberRecall>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12)
</list>


<list itemnumberBaseline>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12)
</list>


<list itemnumberFiller>
/ items = (1,2,3,4,5)
</list>


*****TRIALS*********
<trial studyrecall_BaselinePair>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Baselinecueword = list.Baselinecuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = Baselinecue]
/ recorddata = true
/ inputdevice = keyboard
/ errormessage = true(Baselinetarget, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall_BaselinePair.correct==1){
        list.teststateBaseline.setitem(0, values.itemnumberBaseline);
    };
    if(list.itemnumberBaseline.unselectedcount==0 && list.itemnumberFiller.unselectedcount==0 && list.itemnumberRecall==0 && list.itemnumberSuppression==0){
        values.stopblock=1;
    };
    if(trial.studyrecall_BaselinePair.correct==1){
        values.countPhaseI+=1;
    };
]
/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>

<trial studyrecall_SuppressionPair>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Suppressioncueword = list.Suppressioncuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = Suppressioncue]
/ recorddata = true
/ inputdevice = keyboard
/ errormessage = true(Suppressiontarget, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall_SuppressionPair.correct==1){
        list.teststateSuppression.setitem(0, values.itemnumberSuppression);
    };
    if(list.itemnumberBaseline.unselectedcount==0 && list.itemnumberFiller.unselectedcount==0 && list.itemnumberRecall==0 && list.itemnumberSuppression==0){
        values.stopblock=1;
    };
    if(trial.studyrecall_SuppressionPair.correct==1){
        values.countPhaseI+=1;
    };
]
/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>

<trial studyrecall_RecallPair>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Recallcueword = list.Recallcuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = Recallcue]
/ recorddata = true
/ inputdevice = keyboard
/ errormessage = true(Recalltarget, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall_RecallPair.correct==1){
        list.teststateRecall.setitem(0, values.itemnumberRecall);
    };
    if(list.itemnumberBaseline.unselectedcount==0 && list.itemnumberFiller.unselectedcount==0 && list.itemnumberRecall==0 && list.itemnumberSuppression==0){
        values.stopblock=1;
    };
    if(trial.studyrecall_RecallPair.correct==1){
        values.countPhaseI+=1;
    };
]
/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>

<trial studyrecall_FillerPair>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Fillercueword = list.Fillercuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = Fillercue]
/ recorddata = true
/ inputdevice = keyboard
/ errormessage = true(Fillertarget, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall_FillerPair.correct==1){
        list.teststateFiller.setitem(0, values.itemnumberFiller);
    };
    if(list.itemnumberBaseline.unselectedcount==0 && list.itemnumberFiller.unselectedcount==0 && list.itemnumberRecall==0 && list.itemnumberSuppression==0){
        values.stopblock=1;
    };
    if(trial.studyrecall_FillerPair.correct==1){
        values.countPhaseI+=1;
    };
]
/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>


******BLOCK**********
<block phaseI_recall>
/ onblockbegin = [
    values.countPhaseI = 0;
    values.stopblock=0;
    values.ncorrect=0;
    list.itemnumberFiller.reset();
    list.itemnumberBaseline.reset();
    list.itemnumberSuppression.reset();
    list.itemnumberRecall.reset();
]
/ trials = [1 = studyrecall_FillerPair, studyrecall_RecallPair, studyrecall_BaselinePair,
studyrecall_SuppressionPair]
/ stop = [values.stopblock==1]
/ onblockend = [
    values.stopblock=0;
]
</block>


*****EXPERIMENT*****
<expt test>
/ blocks = [
    1 = phaseI_recall;
]
</expt>
Attachments
drop-off-14-24.iqx (179 views, 9.00 KB)
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: 13K, Visits: 105K
Maren - 3/16/2021
I have incorporated it now into my script. I have four conditions of word pairs. The idea is that this drop-off learning procedure continues until all targets of the pairs from all conditions are recalled correctly once (upon seeing the cue of the pair). What I cannot seem to get running is *not specifying a trial number* in the block section, this is why it continues to only run the number that I indicate there. This is why I also do not know whether I coded the drop-off procedure correctly. 

If you see mistakes in my code, I would appreciate it a lot if you could help me!
Thank you so so much!

I am attaching my script document to this message, as well as posting it under here:

<parameters>
/wordHeight = 5%                        
/phase1Timeout = 5000                    
/phase1incorrect = 2500
</parameters>

*****WORD LISTS******
<item Suppressioncue>
/ 1="VAULT"
/ 2="SERVANT"
/ 3="HELM"
/ 4="NEEDLE"
/ 5="OFFICER"
/ 6="WAFFLE"
/ 7="DOUGH"
/ 8="JOURNEY"
/ 9="CRADLE"
/ 10="REMOVE"
/ 11="FOSSIL"
/ 12="DIET"
</item>

<list Suppressioncuelist>
/ poolsize = 12
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Baselinecue>
/ 1="HUG"
/ 2="PICNIC"
/ 3="LENS"
/ 4="JOGGER"
/ 5="STUMBLE"
/ 6="ACCIDENT"
/ 7="GATE"
/ 8="BEACH"
/ 9="RUG"
/ 10="SOIL"
/ 11="NIGHTCLUB"
/ 12="NAIL"
</item>

<list Baselinecuelist>
/ poolsize = 12
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Recallcue>
/ 1="DECAY"
/ 2="VITAMIN"
/ 3="GLOW"
/ 4="NAPKIN"
/ 5="LAWN"
/ 6="ALERT"
/ 7="AVENUE"
/ 8="POLISH"
/ 9="PENCIL"
/ 10="DECISION"
/ 11="HIVE"
/ 12="ANTLER"
</item>

<list Recallcuelist>
/ poolsize = 12
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Fillercue>
/ 1="BOND"
/ 2="GARAGE"
/ 3= "ACID"
/ 4= "PRIZE"
/ 5= "LEAP"
</item>

<list Fillercuelist>
/ poolsize = 5
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>


<item Suppressiontarget>
/ 1="GOLD"
/ 2="QUEEN"
/ 3="OPERA"
/ 4="DOCTOR"
/ 5="BLUE"
/ 6="MAPLE"
/ 7="SALT"
/ 8="TROUSERS"
/ 9="PARENT"
/ 10="CANCER"
/ 11="DINOSAUR"
/ 12="CREAM"
</item>

<list Suppressiontargetlist>
/ poolsize = 12
/ selectionmode = list.Suppressioncuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Baselinetarget>
/ 1="ROSE"
/ 2="HILL"
/ 3="PHYSICS"
/ 4="COLLIE"
/ 5="CLOWN"
/ 6="SNOW"
/ 7="TRAIN"
/ 8="AFRICA"
/ 9="WOOL"
/ 10="TOMATO"
/ 11="LIPSTICK"
/ 12="PICTURE"
</item>


<list Baselinetargetlist>
/ poolsize = 12
/ selectionmode = list.Baselinecuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Recalltarget>
/ 1="CARBON"
/ 2="LEMON"
/ 3="GHOST"
/ 4="FORK"
/ 5="BEEF"
/ 6="ROBBERY"
/ 7="MILE"
/ 8="DIAMOND"
/ 9="GLUE"
/ 10="JUDGE"
/ 11="HEXAGON"
/ 12="RIFLE"
</item>

<list Recalltargetlist>
/ poolsize = 12
/ selectionmode = list.Recallcuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Fillertarget>
/ 1 = "WEDDING"
/ 2 ="BENCHPRESS"
/ 3= "DYNAMITE"
/ 4= "QUIZ"
/ 5 = "BALLET"
</item>

<list Fillertargetlist>
/ poolsize = 5
/ selectionmode = list.Fillercuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

******VALUES****************

<values>
/stopblock=0

/index_Baselinecueword = 0
/index_Suppressioncueword = 0
/index_Recallcueword = 0
/index_Fillercueword = 0

/index_Baselinerecallword = 0
/index_Suppressionrecallword = 0
/index_Recallrecallword = 0
/index_Fillerrecallword = 0

/Baselinecueword = ""
/Suppressioncueword = ""
/Recallcueword = ""
/Fillercueword = ""

/Baselinerecallword = ""
/Suppressionrecallword = ""
/Recallrecallword = ""
/Fillerrecallword = ""

/trialCount = 0
/ncorrect=0

/countPhaseI = 0
</values>

********STIMULI***********

<text Suppressioncue>
/ items = ("<%item.Suppressioncue.item(values.index_Suppressioncueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text Baselinecue>
/ items = ("<%item.Baselinecue.item(values.index_Baselinecueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text Recallcue>
/ items = ("<%item.Recallcue.item(values.index_Recallcueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text Fillercue>
/ items = ("<%item.Fillercue.item(values.index_Fillercueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text Suppressiontarget>
/ items = ("<%item.Suppressiontarget.item(values.index_Suppressioncueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue

</text>

<text Baselinetarget>
/ items = ("<%item.Baselinetarget.item(values.index_Baselinecueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue
</text>

<text Recalltarget>
/ items = ("<%item.Recalltarget.item(values.index_Recallcueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue
</text>

<text Fillertarget>
/ items = ("<%item.Fillertarget.item(values.index_Fillercueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue
</text>

******LISTS*******************

<list teststateSuppression>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1)
/ selectionmode = values.Suppressioncueword
</list>

<list teststateRecall>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1)
/ selectionmode = values.Recallcueword
</list>

<list teststateBaseline>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1)
/ selectionmode = values.Baselinecueword
</list>

<list teststateFiller>
/ items = (1,1,1,1,1)
/ selectionmode = values.Fillercueword
</list>

<list itemnumberSuppression>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12)
</list>


<list itemnumberRecall>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12)
</list>


<list itemnumberBaseline>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12)
</list>


<list itemnumberFiller>
/ items = (1,2,3,4,5)
</list>


*****TRIALS*********
<trial studyrecall_BaselinePair>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Baselinecueword = list.Baselinecuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = Baselinecue]
/ recorddata = true
/ inputdevice = keyboard
/ errormessage = true(Baselinetarget, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall_BaselinePair.correct==1){
        list.teststateBaseline.setitem(0, values.itemnumberBaseline);
    };
    if(list.itemnumberBaseline.unselectedcount==0 && list.itemnumberFiller.unselectedcount==0 && list.itemnumberRecall==0 && list.itemnumberSuppression==0){
        values.stopblock=1;
    };
    if(trial.studyrecall_BaselinePair.correct==1){
        values.countPhaseI+=1;
    };
]
/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>

<trial studyrecall_SuppressionPair>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Suppressioncueword = list.Suppressioncuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = Suppressioncue]
/ recorddata = true
/ inputdevice = keyboard
/ errormessage = true(Suppressiontarget, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall_SuppressionPair.correct==1){
        list.teststateSuppression.setitem(0, values.itemnumberSuppression);
    };
    if(list.itemnumberBaseline.unselectedcount==0 && list.itemnumberFiller.unselectedcount==0 && list.itemnumberRecall==0 && list.itemnumberSuppression==0){
        values.stopblock=1;
    };
    if(trial.studyrecall_SuppressionPair.correct==1){
        values.countPhaseI+=1;
    };
]
/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>

<trial studyrecall_RecallPair>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Recallcueword = list.Recallcuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = Recallcue]
/ recorddata = true
/ inputdevice = keyboard
/ errormessage = true(Recalltarget, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall_RecallPair.correct==1){
        list.teststateRecall.setitem(0, values.itemnumberRecall);
    };
    if(list.itemnumberBaseline.unselectedcount==0 && list.itemnumberFiller.unselectedcount==0 && list.itemnumberRecall==0 && list.itemnumberSuppression==0){
        values.stopblock=1;
    };
    if(trial.studyrecall_RecallPair.correct==1){
        values.countPhaseI+=1;
    };
]
/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>

<trial studyrecall_FillerPair>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Fillercueword = list.Fillercuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = Fillercue]
/ recorddata = true
/ inputdevice = keyboard
/ errormessage = true(Fillertarget, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall_FillerPair.correct==1){
        list.teststateFiller.setitem(0, values.itemnumberFiller);
    };
    if(list.itemnumberBaseline.unselectedcount==0 && list.itemnumberFiller.unselectedcount==0 && list.itemnumberRecall==0 && list.itemnumberSuppression==0){
        values.stopblock=1;
    };
    if(trial.studyrecall_FillerPair.correct==1){
        values.countPhaseI+=1;
    };
]
/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>


******BLOCK**********
<block phaseI_recall>
/ onblockbegin = [
    values.countPhaseI = 0;
    values.stopblock=0;
    values.ncorrect=0;
    list.itemnumberFiller.reset();
    list.itemnumberBaseline.reset();
    list.itemnumberSuppression.reset();
    list.itemnumberRecall.reset();
]
/ trials = [1 = studyrecall_FillerPair, studyrecall_RecallPair, studyrecall_BaselinePair,
studyrecall_SuppressionPair]
/ stop = [values.stopblock==1]
/ onblockend = [
    values.stopblock=0;
]
</block>


*****EXPERIMENT*****
<expt test>
/ blocks = [
    1 = phaseI_recall;
]
</expt>

You ought to comment your code, i.e. you should make clear what each and every part is supposed to do and why.

There is stuff in there that does not make sense to me on first glance, e.g. what

/ branch = [
    return (trial.studyrecall_BaselinePair || trial.studyrecall_FillerPair || trial.studyrecall_RecallPair || trial.studyrecall_SuppressionPair);
]
</trial>

is intended to achieve, and it's not possible for me to guess that. I can see what code does. I cannot infer whether what the code does matches what you intended the code to do.

Maren
Maren
Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)
Group: Forum Members
Posts: 5, Visits: 24
I have simplified the code a little bit, and added some comments in. I hope, it is clearer now.
Please let me know if you need more explanation. Thank you so much!
Attachments
drop-off-15-50.iqx (175 views, 4.00 KB)
Maren
Maren
Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)
Group: Forum Members
Posts: 5, Visits: 24
I am also copy-pasting it in here in case you prefer it:

<parameters>
/wordHeight = 5%                        
/phase1Timeout = 5000                    
/phase1incorrect = 2500
</parameters>

*****WORD LISTS******
*****these are word lists for word pairs:
***in other phases of the experiment, they have to learn the pairs as e.g. vault - gold, and in this phase are presented with the cue ("vault"), and are supposed to recall the associated target ("gold")
<item Cue>
/ 1="VAULT"
/ 2="SERVANT"
/ 3="HELM"
/ 4="NEEDLE"
/ 5="OFFICER"
/ 6="WAFFLE"
/ 7="DOUGH"
/ 8="JOURNEY"
/ 9="CRADLE"
/ 10="REMOVE"
/ 11="FOSSIL"
/ 12="DIET"
/ 13="HUG"
/ 14="PICNIC"
/ 15="LENS"
/ 16="JOGGER"
/ 17="STUMBLE"
/ 18="ACCIDENT"
/ 19="GATE"
/ 20="BEACH"
/ 21="RUG"
/ 22="SOIL"
/ 23="NIGHTCLUB"
/ 24="NAIL"
/ 25="DECAY"
/ 26="VITAMIN"
/ 27="GLOW"
/ 28="NAPKIN"
/ 29="LAWN"
/ 30="ALERT"
/ 31="AVENUE"
/ 32="POLISH"
/ 33="PENCIL"
/ 34="DECISION"
/ 35="HIVE"
/ 36="ANTLER"
/ 37="BOND"
/ 38="GARAGE"
/ 39= "ACID"
/ 40= "PRIZE"
/ 41= "LEAP"
</item>

<list Cuelist>
/ poolsize = 41
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Target>
/ 1="GOLD"
/ 2="QUEEN"
/ 3="OPERA"
/ 4="DOCTOR"
/ 5="BLUE"
/ 6="MAPLE"
/ 7="SALT"
/ 8="TROUSERS"
/ 9="PARENT"
/ 10="CANCER"
/ 11="DINOSAUR"
/ 12="CREAM"
/ 13="ROSE"
/ 14="HILL"
/ 15="PHYSICS"
/ 16="COLLIE"
/ 17="CLOWN"
/ 18="SNOW"
/ 19="TRAIN"
/ 20="AFRICA"
/ 21="WOOL"
/ 22="TOMATO"
/ 23="LIPSTICK"
/ 24="PICTURE"
/ 25="CARBON"
/ 26="LEMON"
/ 27="GHOST"
/ 28="FORK"
/ 29="BEEF"
/ 30="ROBBERY"
/ 31="MILE"
/ 32="DIAMOND"
/ 33="GLUE"
/ 34="JUDGE"
/ 35="HEXAGON"
/ 36="RIFLE"
/ 37 = "WEDDING"
/ 38 ="BENCHPRESS"
/ 39= "DYNAMITE"
/ 40= "QUIZ"
/ 41 = "BALLET"
</item>

<list Suppressiontargetlist>
/ poolsize = 41
/ selectionmode = list.Cuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

******VALUES****************

<values>
/stopblock=0 //whether the block will continue or not (at 1 the block should stop)
/index_Cueword = 0
/index_Recallword =0
/itemnumber = 1

/Cueword = ""
/Recallword = ""

/countPhaseI = 0 //how many trials the block has
/ncorrect=0 //how many correct trials; we have 41 word-pairs, so it should be 41 for each participant at the end of the block (when all wordpairs are correctly recalled)
</values>

********STIMULI***********
***these are the cues (e.g. vault), and the targets (e.g. gold) prepared for the trial
<text cue>
/ items = ("<%item.Cue.item(values.index_Cueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text target>
/ items = ("<%item.Target.item(values.index_Cueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue
</text>

******LISTS*******************
**the teststate lists represent the activity of the "pairs": 1 means active ("still to be recalled correctly"), 0 means inactive ("already recalled correctly")
**the idea is that if all the targets are correctly recalled once, all teststate items should be 0, and the testing block should finish
<list teststate>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
/ selectionmode = values.itemnumber
</list>

<list itemnumber>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12, 13, 14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41)
</list>


*****TRIALS*********
**here, the idea is that the cues are presented on the screen
**if the participant correctly recalls the associated target, the experimenter clicks "1", and this cue should be dropped off the list of the "to-be-learned words"
**if the participant does not correctly recall the associated target, the experimenter does not click anything, and the correct response appears in blue for 2500ms. additionally, if not correctly recalled, this cue/trial (of the wordpair)
**should remain in the pool of the "to-be-learned words"; thus, remain active ("1" in teststate)
**there should be a loop of these trials until all words become inactive (all have been recalled correctly once)
<trial studyrecall>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Cueword = list.Cuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = cue]
/ inputdevice = keyboard
/ errormessage = true(target, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall.correct){
        list.teststate.setitem(0, values.itemnumber);
    };
    if(list.itemnumber.unselectedcount==0){
        values.stopblock=1;
    };
    if(trial.studyrecall.correct){
        values.ncorrect+=1;
    };
]
/ branch = [
    return (trial.studyrecall);
]
</trial>

******BLOCK**********
<block phaseI_recall>
/ onblockbegin = [
    values.countPhaseI = 0;
    values.stopblock=0;
    values.ncorrect=0;
    list.itemnumber.reset();
]
/ trials = [1 = studyrecall]
/ stop = [values.stopblock==1]
/ onblockend = [
    values.stopblock=0;
]
</block>


*****EXPERIMENT*****
<expt test>
/ blocks = [
    1 = phaseI_recall;
]
</expt>
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: 13K, Visits: 105K
Maren - 3/16/2021
I am also copy-pasting it in here in case you prefer it:

<parameters>
/wordHeight = 5%                        
/phase1Timeout = 5000                    
/phase1incorrect = 2500
</parameters>

*****WORD LISTS******
*****these are word lists for word pairs:
***in other phases of the experiment, they have to learn the pairs as e.g. vault - gold, and in this phase are presented with the cue ("vault"), and are supposed to recall the associated target ("gold")
<item Cue>
/ 1="VAULT"
/ 2="SERVANT"
/ 3="HELM"
/ 4="NEEDLE"
/ 5="OFFICER"
/ 6="WAFFLE"
/ 7="DOUGH"
/ 8="JOURNEY"
/ 9="CRADLE"
/ 10="REMOVE"
/ 11="FOSSIL"
/ 12="DIET"
/ 13="HUG"
/ 14="PICNIC"
/ 15="LENS"
/ 16="JOGGER"
/ 17="STUMBLE"
/ 18="ACCIDENT"
/ 19="GATE"
/ 20="BEACH"
/ 21="RUG"
/ 22="SOIL"
/ 23="NIGHTCLUB"
/ 24="NAIL"
/ 25="DECAY"
/ 26="VITAMIN"
/ 27="GLOW"
/ 28="NAPKIN"
/ 29="LAWN"
/ 30="ALERT"
/ 31="AVENUE"
/ 32="POLISH"
/ 33="PENCIL"
/ 34="DECISION"
/ 35="HIVE"
/ 36="ANTLER"
/ 37="BOND"
/ 38="GARAGE"
/ 39= "ACID"
/ 40= "PRIZE"
/ 41= "LEAP"
</item>

<list Cuelist>
/ poolsize = 41
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

<item Target>
/ 1="GOLD"
/ 2="QUEEN"
/ 3="OPERA"
/ 4="DOCTOR"
/ 5="BLUE"
/ 6="MAPLE"
/ 7="SALT"
/ 8="TROUSERS"
/ 9="PARENT"
/ 10="CANCER"
/ 11="DINOSAUR"
/ 12="CREAM"
/ 13="ROSE"
/ 14="HILL"
/ 15="PHYSICS"
/ 16="COLLIE"
/ 17="CLOWN"
/ 18="SNOW"
/ 19="TRAIN"
/ 20="AFRICA"
/ 21="WOOL"
/ 22="TOMATO"
/ 23="LIPSTICK"
/ 24="PICTURE"
/ 25="CARBON"
/ 26="LEMON"
/ 27="GHOST"
/ 28="FORK"
/ 29="BEEF"
/ 30="ROBBERY"
/ 31="MILE"
/ 32="DIAMOND"
/ 33="GLUE"
/ 34="JUDGE"
/ 35="HEXAGON"
/ 36="RIFLE"
/ 37 = "WEDDING"
/ 38 ="BENCHPRESS"
/ 39= "DYNAMITE"
/ 40= "QUIZ"
/ 41 = "BALLET"
</item>

<list Suppressiontargetlist>
/ poolsize = 41
/ selectionmode = list.Cuelist.currentindex
/ replace = false
/ selectionmode =random
/ selectionrate = always
</list>

******VALUES****************

<values>
/stopblock=0 //whether the block will continue or not (at 1 the block should stop)
/index_Cueword = 0
/index_Recallword =0
/itemnumber = 1

/Cueword = ""
/Recallword = ""

/countPhaseI = 0 //how many trials the block has
/ncorrect=0 //how many correct trials; we have 41 word-pairs, so it should be 41 for each participant at the end of the block (when all wordpairs are correctly recalled)
</values>

********STIMULI***********
***these are the cues (e.g. vault), and the targets (e.g. gold) prepared for the trial
<text cue>
/ items = ("<%item.Cue.item(values.index_Cueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
</text>

<text target>
/ items = ("<%item.Target.item(values.index_Cueword)%>")
/ position = (49%, 50%)
/ fontstyle = ("Arial", parameters.wordHeight, true, false, false, false, 5, 1)
/ vjustify = center
/ color = blue
</text>

******LISTS*******************
**the teststate lists represent the activity of the "pairs": 1 means active ("still to be recalled correctly"), 0 means inactive ("already recalled correctly")
**the idea is that if all the targets are correctly recalled once, all teststate items should be 0, and the testing block should finish
<list teststate>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
/ selectionmode = values.itemnumber
</list>

<list itemnumber>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12, 13, 14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41)
</list>


*****TRIALS*********
**here, the idea is that the cues are presented on the screen
**if the participant correctly recalls the associated target, the experimenter clicks "1", and this cue should be dropped off the list of the "to-be-learned words"
**if the participant does not correctly recall the associated target, the experimenter does not click anything, and the correct response appears in blue for 2500ms. additionally, if not correctly recalled, this cue/trial (of the wordpair)
**should remain in the pool of the "to-be-learned words"; thus, remain active ("1" in teststate)
**there should be a loop of these trials until all words become inactive (all have been recalled correctly once)
<trial studyrecall>
/ pretrialpause = 200
/ ontrialbegin = [
    values.index_Cueword = list.Cuelist.nextindex;
    values.countPhaseI+=1;
]
/ stimulusframes = [1 = cue]
/ inputdevice = keyboard
/ errormessage = true(target, 2500)
/timeout = parameters.phase1Timeout
/ validresponse = ("1", 0)
/ correctresponse = ("1")
/ ontrialend = [
    if(trial.studyrecall.correct){
        list.teststate.setitem(0, values.itemnumber);
    };
    if(list.itemnumber.unselectedcount==0){
        values.stopblock=1;
    };
    if(trial.studyrecall.correct){
        values.ncorrect+=1;
    };
]
/ branch = [
    return (trial.studyrecall);
]
</trial>

******BLOCK**********
<block phaseI_recall>
/ onblockbegin = [
    values.countPhaseI = 0;
    values.stopblock=0;
    values.ncorrect=0;
    list.itemnumber.reset();
]
/ trials = [1 = studyrecall]
/ stop = [values.stopblock==1]
/ onblockend = [
    values.stopblock=0;
]
</block>


*****EXPERIMENT*****
<expt test>
/ blocks = [
    1 = phaseI_recall;
]
</expt>

See attached.
Attachments
drop-off-15-50.iqx (190 views, 5.00 KB)
Maren
Maren
Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)Associate Member (68 reputation)
Group: Forum Members
Posts: 5, Visits: 24
Thank you so much!!!
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search