Emotional Stroop


Author
Message
Igor Iarrobino
Igor Iarrobino
Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)
Group: Forum Members
Posts: 20, Visits: 59
Hello everyone,

I am trying to modify an IQx script about emotional stroop to fit it right in our intensions.
It is quite hard to find a solution as I have to change a lot of specifics and I am pretty lost!

the experiment should run like this:
"Participants categorize words as "disgust/disgusto" feeling or a "fear/paura" feeling.
The words are presented at the center of images. The image either show a word congruent face emotion
(e.g. "disgsut" face paired with word "disgustato/nauseato/stomacato") or an incongruent one (e.g. "disgust face" paired with word "impaurito/intimorito/terorizzato").
Images depict disgust/disgusto and fear/paura emotions of Caucasian faces.
Participants work through 2 test blocks: one block presents an equal number of congruent and incongruent pairings. In one block, the participant have to respond to the emotional word.
In another block, the participant have to respond to the emotional face.
Block order is determined randomly.
In this script, the response button for 'disgust' is located on the left side and the response button for 'fear/paura' is located
on the right side of the screen."

Actually, I modified it a lot to follow our goals, but I would need a huge help now.

Could someone have  look at the script and suggest/write/modify in order to run it properly? I would appreciate a lot. Sorry beforehand. And thnk you very much before hand!
(and I would need some suggestions to have a leftfear(paura) script).
You can find attached the entire script I tried to modify.


Attachments
emostroop_leftdisgust_3.iqx (70 views, 60.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: 104K
Igor Iarrobino - 7/8/2024
Hello everyone,

I am trying to modify an IQx script about emotional stroop to fit it right in our intensions.
It is quite hard to find a solution as I have to change a lot of specifics and I am pretty lost!

the experiment should run like this:
"Participants categorize words as "disgust/disgusto" feeling or a "fear/paura" feeling.
The words are presented at the center of images. The image either show a word congruent face emotion
(e.g. "disgsut" face paired with word "disgustato/nauseato/stomacato") or an incongruent one (e.g. "disgust face" paired with word "impaurito/intimorito/terorizzato").
Images depict disgust/disgusto and fear/paura emotions of Caucasian faces.
Participants work through 2 test blocks: one block presents an equal number of congruent and incongruent pairings. In one block, the participant have to respond to the emotional word.
In another block, the participant have to respond to the emotional face.
Block order is determined randomly.
In this script, the response button for 'disgust' is located on the left side and the response button for 'fear/paura' is located
on the right side of the screen."

Actually, I modified it a lot to follow our goals, but I would need a huge help now.

Could someone have  look at the script and suggest/write/modify in order to run it properly? I would appreciate a lot. Sorry beforehand. And thnk you very much before hand!
(and I would need some suggestions to have a leftfear(paura) script).
You can find attached the entire script I tried to modify.

You should first explain what you already modified, how, and why in sufficient detail. Then you should explain in sufficient detal what exactly you are stuck with / don't know how to do. None of this is clear to me from your post.

Finally, if you script requires external files (images etc.) to run, you should always provide those files along with the script.

Igor Iarrobino
Igor Iarrobino
Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)
Group: Forum Members
Posts: 20, Visits: 59
Dave - 7/8/2024
Igor Iarrobino - 7/8/2024
Hello everyone,

I am trying to modify an IQx script about emotional stroop to fit it right in our intensions.
It is quite hard to find a solution as I have to change a lot of specifics and I am pretty lost!

the experiment should run like this:
"Participants categorize words as "disgust/disgusto" feeling or a "fear/paura" feeling.
The words are presented at the center of images. The image either show a word congruent face emotion
(e.g. "disgsut" face paired with word "disgustato/nauseato/stomacato") or an incongruent one (e.g. "disgust face" paired with word "impaurito/intimorito/terorizzato").
Images depict disgust/disgusto and fear/paura emotions of Caucasian faces.
Participants work through 2 test blocks: one block presents an equal number of congruent and incongruent pairings. In one block, the participant have to respond to the emotional word.
In another block, the participant have to respond to the emotional face.
Block order is determined randomly.
In this script, the response button for 'disgust' is located on the left side and the response button for 'fear/paura' is located
on the right side of the screen."

Actually, I modified it a lot to follow our goals, but I would need a huge help now.

Could someone have  look at the script and suggest/write/modify in order to run it properly? I would appreciate a lot. Sorry beforehand. And thnk you very much before hand!
(and I would need some suggestions to have a leftfear(paura) script).
You can find attached the entire script I tried to modify.

You should first explain what you already modified, how, and why in sufficient detail. Then you should explain in sufficient detal what exactly you are stuck with / don't know how to do. None of this is clear to me from your post.

Finally, if you script requires external files (images etc.) to run, you should always provide those files along with the script.

Hi Dave,

I am very sorry for I have been not so clear.
I am very soory because I did not answer to your reply before as well.

I have been through this issue and I made it right.

Thank you anyway for your kind reply.

I''be coming to you for the next issue to solve :laugh:

Have a nice day!


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: 104K
Igor Iarrobino - 7/17/2024
Dave - 7/8/2024
Igor Iarrobino - 7/8/2024
Hello everyone,

I am trying to modify an IQx script about emotional stroop to fit it right in our intensions.
It is quite hard to find a solution as I have to change a lot of specifics and I am pretty lost!

the experiment should run like this:
"Participants categorize words as "disgust/disgusto" feeling or a "fear/paura" feeling.
The words are presented at the center of images. The image either show a word congruent face emotion
(e.g. "disgsut" face paired with word "disgustato/nauseato/stomacato") or an incongruent one (e.g. "disgust face" paired with word "impaurito/intimorito/terorizzato").
Images depict disgust/disgusto and fear/paura emotions of Caucasian faces.
Participants work through 2 test blocks: one block presents an equal number of congruent and incongruent pairings. In one block, the participant have to respond to the emotional word.
In another block, the participant have to respond to the emotional face.
Block order is determined randomly.
In this script, the response button for 'disgust' is located on the left side and the response button for 'fear/paura' is located
on the right side of the screen."

Actually, I modified it a lot to follow our goals, but I would need a huge help now.

Could someone have  look at the script and suggest/write/modify in order to run it properly? I would appreciate a lot. Sorry beforehand. And thnk you very much before hand!
(and I would need some suggestions to have a leftfear(paura) script).
You can find attached the entire script I tried to modify.

You should first explain what you already modified, how, and why in sufficient detail. Then you should explain in sufficient detal what exactly you are stuck with / don't know how to do. None of this is clear to me from your post.

Finally, if you script requires external files (images etc.) to run, you should always provide those files along with the script.

Hi Dave,

I am very sorry for I have been not so clear.
I am very soory because I did not answer to your reply before as well.

I have been through this issue and I made it right.

Thank you anyway for your kind reply.

I''be coming to you for the next issue to solve :laugh:

Have a nice day!

Glad to hear you're up and running . Thanks for letting me know!

Igor Iarrobino
Igor Iarrobino
Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)
Group: Forum Members
Posts: 20, Visits: 59
Dave - 7/17/2024
Igor Iarrobino - 7/17/2024
Dave - 7/8/2024
Igor Iarrobino - 7/8/2024
Hello everyone,

I am trying to modify an IQx script about emotional stroop to fit it right in our intensions.
It is quite hard to find a solution as I have to change a lot of specifics and I am pretty lost!

the experiment should run like this:
"Participants categorize words as "disgust/disgusto" feeling or a "fear/paura" feeling.
The words are presented at the center of images. The image either show a word congruent face emotion
(e.g. "disgsut" face paired with word "disgustato/nauseato/stomacato") or an incongruent one (e.g. "disgust face" paired with word "impaurito/intimorito/terorizzato").
Images depict disgust/disgusto and fear/paura emotions of Caucasian faces.
Participants work through 2 test blocks: one block presents an equal number of congruent and incongruent pairings. In one block, the participant have to respond to the emotional word.
In another block, the participant have to respond to the emotional face.
Block order is determined randomly.
In this script, the response button for 'disgust' is located on the left side and the response button for 'fear/paura' is located
on the right side of the screen."

Actually, I modified it a lot to follow our goals, but I would need a huge help now.

Could someone have  look at the script and suggest/write/modify in order to run it properly? I would appreciate a lot. Sorry beforehand. And thnk you very much before hand!
(and I would need some suggestions to have a leftfear(paura) script).
You can find attached the entire script I tried to modify.

You should first explain what you already modified, how, and why in sufficient detail. Then you should explain in sufficient detal what exactly you are stuck with / don't know how to do. None of this is clear to me from your post.

Finally, if you script requires external files (images etc.) to run, you should always provide those files along with the script.

Hi Dave,

I am very sorry for I have been not so clear.
I am very soory because I did not answer to your reply before as well.

I have been through this issue and I made it right.

Thank you anyway for your kind reply.

I''be coming to you for the next issue to solve :laugh:

Have a nice day!

Glad to hear you're up and running . Thanks for letting me know!

Thank you very much Dave.

'The next issue to solve' is here right away! :D

You should first explain what you already modified, how, and why in sufficient detail
As you know, I'm trying to modify the emostroop script  provided by Inquisit. 

INQUISIT SCRIPT is made of 2 practice blocks (only words; words on pics - response to the emotional words), two test blocks (equivalent number of congruent and incongruent stimuli; more congruent stimuli) and their corresponding instructions.

MY MODIFIED SCRIPT is made of 3 practice blocks (only words; words on pics - response to the emotional words; words on pics - response to the emotional face), two test blocks (words on pics - response to the emotional words; words on pics - response to the emotional face) and their corresponding instructions.

As I told you yesterday (I guess), it is running so far, but I have a major problem.
It is that: after failing any of each practice block, the script should bring you back to the failed block again. If you answer all the responses correct, it should go further (100% correct responses). 
BUT, it happens that if I fail a practice block it doesn't go back to that failed block, but further, and so on until the blocks and isntructions overlap.

How could I solve this problem, please?

I attach to this message the script and stimuli as you requested last time.
Thank you again very much in advance.

Have a nice evening,
Igor

<usermanual>
___________________________________________________________________________________________________________________    

                                    ABCD Emotional Stroop (keyboard version)
                                -'DISGUSTO' key on the LEFT, 'PAURA' key on the RIGHT
___________________________________________________________________________________________________________________

Script Author: IGOR IARROBINO, Research Fellow (igor.iarrobino@unimore.it/igor.iarrobino@gmail.com) for UNIMORE
Date: July 2024

Script Copyright © 05-18-2022 Millisecond Software

The script was originally designed for ABCD to be run on ipads and
was adapted by Millisecond to run with keyboards for the Millisecond Library in its former version.
This is an adaptation of ABCD Emotional Stroop to a custom version of the task.
___________________________________________________________________________________________________________________
TASK DESCRIPTION    
___________________________________________________________________________________________________________________    

Participants categorize words as "disgust/disgusto" feeling or a "fear/paura" feeling.
The words are presented at the center of images. The image either show a word congruent face emotion
(e.g. "disgsut" face paired with word "disgustato/nauseato/stomacato") or an incongruent one (e.g. "disgust face" paired with word "impaurito/intimorito/terorizzato").
Images depict disgust/disgusto and fear/paura emotions of Caucasian faces.
Participants work through 2 test blocks: one block presents an equal number of congruent and incongruent pairings. In one block, the participant have to respond to the emotional word.
In another block, the participant have to respond to the emotional face.
Block order is determined randomly.

In this script, the response button for 'disgust' is located on the left side and the response button for 'fear/paura' is located
on the right side of the screen.

___________________________________________________________________________________________________________________    
DURATION
___________________________________________________________________________________________________________________    
the default set-up of the script takes appr. 10 minutes to complete

___________________________________________________________________________________________________________________    
DATA FILE INFORMATION
___________________________________________________________________________________________________________________
The default data stored in the data files are:

(1) Raw data file: 'emotionalstroop_ld_raw*.iqdat' (a separate file for each participant)*

build:                            The specific Inquisit version used (the 'build') that was run
computer.platform:                the platform the script was run on (win/mac/ios/android)
date, time:                     date and time script was run
subject, group:                 with the current subject/groupnumber
session:                        with the current session id

blockcode, blocknum:            the name and number of the current block (built-in Inquisit variable)
trialcode, trialnum:             the name and number of the currently recorded trial (built-in Inquisit variable)
                                    Note: trialnum is a built-in Inquisit variable; it counts all trials run; even those
                                    that do not store data to the data file such as feedback trials. Thus, trialnum
                                    may not reflect the number of main trials run per block.
                                
keyAssignment:                    "leftdisgust" => left response key is disgust (disgusto); right response key is fear (paura)                                
                                    
wordposition:                    center
word_y:                            stores the vertical coordinate of the current word (in % of canvas height)
congruence:                        1 = congruent; 2 = incongruent (emotion word and emotion image depict opposite emotions)
selectStim:                        itemnumber of selected stimulus

stimulusitem.1-:                the presented stimuli in order of trial presentation
stimulusitem.3                    1) an empty stimulus (clearscreen)
                                2) presented image
                                3) presented word
                                        
correctButton:                    stores the correct response button for the current trial

response:                        the participant's response (scancode of response key)
                                16 = Z = left ("disgust/disgusto")
                                25 = M = right ("fear/paura")

correct:                        accuracy of response: 1 = correct response; 0 = otherwise
latency:                         the response latency (in ms); measured from: onset of image/word pair
list.accuracy.mean:                proportion correct of current block        


(2) Summary data file: 'abcdemotionalstroop_ln_summary*.iqdat' (a separate file for each participant)*

inquisit.version:                Inquisit version run
computer.platform:                the platform the script was run on (win/mac/ios/android)
startdate:                        date script was run
starttime:                        time script was started
subjectid:                        assigned subject id number
groupid:                        assigned group id number
sessionid:                        assigned session id number
elapsedtime:                    time it took to run script (in ms); measured from onset to offset of script
completed:                        0 = script was not completed (prematurely aborted);
                                1 = script was completed (all conditions run)
                                
                                
keyAssignment:                    "leftdisgust" => left response key is disgust (disgusto); right response key is fear (paura)
                                
ACC_practice1:                    proportion correct in final practice1 run
practice1Runs:                    number of practice1 runs needed
ACC_practice2:                    proportion correct in final practice2 run
practice2Runs:                    number of practice2 runs needed

ACC_all:                        proportion correct overall (across all test trials)
ACC_equal:                        proportion correct in "equal numbers of congruentincongruent pairings" block
ACC_equalCongruent:                proportion correct in "equal numbers of congruentincongruent pairings" block
ACC_equalIncongruent:            proportion correct in "equal numbers of congruentincongruent pairings" block
ACC_congruent:                    proportion correct in "congruent" pairings trials (across test blocks)
ACC_incongruent:                proportion correct in "incongruent" pairings trials (across test blocks)

meanRT_all:                     mean correct latency (in ms) overall
meanRT_equal:                    mean correct latency (in ms) in "equal numbers of congruentincongruent pairings" block
meanRT_equalCongruent:            mean correct latency (in ms) in "equal numbers of congruentincongruent pairings" block
meanRT_equalIncongruent:        mean correct latency (in ms) in "equal numbers of congruentincongruent pairings" block
meanRT_congruent:                mean correct latency (in ms) in "congruent" pairings trials (across test blocks)
meanRT_incongruent:                mean correct latency (in ms) in "incongruent" pairings trials (across test blocks)

* separate data files: to change to one data file for all participants (on Inquisit Lab only), go to section
"DATA" and follow further instructions

___________________________________________________________________________________________________________________    
EXPERIMENTAL SET-UP
___________________________________________________________________________________________________________________    

1. Practice Block: 8 trials selected from 6 possible combinations
=> feedback provided
=> practice block is repeated if proportion correct of the last 8 trials is < 100%

2. 2 Practice Blocks: 4 trials (disgusto-congruent, disgusto-incongruent, paura-congruent, paura-incongruent) each

1) Respond to Word
2) Respond to Face

For both:
=> feedback provided
=> practice block is repeated if proportion correct is < 100%


3. 2 Test Blocks:

(1) Respond to Word - Equal number of congruent and incongruent pairings
-24 congruent word valence - pic valence pairings (fixed pairs)
-24 incongruent word valence - pic valence pairings (fixed pairs)

(2) Respond to Face - Equal number of congruent and incongruent pairings
-24 congruent word valence - pic valence pairings (fixed pairs)
-24 incongruent word valence - pic valence pairings (fixed pairs)
    
Trial Sequence:
Word/image (for: 3000ms) -> ITI: 2000ms (during practice: ITI provides feedback for 2000ms)

___________________________________________________________________________________________________________________    
EDITABLE CODE
___________________________________________________________________________________________________________________    
check below for (relatively) easily editable parameters, stimuli, instructions etc.
Keep in mind that you can use this script as a template and therefore always "mess" with the entire code
to further customize your experiment.

The parameters you can change are:

Duration Parameters:
/wordPresentationTime_practice:                    word duration (in ms) during practice trials (default: 2500ms)
/feedbackDuration:                                feedback duration (in ms) during practice
/wordPresentationTime_test:                        word duration (in ms) during test trials (default: 2500ms)
/ITI:                                            intertrial interval (in ms) between test trials (default: 1500ms)
/readyDuration:                                    duration (in ms) of ready trial (default: 3000ms)

Interface:
/wordSize:                                        sizing of words proportional to canvas height (default: 5%)
/picsize:                                        sizing of images proportional to canvas height (default: 45%)
/top_y:                                            vertical coordinate of top word in relation to canvas (default: 40%)
/bottom_y:                                        vertical coordinate of bottom word in relation to canvas (default: 60%)
                                                    Note: top of canvas = 0%; bottom of canvas = 100%

/leftresponsekey:                                the left response key (default: "Z")
/rightresponsekey:                                the right response key (default: "M")

</usermanual>



**************************************************************************************************************
**************************************************************************************************************
    EDITABLE PARAMETERS: change editable parameters here
**************************************************************************************************************
**************************************************************************************************************
Word presented for max. 3000ms (response window same) -> Feedback (correct, incorrect, no response) for 2000ms; ITI: 1500ms

<parameters>
/ wordPresentationTime_practice = 3000
/feedbackDuration = 2000
/wordPresentationTime_test = 3000
/ITI = 1500
/readyDuration = 2000

/wordSize = 7%
/picsize = 50%
/top_y = 50%
/bottom_y = 50%

/leftresponsekey = "Z"
/rightresponsekey = "M"
</parameters>

**************************************************************************************************************
**************************************************************************************************************
    EDITABLE INSTRUCTIONS: change instructions here
**************************************************************************************************************
**************************************************************************************************************
<instruct>
/ fontstyle = ("Arial", 3%, false, false, false, false, 5, 1)
</instruct>


<item instructions>
/1 = "

EMOTIONAL STROOP"

/2 = "PRATICA LESSICO

In questa breve pratica iniziale le verranno presentate, una alla volta, le PAROLE che utilizzeremo durante tutto l'esperimento. Esse esprimono degli stati emotivi di DISGUSTO o di PAURA.

Le PAROLE che le verranno presentate sono:
~n~n~n~n~n~n"

/3 = "Le verrà chiesto di premere '<%values.disgustokey%>' se la parola presentata esprime uno stato emotivo di DISGUSTO.

Invece, le verrà chiesto di premere '<%values.paurakey%>' se la parola presentata esprime uno stato emotivo di PAURA.

Premi la BARRA quando è pronto ad iniziare la pratica."

/4 = "PRATICA PAROLA
Le compariranno delle parole emotive sovraimpresse su di un volto che, a sua volta, esprime un'emozione.
Le verrà chiesto di riconoscere se la PAROLA presentata esprime un'emozione di DISGUSTO, oppure se essa esprime un'emozione di PAURA, premendo i tasti corrispondenti.
Il compito consiste nel rispondere alla PAROLA, ignorando il volto che ne fa da sfondo.
Ricordi:
Per il DISGUSTO prema '<%values.disgustokey%>'
Per la PAURA prema '<%values.paurakey%>'"

/5 = "Grazie per aver svolto la prova.

Adesso svolgerà il test.

Prema la BARRA per continuare"

/6 = "PRATICA VOLTO
Le compariranno dei volti emotivi su cui sono sovraimpresse delle parole che, a loro volta, esprimono un'emozione.
Le verrà chiesto di riconoscere se il VOLTO presentato esprime un'emozione di DISGUSTO, oppure se esso esprime un'emozione di PAURA, premendo i tasti corrispondenti.
Il compito consiste nel rispondere al VOLTO, ignorando la parola sovraimpressa.
Ricordi:
Per il DISGUSTO prema '<%values.disgustokey%>'
Per la PAURA prema '<%values.paurakey%>'"

/7 = "Grazie per aver svolto la prova.

Prema la BARRA per andare al Test"

/8 = "TEST PAROLA.
Le compariranno delle parole emotive sovraimpresse su un volto che, a sua volta, esprime un'emozione.
Le verrà chiesto di riconoscere se le PAROLE presentate esprimino un'emozione di DISGUSTO, oppure se esse esprimino un'emozione di PAURA, premendo i tasti corrispondenti.
Il compito consiste nel rispondere alle PAROLE, ignorando i volti che ne fanno da sfondo."

/9 = "Ricordi:
Per il DISGUSTO prema '<%values.disgustokey%>'
Per la PAURA prema '<%values.paurakey%>'

Inoltre, ricordi di rispondere tenendo in cosiderazione soltanto le PAROLE!"

/10 = "TEST VOLTO
Le compariranno dei volti emotivi su cui sono sovraimpresse delle parole che, a loro volta, esprimono un'emozione.
Le verrà chiesto di riconoscere se i VOLTI presentati esprimino un'emozione di DISGUSTO, oppure se essi esprimino un'emozione di PAURA, premendo i tasti corrispondenti.
Il compito consiste nel rispondere ai VOLTI, ignorando le parole sovraimpresse ad essi."

/11 = "Ricordi:
Per il DISGUSTO prema '<%values.disgustokey%>'
Per la PAURA prema '<%values.paurakey%>'

Inoltre, ricordi di rispondere tenendo in cosiderazione soltanto i VOLTI!"

/12 = "Lei è a metà strada!"

/13 = "Grazie per aver partecipato!"

/14 = "Grazie per aver svolto la prima prova."

</item>


<item continueButtons>
/1 = "Prema la BARRA per iniziare"
/2 = "Prema la BARRA per continuare"
/3 = "Prema la BARRA per iniziare"
/4 = "Prema la BARRA per iniziare"
/5 = "Prema la BARRA per iniziare"
/6 = "Prema la BARRA per iniziare"
/7 = "Prema la BARRA per continuare"
/8 = "Prema la BARRA per continuare"
/9 = "Prema la BARRA per iniziare"
/10 = "Prema la BARRA per continuare"
/11 = "Prema la BARRA per iniziare"
/12 = "Prema la BARRA per continuare"
/13 = "Stop"
/14 = "Prema la BARRA per continuare"
</item>

<text getReadyMessage>
/ items = ("Si tenga pronto! Il test sta per cominciare...

<%expressions.buttoninstruct3%>")
/ position = (50%, 50%)
/ fontstyle = ("Arial", 3.5%, true, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (80%, 80%)
</text>

<text disgustoKeyReminder>
/ items = ("DISGUSTO = <%values.disgustokey%>")
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ size = (30%, 5%)
/ vjustify = center
/ txcolor = BLACK
/ position = (25%, 90%)
/ erase = false
</text>

<text pauraKeyReminder>
/ items = ("PAURA = <%values.paurakey%>")
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ size = (30%, 5%)
/ vjustify = center
/ txcolor = BLACK
/ position = (75%, 90%)
/ erase = false
</text>

<text disgustoButton_instruct>
/ items = ("DISGUSTO = Prema '<%values.disgustokey%>'")
/ position = (25%, 60%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (45%, 10%)
/ txcolor = black
</text>

<text pauraButton_instruct>
/ items = ("PAURA = Prema '<%values.paurakey%>'")
/ position = (75%, 60%)
/ fontstyle = ("Arial", 5%, true, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (45%, 10%)
/ txcolor = black
</text>

<text disgustoEmotionExamples>
/ items = ("disgustato~nnauseato~nstomacato")
/ position = (25%, 70%)
/ fontstyle = ("Arial", 4%, true, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (40%, 40%)
</text>

<text pauraEmotionExamples>
/ items = ("intimorito~nimpaurito~nterrorizzato")
/ position = (75%, 70%)
/ fontstyle = ("Arial", 4%, true, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (40%, 40%)
</text>


*******************************
General Helper Instructions
******************************

<text repeatPractice>
/ items = ("Ci provi ancora!")
/ fontstyle = ("Arial", 4.00%, false, false, false, false, 5, 1)
/ size = (80%, 40%)
/ position = (50%, 30%)
</text>

<text repeatPractice2W>
/ items = ("Ci provi ancora!")
/ fontstyle = ("Arial", 4.00%, false, false, false, false, 5, 1)
/ size = (80%, 40%)
/ position = (50%, 30%)
</text>

<text repeatPractice2F>
/ items = ("Ci provi ancora!")
/ fontstyle = ("Arial", 4.00%, false, false, false, false, 5, 1)
/ size = (80%, 40%)
/ position = (50%, 30%)
</text>

<text exit>
/ items = ("<prema la BARRA per uscire>")
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
/ position = (50%, 90%)
/ size = (80%, 5%)
/ vjustify = center
</text>

<expressions>
/buttoninstruct1 = if (computer.touch && !computer.haskeyboard) {"response button";}
else {
"un tasto";}
/buttoninstruct2 = if (computer.touch && !computer.haskeyboard) {"button";}
else {
"un altro tasto";}
/buttoninstruct3 = if (computer.touch && !computer.haskeyboard) {"Posizioni gli indici della mano destra e della mano sinistra rispettivamente sul tasto sinistro e sul tasto destro";}
else {
"Posizioni gli indici a sinistra su '<%parameters.leftresponsekey%>' e a destra su '<%parameters.rightresponsekey%>'";}
</expressions>

**************************************************************************************************************
**************************************************************************************************************
    EDITABLE STIMULI
**************************************************************************************************************
**************************************************************************************************************

********************************************
practice 1
********************************************

<list practice1_itemnumbers>
/ items = (1, 2, 3, 4, 5, 6)
/ replace = false
/ resetinterval = 0
</list>

<item words_practice1>
/1 = "disgustato"
/2 = "nauseato"
/3 = "stomacato"
/4 = "intimorito"
/5 = "impaurito"
/6 = "terrorizzato"
</item>

<item correctButton_practice1>
/1 = "disgustoButton"
/2 = "disgustoButton"
/3 = "disgustoButton"
/4 = "pauraButton"
/5 = "pauraButton"
/6 = "pauraButton"
</item>

<item feedback>
/1 = "Corretto"
/2 = "Non corretto"
/3 = "Tempo scaduto"
</item>

********************************************
practice 2W (F = word response block)
********************************************

<list practice2W_itemnumbers>
/ items = (1, 2, 3, 4)
/ replace = false
/ resetinterval = 0
</list>

<item pics_practice2W>
/1 = "F03-Disgust-Apex.jpg"
/2 = "F04-Fear-Apex.jpg"
/3 = "M03-Disgust-Apex.jpg"
/4 = "M06-Fear-Apex.jpg"
</item>

<item words_practice2W>
/1 = "nauseato"
/2 = "intimorito"
/3 = "terrorizzato"
/4 = "stomacato"
</item>

<list wordPositions_practice2W>
/ items = (0, 0, 0, 0)
/ select = values.selectStim
</list>

<list congruency_practice2W>
/items = (1, 1, 2, 2)
/ select = values.selectStim
</list>

<item correctButton_practice2W>
/1 = "disgustoButton"
/2 = "pauraButton"
/3 = "pauraButton"
/4 = "disgustoButton"
</item>

********************************************
practice 2F (F = face response block)
********************************************

<list practice2F_itemnumbers>
/ items = (1, 2, 3, 4)
/ replace = false
/ resetinterval = 0
</list>

<item pics_practice2F>
/1 = "F03-Disgust-Apex.jpg"
/2 = "F04-Fear-Apex.jpg"
/3 = "M03-Disgust-Apex.jpg"
/4 = "M06-Fear-Apex.jpg"
</item>

<item words_practice2F>
/1 = "nauseato"
/2 = "intimorito"
/3 = "terrorizzato"
/4 = "stomacato"
</item>

<list wordPositions_practice2F>
/ items = (0, 0, 0, 0)
/ select = values.selectStim
</list>

<list congruency_practice2F>
/items = (1, 1, 2, 2)
/ select = values.selectStim
</list>

<item correctButton_practice2F>
/1 = "disgustoButton"
/2 = "pauraButton"
/3 = "disgustoButton"
/4 = "pauraButton"
</item>

****************************
TestEW
(E = equal number of congruent and incongruent pairings; W = word response block)
****************************

<list testEW_itemnumbers>
/ 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, 42, 43, 44, 45, 46, 47, 48)
/ replace = false
/ resetinterval = 0
</list>

<item pics_testEW>
/1="F03-Disgust-Apex.jpg"
/2="F04-Disgust-Apex.jpg"
/3="F08-Disgust-Apex.jpg"
/4="M02-Disgust-Apex.jpg"
/5="M03-Disgust-Apex.jpg"
/6="M06-Disgust-Apex.jpg"
/7="F03-Disgust-Apex.jpg"
/8="F04-Disgust-Apex.jpg"
/9="F08-Disgust-Apex.jpg"
/10="M02-Disgust-Apex.jpg"
/11="M03-Disgust-Apex.jpg"
/12="M06-Disgust-Apex.jpg"
/13="F03-Disgust-Apex.jpg"
/14="F04-Disgust-Apex.jpg"
/15="F08-Disgust-Apex.jpg"
/16="M02-Disgust-Apex.jpg"
/17="M03-Disgust-Apex.jpg"
/18="M06-Disgust-Apex.jpg"
/19="F03-Disgust-Apex.jpg"
/20="F04-Disgust-Apex.jpg"
/21="F08-Disgust-Apex.jpg"
/22="M02-Disgust-Apex.jpg"
/23="M03-Disgust-Apex.jpg"
/24="M06-Disgust-Apex.jpg"
/25="F03-Fear-Apex.jpg"
/26="F04-Fear-Apex.jpg"
/27="F08-Fear-Apex.jpg"
/28="M02-Fear-Apex.jpg"
/29="M03-Fear-Apex.jpg"
/30="M06-Fear-Apex.jpg"
/31="F03-Fear-Apex.jpg"
/32="F04-Fear-Apex.jpg"
/33="F08-Fear-Apex.jpg"
/34="M02-Fear-Apex.jpg"
/35="M03-Fear-Apex.jpg"
/36="M06-Fear-Apex.jpg"
/37="F03-Fear-Apex.jpg"
/38="F04-Fear-Apex.jpg"
/39="F08-Fear-Apex.jpg"
/40="M02-Fear-Apex.jpg"
/41="M03-Fear-Apex.jpg"
/42="M06-Fear-Apex.jpg"
/43="F03-Fear-Apex.jpg"
/44="F04-Fear-Apex.jpg"
/45="F08-Fear-Apex.jpg"
/46="M02-Fear-Apex.jpg"
/47="M03-Fear-Apex.jpg"
/48="M06-Fear-Apex.jpg"
</item>

<item words_testEW>
/1="disgustato"
/2="nauseato"
/3="stomacato"
/4="disgustato"
/5="nauseato"
/6="stomacato"
/7="disgustato"
/8="nauseato"
/9="stomacato"
/10="disgustato"
/11="nauseato"
/12="stomacato"
/13="intimorito"
/14="impaurito"
/15="terrorizzato"
/16="intimorito"
/17="impaurito"
/18="terrorizzato"
/19="intimorito"
/20="impaurito"
/21="terrorizzato"
/22="intimorito"
/23="impaurito"
/24="terrorizzato"
/25="disgustato"
/26="nauseato"
/27="stomacato"
/28="disgustato"
/29="nauseato"
/30="stomacato"
/31="disgustato"
/32="nauseato"
/33="stomacato"
/34="disgustato"
/35="nauseato"
/36="stomacato"
/37="intimorito"
/38="impaurito"
/39="terrorizzato"
/40="intimorito"
/41="impaurito"
/42="terrorizzato"
/43="intimorito"
/44="impaurito"
/45="terrorizzato"
/46="intimorito"
/47="impaurito"
/48="terrorizzato"
</item>

<list congruency_testEW>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1)
/ select = values.selectStim
</list>

<item correctButton_testEW>
/1="disgustoButton"
/2="disgustoButton"
/3="disgustoButton"
/4="disgustoButton"
/5="disgustoButton"
/6="disgustoButton"
/7="disgustoButton"
/8="disgustoButton"
/9="disgustoButton"
/10="disgustoButton"
/11="disgustoButton"
/12="disgustoButton"
/13="pauraButton"
/14="pauraButton"
/15="pauraButton"
/16="pauraButton"
/17="pauraButton"
/18="pauraButton"
/19="pauraButton"
/20="pauraButton"
/21="pauraButton"
/22="pauraButton"
/23="pauraButton"
/24="pauraButton"
/25="disgustoButton"
/26="disgustoButton"
/27="disgustoButton"
/28="disgustoButton"
/29="disgustoButton"
/30="disgustoButton"
/31="disgustoButton"
/32="disgustoButton"
/33="disgustoButton"
/34="disgustoButton"
/35="disgustoButton"
/36="disgustoButton"
/37="pauraButton"
/38="pauraButton"
/39="pauraButton"
/40="pauraButton"
/41="pauraButton"
/42="pauraButton"
/43="pauraButton"
/44="pauraButton"
/45="pauraButton"
/46="pauraButton"
/47="pauraButton"
/48="pauraButton"
</item>

****************************
TestEF
(E = equal number of congruent and incongruent pairings; F = face response block)
****************************

<list testEF_itemnumbers>
/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, 42, 43, 44, 45, 46, 47, 48)
/ replace = false
/ resetinterval = 0
</list>

<item pics_testEF>
/1="F03-Disgust-Apex.jpg"
/2="F04-Disgust-Apex.jpg"
/3="F08-Disgust-Apex.jpg"
/4="M02-Disgust-Apex.jpg"
/5="M03-Disgust-Apex.jpg"
/6="M06-Disgust-Apex.jpg"
/7="F03-Disgust-Apex.jpg"
/8="F04-Disgust-Apex.jpg"
/9="F08-Disgust-Apex.jpg"
/10="M02-Disgust-Apex.jpg"
/11="M03-Disgust-Apex.jpg"
/12="M06-Disgust-Apex.jpg"
/13="F03-Disgust-Apex.jpg"
/14="F04-Disgust-Apex.jpg"
/15="F08-Disgust-Apex.jpg"
/16="M02-Disgust-Apex.jpg"
/17="M03-Disgust-Apex.jpg"
/18="M06-Disgust-Apex.jpg"
/19="F03-Disgust-Apex.jpg"
/20="F04-Disgust-Apex.jpg"
/21="F08-Disgust-Apex.jpg"
/22="M02-Disgust-Apex.jpg"
/23="M03-Disgust-Apex.jpg"
/24="M06-Disgust-Apex.jpg"
/25="F03-Fear-Apex.jpg"
/26="F04-Fear-Apex.jpg"
/27="F08-Fear-Apex.jpg"
/28="M02-Fear-Apex.jpg"
/29="M03-Fear-Apex.jpg"
/30="M06-Fear-Apex.jpg"
/31="F03-Fear-Apex.jpg"
/32="F04-Fear-Apex.jpg"
/33="F08-Fear-Apex.jpg"
/34="M02-Fear-Apex.jpg"
/35="M03-Fear-Apex.jpg"
/36="M06-Fear-Apex.jpg"
/37="F03-Fear-Apex.jpg"
/38="F04-Fear-Apex.jpg"
/39="F08-Fear-Apex.jpg"
/40="M02-Fear-Apex.jpg"
/41="M03-Fear-Apex.jpg"
/42="M06-Fear-Apex.jpg"
/43="F03-Fear-Apex.jpg"
/44="F04-Fear-Apex.jpg"
/45="F08-Fear-Apex.jpg"
/46="M02-Fear-Apex.jpg"
/47="M03-Fear-Apex.jpg"
/48="M06-Fear-Apex.jpg"
</item>

<item words_testEF>
/1="disgustato"
/2="nauseato"
/3="stomacato"
/4="disgustato"
/5="nauseato"
/6="stomacato"
/7="disgustato"
/8="nauseato"
/9="stomacato"
/10="disgustato"
/11="nauseato"
/12="stomacato"
/13="intimorito"
/14="impaurito"
/15="terrorizzato"
/16="intimorito"
/17="impaurito"
/18="terrorizzato"
/19="intimorito"
/20="impaurito"
/21="terrorizzato"
/22="intimorito"
/23="impaurito"
/24="terrorizzato"
/25="disgustato"
/26="nauseato"
/27="stomacato"
/28="disgustato"
/29="nauseato"
/30="stomacato"
/31="disgustato"
/32="nauseato"
/33="stomacato"
/34="disgustato"
/35="nauseato"
/36="stomacato"
/37="intimorito"
/38="impaurito"
/39="terrorizzato"
/40="intimorito"
/41="impaurito"
/42="terrorizzato"
/43="intimorito"
/44="impaurito"
/45="terrorizzato"
/46="intimorito"
/47="impaurito"
/48="terrorizzato"
</item>

<list congruency_testEF>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1)
/ select = values.selectStim
</list>

<item correctButton_testEF>
/1="disgustoButton"
/2="disgustoButton"
/3="disgustoButton"
/4="disgustoButton"
/5="disgustoButton"
/6="disgustoButton"
/7="disgustoButton"
/8="disgustoButton"
/9="disgustoButton"
/10="disgustoButton"
/11="disgustoButton"
/12="disgustoButton"
/13="disgustoButton"
/14="disgustoButton"
/15="disgustoButton"
/16="disgustoButton"
/17="disgustoButton"
/18="disgustoButton"
/19="disgustoButton"
/20="disgustoButton"
/21="disgustoButton"
/22="disgustoButton"
/23="disgustoButton"
/24="disgustoButton"
/25="pauraButton"
/26="pauraButton"
/27="pauraButton"
/28="pauraButton"
/29="pauraButton"
/30="pauraButton"
/31="pauraButton"
/32="pauraButton"
/33="pauraButton"
/34="pauraButton"
/35="pauraButton"
/36="pauraButton"
/37="pauraButton"
/38="pauraButton"
/39="pauraButton"
/40="pauraButton"
/41="pauraButton"
/42="pauraButton"
/43="pauraButton"
/44="pauraButton"
/45="pauraButton"
/46="pauraButton"
/47="pauraButton"
/48="pauraButton"
</item>

**************************************************************************************************************
**************************************************************************************************************
    DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 6.5.2.0 or higher

<defaults>
/canvasaspectratio = (4,3)
/minimumversion = "6.5.2.0"
/ fontstyle = ("Arial", 3%, false, false, false, false, 5, 1)
/txbgcolor = transparent
/ txcolor = black
/ screencolor = lightgrey
/ inputdevice = keyboard
</defaults>

**************************************************************************************************************
**************************************************************************************************************
    DATA
**************************************************************************************************************
**************************************************************************************************************

Note: data file explanations under User Manual Information at the top

To change from one data file per participant to one data file for all participants, set
/separatefiles = false

***********************
raw data file
***********************
<data>
/ separatefiles = true
/ columns = (build, computer.platform, date, time, subject, group, session,
blockcode, blocknum, trialcode, trialnum,values.keyAssignment,
values.wordposition, values.word_y, values.congruence, values.selectStim,
stimulusitem, stimulusitem, stimulusitem,
values.correctButton, response, correct, latency, list.accuracy.mean)
</data>

***********************
summary data file
***********************
<summarydata>
/ columns = (inquisit.version, computer.platform, script.startdate, script.starttime, script.subjectid, script.groupid, script.sessionid,
script.elapsedtime, script.completed,
values.keyAssignment,
values.ACC_practice1,
values.practice1Runs,
values.ACC_practice2,
values.practice2WRuns,
values.practice2FRuns,

expressions.ACC_all,
expressions.ACC_WORD,
expressions.ACC_WORDCongruent,
expressions.ACC_WORDIncongruent,
expressions.ACC_FACE,
expressions.ACC_FACECongruent,
expressions.ACC_FACEIncongruent,
expressions.ACC_congruent,
expressions.ACC_incongruent,
expressions.meanRT_all,
expressions.meanRT_WORD,
expressions.meanRT_WORDCongruent,
expressions.meanRT_WORDIncongruent,
expressions.meanRT_FACE,
expressions.meanRT_FACECongruent,
expressions.meanRT_FACEIncongruent,
expressions.meanRT_congruent,
expressions.meanRT_incongruent)
/ separatefiles = true
</summarydata>


**************************************************************************************************************
**************************************************************************************************************
    VALUES: automatically updated
**************************************************************************************************************
**************************************************************************************************************

/countTestBlocks:        counts number of test blocks
/selectWord:            stores the itemnumber of the currently presented word
/selectImage:            stores the itemnumber of the currently presented image
/wordposition:            0 = words at the centre of the image
/word_y:                stores the vertical coordinate of the current word
/congruence:            0 = neutral; 1 = incongruent
/practice1Runs:            counts number of practice1 runs
/practice2WRuns:        counts number of practice2W runs
/practice2FRuns:        counts number of practice2F runs
/selectFeedback:        controls the selection of the feedback text to be presented
/skipReadyTrial:        0 = run ready trial; 1 = skip ready trial

<values>
/countTestBlocks = 0
/selectWord = 1
/selectImage = 1
/selectStim = 1
/wordposition = 0
/correctButton = ""
/word_y = 50%
/congruence = 0
/practice1Runs = 0
/practice2WRuns = 0
/practice2FRuns = 0
/selectFeedback = 0
/skipReadyTrial = 0
/getReady = 1
/keyAssignment = "leftdisgusto"

/disgustokey = parameters.leftresponsekey
/paurakey = parameters.rightresponsekey
</values>

/ACC_practice1:            stores the proportion correct of the current practice run

<values>
/ACC_practice1 = 0
/ACC_practice2 = 0
</values>

**************************************************************************************************************
**************************************************************************************************************
    EXPRESSIONS
**************************************************************************************************************
**************************************************************************************************************
/shadowSize:                        size of shadow text

/ACC_all:                        proportion correct overall (across all test trials)
/meanRT_all:                     mean correct latency (in ms) overall

/ACC_WORD:                     proportion correct in "WORD" block
/ACC_FACE:                     proportion correct in "FACE" block
/ACC_congruent:                    proportion correct in "congruent" pairings trials (across test blocks)
/ACC_incongruent:                proportion correct in "incongruent" pairings trials (across test blocks)

/meanRT_WORD:             mean correct latency (in ms) in "WORD" block
/meanRT_FACE:                    mean correct latency (in ms) in "FACE" block
/meanRT_congruent:                mean correct latency (in ms) in "congruent" pairings trials (across test blocks)
/meanRT_incongruent:            mean correct latency (in ms) in "incongruent" pairings trials (across test blocks)

<expressions>
/shadowSize = parameters.wordSize * 1.01

/ACC_all = list.accuracy.mean
/ACC_WORD = list.accuracyEW.mean
/ACC_WORDCongruent = list.accuracyEWCongruent.mean
/ACC_WORDIncongruent = list.accuracyEWIncongruent.mean
/ACC_FACE = list.accuracyEF.mean
/ACC_FACECongruent = list.accuracyEFCongruent.mean
/ACC_FACEIncongruent = list.accuracyEFIncongruent.mean
/ACC_congruent = list.accuracyCongruent.mean
/ACC_incongruent = list.accuracyIncongruent.mean

/meanRT_all = list.latencies.mean
/meanRT_WORD = list.latenciesEW.mean
/meanRT_WORDCongruent = list.latenciesEWCongruent.mean
/meanRT_WORDIncongruent = list.latenciesEWIncongruent.mean
/meanRT_FACE = list.latenciesEF.mean
/meanRT_FACECongruent = list.latenciesEFCongruent.mean
/meanRT_FACEIncongruent = list.latenciesEFIncongruent.mean
/meanRT_congruent = list.latenciesCongruent.mean
/meanRT_incongruent = list.latenciesIncongruent.mean
</expressions>

**************************************************************************************************************
**************************************************************************************************************
    INSTRUCTIONS
**************************************************************************************************************
**************************************************************************************************************

<text intro>
/ items = instructions
/ select = sequence
/ position = (50%, 50%)
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text intropractice2W>
/ items = instructions
/ select = 4
/ position = (50%, 50%)
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text intropractice2F>
/ items = instructions
/ select = 6
/ position = (50%, 50%)
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text finishpractice2W>
/ items = instructions
/ select = 14
/ position = (50%, 50%)
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text finishpractice2F1>
/ items = instructions
/ select = 7
/ position = (50%, 50%)
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text finishpractice2F2>
/ items = instructions
/ select = 8
/ position = (50%, 50%)
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text finishpractice2F3>
/ items = instructions
/ select = 9
/ position = (50%, 50%)
/ fontstyle = ("Arial", 4%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text newBlock1>
/ items = instructions
/ select = 10
/ position = (50%, 50%)
/ fontstyle = ("Arial", 6%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text newBlock2>
/ items = instructions
/ select = 11
/ position = (50%, 50%)
/ fontstyle = ("Arial", 6%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text break>
/ items = instructions
/ select = 12
/ position = (50%, 50%)
/ fontstyle = ("Arial", 8%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text end>
/ items = instructions
/ select = 13
/ position = (50%, 50%)
/ fontstyle = ("Arial", 8%, false, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (90%, 80%)
</text>

<text continueButton_intro>
/ items = continueButtons
/ select = text.intro.currentitemnumber
/ position = (50%, 90%)
/ fontstyle = ("Arial", 3.5%, true, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (45%, 5%)
/ txbgcolor = blue
</text>

<text continueButton_testblock>
/ items = continueButtons
/ select = text.newBlock1.currentitemnumber
/ position = (50%, 90%)
/ fontstyle = ("Arial", 3.5%, true, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (45%, 5%)
/ txbgcolor = blue
</text>

<text continueButton_Pnd>
/ items = continueButtons
/ select = text.end.currentitemnumber
/ position = (50%, 90%)
/ fontstyle = ("Arial", 3.5%, true, false, false, false, 5, 1)
/ vjustify = center
/ hjustify = center
/ size = (45%, 5%)
/ txbgcolor = red
</text>



***********************
Instruction Trials
***********************

<trial intro>
/ inputdevice = keyboard
/ stimulusframes = [1 = intro, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
/ branch = [
    trial.intro2;
]
</trial>

<trial intro2>
/ inputdevice = keyboard
/ stimulusframes = [1 = intro, DISGUSTOEmotionExamples, PAURAEmotionExamples, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

trial intropractice2W>
/ inputdevice = keyboard
/ stimulusframes = [1 = intropractice2W, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

trial intropractice2F>
/ inputdevice = keyboard
/ stimulusframes = [1 = intropractice2F, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

trial finishpractice2W>
/ inputdevice = keyboard
/ stimulusframes = [1 = finishpractice2W, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

trial finishpractice2F>
/ inputdevice = keyboard
/ stimulusframes = [1 = finishpractice2F1, finishpractice2F2, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial practice1Start>
/ inputdevice = keyboard
/ stimulusframes = [1 = intro, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial practice1End>
/ inputdevice = keyboard
/ stimulusframes = [1 = intro, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial practice2WStart>
/ inputdevice = keyboard
/ stimulusframes = [1 = intropractice2W, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial practice2WEnd>
/ inputdevice = keyboard
/ stimulusframes = [1 = finishpractice2W, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial practice2FStart>
/ inputdevice = keyboard
/ stimulusframes = [1 = intropractice2F, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial practice2FEnd>
/ inputdevice = keyboard
/ stimulusframes = [1 = finishpractice2F1, continueButton_intro]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial nextBlock1>
/ skip = [
    values.countTestBlocks > 1;
]
/ stimulusframes = [1 = finishpractice2F2, finishpractice2F3, continueButton_testBlock]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial nextBlock2>
/ skip = [
    values.countTestBlocks > 1;
]
/ stimulusframes = [1 = newBlock1, newBlock2, continueButton_testBlock]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial finish>
/ inputdevice = keyboard
/ skip = [
    values.countTestBlocks == 1;
]
/ stimulusframes = [1 = clearscreen, end, exit]
/ validresponse = (" ")
/ recorddata = false
</trial>

<trial break>
/ skip = [
    values.countTestBlocks > 1;
]
/ ontrialbegin = [
    text.continueButton_Pnd.textbgcolor = blue;
]
/ stimulusframes = [1 = clearscreen, break, continueButton_Pnd]
/ validresponse = (" ")
/ recorddata = false
/ ontrialend = [
    text.continueButton_Pnd.textbgcolor = red;
]
</trial>

*************************************
General Helper Instruction Trials/Blocks
*************************************

<trial getReady1>
/ stimulusframes = [1 = clearscreen, getReadyMessage, disgustoKeyReminder, pauraKeyReminder]
// trialduration = 5000
/ validresponse = (parameters.leftresponsekey, parameters.rightresponsekey) //
/ beginresponsetime = 0
/ errormessage = false
/ recorddata = false
</trial>

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

<text Word_practice1>
/ items = item.words_practice1
/ select = values.selectStim
/ vposition = 50%
/ hposition = 50%
/ fontstyle = ("Arial", parameters.wordSize, false, false, false, false, 5, 1)
/ size = (40%, parameters.wordSize*1.5)
/ vjustify = center
/ hjustify = center
/ txcolor = black
/ erase = false
</text>

<text Word_practice2W>
/ items = item.words_practice2W
/ select = values.selectStim
/ vposition = 50%
/ hposition = 50%
/ fontstyle = ("Arial", parameters.wordSize, false, false, false, false, 5, 1)
/ size = (40%, parameters.wordSize*1.5)
/ vjustify = center
/ hjustify = center
/ txcolor = RED
/ erase = false
</text>

<text Word_practice2F>
/ items = item.words_practice2F
/ select = values.selectStim
/ vposition = 50%
/ hposition = 50%
/ fontstyle = ("Arial", parameters.wordSize, false, false, false, false, 5, 1)
/ size = (40%, parameters.wordSize*1.5)
/ vjustify = center
/ hjustify = center
/ txcolor = RED
/ erase = false
</text>

text Wordshadow_practice2>
/ items = item.words_practice2
/ select = values.selectStim
/ vposition = 50%
/ hposition = 50%
/ fontstyle = ("Arial", expressions.shadowSize, false, false, false, false, 5, 1)
/ size = (40%, parameters.wordSize*1.5)
/ vjustify = center
/ hjustify = center
/ txcolor = white
/ erase = false
</text>

<picture pic_practice2W>
/items = pics_practice2W
/ select = values.selectStim
/ position = (50%, 50%)
/ size = (parameters.picsize, parameters.picSize)
/ erase = false
</picture>

<picture pic_practice2F>
/items = pics_practice2F
/ select = values.selectStim
/ position = (50%, 50%)
/ size = (parameters.picsize, parameters.picSize)
/ erase = false
</picture>

<text Word_testEW>
/ items = item.words_testEW
/ select = values.selectStim
/ vposition = 50%
/ hposition = 50%
/ fontstyle = ("Arial", parameters.wordSize, false, false, false, false, 5, 1)
/ size = (40%, parameters.wordSize*1.5)
/ vjustify = center
/ hjustify = center
/ txcolor = RED
/ erase = false
</text>

text Wordshadow_testMC>
/ items = item.words_testMC
/ select = values.selectStim
/ vposition = values.word_y
/ hposition = 50%
/ fontstyle = ("Arial", expressions.shadowSize, false, false, false, false, 5, 1)
/ size = (40%, parameters.wordSize*1.5)
/ vjustify = center
/ hjustify = center
/ txcolor = black
/ erase = false
</text>

<picture pic_testEW>
/items = pics_testEW
/ select = values.selectStim
/ position = (50%, 50%)
/ size = (parameters.picsize, parameters.picSize)
/ erase = false
</picture>

<text Word_testEF>
/ items = item.words_testEF
/ select = values.selectStim
/ vposition = 50%
/ hposition = 50%
/ fontstyle = ("Arial", parameters.wordSize, false, false, false, false, 5, 1)
/ size = (40%, parameters.wordSize*1.5)
/ vjustify = center
/ hjustify = center
/ txcolor = RED
/ erase = false
</text>

text Wordshadow_testE>
/ items = item.words_testE
/ select = values.selectStim
/ vposition = 50%
/ hposition = 50%
/ fontstyle = ("Arial", expressions.shadowSize, false, false, false, false, 5, 1)
/ size = (40%, parameters.wordSize*1.5)
/ vjustify = center
/ hjustify = center
/ txcolor = black
/ erase = false
</text>

<picture pic_testEF>
/items = pics_testEF
/ select = values.selectStim
/ position = (50%, 50%)
/ size = (parameters.picsize, parameters.picSize)
/ erase = false
</picture>

<text feedback>
/ items = feedback
/ select = values.selectFeedback
/ txcolor = black
/ fontstyle = ("Arial", 7%, true, false, false, false, 5, 1)
/ position = (50%, 30%)
/ size = (80%, 10%)
/ vjustify = center
/ hjustify = center
/ erase = false
</text>

<shape getReadyEraser>
/ shape = rectangle
/ size = (80%, 40%)
/ position = (50%, 30%)
/ erase = false
/ color = black
</shape>

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

*************************************************
Data Lists: used for descriptive statistics
store correct latencies/accuracy data
fill up during runtime
*************************************************

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracy>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latencies>
</list>

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracyEW>
</list>

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracyEWCongruent>
</list>

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracyEWIncongruent>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latenciesEW>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latenciesEWCongruent>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latenciesEWIncongruent>
</list>

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracyEF>
</list>

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracyEFCongruent>
</list>

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracyEFIncongruent>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latenciesEF>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latenciesEFCongruent>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latenciesEFIncongruent>
</list>

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracyCongruent>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latenciesCongruent>
</list>

Note: list stores 1 = correct response; 0 = incorrect response for each relevant trial
any response coded as an error is automatically coded as 0
<list accuracyIncongruent>
</list>

Note: list stores the latency of correct responses for each relevant trial
<list latenciesIncongruent>
</list>


**************************************************************************************************************
**************************************************************************************************************
    TRIALS : practice1
**************************************************************************************************************
**************************************************************************************************************

<trial practice1>
/ inputdevice = keyboard
/ ontrialbegin = [
    values.selectStim = list.practice1_itemnumbers.nextvalue;
    values.correctButton = item.correctButton_practice1.item(values.selectStim);
]
/ stimulusframes = [1 = clearscreen, Word_practice1, disgustoKeyReminder, pauraKeyReminder]
/ validresponse = (parameters.leftresponsekey, parameters.rightresponsekey)
/ iscorrectresponse = [
    if (values.correctButton == "disgustoButton") {
        if (trial.practice1.responsetext == values.disgustokey) {
            return true;
        } else {
            return false;
        };
    } else {
        if (trial.practice1.responsetext == values.paurakey) {
            return true;
        } else {
            return false;
        };
    };
]
/ beginresponsetime = 0
/ responseinterrupt = immediate
/ ontrialend = [
    list.accuracy.appendItem(trial.practice1.correct);
    values.ACC_practice1 = list.accuracy.mean;
    if (trial.practice1.correct) {
        values.selectFeedback = 1;
        text.feedback.textcolor = green;
    } else if (trial.practice1.response != 0) {
        values.selectFeedback = 2;
        text.feedback.textcolor = red;
    } else {
        values.selectFeedback = 3;
        text.feedback.textcolor = blue;
    };
]
/ trialduration = parameters.wordPresentationTime_practice
/ branch = [
    return trial.feedback;
]
</trial>


**************************************************************************************************************
**************************************************************************************************************
    TRIALS : practice2W & 2F
**************************************************************************************************************
**************************************************************************************************************

<trial practice2W>
/ inputdevice = keyboard
/ ontrialbegin = [
    values.selectStim = list.practice2W_itemnumbers.nextvalue;
    values.wordposition = 0;
    values.congruence = list.congruency_practice2W.nextvalue;
    values.correctButton = item.correctButton_practice2W.item(values.selectStim);
    if (values.wordposition == 0) {
        values.word_y = parameters.top_y;
    } else {
        values.word_y = parameters.bottom_y;
    };
]
    
//***** else { wvalues.word_y = wparameters.bottom_y;}; ***** (to activate put ']' at the end, and erase the precEdent one)
    

//****** Wordshadow_practice2, ****** it was in stimulus frame brackets
/ stimulusframes = [1 = clearscreen, pic_practice2W, Word_practice2W, disgustoKeyReminder, pauraKeyReminder]
/ validresponse = (parameters.leftresponsekey, parameters.rightresponsekey)
/ iscorrectresponse = [
    if (values.correctButton == "disgustoButton") {
        if (trial.practice2W.responsetext == values.disgustokey) {
            return true;
        } else {
            return false;
        };
    } else {
        if (trial.practice2W.responsetext == values.paurakey) {
            return true;
        } else {
            return false;
        };
    };
]
/ beginresponsetime = 0
/ responseinterrupt = immediate
/ ontrialend = [
    list.accuracy.appendItem(trial.practice2W.correct);
    values.ACC_practice2 = list.accuracy.mean;
    if (trial.practice2W.correct) {
        values.selectFeedback = 1;
        text.feedback.textcolor = green;
    } else if (trial.practice2W.response != 0) {
        values.selectFeedback = 2;
        text.feedback.textcolor = red;
    } else {
        values.selectFeedback = 3;
        text.feedback.textcolor = blue;
    };
]
/ trialduration = parameters.wordPresentationTime_practice
/ branch = [
    return trial.feedback;
]
</trial>



<trial practice2F>
/ inputdevice = keyboard
/ ontrialbegin = [
    values.selectStim = list.practice2F_itemnumbers.nextvalue;
    values.wordposition = 0;
    values.congruence = list.congruency_practice2F.nextvalue;
    values.correctButton = item.correctButton_practice2F.item(values.selectStim);
    if (values.wordposition == 0) {
        values.word_y = parameters.top_y;
    } else {
        values.word_y = parameters.bottom_y;
    };
]
    
//***** else { wvalues.word_y = wparameters.bottom_y;}; ***** (to activate put ']' at the end, and erase the precEdent one)
    

//****** Wordshadow_practice2, ****** it was in stimulus frame brackets
/ stimulusframes = [1 = clearscreen, pic_practice2W, Word_practice2W, disgustoKeyReminder, pauraKeyReminder]
/ validresponse = (parameters.leftresponsekey, parameters.rightresponsekey)
/ iscorrectresponse = [
    if (values.correctButton == "disgustoButton") {
        if (trial.practice2F.responsetext == values.disgustokey) {
            return true;
        } else {
            return false;
        };
    } else {
        if (trial.practice2F.responsetext == values.paurakey) {
            return true;
        } else {
            return false;
        };
    };
]
/ beginresponsetime = 0
/ responseinterrupt = immediate
/ ontrialend = [
    list.accuracy.appendItem(trial.practice2F.correct);
    values.ACC_practice2 = list.accuracy.mean;
    if (trial.practice2F.correct) {
        values.selectFeedback = 1;
        text.feedback.textcolor = green;
    } else if (trial.practice2F.response != 0) {
        values.selectFeedback = 2;
        text.feedback.textcolor = red;
    } else {
        values.selectFeedback = 3;
        text.feedback.textcolor = blue;
    };
]
/ trialduration = parameters.wordPresentationTime_practice
/ branch = [
    return trial.feedback;
]
</trial>

**************************************************************************************************************
**************************************************************************************************************
    TRIALS: test
**************************************************************************************************************
**************************************************************************************************************

=> EW: Equal number congruent/incongruent pairs - WORD Response
//***** else {wvalues.word_y = wparameters.bottom_y;}; ***** (to activate put ']' at the end, and erase the precEdent one)
//****** Wordshadow_testE, ***** it was in stimulusframes

<trial testEW>
/ inputdevice = keyboard
/ ontrialbegin = [
    values.selectStim = list.testEW_itemnumbers.nextvalue;
    values.wordposition = 0;
    values.congruence = list.congruency_testEW.nextvalue;
    values.correctButton = item.correctButton_testEW.item(values.selectStim);
    if (values.wordposition == 0) {
        values.word_y = parameters.top_y;
    } else {
        values.word_y = parameters.bottom_y;
    };
]
    
/ stimulusframes = [1 = clearscreen, pic_testEW, Word_testEW, disgustoKeyReminder, pauraKeyReminder]
/ validresponse = (parameters.leftresponsekey, parameters.rightresponsekey)
/ iscorrectresponse = [
    if (values.correctButton == "disgustoButton") {
        if (trial.testEW.responsetext == values.disgustokey) {
            return true;
        } else {
            return false;
        };
    } else {
        if (trial.testEW.responsetext == values.paurakey) {
            return true;
        } else {
            return false;
        };
    };
]
/ beginresponsetime = 0
/ responseinterrupt = immediate
/ ontrialend = [
    list.accuracy.appendItem(trial.testEW.correct);
    list.accuracyEW.appendItem(trial.testEW.correct);
    if (values.congruence == 1) {
        list.accuracyCongruent.appendItem(trial.testEW.correct);
        list.accuracyEWCongruent.appenditem(trial.testEW.correct);
    } else {
        list.accuracyIncongruent.appendItem(trial.testEW.correct);
        list.accuracyEWIncongruent.appenditem(trial.testEW.correct);
    };
    if (trial.testEW.correct) {
        list.latencies.appendItem(trial.testEW.latency);
        list.latenciesEW.appendItem(trial.testEW.latency);
        if (values.congruence == 1) {
            list.latenciesCongruent.appendItem(trial.testEW.latency);
            list.latenciesEWCongruent.appendItem(trial.testEW.latency);
        } else {
            list.latenciesIncongruent.appendItem(trial.testEW.latency);
            list.latenciesEWIncongruent.appendItem(trial.testEW.latency);
        };
    };
]
/ trialduration = parameters.wordPresentationTime_test
/ branch = [
    return trial.ITI;
]
</trial>

=> EF: Equal number congruent/incongruent pairs - FACE Response
//***** else {wvalues.word_y = wparameters.bottom_y;}; ***** (to activate put ']' at the end, and erase the precEdent one)
//****** Wordshadow_testE, ***** it was in stimulusframes

<trial testEF>
/ inputdevice = keyboard
/ ontrialbegin = [
    values.selectStim = list.testEF_itemnumbers.nextvalue;
    values.wordposition = 0;
    values.congruence = list.congruency_testEF.nextvalue;
    values.correctButton = item.correctButton_testEF.item(values.selectStim);
    //values.wordposition == 0)
    if (values.wordposition == 0) {
        values.word_y = parameters.top_y;
    } else {
        values.word_y = parameters.bottom_y;
    };
]
        
/ stimulusframes = [1 = clearscreen, pic_testEF, Word_testEF, disgustoKeyReminder, pauraKeyReminder]
/ validresponse = (parameters.leftresponsekey, parameters.rightresponsekey)
/ iscorrectresponse = [
    if (values.correctButton == "disgustoButton") {
        if (trial.testEF.responsetext == values.disgustokey) {
            return true;
        } else {
            return false;
        };
    } else {
        if (trial.testEF.responsetext == values.paurakey) {
            return true;
        } else {
            return false;
        };
    };
]
/ beginresponsetime = 0
/ responseinterrupt = immediate
/ ontrialend = [
    list.accuracy.appendItem(trial.testEF.correct);
    list.accuracyEF.appendItem(trial.testEF.correct);
    if (values.congruence == 1) {
        list.accuracyCongruent.appendItem(trial.testEF.correct);
        list.accuracyEFCongruent.appenditem(trial.testEF.correct);
    } else {
        list.accuracyIncongruent.appendItem(trial.testEF.correct);
        list.accuracyEFIncongruent.appenditem(trial.testEF.correct);
    };
    if (trial.testEF.correct) {
        list.latencies.appendItem(trial.testEF.latency);
        list.latenciesEF.appendItem(trial.testEF.latency);
        if (values.congruence == 1) {
            list.latenciesCongruent.appendItem(trial.testEF.latency);
            list.latenciesEFCongruent.appenditem(trial.testEF.latency);
        } else {
            list.latenciesIncongruent.appendItem(trial.testEF.latency);
            list.latenciesEFIncongruent.appenditem(trial.testEF.latency);
        };
    };
]
/ trialduration = parameters.wordPresentationTime_test
/ branch = [
    return trial.ITI;
]
</trial>

<trial repeatPractice>
/ inputdevice = keyboard
/ stimulusframes = [1 = repeatPractice, continueButton_intro]
/ validresponse = (" ")
</trial>


<trial repeatPractice2W>
/ inputdevice = keyboard
/ stimulusframes = [1 = repeatPractice2W, continueButton_intro]
/ validresponse = (" ")
</trial>


<trial repeatPractice2F>
/ inputdevice = keyboard
/ stimulusframes = [1 = repeatPractice2F, continueButton_intro]
/ validresponse = (" ")
</trial>
**************************************************************************************************************
**************************************************************************************************************
    TRIALS : helper trials
**************************************************************************************************************
**************************************************************************************************************

<trial feedback>
/ stimulusframes = [1 = clearscreen, feedback]

//touchscreens: present inactive response buttons
/ validresponse = (parameters.leftresponsekey, parameters.rightresponsekey)
/ isvalidresponse = [
    return(false);
]

/ recorddata = false
/ trialduration = parameters.feedbackDuration
</trial>

<trial ITI>
/ stimulusframes = [1 = clearscreen]

//touchscreens: present inactive response buttons
/ validresponse = (parameters.leftresponsekey, parameters.rightresponsekey)
/ isvalidresponse = [
    return(false);
]

/ recorddata = false
/ trialduration = parameters.ITI
</trial>

**************************************************************************************************************
**************************************************************************************************************
    BLOCKS
**************************************************************************************************************
**************************************************************************************************************

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

<block practice1Intro>
/ trials = [1 = practice1Start]
</block>

<block practice1>
/ onblockbegin = [
    list.accuracy.reset();
    list.latencies.reset();
    values.practice1Runs += 1;
]
/ trials = [1 = getReady1; 2-7 = practice1]
/ branch = [
    if (list.accuracy.mean < 1 && !monkey.monkeymode) {
        return block.repeatPractice;
    };
]
</block>

<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
    if (values.practice2WRuns > 0) {
        return block.practice2W;
    } else {
        return block.practice1;
    };
]
</block>


<block practice2WIntro>
/ trials = [1 = practice2WStart]
/ onblockbegin = [
    values.skipReadyTrial = 0;
]
</block>

<block practice2W>
/ onblockbegin = [
    list.accuracy.reset();
    list.latencies.reset();
    values.practice2WRuns += 1;
]
/ trials = [1 = getReady1; 2-5 = practice2W]
/ onblockend = [
    values.skipReadyTrial = 1;
]
/ branch = [
    if (list.accuracy.mean < 1 && !monkey.monkeymode) {
        return block.repeatPractice2W;
    };
]
</block>


<block repeatPractice2W>
/ trials = [1=repeatPractice2W]
/ branch = [
    if (values.practice2WRuns > 0) {
        return block.practice2F;
    } else {
        return block.practice2W;
    };
]
</block>

<block practice2FIntro>
/ trials = [1 = practice2FStart]
/ onblockbegin = [
    values.skipReadyTrial = 0;
]
</block>

<block practice2F>
/ onblockbegin = [
    list.accuracy.reset();
    list.latencies.reset();
    values.practice2FRuns += 1;
]
/ trials = [1 = getReady1; 2-5 = practice2F]
/ onblockend = [
    values.skipReadyTrial = 1;
]
/ branch = [
    if (list.accuracy.mean < 1 && !monkey.monkeymode) {
        return block.repeatPractice2F;
    };
]
</block>


<block repeatPractice2F>
/ trials = [1=repeatPractice2F]
/ branch = [
    if (values.practice2FRuns > 0) {
        return block.testStart;
    } else {
        return block.practice2F;
    };
]
</block>


<block testStart>
/ trials = [1 = practice2FEnd]
/ onblockbegin = [
    list.accuracy.reset();
    list.latencies.reset();
    values.skipReadyTrial = 0;
]
</block>

<block testEW>
/ onblockbegin = [
    values.countTestBlocks += 1;
]
/ trials = [
    1 = getReady1;
    2 = nextBlock1;
3-50 = testEW;
    51 = break;
    52 = finish;
]
</block>


<block testEF>
/ onblockbegin = [
    values.countTestBlocks += 1;
]
/ trials = [
    1 = getReady1;
    2 = nextBlock2;
3-50 = testEF;
    51 = break;
    52 = finish;
]
</block>


**************************************************************************************************************
**************************************************************************************************************
    EXPERIMENT
**************************************************************************************************************
**************************************************************************************************************

<expt>
/ onexptbegin = [
    if (computer.touch && !computer.haskeyboard) {
        text.continueButton_Pnd.skip = true;
        text.continueButton_intro.skip = true;
        text.continueButton_testblock.skip = true;
    };]

/ blocks = [
    1 = intro;
    2 = practice1Intro;
    3 = practice1;
    4 = practice2WIntro;
    5 = practice2W;
    6 = practice2FIntro;
    7 = practice2F;
    8 = testStart;
    9 = testEW;
    10 = testEF;
]
</expt>

<monkey>
/ latencydistribution = normal(50, 20)
</monkey>

**************************************************************************************************************
                                                End of File
**************************************************************************************************************






Attachments
F03-Disgust-Apex.jpg (67 views, 370.00 KB)
F03-Fear-Apex.jpg (71 views, 375.00 KB)
F04-Disgust-Apex.jpg (66 views, 359.00 KB)
F04-Fear-Apex.jpg (74 views, 362.00 KB)
F08-Disgust-Apex.jpg (69 views, 361.00 KB)
F08-Fear-Apex.jpg (72 views, 355.00 KB)
M02-Disgust-Apex.jpg (72 views, 366.00 KB)
M02-Fear-Apex.jpg (62 views, 369.00 KB)
M03-Disgust-Apex.jpg (69 views, 368.00 KB)
M03-Fear-Apex.jpg (73 views, 367.00 KB)
M06-Disgust-Apex.jpg (68 views, 355.00 KB)
M06-Fear-Apex.jpg (69 views, 357.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: 104K

Please do not paste entire scrrpts into a post's body. This is error-prone and difficult to work with. Please also don't attach each and every individual file separately. Instead, please put everything -- the script and any files such as images that the script requires --- in a ZIP archive and attach the archive. Thanks.
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: 104K
Dave - 7/18/2024

Please do not paste entire scrrpts into a post's body. This is error-prone and difficult to work with. Please also don't attach each and every individual file separately. Instead, please put everything -- the script and any files such as images that the script requires --- in a ZIP archive and attach the archive. Thanks.

Explain the reasoning behind your /branch logic in the various practice <block> elements. It makes no sense to me on its face. For example, what is

<block practice1>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice1Runs += 1;
]
/ trials = [1 = getReady1; 2-7 = practice1]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice;
};
]
</block>

<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
if (values.practice2WRuns > 0) {
return block.practice2W;
} else {
return block.practice1;
};
]
</block>


supposed to do exactly and why? If performance in <block practice1> was inadequate, you /branch to <block repeatPractice>. So far, so good. But why should <block repeatPractice> ever have to then /branch to an entirely different block <block practice2W>? If you land in <block repeatPractice>, you always want to return to <block practice1>, that is the one that was failed.

If performance in <block practice1> is adequate, then no /branch to <block repeatPractice> occurs and that is exactly what you should want to happen.

The script then moves on to the next block specified in the <expt>'s /blocks, which is <block practice2WIntro>.

<expt>
/ onexptbegin = [
  if (computer.touch && !computer.haskeyboard) {
   text.continueButton_Pnd.skip = true;
   text.continueButton_intro.skip = true;
   text.continueButton_testblock.skip = true;
  };]

/ blocks = [
  1 = intro;
  2 = practice1Intro;
  3 = practice1;
  4 = practice2WIntro;
  5 = practice2W;
  6 = practice2FIntro;
  7 = practice2F;
  8 = testStart;
  9 = testEW;
  10 = testEF;
]
</expt>

Igor Iarrobino
Igor Iarrobino
Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)
Group: Forum Members
Posts: 20, Visits: 59
Dave - 7/18/2024
Dave - 7/18/2024

Please do not paste entire scrrpts into a post's body. This is error-prone and difficult to work with. Please also don't attach each and every individual file separately. Instead, please put everything -- the script and any files such as images that the script requires --- in a ZIP archive and attach the archive. Thanks.

Explain the reasoning behind your /branch logic in the various practice <block> elements. It makes no sense to me on its face. For example, what is

<block practice1>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice1Runs += 1;
]
/ trials = [1 = getReady1; 2-7 = practice1]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice;
};
]
</block>

<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
if (values.practice2WRuns > 0) {
return block.practice2W;
} else {
return block.practice1;
};
]
</block>


supposed to do exactly and why? If performance in <block practice1> was inadequate, you /branch to <block repeatPractice>. So far, so good. But why should <block repeatPractice> ever have to then /branch to an entirely different block <block practice2W>? If you land in <block repeatPractice>, you always want to return to <block practice1>, that is the one that was failed.

If performance in <block practice1> is adequate, then no /branch to <block repeatPractice> occurs and that is exactly what you should want to happen.

The script then moves on to the next block specified in the <expt>'s /blocks, which is <block practice2WIntro>.

<expt>
/ onexptbegin = [
  if (computer.touch && !computer.haskeyboard) {
   text.continueButton_Pnd.skip = true;
   text.continueButton_intro.skip = true;
   text.continueButton_testblock.skip = true;
  };]

/ blocks = [
  1 = intro;
  2 = practice1Intro;
  3 = practice1;
  4 = practice2WIntro;
  5 = practice2W;
  6 = practice2FIntro;
  7 = practice2F;
  8 = testStart;
  9 = testEW;
  10 = testEF;
</expt>

Hi Dave,

about this:
<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
  if (values.practice2WRuns > 0) {
   return block.practice2W;
  } else {
   return block.practice1;
  };
]
</block>


Actually, I don't know why this branch. It was already in script and I just change logically the names of the blocks, trying to have a logical stream of what I desire to have. I was hoping to have a good stream of info in the script doing like this, but I didn't know if Iwas on the right way or not.

In my innocent way to face this problem, I thought that this part of the branch '[ if (values.practice2WRuns > 0) { return block.practice2W;} else {return block.practice1;};]' would say to me that if practice runs of practice2W would be >0, I will be omved to the next practice block, otherwise I would have been moved back to the former practice block.
acutally, I don't knw if it's right or not.







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: 104K
Igor Iarrobino - 7/22/2024
Dave - 7/18/2024
Dave - 7/18/2024

Please do not paste entire scrrpts into a post's body. This is error-prone and difficult to work with. Please also don't attach each and every individual file separately. Instead, please put everything -- the script and any files such as images that the script requires --- in a ZIP archive and attach the archive. Thanks.

Explain the reasoning behind your /branch logic in the various practice <block> elements. It makes no sense to me on its face. For example, what is

<block practice1>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice1Runs += 1;
]
/ trials = [1 = getReady1; 2-7 = practice1]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice;
};
]
</block>

<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
if (values.practice2WRuns > 0) {
return block.practice2W;
} else {
return block.practice1;
};
]
</block>


supposed to do exactly and why? If performance in <block practice1> was inadequate, you /branch to <block repeatPractice>. So far, so good. But why should <block repeatPractice> ever have to then /branch to an entirely different block <block practice2W>? If you land in <block repeatPractice>, you always want to return to <block practice1>, that is the one that was failed.

If performance in <block practice1> is adequate, then no /branch to <block repeatPractice> occurs and that is exactly what you should want to happen.

The script then moves on to the next block specified in the <expt>'s /blocks, which is <block practice2WIntro>.

<expt>
/ onexptbegin = [
  if (computer.touch && !computer.haskeyboard) {
   text.continueButton_Pnd.skip = true;
   text.continueButton_intro.skip = true;
   text.continueButton_testblock.skip = true;
  };]

/ blocks = [
  1 = intro;
  2 = practice1Intro;
  3 = practice1;
  4 = practice2WIntro;
  5 = practice2W;
  6 = practice2FIntro;
  7 = practice2F;
  8 = testStart;
  9 = testEW;
  10 = testEF;
</expt>

Hi Dave,

about this:
<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
  if (values.practice2WRuns > 0) {
   return block.practice2W;
  } else {
   return block.practice1;
  };
]
</block>


Actually, I don't know why this branch. It was already in script and I just change logically the names of the blocks, trying to have a logical stream of what I desire to have. I was hoping to have a good stream of info in the script doing like this, but I didn't know if Iwas on the right way or not.

In my innocent way to face this problem, I thought that this part of the branch '[ if (values.practice2WRuns > 0) { return block.practice2W;} else {return block.practice1;};]' would say to me that if practice runs of practice2W would be >0, I will be omved to the next practice block, otherwise I would have been moved back to the former practice block.
acutally, I don't knw if it's right or not.





No. The progression from one type of practice block to another is coded in your <expt> element's /blocks.

<expt>
/ onexptbegin = [
    if (computer.touch && !computer.haskeyboard) {
        text.continueButton_Pnd.skip = true;
        text.continueButton_intro.skip = true;
        text.continueButton_testblock.skip = true;
    };]

/ blocks = [
    1 = intro;
    2 = practice1Intro;
    3 = practice1;
    4 = practice2WIntro;
    5 = practice2W;
    6 = practice2FIntro;
    7 = practice2F;
    8 = testStart;
    9 = testEW;
    10 = testEF;
]
</expt>


You do not need or want conditional branching to advance from one type to another. All you need branching for is to repeat the current type of practice block if it was failed.

<block practice1>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice1Runs += 1;
]
/ trials = [1 = getReady1; 2-7 = practice1]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice;
};
]
</block>

<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
    return block.practice1;
]
// makes no sense
// branch = [
// if (values.practice2WRuns > 0) {
// return block.practice2W;
// } else {
// return block.practice1;
// };
//]
</block>

[...]

<block practice2W>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice2WRuns += 1;
]
/ trials = [1 = getReady1; 2-5 = practice2W]
/ onblockend = [
values.skipReadyTrial = 1;
]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice2W;
};
]
</block>


<block repeatPractice2W>
/ trials = [1=repeatPractice2W]
/ branch = [
    return block.practice2W;
]
// makes no sense
// branch = [
// if (values.practice2WRuns > 0) {
// return block.practice2F;
// } else {
// return block.practice2W;
// };
//]
</block>

[...]

<block practice2F>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice2FRuns += 1;
]
/ trials = [1 = getReady1; 2-5 = practice2F]
/ onblockend = [
values.skipReadyTrial = 1;
]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice2F;
};
]
</block>


<block repeatPractice2F>
/ trials = [1=repeatPractice2F]
/ branch = [
    return block.practice2F;
]
// makes no sense
// branch = [
// if (values.practice2FRuns > 0) {
// return block.testStart;
// } else {
// return block.practice2F;
// };
//]
</block>



Igor Iarrobino
Igor Iarrobino
Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)Associate Member (128 reputation)
Group: Forum Members
Posts: 20, Visits: 59
Dave - 7/22/2024
Igor Iarrobino - 7/22/2024
Dave - 7/18/2024
Dave - 7/18/2024

Please do not paste entire scrrpts into a post's body. This is error-prone and difficult to work with. Please also don't attach each and every individual file separately. Instead, please put everything -- the script and any files such as images that the script requires --- in a ZIP archive and attach the archive. Thanks.

Explain the reasoning behind your /branch logic in the various practice <block> elements. It makes no sense to me on its face. For example, what is

<block practice1>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice1Runs += 1;
]
/ trials = [1 = getReady1; 2-7 = practice1]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice;
};
]
</block>

<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
if (values.practice2WRuns > 0) {
return block.practice2W;
} else {
return block.practice1;
};
]
</block>


supposed to do exactly and why? If performance in <block practice1> was inadequate, you /branch to <block repeatPractice>. So far, so good. But why should <block repeatPractice> ever have to then /branch to an entirely different block <block practice2W>? If you land in <block repeatPractice>, you always want to return to <block practice1>, that is the one that was failed.

If performance in <block practice1> is adequate, then no /branch to <block repeatPractice> occurs and that is exactly what you should want to happen.

The script then moves on to the next block specified in the <expt>'s /blocks, which is <block practice2WIntro>.

<expt>
/ onexptbegin = [
  if (computer.touch && !computer.haskeyboard) {
   text.continueButton_Pnd.skip = true;
   text.continueButton_intro.skip = true;
   text.continueButton_testblock.skip = true;
  };]

/ blocks = [
  1 = intro;
  2 = practice1Intro;
  3 = practice1;
  4 = practice2WIntro;
  5 = practice2W;
  6 = practice2FIntro;
  7 = practice2F;
  8 = testStart;
  9 = testEW;
  10 = testEF;
</expt>

Hi Dave,

about this:
<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
  if (values.practice2WRuns > 0) {
   return block.practice2W;
  } else {
   return block.practice1;
  };
]
</block>


Actually, I don't know why this branch. It was already in script and I just change logically the names of the blocks, trying to have a logical stream of what I desire to have. I was hoping to have a good stream of info in the script doing like this, but I didn't know if Iwas on the right way or not.

In my innocent way to face this problem, I thought that this part of the branch '[ if (values.practice2WRuns > 0) { return block.practice2W;} else {return block.practice1;};]' would say to me that if practice runs of practice2W would be >0, I will be omved to the next practice block, otherwise I would have been moved back to the former practice block.
acutally, I don't knw if it's right or not.





No. The progression from one type of practice block to another is coded in your <expt> element's /blocks.

<expt>
/ onexptbegin = [
    if (computer.touch && !computer.haskeyboard) {
        text.continueButton_Pnd.skip = true;
        text.continueButton_intro.skip = true;
        text.continueButton_testblock.skip = true;
    };]

/ blocks = [
    1 = intro;
    2 = practice1Intro;
    3 = practice1;
    4 = practice2WIntro;
    5 = practice2W;
    6 = practice2FIntro;
    7 = practice2F;
    8 = testStart;
    9 = testEW;
    10 = testEF;
]
</expt>


You do not need or want conditional branching to advance from one type to another. All you need branching for is to repeat the current type of practice block if it was failed.

<block practice1>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice1Runs += 1;
]
/ trials = [1 = getReady1; 2-7 = practice1]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice;
};
]
</block>

<block repeatPractice>
/ trials = [1=repeatPractice]
/ branch = [
    return block.practice1;
]
// makes no sense
// branch = [
// if (values.practice2WRuns > 0) {
// return block.practice2W;
// } else {
// return block.practice1;
// };
//]
</block>

[...]

<block practice2W>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice2WRuns += 1;
]
/ trials = [1 = getReady1; 2-5 = practice2W]
/ onblockend = [
values.skipReadyTrial = 1;
]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice2W;
};
]
</block>


<block repeatPractice2W>
/ trials = [1=repeatPractice2W]
/ branch = [
    return block.practice2W;
]
// makes no sense
// branch = [
// if (values.practice2WRuns > 0) {
// return block.practice2F;
// } else {
// return block.practice2W;
// };
//]
</block>

[...]

<block practice2F>
/ onblockbegin = [
list.accuracy.reset();
list.latencies.reset();
values.practice2FRuns += 1;
]
/ trials = [1 = getReady1; 2-5 = practice2F]
/ onblockend = [
values.skipReadyTrial = 1;
]
/ branch = [
if (list.accuracy.mean < 1 && !monkey.monkeymode) {
return block.repeatPractice2F;
};
]
</block>


<block repeatPractice2F>
/ trials = [1=repeatPractice2F]
/ branch = [
    return block.practice2F;
]
// makes no sense
// branch = [
// if (values.practice2FRuns > 0) {
// return block.testStart;
// } else {
// return block.practice2F;
// };
//]
</block>



It is running. Thank you very much!

But I have a new problem.

I have this code for the trials in every test block, and I would like that every block has its passages, as instructions, etc. 
I put the trials in each block to do that as a sequence.
Then, in 'exp' I put the list of the blocks to be run.

<block testEW>
/ onblockbegin = [
  values.countTestBlocks += 1;
]
/ trials = [
  1 = nextBlock1;
  2 = nextBlock1a;
  3 = getReady1;
4-51 = testEW;
  52 = break;
  53 = finish;
]
</block>


<block testEF>
/ onblockbegin = [
  values.countTestBlocks += 1;
]
/ trials = [
  1 = nextBlock2;
  2 = nextBlock2a;
  3 = getReady1;
4-51 = testEF;
  52 = break;
  53 = finish;
]
</block>

*******************

<expt>
/ onexptbegin = [
  if (computer.touch && !computer.haskeyboard) {
   text.continueButton_Pnd.skip = true;
   text.continueButton_intro.skip = true;
   text.continueButton_testblock.skip = true;
  };]

/ blocks = [
  1 = intro;
  2 = practice1Intro;
  3 = practice1;
  4 = practice2WIntro;
  5 = practice2W;
  6 = practice2FIntro;
  7 = practice2F;
  8 = testStart;
  9 = testEW;
  10 = testEF;
]
</expt>

<monkey>
/ latencydistribution = normal(5



I have a question and two help requests.
The question is:
How come that I do not have the instructions of the 'testEF' block after the 'testEW' block?

Help requests are:

1. Then, I would like that each practice block run with its test block
- 'practice2WIntro' and 'practice2W' with 'testEW'
- 'practice2FIntro' and 'practice2F' with 'testEF'.
2. I would like that this packages of blocks are radomly selected.

I'm sorry because I am not good and used to scripts and I'm annoying you for every little issue.
Big thanks again beforehand!




GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search