Random Time Interval Generation as task for Inquisit


Author
Message
pawelstrojny
pawelstrojny
Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)
Group: Forum Members
Posts: 43, Visits: 76

Hi,


I need to write a simple (?) script in which subjects will be asked to push one button (lets say "b") for some amount of time (lets say 10s = 10000ms) as "randomly"/arrhythmical as possible.


The one and only thing I need from this script is to measure response time of every push


- e.g. if subject pushed 3 times; (1st in t1; 2nd in t2; 3rd in t3)


script should record 3 response times (t1 - start; t2 - t1 and t3 - t2) -


basically I need the time gap between every two reactions.


I tried to write it like below, but I don't know how to make it record every push (not only the first one).


****script*****


<expt LoseFail>
/ blocks = [
                1 = Instruction;
                2 = Task;
                3 = End_Debriefing

            ]
</expt>

***Blocks***

<block instruction>
/ trials = [1=instruction]
</block>

<block task>
/ trials = [1=task]
</block>

<block end_debriefing>
/ trials = [1=debriefing]
</block>

***Trials***

<trial instruction>
/ stimulusframes = [1=instructions]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial task>
/ stimulustimes = [0 = start]
/ validresponse = ("b")
/ responsetime = 0
/ trialduration = 10000
</trial>

<trial debriefing>
/ stimulusframes = [1=debriefing]
/ validresponse = (" ")
/ recorddata = false
</trial>

***Items***

<text instructions>
/ items = ("instructions")
/ size = (75%, 75%)
/ hjustify = left
</text>

<text start>
/ items = ("Please push "b" as random as you can")
/ erase = false
/ size = (75%, 75%)
/ hjustify = left
</text>

<text debriefing>
/ items = ("debriefing")
/ size = (75%, 75%)
/ hjustify = left
</text>


*********


Could you please help me with that?


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: 103K

<values>
/ start = 0
/ timeoflastresponse = 0
/ timebetweenresponses = 0
</values>


<expt LoseFail>
/ blocks = [
                1 = Instruction;
                2 = Task;
                3 = End_Debriefing

            ]
</expt>

***Blocks***

<block instruction>
/ trials = [1=instruction]
</block>

<block task>
/ trials = [1=task]
/ timeout = 10000
</block>

<block end_debriefing>
/ trials = [1=debriefing]
</block>

***Trials***

<trial instruction>
/ stimulusframes = [1=instructions]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial task>
/ ontrialbegin = [if(trial.task.trialcount==0)values.start=script.elapsedtime
    else values.start=values.timeoflastresponse]
/ ontrialend = [values.timeoflastresponse=script.elapsedtime]
/ ontrialend = [values.timebetweenresponses=values.timeoflastresponse-values.start]

/ stimulustimes = [0 = start]
/ validresponse = ("b")
/ responsetime = 0
/ branch = [trial.task]
</trial>

<trial debriefing>
/ stimulusframes = [1=debriefing]
/ validresponse = (" ")
/ recorddata = false
</trial>

***Items***

<text instructions>
/ items = ("instructions")
/ size = (75%, 75%)
/ hjustify = left
</text>

<text start>
/ items = ("Please push ~"b~" as random as you can")
/ erase = false
/ size = (75%, 75%)
/ hjustify = left
</text>

<text debriefing>
/ items = ("debriefing")
/ size = (75%, 75%)
/ hjustify = left
</text>

<data>
/ columns = [trialnum, values.start, values.timeoflastresponse, values.timebetweenresponses]
</data>


pawelstrojny
pawelstrojny
Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)
Group: Forum Members
Posts: 43, Visits: 76

Thank you!


pawelstrojny
pawelstrojny
Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)
Group: Forum Members
Posts: 43, Visits: 76

Hi,


Basing on Dave's solution I prepared script but something isn't working properly.


Problematic script elements:


<block practice>
/ trials = [1=practice]
</block>


which refers to:


<trial practice>
/ timeout = 10000
/ ontrialbegin = [if(trial.practice.trialcount==0)values.start=script.elapsedtime
    else values.start=values.timeoflastresponse]
/ ontrialend = [values.timeoflastresponse=script.elapsedtime]
/ ontrialend = [values.timebetweenresponses=values.timeoflastresponse-values.start]
/ stimulustimes = [0 = start]
/ validresponse = ("b")
/ responsetime = 0
/ branch = [trial.practice]
/ recorddata = false
</trial>


When I test only trial element (blue "play" triangle) - everything works, when I test block (again blue triangle) or a whole script - trial doesn't ends after 10 seconds (the message is being displayed until I reset script by Alt+Esc)


Where is the mistake?


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: 103K

The /timeout needs to be at the <block> level just as in the example I gave you.


pawelstrojny
pawelstrojny
Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)
Group: Forum Members
Posts: 43, Visits: 76

So if I want to have sequence in block (eg. task - feedback) I need to use two blocks?



I mean:


<block block1>
/ trials = [1=task; 2=control]
</block>


referring to:


<trial task>
/ timeout = 10000
/ ontrialbegin = [if(trial.task.trialcount==0)values.start=script.elapsedtime
    else values.start=values.timeoflastresponse]
/ ontrialend = [values.timeoflastresponse=script.elapsedtime]
/ ontrialend = [values.timebetweenresponses=values.timeoflastresponse-values.start]
/ stimulustimes = [0 = start]
/ validresponse = ("b")
/ responsetime = 0
/ branch = [trial.task]
</trial>


and


<survey control>
/ pages = [1=control]
/ itemspacing = 2%
/ showpagenumbers = false
/ responsefontstyle = ("Arial", 1.1%, false, false, false, false, 5)
/ itemfontstyle = ("Arial", 1.5%, false, false, false, false, 5)
/ pagefontstyle = ("Arial", 1.8%, false, false, false, false, 5)
</survey>


And I want to have 10 sec task and then survey element.


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: 103K

Yes, of course.


pawelstrojny
pawelstrojny
Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)
Group: Forum Members
Posts: 43, Visits: 76

Ok, so I can do that.


But in documentation about trial element the "timeout" command is present...


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: 103K

Yes it is (and it works as expected), but that's irrelevant to your problem. With <trial>-level /timeout, the specified /timeout *applies to every instance of the given trial* -- whenever a new trial starts, that trial has 10 secs to complete. That's the way it should be. And your script will run an infinite amount of trials due to the /branch, it'll never stop (and it should not).


pawelstrojny
pawelstrojny
Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)Guru (6.4K reputation)
Group: Forum Members
Posts: 43, Visits: 76

Hi,


I have one more question:


I need to verify if subjects are pressing the button more than 5 times (to calculate the level of randomness later), I figured out that I need to add branch which will decide about the feedback (if he pressed less than 6 times - feedback "you need to press more" or if 6 or more  - no feedback).


Which I don't know is how can I make Inquisit count the number of valid responses in a trial?


Because I need an expression in branch (e.g.) ... [responsecount] > 5 ... Am I correct?


GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search