Millisecond Forums

Use of a counter

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

By Leena - 6/15/2022

Hello,
We would like to conduct an experiment where a fixed number of images are shown in a fixed sequence. After every single picture a question is to be answered. These picture-question sequences come in 4 different variations. Each of the variants is to be shown exactly once in random order. Actually, we would like to include a pause after half of the runs, but unfortunately this results in some sequences being shown more often and some not at all. We tried to solve the problem by using a counter, which unfortunately didn't work. Because of the structure of the script, I am not sure how to make the connection between the first and second block. Is there another solution or is the problem in the structure of our script?

<expt>
/ blocks = [1= einfuehrung; 2-3= noreplace (practice1, practice2, practice3, practice4); 4= break; 5-6 =noreplace(practice1, practice2, practice3, practice4)]
</expt>

<block practice1>
/trials = [1-11 = list.practicelist1]
</block>

<block practice2>
/trials = [1-11 = list.practicelist2]
</block>

<block practice3>
/trials = [1-11 = list.practicelist3]
</block>

<block practice4>
/trials = [1-11 = list.practicelist4]
</block>


<block break>
/ preinstructions = (break)
</block>

<counter expt>
/ select = noreplacenorepeat
/ items = (block.practice1, block.practice2, block.practice3, block.practice4)
/ resetinterval = 0
</counter>

***listspractice***

<list practicelist1>
/items = (trial.test11, trial.test12, trial.test13)
/ selectionmode = sequence
</list>

<list practicelist2>
/items = (trial.test21, trial.test22, trial.test23)
/ selectionmode = sequence
</list>

<list practicelist3>
/items = (trial.test31, trial.test32, trial.test33)
/ selectionmode = sequence
</list>

<list practicelist4>
/items = (trial.test41, trial.test42, trial.test43)
/ selectionmode = sequence
</list>

***trials***
<trial test11>
/ stimulustimes = [0=fixation; 500=erasefixation, test11; 2000=erasevideo, b1, b2, b3, question2]
/ beginresponsetime = 2000
/ inputdevice = mouse
/ validresponse = (b1, b2, b3)
</trial>

<trial test12>
/ stimulustimes = [0=fixation; 500=erasefixation, test12; 2000=erasevideo, b1, b2, b3, question2]
/ beginresponsetime = 2000
/ inputdevice = mouse
/ validresponse = (b1, b2, b3)
</trial>

<trial test13>
/ stimulustimes = [0=fixation; 500=erasefixation, test13; 2000=erasevideo, b1, b2, b3, question2]
/ beginresponsetime = 2000
/ inputdevice = mouse
/ validresponse = (b1, b2, b3)
</trial>
...

Thanks a lot for the help! 
By Dave - 6/15/2022

Leena - 6/15/2022
Hello,
We would like to conduct an experiment where a fixed number of images are shown in a fixed sequence. After every single picture a question is to be answered. These picture-question sequences come in 4 different variations. Each of the variants is to be shown exactly once in random order. Actually, we would like to include a pause after half of the runs, but unfortunately this results in some sequences being shown more often and some not at all. We tried to solve the problem by using a counter, which unfortunately didn't work. Because of the structure of the script, I am not sure how to make the connection between the first and second block. Is there another solution or is the problem in the structure of our script?

<expt>
/ blocks = [1= einfuehrung; 2-3= noreplace (practice1, practice2, practice3, practice4); 4= break; 5-6 =noreplace(practice1, practice2, practice3, practice4)]
</expt>

<block practice1>
/trials = [1-11 = list.practicelist1]
</block>

<block practice2>
/trials = [1-11 = list.practicelist2]
</block>

<block practice3>
/trials = [1-11 = list.practicelist3]
</block>

<block practice4>
/trials = [1-11 = list.practicelist4]
</block>


<block break>
/ preinstructions = (break)
</block>

<counter expt>
/ select = noreplacenorepeat
/ items = (block.practice1, block.practice2, block.practice3, block.practice4)
/ resetinterval = 0
</counter>

***listspractice***

<list practicelist1>
/items = (trial.test11, trial.test12, trial.test13)
/ selectionmode = sequence
</list>

<list practicelist2>
/items = (trial.test21, trial.test22, trial.test23)
/ selectionmode = sequence
</list>

<list practicelist3>
/items = (trial.test31, trial.test32, trial.test33)
/ selectionmode = sequence
</list>

<list practicelist4>
/items = (trial.test41, trial.test42, trial.test43)
/ selectionmode = sequence
</list>

***trials***
<trial test11>
/ stimulustimes = [0=fixation; 500=erasefixation, test11; 2000=erasevideo, b1, b2, b3, question2]
/ beginresponsetime = 2000
/ inputdevice = mouse
/ validresponse = (b1, b2, b3)
</trial>

<trial test12>
/ stimulustimes = [0=fixation; 500=erasefixation, test12; 2000=erasevideo, b1, b2, b3, question2]
/ beginresponsetime = 2000
/ inputdevice = mouse
/ validresponse = (b1, b2, b3)
</trial>

<trial test13>
/ stimulustimes = [0=fixation; 500=erasefixation, test13; 2000=erasevideo, b1, b2, b3, question2]
/ beginresponsetime = 2000
/ inputdevice = mouse
/ validresponse = (b1, b2, b3)
</trial>
...

Thanks a lot for the help! 

<expt>
/ blocks = [1= einfuehrung; 2-3= noreplace (practice1, practice2, practice3, practice4); 4= break; 5-6 =noreplace(practice1, practice2, practice3, practice4)]
</expt>

is wrong.

What you want is:

<expt>
/ blocks = [1= einfuehrung; 2,3,5,6= noreplace (practice1, practice2, practice3, practice4); 4= break;]
</expt>

There is no need for a <counter>, which you should not be using anyway. <list> elements are the more flexible replacements for <counter>s. Consider <counter> elements as deprecated, they only still exist to preserve compatibility with old scripts.
By Leena - 6/15/2022

Ah, thanks a lot!!