Randomized stimuli in two "strands"


Author
Message
Jurre
Jurre
Associate Member (241 reputation)Associate Member (241 reputation)Associate Member (241 reputation)Associate Member (241 reputation)Associate Member (241 reputation)Associate Member (241 reputation)Associate Member (241 reputation)Associate Member (241 reputation)Associate Member (241 reputation)
Group: Forum Members
Posts: 3, Visits: 11
Hi everyone,

For my pitch discrimination experiment, I want to present my subjects with 2 "strands" of stimuli: one with two musical pitches where the second one is higher, and one where the second one is lower.
These musical pitches will get closer together if they respond correctly 3 times in a row, and if they make one mistake it needs to go back a step. The upwards and downwards stimuli need to be randomized.
Now, the problem is how to code these two strands so they move seperately, but still intermingle them randomly.

I have tried several things using the / branch attribute in the trials or in the blocks. Nothing has worked yet.

Here's an example of my trial/block setup now:
- trial.srrt , srtt3 and srtt5 are upwards pitches, trial.srtt2, srtt4 and srtt6 are downwards pitches

<trial SRTT>
/ pretrialpause = 1000
/ ontrialbegin = [if (values.speakerfixed == 1)
{values.targetspeaker = list.targetchannel.nextvalue}]
/ ontrialbegin = [if (values.volumefixed == 1)
{values.volumeadjust = list.targetvolumeadjust.nextvalue}]
/ branch = [if(trial.srtt.percentcorrect == 100 && trial.srtt.count >= 3) trial.srtt3]
/ stimulustimes = [0=target; 1500=target3]
/ inputdevice=keyboard
/ validresponse=(200, 208)
/ correctresponse = (200)
/ ontrialend = [trial.SRTT.resetstimulusframes()]
</trial>

<trial SRTT2>
/ pretrialpause = 1000
/ ontrialbegin = [if (values.speakerfixed == 1)
{values.targetspeaker = list.targetchannel.nextvalue}]
/ ontrialbegin = [if (values.volumefixed == 1)
{values.volumeadjust = list.targetvolumeadjust.nextvalue}]
/ branch = [if(trial.srtt2.percentcorrect == 100 && trial.srtt2.count >= 3) trial.srtt4]
/ stimulustimes = [0=target; 1500=target4]
/ inputdevice=keyboard
/ validresponse=(200, 208)
/ correctresponse = (208)
/ ontrialend = [trial.SRTT2.resetstimulusframes()]
</trial>

<trial SRTT3>
/ pretrialpause = 1000
/ ontrialbegin = [if (values.speakerfixed == 1)
{values.targetspeaker = list.targetchannel.nextvalue}]
/ ontrialbegin = [if (values.volumefixed == 1)
{values.volumeadjust = list.targetvolumeadjust.nextvalue}]
/ branch = [if(trial.srtt3.percentcorrect == 100 && trial.srtt3.count >= 3) trial.srtt5]
/ branch = [if(trial.srtt3.percentcorrect < 100) trial.srtt]
/ stimulustimes = [0=target; 1500=target5]
/ inputdevice=keyboard
/ validresponse=(200, 208)
/ correctresponse = (200)
/ ontrialend = [trial.SRTT3.resetstimulusframes()]
</trial>

<trial SRTT4>
/ pretrialpause = 1000
/ ontrialbegin = [if (values.speakerfixed == 1)
{values.targetspeaker = list.targetchannel.nextvalue}]
/ ontrialbegin = [if (values.volumefixed == 1)
{values.volumeadjust = list.targetvolumeadjust.nextvalue}]
/ branch = [if(trial.srtt4.percentcorrect == 100 && trial.srtt4.count >= 3) trial.srtt6]
/ branch = [if(trial.srtt4.percentcorrect < 100) trial.srtt2]
/ stimulustimes = [0=target; 1500=target6]
/ inputdevice=keyboard
/ validresponse=(200, 208)
/ correctresponse = (208)
/ ontrialend = [trial.SRTT4.resetstimulusframes()]
</trial>

<trial SRTT5>
/ pretrialpause = 1000
/ ontrialbegin = [if (values.speakerfixed == 1)
{values.targetspeaker = list.targetchannel.nextvalue}]
/ ontrialbegin = [if (values.volumefixed == 1)
{values.volumeadjust = list.targetvolumeadjust.nextvalue}]
/ branch = [if(trial.srtt5.percentcorrect == 100 && trial.srtt5.count >= 3) trial.srtt]
/ branch = [if(trial.srtt5.percentcorrect < 100) trial.srtt3]
/ stimulustimes = [0=target; 1500=target7]
/ inputdevice=keyboard
/ validresponse=(200, 208)
/ correctresponse = (200)
/ ontrialend = [trial.SRTT5.resetstimulusframes()]
</trial>

<trial SRTT6>
/ pretrialpause = 1000
/ ontrialbegin = [if (values.speakerfixed == 1)
{values.targetspeaker = list.targetchannel.nextvalue}]
/ ontrialbegin = [if (values.volumefixed == 1)
{values.volumeadjust = list.targetvolumeadjust.nextvalue}]
/ branch = [if(trial.srtt6.percentcorrect == 100 && trial.srtt6.count >= 3) trial.srtt2]
/ branch = [if(trial.srtt6.percentcorrect < 100) trial.srtt4]
/ stimulustimes = [0=target; 1500=target8]
/ inputdevice=keyboard
/ validresponse=(200, 208)
/ correctresponse = (208)
/ ontrialend = [trial.SRTT6.resetstimulusframes()]
</trial>

<block SRTTblock>
/ onblockbegin = [text.focus.textcolor = values.screencolor; text.focus.textbgcolor = values.screencolor]
/ onblockbegin = [block.SRTTblock.screencolor = values.screencolor]
/ trials = [1-6=noreplace(SRTT, SRTT2)]
/ bgstim = (focus)
</block>


This setup runs the first two trials 3 times each randomly, but then only runs the next ones (2 and 4) once. It does not carry on running trial 2 and 4 three times and then moving on to 3 and 6, because the branch attribute only reads it as the 'next event'. How do I code it so that it will carry on stepwise when the subjects make three correct responses, and goes one step back when they make a mistake, but keep this seperately for upwards and downwards pitches? So, if someone makes a mistake in the upwards pitch but not in the downwards pitch, the downwards pitch will move on and the upwards pitch will go back.
I hope this all makes some kind of sense. Ask away if something isn't clear, and please help!
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...





Reading This Topic

Explore
Messages
Mentions
Search