dragdrop expt


Author
Message
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
abhi - Saturday, October 13, 2018
Dave - Thursday, October 11, 2018
abhi - Thursday, October 11, 2018
Dave - Thursday, October 11, 2018
abhi - Thursday, October 11, 2018
Dave - Monday, August 27, 2018
scollin - Monday, August 27, 2018


I managed to get it to work, thanks! One more question about this. Is it also possible to keep looping the trials until the participant presses a certain button? (i.e. that the participant can determine when the stop the task)

Yes, that's possible. Taking the 1st example I posted here, you would do it like this:

<instruct>
/ fontstyle = ("Arial", 2.8%, false, false, false, false, 5, 1)
/ txcolor = (white)
/ screencolor = black
</instruct>

<page intro>
^In the following task, you will be presented with negative words related to outcomes of smoking or with positive words you may experience if you quit smoking. You will also see an image of a cigarette, and the word 'me' on the page.
~n~nYour task is to:
~n* Drag the negative words away from you and towards the cigarette.
Drag the positive words towards the word 'me'.
~n~nPress the spacebar to begin.
</page>

<page end>
^This is the end.
</page>


<expt>
/ preinstructions = (intro)
/ blocks = [1=intervention]
/ postinstructions = (end)
</expt>

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
/11 = "stroke"
/12 = "asthma"
/13 = "feel unwell"
/14 = "out of breath"
/15 = "trapped"
/16 = "premature death"
/17 = "pollution"
/18 = "illness"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
/11 = "breathe easily"
/12 = "independent"
/13 = "clean"
/14 = "energetic"
/15 = "feel good"
/16 = "wellbeing"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 10%)
/ dropsource = true
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 10%)
/ dropsource = true
</text>

<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 10%)
/ erase = false
/ droptarget = true
</text>

<text smoking>
/ items = smoking
/ valign = bottom
/ halign = center
/ position = (50%, 10%)
/ txcolor = black
/ fontstyle = ("Arial", 10%)
/ erase = false
/ droptarget = true
</text>

<trial positive>
/ ontrialbegin = [
    text.positive.hposition = 50%;
    text.positive.vposition = 50%;
]
/ stimulusframes = [1 = positive, me, smoking, end]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, end)
/ correctresponse = (me)
/ branch = [
    if(trial.positive.response != "end") list.triallist.nextvalue;
]
</trial>

<trial negative>
/ ontrialbegin = [
    text.negative.hposition = 50%;
    text.negative.vposition = 50%;
]
/ stimulusframes = [1 = negative, me, smoking, end]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, end)
/ correctresponse = (smoking)
/ branch = [
    if(trial.negative.response != "end") list.triallist.nextvalue;
]
</trial>

<block intervention>
/trials = [1 = list.triallist]
</block>

<list triallist>
/ items = (trial.positive, trial.negative)
/ poolsize = 10
</list>

<text end>
/ items = ("Click here to end the task.")
/ txbgcolor = black
/ txcolor = white
/ erase = false
/ vjustify = center
/ size = (24%, 6%)
/ position = (85%, 90%)
</text>


Sorry for butting in here.
But this script will help me a lot in my new experiment. My query is that - at present in this script, participant has to drag only one of the positive / negative words. How to do it in a way that participant has to drag both positive and negative words on to targets before he/she is taken to next set of words.
Thanks
 Abhi

You need to run two trials in sequence -- one for the 1st word the participant decides to drag to its position, followed by a second one for the 2nd word. Then start the next two-trial sequence for the next set of two words.

Thanks Dave. Sorry not clear. How to ensure that the next trial is the same set of the words as the previous one ?

Something along the following lines:

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<trial first>
/ ontrialbegin = [
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
  text.positive.hposition = 30%;
  text.positive.vposition = 50%;
text.negative.hposition = 70%;
  text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
</trial>

<trial second>
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

Thanks for this Dave. Working perfect.

I still have'nt understood the 'value function' so far. That's the key, I think.

One last thing- In this script participant cannot undo the decision of drag /drop. i.e., if he/she changes his/her mind after dragging, that can't be done. What is the command for that ?  Thanks.




If you want participants to be able to revise their decisions, you need to make sure the droptarget and dropsource properties get set back to true. You'll probably also want to introduce some additional response that allows participants to either reset the whole round to its initial state, or at least allows them to indicate when they're done, i.e. happy with their decision and ready to submit it.

Something like this, for example:

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>



<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]

/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]

</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

abhi
abhi
Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)
Group: Forum Members
Posts: 114, Visits: 558
Dave - Monday, October 15, 2018
abhi - Saturday, October 13, 2018
Dave - Thursday, October 11, 2018
abhi - Thursday, October 11, 2018
Dave - Thursday, October 11, 2018
abhi - Thursday, October 11, 2018
Dave - Monday, August 27, 2018
scollin - Monday, August 27, 2018


I managed to get it to work, thanks! One more question about this. Is it also possible to keep looping the trials until the participant presses a certain button? (i.e. that the participant can determine when the stop the task)

Yes, that's possible. Taking the 1st example I posted here, you would do it like this:

<instruct>
/ fontstyle = ("Arial", 2.8%, false, false, false, false, 5, 1)
/ txcolor = (white)
/ screencolor = black
</instruct>

<page intro>
^In the following task, you will be presented with negative words related to outcomes of smoking or with positive words you may experience if you quit smoking. You will also see an image of a cigarette, and the word 'me' on the page.
~n~nYour task is to:
~n* Drag the negative words away from you and towards the cigarette.
Drag the positive words towards the word 'me'.
~n~nPress the spacebar to begin.
</page>

<page end>
^This is the end.
</page>


<expt>
/ preinstructions = (intro)
/ blocks = [1=intervention]
/ postinstructions = (end)
</expt>

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
/11 = "stroke"
/12 = "asthma"
/13 = "feel unwell"
/14 = "out of breath"
/15 = "trapped"
/16 = "premature death"
/17 = "pollution"
/18 = "illness"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
/11 = "breathe easily"
/12 = "independent"
/13 = "clean"
/14 = "energetic"
/15 = "feel good"
/16 = "wellbeing"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 10%)
/ dropsource = true
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 10%)
/ dropsource = true
</text>

<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 10%)
/ erase = false
/ droptarget = true
</text>

<text smoking>
/ items = smoking
/ valign = bottom
/ halign = center
/ position = (50%, 10%)
/ txcolor = black
/ fontstyle = ("Arial", 10%)
/ erase = false
/ droptarget = true
</text>

<trial positive>
/ ontrialbegin = [
    text.positive.hposition = 50%;
    text.positive.vposition = 50%;
]
/ stimulusframes = [1 = positive, me, smoking, end]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, end)
/ correctresponse = (me)
/ branch = [
    if(trial.positive.response != "end") list.triallist.nextvalue;
]
</trial>

<trial negative>
/ ontrialbegin = [
    text.negative.hposition = 50%;
    text.negative.vposition = 50%;
]
/ stimulusframes = [1 = negative, me, smoking, end]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, end)
/ correctresponse = (smoking)
/ branch = [
    if(trial.negative.response != "end") list.triallist.nextvalue;
]
</trial>

<block intervention>
/trials = [1 = list.triallist]
</block>

<list triallist>
/ items = (trial.positive, trial.negative)
/ poolsize = 10
</list>

<text end>
/ items = ("Click here to end the task.")
/ txbgcolor = black
/ txcolor = white
/ erase = false
/ vjustify = center
/ size = (24%, 6%)
/ position = (85%, 90%)
</text>


Sorry for butting in here.
But this script will help me a lot in my new experiment. My query is that - at present in this script, participant has to drag only one of the positive / negative words. How to do it in a way that participant has to drag both positive and negative words on to targets before he/she is taken to next set of words.
Thanks
 Abhi

You need to run two trials in sequence -- one for the 1st word the participant decides to drag to its position, followed by a second one for the 2nd word. Then start the next two-trial sequence for the next set of two words.

Thanks Dave. Sorry not clear. How to ensure that the next trial is the same set of the words as the previous one ?

Something along the following lines:

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<trial first>
/ ontrialbegin = [
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
  text.positive.hposition = 30%;
  text.positive.vposition = 50%;
text.negative.hposition = 70%;
  text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
</trial>

<trial second>
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

Thanks for this Dave. Working perfect.

I still have'nt understood the 'value function' so far. That's the key, I think.

One last thing- In this script participant cannot undo the decision of drag /drop. i.e., if he/she changes his/her mind after dragging, that can't be done. What is the command for that ?  Thanks.




If you want participants to be able to revise their decisions, you need to make sure the droptarget and dropsource properties get set back to true. You'll probably also want to introduce some additional response that allows participants to either reset the whole round to its initial state, or at least allows them to indicate when they're done, i.e. happy with their decision and ready to submit it.

Something like this, for example:

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>



<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]

/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]

</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

Got it.

All working as I wanted. Thanks a lot.

abhi
abhi
Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)
Group: Forum Members
Posts: 114, Visits: 558
Dave - Monday, October 15, 2018
abhi - Saturday, October 13, 2018
Dave - Thursday, October 11, 2018
abhi - Thursday, October 11, 2018
Dave - Thursday, October 11, 2018
abhi - Thursday, October 11, 2018
Dave - Monday, August 27, 2018
scollin - Monday, August 27, 2018


I managed to get it to work, thanks! One more question about this. Is it also possible to keep looping the trials until the participant presses a certain button? (i.e. that the participant can determine when the stop the task)

Yes, that's possible. Taking the 1st example I posted here, you would do it like this:

<instruct>
/ fontstyle = ("Arial", 2.8%, false, false, false, false, 5, 1)
/ txcolor = (white)
/ screencolor = black
</instruct>

<page intro>
^In the following task, you will be presented with negative words related to outcomes of smoking or with positive words you may experience if you quit smoking. You will also see an image of a cigarette, and the word 'me' on the page.
~n~nYour task is to:
~n* Drag the negative words away from you and towards the cigarette.
Drag the positive words towards the word 'me'.
~n~nPress the spacebar to begin.
</page>

<page end>
^This is the end.
</page>


<expt>
/ preinstructions = (intro)
/ blocks = [1=intervention]
/ postinstructions = (end)
</expt>

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
/11 = "stroke"
/12 = "asthma"
/13 = "feel unwell"
/14 = "out of breath"
/15 = "trapped"
/16 = "premature death"
/17 = "pollution"
/18 = "illness"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
/11 = "breathe easily"
/12 = "independent"
/13 = "clean"
/14 = "energetic"
/15 = "feel good"
/16 = "wellbeing"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 10%)
/ dropsource = true
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 10%)
/ dropsource = true
</text>

<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 10%)
/ erase = false
/ droptarget = true
</text>

<text smoking>
/ items = smoking
/ valign = bottom
/ halign = center
/ position = (50%, 10%)
/ txcolor = black
/ fontstyle = ("Arial", 10%)
/ erase = false
/ droptarget = true
</text>

<trial positive>
/ ontrialbegin = [
    text.positive.hposition = 50%;
    text.positive.vposition = 50%;
]
/ stimulusframes = [1 = positive, me, smoking, end]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, end)
/ correctresponse = (me)
/ branch = [
    if(trial.positive.response != "end") list.triallist.nextvalue;
]
</trial>

<trial negative>
/ ontrialbegin = [
    text.negative.hposition = 50%;
    text.negative.vposition = 50%;
]
/ stimulusframes = [1 = negative, me, smoking, end]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, end)
/ correctresponse = (smoking)
/ branch = [
    if(trial.negative.response != "end") list.triallist.nextvalue;
]
</trial>

<block intervention>
/trials = [1 = list.triallist]
</block>

<list triallist>
/ items = (trial.positive, trial.negative)
/ poolsize = 10
</list>

<text end>
/ items = ("Click here to end the task.")
/ txbgcolor = black
/ txcolor = white
/ erase = false
/ vjustify = center
/ size = (24%, 6%)
/ position = (85%, 90%)
</text>


Sorry for butting in here.
But this script will help me a lot in my new experiment. My query is that - at present in this script, participant has to drag only one of the positive / negative words. How to do it in a way that participant has to drag both positive and negative words on to targets before he/she is taken to next set of words.
Thanks
 Abhi

You need to run two trials in sequence -- one for the 1st word the participant decides to drag to its position, followed by a second one for the 2nd word. Then start the next two-trial sequence for the next set of two words.

Thanks Dave. Sorry not clear. How to ensure that the next trial is the same set of the words as the previous one ?

Something along the following lines:

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<trial first>
/ ontrialbegin = [
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
  text.positive.hposition = 30%;
  text.positive.vposition = 50%;
text.negative.hposition = 70%;
  text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
</trial>

<trial second>
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

Thanks for this Dave. Working perfect.

I still have'nt understood the 'value function' so far. That's the key, I think.

One last thing- In this script participant cannot undo the decision of drag /drop. i.e., if he/she changes his/her mind after dragging, that can't be done. What is the command for that ?  Thanks.




If you want participants to be able to revise their decisions, you need to make sure the droptarget and dropsource properties get set back to true. You'll probably also want to introduce some additional response that allows participants to either reset the whole round to its initial state, or at least allows them to indicate when they're done, i.e. happy with their decision and ready to submit it.

Something like this, for example:

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>



<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]

/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]

</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Edited 6 Years Ago by Dave
abhi
abhi
Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)
Group: Forum Members
Posts: 114, Visits: 558
Dave - Monday, November 26, 2018
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Thanks Dave.
One thing is still there in data. In many rows (monkey data), it show the same response for both trials (trial.first.response = me and trial.second.response = me)


abhi
abhi
Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)
Group: Forum Members
Posts: 114, Visits: 558
abhi - Monday, November 26, 2018
Dave - Monday, November 26, 2018
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Thanks Dave.
One thing is still there in data. In many rows (monkey data), it show the same response for both trials (trial.first.response = me and trial.second.response = me)

Sorry. missed out on your repsonse about monkey. I will try it out manually.

Thanks.

abhi
abhi
Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)
Group: Forum Members
Posts: 114, Visits: 558
Dave - Monday, November 26, 2018
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Hi,

In this I want to counterbalance the positon of 'source and target' and so created two additional trials - 'third and fourth' with 'me2 & smoking2' and 'positive2& negative2' (at different positions).
For data I used the following. But  does'nt work. Data shows responses in all colummns. For e.g., in first and second trials, it shows entry for third and fourth trials also (when only first and second trials were played). Is something wrong here?

Thanks

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
trial.third.response trial.third.latency
trial.fourth.response trial.fourth.latency
text.negative.currentitem text.negative.hposition text.negative.vposition
text.positive.currentitem text.positive.hposition text.positive.vposition
text.negative2.currentitem text.negative2.hposition text.negative2.vposition
text.positive2.currentitem text.positive2.hposition text.positive2.vposition )
/ separatefiles = true
</data>




Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
abhi - Thursday, November 29, 2018
Dave - Monday, November 26, 2018
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Hi,

In this I want to counterbalance the positon of 'source and target' and so created two additional trials - 'third and fourth' with 'me2 & smoking2' and 'positive2& negative2' (at different positions).
For data I used the following. But  does'nt work. Data shows responses in all colummns. For e.g., in first and second trials, it shows entry for third and fourth trials also (when only first and second trials were played). Is something wrong here?

Thanks

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
trial.third.response trial.third.latency
trial.fourth.response trial.fourth.latency
text.negative.currentitem text.negative.hposition text.negative.vposition
text.positive.currentitem text.positive.hposition text.positive.vposition
text.negative2.currentitem text.negative2.hposition text.negative2.vposition
text.positive2.currentitem text.positive2.hposition text.positive2.vposition )
/ separatefiles = true
</data>




I'm not sure how I'm supposed to answer that without the actual code.

abhi
abhi
Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)Guru (7.3K reputation)
Group: Forum Members
Posts: 114, Visits: 558
abhi - Thursday, November 29, 2018
Dave - Monday, November 26, 2018
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Hi,

In this I want to counterbalance the positon of 'source and target' and so created two additional trials - 'third and fourth' with 'me2 & smoking2' and 'positive2& negative2' (at different positions).
For data I used the following. But  does'nt work. Data shows responses in all colummns. For e.g., in first and second trials, it shows entry for third and fourth trials also (when only first and second trials were played). Is something wrong here?

Thanks

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
trial.third.response trial.third.latency
trial.fourth.response trial.fourth.latency
text.negative.currentitem text.negative.hposition text.negative.vposition
text.positive.currentitem text.positive.hposition text.positive.vposition
text.negative2.currentitem text.negative2.hposition text.negative2.vposition
text.positive2.currentitem text.positive2.hposition text.positive2.vposition )
/ separatefiles = true
</data>




Dave - Thursday, November 29, 2018
abhi - Thursday, November 29, 2018
Dave - Monday, November 26, 2018
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Hi,

In this I want to counterbalance the positon of 'source and target' and so created two additional trials - 'third and fourth' with 'me2 & smoking2' and 'positive2& negative2' (at different positions).
For data I used the following. But  does'nt work. Data shows responses in all colummns. For e.g., in first and second trials, it shows entry for third and fourth trials also (when only first and second trials were played). Is something wrong here?

Thanks

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
trial.third.response trial.third.latency
trial.fourth.response trial.fourth.latency
text.negative.currentitem text.negative.hposition text.negative.vposition
text.positive.currentitem text.positive.hposition text.positive.vposition
text.negative2.currentitem text.negative2.hposition text.negative2.vposition
text.positive2.currentitem text.positive2.hposition text.positive2.vposition )
/ separatefiles = true
</data>




I'm not sure how I'm supposed to answer that without the actual code.
Sorry about that,
Here it is. Basically I just want to couterbalance the positions of droptarget and dropsouce between subjects

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ position = (30%, 80%)
/ txcolor = green
/ fontstyle = ("Arial", 5%)
/ dropsource = true
/ select = values.positem
</text>


<text negative>
/ items = negative
/ position = (70%, 80%)
/ txcolor = green
/ fontstyle = ("Arial", 5%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ position = (30%, 30%)
/ txcolor = black
/ fontstyle = ("Arial", 5%)
/ erase = false
/ droptarget = true
/ dropposition = (30%, 30%)
</text>

<text smoking>
/ items = smoking
/ position = (70%, 30%)
/ txcolor = black
/ fontstyle = ("Arial", 5%)
/ erase = false
/ droptarget = true
/ dropposition = (70%, 30%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (50%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 80%;
text.negative.hposition = 70%;
text.negative.vposition = 80%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 80%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 80%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<block myblock2>
/trials = [1-10 = third]
</block>

<expt>
/ blocks = [1-20 = random (myblock,myblock2)]
</expt>




<trial third>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive2.hposition = 30%;
text.positive2.vposition = 80%;
text.negative2.hposition = 70%;
text.negative2.vposition = 80%;
text.positive2.dropsource = true;
text.negative2.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.third.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.third.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive2, negative2, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.fourth
]
/ recorddata = false
</trial>

<trial fourth>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive2.vposition != 80%)
text.positive2.dropsource = false;
]
/ ontrialbegin = [
if (text.negative2.vposition != 80%)
text.negative2.dropsource = false;
]
/ stimulusframes = [1 = positive2, negative2, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.fourth.response == "reset"){
values.reset = true;
trial.third;
};
]
/ branch = [
if (trial.fourth.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<item negative2>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive2>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<text positive2>
/ items = positive2
/ position = (70%, 80%)
/ txcolor = green
/ fontstyle = ("Arial", 5%)
/ dropsource = true
/ select = values.positem
</text>


<text negative2>
/ items = negative2
/ position = (30%, 80%)
/ txcolor = green
/ fontstyle = ("Arial", 5%)
/ dropsource = true
/ select = values.negitem
</text>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
trial.third.response trial.third.latency
trial.fourth.response trial.fourth.latency
text.negative.currentitem text.negative.hposition text.negative.vposition
text.positive.currentitem text.positive.hposition text.positive.vposition
text.negative2.currentitem text.negative2.hposition text.negative2.vposition
text.positive2.currentitem text.positive2.hposition text.positive2.vposition )
/ separatefiles = true
</data>




Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
abhi - Thursday, November 29, 2018
abhi - Thursday, November 29, 2018
Dave - Monday, November 26, 2018
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Hi,

In this I want to counterbalance the positon of 'source and target' and so created two additional trials - 'third and fourth' with 'me2 & smoking2' and 'positive2& negative2' (at different positions).
For data I used the following. But  does'nt work. Data shows responses in all colummns. For e.g., in first and second trials, it shows entry for third and fourth trials also (when only first and second trials were played). Is something wrong here?

Thanks

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
trial.third.response trial.third.latency
trial.fourth.response trial.fourth.latency
text.negative.currentitem text.negative.hposition text.negative.vposition
text.positive.currentitem text.positive.hposition text.positive.vposition
text.negative2.currentitem text.negative2.hposition text.negative2.vposition
text.positive2.currentitem text.positive2.hposition text.positive2.vposition )
/ separatefiles = true
</data>




Dave - Thursday, November 29, 2018
abhi - Thursday, November 29, 2018
Dave - Monday, November 26, 2018
abhi - Saturday, November 24, 2018
Hi Dave,
This is working fine. But I noticed that the data is messy (I tried only test monkey).

Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

Thanks
Abhi

> Firstly, ‘Reset’ is also recorded. It will pile up to big chunk in case there are 100 respondents. Is there a way not to record the ‘reset’ data in case someone resets the trials?

You can set the trials to /recorddata=false and only /branch to a separate <trial> that records the data of interest when the participant responds "done".

> Secondly, although, when I try the expt. manually, I can’t drop the same target onto the same source (seems impossible). But data from test monkey shows many responses as same for the first and second trials (i.e. ‘me’and ‘me’ as responses in data for both first and second trials).

This is normal; It's an artifact of how the monkey works and doesn't indicate anything wrong with the code. In essence, all the monkey does is select one of the options listed in /validresponse at random.

> Thirdly, data doesn’t show which item/text/word  was drooped over droptargets (e.g., ‘refreshed’,‘clogged arteries’ etc.). I tried ‘Stimulusitem’ in column, but it shows only the stimulus items shown on the screen but not specifically which ‘text/item/word’was dragged over which target.  Is there a way to find that?

You can build some /ontrialend logic that reads the dragged elements' position. That would tell you which stimulus / item was dragged where.


<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.positem
</text>

<text negative>
/ items = negative
/ valign = center
/ halign = center
/ position = (50%, 50%)
/ txcolor = green
/ fontstyle = ("Arial", 15%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ valign = bottom
/ halign = center
/ position = (50%, 95%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 95%)
</text>

<text smoking>
/ items = smoking
/ valign = top
/ halign = center
/ position = (50%, 5%)
/ txcolor = black
/ fontstyle = ("Arial", 15%)
/ erase = false
/ droptarget = true
/ dropposition = (50%, 5%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (90%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 50%;
text.negative.hposition = 70%;
text.negative.vposition = 50%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 50%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 50%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<expt>
/ blocks = [1=myblock]
</expt>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
text.negative.currentitem text.negative.vposition
text.positive.currentitem text.positive.vposition)
/ separatefiles = true
</data>


Hi,

In this I want to counterbalance the positon of 'source and target' and so created two additional trials - 'third and fourth' with 'me2 & smoking2' and 'positive2& negative2' (at different positions).
For data I used the following. But  does'nt work. Data shows responses in all colummns. For e.g., in first and second trials, it shows entry for third and fourth trials also (when only first and second trials were played). Is something wrong here?

Thanks

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
trial.third.response trial.third.latency
trial.fourth.response trial.fourth.latency
text.negative.currentitem text.negative.hposition text.negative.vposition
text.positive.currentitem text.positive.hposition text.positive.vposition
text.negative2.currentitem text.negative2.hposition text.negative2.vposition
text.positive2.currentitem text.positive2.hposition text.positive2.vposition )
/ separatefiles = true
</data>




I'm not sure how I'm supposed to answer that without the actual code.
Sorry about that,
Here it is. Basically I just want to couterbalance the positions of droptarget and dropsouce between subjects

<item negative>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<item smoking>
/1 = "smoking"
</item>

<item me>
/1 = "me"
</item>

<text positive>
/ items = positive
/ position = (30%, 80%)
/ txcolor = green
/ fontstyle = ("Arial", 5%)
/ dropsource = true
/ select = values.positem
</text>


<text negative>
/ items = negative
/ position = (70%, 80%)
/ txcolor = green
/ fontstyle = ("Arial", 5%)
/ dropsource = true
/ select = values.negitem
</text>

<list negitemnumbers>
/ poolsize = 10
</list>

<list positemnumbers>
/ poolsize = 10
</list>

<values>
/ negitem = 1
/ positem = 1
/ reset = false
</values>


<text me>
/ items = me
/ position = (30%, 30%)
/ txcolor = black
/ fontstyle = ("Arial", 5%)
/ erase = false
/ droptarget = true
/ dropposition = (30%, 30%)
</text>

<text smoking>
/ items = smoking
/ position = (70%, 30%)
/ txcolor = black
/ fontstyle = ("Arial", 5%)
/ erase = false
/ droptarget = true
/ dropposition = (70%, 30%)
</text>

<text reset>
/ items = ("RESET")
/ size = (5%, 3%)
/ vjustify = center
/ txbgcolor = grey
/ position = (50%, 90%)
</text>


<trial first>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive.hposition = 30%;
text.positive.vposition = 80%;
text.negative.hposition = 70%;
text.negative.vposition = 80%;
text.positive.dropsource = true;
text.negative.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.first.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.first.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.second
]
/ recorddata = false
</trial>

<trial second>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive.vposition != 80%)
text.positive.dropsource = false;
]
/ ontrialbegin = [
if (text.negative.vposition != 80%)
text.negative.dropsource = false;
]
/ stimulusframes = [1 = positive, negative, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.second.response == "reset"){
values.reset = true;
trial.first;
};
]
/ branch = [
if (trial.second.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<trial record_round>
/ trialduration = 0
/ validresponse = (0)
/ recorddata = true
</trial>

<block myblock>
/trials = [1-10 = first]
</block>

<block myblock2>
/trials = [1-10 = third]
</block>

<expt>
/ blocks = [1-20 = random (myblock,myblock2)]
</expt>




<trial third>
/ ontrialbegin = [
if (!values.reset) {
values.positem = list.positemnumbers.nextindex;
values.negitem = list.negitemnumbers.nextindex;
};
]
/ ontrialbegin = [
text.positive2.hposition = 30%;
text.positive2.vposition = 80%;
text.negative2.hposition = 70%;
text.negative2.vposition = 80%;
text.positive2.dropsource = true;
text.negative2.dropsource = true;
text.me.droptarget = true;
text.smoking.droptarget = true;
]
/ ontrialend = [
if (trial.third.response == "me")
text.me.droptarget = false;
]
/ ontrialend = [
if (trial.third.response == "smoking")
text.smoking.droptarget = false;
]
/ stimulusframes = [1 = positive2, negative2, me, smoking]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking)
/ branch = [
trial.fourth
]
/ recorddata = false
</trial>

<trial fourth>
/ ontrialbegin = [
values.reset = false;
]
/ ontrialbegin = [
if (text.positive2.vposition != 80%)
text.positive2.dropsource = false;
]
/ ontrialbegin = [
if (text.negative2.vposition != 80%)
text.negative2.dropsource = false;
]
/ stimulusframes = [1 = positive2, negative2, me, smoking, reset]
/ inputdevice = dragdrop
/ showmousecursor = true
/ validresponse = (me, smoking, reset)
/ branch = [
if (trial.fourth.response == "reset"){
values.reset = true;
trial.third;
};
]
/ branch = [
if (trial.fourth.response != "reset"){
trial.record_round;
}
]
/ recorddata = false
</trial>

<item negative2>
/1 = "lung cancer"
/2 = "addiction"
/3 = "heart disease"
/4 = "clogged arteries"
/5 = "blindness"
/6 = "amputation"
/7 = "death"
/8 = "tongue cancer"
/9 = "throat cancer"
/10 = "gangrene"
</item>

<item positive2>
/1 = "healthy"
/2 = "vibrant"
/3 = "free"
/4 = "happy"
/5 = "in control"
/6 = "long life"
/7 = "energetic"
/8 = "refreshed"
/9 = "good"
/10 = "rewarding"
</item>

<text positive2>
/ items = positive2
/ position = (70%, 80%)
/ txcolor = green
/ fontstyle = ("Arial", 5%)
/ dropsource = true
/ select = values.positem
</text>


<text negative2>
/ items = negative2
/ position = (30%, 80%)
/ txcolor = green
/ fontstyle = ("Arial", 5%)
/ dropsource = true
/ select = values.negitem
</text>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode
trial.first.response trial.first.latency
trial.second.response trial.second.latency
trial.third.response trial.third.latency
trial.fourth.response trial.fourth.latency
text.negative.currentitem text.negative.hposition text.negative.vposition
text.positive.currentitem text.positive.hposition text.positive.vposition
text.negative2.currentitem text.negative2.hposition text.negative2.vposition
text.positive2.currentitem text.positive2.hposition text.positive2.vposition )
/ separatefiles = true
</data>




If you wish to counterbalance *between* subjects, then this

<expt>
/ blocks = [1-20 = random (myblock,myblock2)]
</expt>

is wrong. The above administers 10 instances of  "myblock"  (running trial.first and trial.second) and 10 instances of  "myblock2" (running trial.third and trial.fourth) to each participant, i.e. this would be *within* subjects.

For a between-manipulation, you would specify

<expt>
/ subjects = (1 of 2)
/ groupassignment = groupnumber
/ blocks = [1-20 = myblock]
</expt>

<expt>
/ subjects = (2 of 2)
/ groupassignment = groupnumber
/ blocks = [1-20 = myblock2]
</expt>

where participants assigned an odd group ID (1,3,5, ...) would get 20 instances of "myblock" and
participants assigned an even group ID (2,4,6, ...) would get 20 instances of "myblock2".

GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search