ontrialend 'too slow' feedback not working


Author
Message
Amelinq
Amelinq
Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)
Group: Forum Members
Posts: 19, Visits: 48
Hello,
First of all thank you, Dave, for all the previous help.
Last few days I puzzled over this:
In short; I have different trials (irrelevants, probes, targets, irrelevant_sounds, probes_sounds and targets_sounds). The ..._sounds trials need different 'tooslow' feedback since they are only finished playing after 1 second (and the other stimuli present right away on the screen).
I implemented the feedback in the script (in bold) but when I run the block, the too slow feedback doesn't always appear. Often 6 out of 30 trials (1 block = 30 trials) it doesn't.
I really don't understand how this happens. Does anyone have an idea?
Thank you for checking my script!

<trial irrelevants>
/ ontrialbegin = [
  trial.irrelevants.resetstimulusframes();
  trial.irrelevants.insertstimulustime(list.irrelevants.nextvalue, 200);
    if (trial.irrelevants.latency > 800){trial.irrelevants.insertstimulustime(text.tooslow, 800)}
    ]   
/branch= [if(trial.irrelevants.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>


<trial targets>
/ ontrialbegin = [
  trial.targets.resetstimulusframes();
  trial.targets.insertstimulustime(list.targets.nextvalue, 200);
    if (trial.targets.latency > 800){trial.targets.insertstimulustime(text.tooslow, 800)}
    ]    
/branch= [if (trial.targets.responsetext == "l")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("s") // yes = s-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial probes>
/ ontrialbegin = [
  trial.probes.resetstimulusframes();
  trial.probes.insertstimulustime(list.probes.nextvalue, 200);
    if (trial.probes.latency > 800){trial.probes.insertstimulustime(text.tooslow, 800)}
    ]    
/branch= [if (trial.probes.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("l")
/timeout = 2500
/beginresponsetime = 0
</trial>

TRIAL SOUNDS________
<trial irrelevants_sounds>
/ ontrialbegin = [
  trial.irrelevants_sounds.resetstimulusframes();
  trial.irrelevants_sounds.insertstimulustime(list.irrelevants_sounds.nextvalue, 200);
    if (trial.irrelevants_sounds.latency > 1800){trial.irrelevants_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.irrelevants_sounds.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial targets_sounds>
/ ontrialbegin = [
  trial.targets_sounds.resetstimulusframes();
  trial.targets_sounds.insertstimulustime(list.targets_sounds.nextvalue, 200);
    if (trial.targets_sounds.latency > 1800){trial.targets_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.targets_sounds.responsetext == "l")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("s") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial probes_sounds>
/ ontrialbegin = [
  trial.probes_sounds.resetstimulusframes();
  trial.probes_sounds.insertstimulustime(list.probes_sounds.nextvalue, 200);
    if (trial.probes_sounds.latency > 1800){trial.probes_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.probes_sounds.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>
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: 12K, Visits: 100K
Amelinq - 10/5/2023
Hello,
First of all thank you, Dave, for all the previous help.
Last few days I puzzled over this:
In short; I have different trials (irrelevants, probes, targets, irrelevant_sounds, probes_sounds and targets_sounds). The ..._sounds trials need different 'tooslow' feedback since they are only finished playing after 1 second (and the other stimuli present right away on the screen).
I implemented the feedback in the script (in bold) but when I run the block, the too slow feedback doesn't always appear. Often 6 out of 30 trials (1 block = 30 trials) it doesn't.
I really don't understand how this happens. Does anyone have an idea?
Thank you for checking my script!

<trial irrelevants>
/ ontrialbegin = [
  trial.irrelevants.resetstimulusframes();
  trial.irrelevants.insertstimulustime(list.irrelevants.nextvalue, 200);
    if (trial.irrelevants.latency > 800){trial.irrelevants.insertstimulustime(text.tooslow, 800)}
    ]   
/branch= [if(trial.irrelevants.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>


<trial targets>
/ ontrialbegin = [
  trial.targets.resetstimulusframes();
  trial.targets.insertstimulustime(list.targets.nextvalue, 200);
    if (trial.targets.latency > 800){trial.targets.insertstimulustime(text.tooslow, 800)}
    ]    
/branch= [if (trial.targets.responsetext == "l")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("s") // yes = s-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial probes>
/ ontrialbegin = [
  trial.probes.resetstimulusframes();
  trial.probes.insertstimulustime(list.probes.nextvalue, 200);
    if (trial.probes.latency > 800){trial.probes.insertstimulustime(text.tooslow, 800)}
    ]    
/branch= [if (trial.probes.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("l")
/timeout = 2500
/beginresponsetime = 0
</trial>

TRIAL SOUNDS________
<trial irrelevants_sounds>
/ ontrialbegin = [
  trial.irrelevants_sounds.resetstimulusframes();
  trial.irrelevants_sounds.insertstimulustime(list.irrelevants_sounds.nextvalue, 200);
    if (trial.irrelevants_sounds.latency > 1800){trial.irrelevants_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.irrelevants_sounds.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial targets_sounds>
/ ontrialbegin = [
  trial.targets_sounds.resetstimulusframes();
  trial.targets_sounds.insertstimulustime(list.targets_sounds.nextvalue, 200);
    if (trial.targets_sounds.latency > 1800){trial.targets_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.targets_sounds.responsetext == "l")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("s") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial probes_sounds>
/ ontrialbegin = [
  trial.probes_sounds.resetstimulusframes();
  trial.probes_sounds.insertstimulustime(list.probes_sounds.nextvalue, 200);
    if (trial.probes_sounds.latency > 1800){trial.probes_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.probes_sounds.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>

You don't know what the response latency in the current trial will be /ontrialbegin, so the whole approach makes no sense. The stimulus will be inserted if the latency in the previous instance of that trial was greater than the value specified.

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: 12K, Visits: 100K
Dave - 10/5/2023
Amelinq - 10/5/2023
Hello,
First of all thank you, Dave, for all the previous help.
Last few days I puzzled over this:
In short; I have different trials (irrelevants, probes, targets, irrelevant_sounds, probes_sounds and targets_sounds). The ..._sounds trials need different 'tooslow' feedback since they are only finished playing after 1 second (and the other stimuli present right away on the screen).
I implemented the feedback in the script (in bold) but when I run the block, the too slow feedback doesn't always appear. Often 6 out of 30 trials (1 block = 30 trials) it doesn't.
I really don't understand how this happens. Does anyone have an idea?
Thank you for checking my script!

<trial irrelevants>
/ ontrialbegin = [
  trial.irrelevants.resetstimulusframes();
  trial.irrelevants.insertstimulustime(list.irrelevants.nextvalue, 200);
    if (trial.irrelevants.latency > 800){trial.irrelevants.insertstimulustime(text.tooslow, 800)}
    ]   
/branch= [if(trial.irrelevants.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>


<trial targets>
/ ontrialbegin = [
  trial.targets.resetstimulusframes();
  trial.targets.insertstimulustime(list.targets.nextvalue, 200);
    if (trial.targets.latency > 800){trial.targets.insertstimulustime(text.tooslow, 800)}
    ]    
/branch= [if (trial.targets.responsetext == "l")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("s") // yes = s-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial probes>
/ ontrialbegin = [
  trial.probes.resetstimulusframes();
  trial.probes.insertstimulustime(list.probes.nextvalue, 200);
    if (trial.probes.latency > 800){trial.probes.insertstimulustime(text.tooslow, 800)}
    ]    
/branch= [if (trial.probes.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no]
/validresponse = ("s","l")
/correctresponse = ("l")
/timeout = 2500
/beginresponsetime = 0
</trial>

TRIAL SOUNDS________
<trial irrelevants_sounds>
/ ontrialbegin = [
  trial.irrelevants_sounds.resetstimulusframes();
  trial.irrelevants_sounds.insertstimulustime(list.irrelevants_sounds.nextvalue, 200);
    if (trial.irrelevants_sounds.latency > 1800){trial.irrelevants_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.irrelevants_sounds.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial targets_sounds>
/ ontrialbegin = [
  trial.targets_sounds.resetstimulusframes();
  trial.targets_sounds.insertstimulustime(list.targets_sounds.nextvalue, 200);
    if (trial.targets_sounds.latency > 1800){trial.targets_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.targets_sounds.responsetext == "l")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("s") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>

<trial probes_sounds>
/ ontrialbegin = [
  trial.probes_sounds.resetstimulusframes();
  trial.probes_sounds.insertstimulustime(list.probes_sounds.nextvalue, 200);
    if (trial.probes_sounds.latency > 1800){trial.probes_sounds.insertstimulustime(text.tooslow, 1800)}
    ]
/branch= [if(trial.probes_sounds.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/timeout = 2500
/beginresponsetime = 0
</trial>

You don't know what the response latency in the current trial will be /ontrialbegin, so the whole approach makes no sense. The stimulus will be inserted if the latency in the previous instance of that trial was greater than the value specified.

FWIW, what you'll probably want to do is simply this: Always have the "too slow" stimulus in your trial's stimulus presentation sequence, have /beginresponsetime at 0 or 200 (if you want latency relative to the onset of the probe stimulus) and set /responseinterrupt to immediate, That way, if a participant responds before the "too slow" stimulus is scheduled to appear, they will not see it. If they take longer, they will.

<trial probes_sounds>
/ ontrialbegin = [
    trial.probes_sounds.resetstimulusframes();
    trial.probes_sounds.insertstimulustime(list.probes_sounds.nextvalue, 200);
]
/branch= [if(trial.probes_sounds.responsetext == "s")trial.wrong]
/stimulustimes = [0 = yes, no, soundicon; 1800=tooslow]
/validresponse = ("s","l")
/correctresponse = ("l") // no = l-key
/responseinterrupt = immediate
/timeout = 2500
/beginresponsetime = 0 // or 200
</trial>

Amelinq
Amelinq
Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)
Group: Forum Members
Posts: 19, Visits: 48
thank you once again

Amelinq
Amelinq
Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)Associate Member (243 reputation)
Group: Forum Members
Posts: 19, Visits: 48
Amelinq - 10/6/2023
thank you once again

it works perfect now :)

GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search