Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 105K
|
+x+xTo clarify, on the 'colorResponse' trial, a response field covers parts of the displayed shaped. I do run 'clearscreen' and do not understand where this comes from After some trial-and-error I figured the errors only occurs when the trial 'colorResponse' is openended. Although I fixed the issue, I am curious about my clear misunderstanding of the openended trial. What am I getting wrong here, after all, I do want an openended response? Thanks in advance, Dave! An <openended> displays a textbox to collect a typed response, so it sounds like it did exactly what you told it to do. You don't want a typed response -- you want a click on one of several colored shapes -- as the color response, that's a job for a <trial> element, not an <openended>.
|
|
|
lukasg
|
|
Group: Forum Members
Posts: 35,
Visits: 103
|
+xTo clarify, on the 'colorResponse' trial, a response field covers parts of the displayed shaped. I do run 'clearscreen' and do not understand where this comes from After some trial-and-error I figured the errors only occurs when the trial 'colorResponse' is openended. Although I fixed the issue, I am curious about my clear misunderstanding of the openended trial. What am I getting wrong here, after all, I do want an openended response? Thanks in advance, Dave!
|
|
|
Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 105K
|
+x+x+xOne unrelated remark: Assuming all your trials are basically identical *except* for the on-screen duration of the digits/target/distracors array, e.g. /stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2; 350 = clearscreen] // 200ms vs. /stimulustimes = [0 = clearscreen,fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2; 400 = clearscreen] // 250ms etc. you can save yourself a lot of essentially redundant code by having only a single stimulus presentation trial and inserting the final clearscreen stimulus programmatically per insertstimulustime(). https://www.millisecond.com/support/docs/v6/html/language/functions/insertstimulustime.htmI.e. <trial presentationTrial> / ontrialbegin = [ trial.presentationTrial.resetstimulusframes(); trial.presentationTrial.insertstimulustime(clearscreen, 150 + values.targetarrayduration); ... ] /stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2;] ... </trial> whith values.targetarrayduration set to the desired value for the given block (i.e. 100, 150, 200, etc.). Great, this seems much more efficient but it messes up the stimulus presentation somehow. I have done this: <expt IC> / blocks = [1 = 250ms] </expt>
<block 250ms> / trials = [1-5 = conjunctionTrial] / onblockbegin = [ values.targetDuration = 250 ] </block>
<openended conjunctionTrial>
/ recorddata = false
/ ontrialbegin = [ openended.conjunctionTrial.insertstimulustime(clearscreen, 150 + values.targetDuration); openended.conjunctionTrial.insertstimulustime(enterdig, 150 + values.targetDuration); // select digit items values.dig1 = list.digits.nextvalue; values.dig2 = list.digits.nextvalue; // select target item values.t = list.t_items.nextvalue; // select distractor items values.d1 = list.d_items.nextvalue; values.d2 = list.d_items.nextvalue; // select target position values.t_x = list.t_x.nextvalue; // select distractor positions values.d1_x = list.d_x.nextvalue; values.d2_x = list.d_x.nextvalue; // select target color values.t_color = list.t_colors.nextvalue; // and corresponding response key // combine digits values.correctdigit = concat(values.dig1, values.dig2); // select distractor colors values.d1_color = list.d_colors.nextvalue; values.d2_color = list.d_colors.nextvalue; ]
/stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen, t, d1, d2 , dig1, dig2;] / mask = positiveinteger / beginresponsetime = 150 + values.targetDuration / mask = positiveinteger / charlimit = 2
/ correctresponse = (values.correctdigit)
/ branch = [trial.colorResponse]
/ ontrialend = [ // save data values.latencyDigit = openended.conjunctionTrial.latency; values.digitResponse = openended.conjunctionTrial.response;
values.digPropCor = openended.conjunctionTrial.percentcorrect; values.digLatAvg = openended.conjunctionTrial.meanlatency;
// reset relevant lists for next trial list.d_items.reset(); list.d_x.reset(); list.d_colors.reset(); ]
</openended>
To clarify, on the 'colorResponse' trial, a response field covers parts of the displayed shaped. I do run 'clearscreen' and do not understand where this comes from You have not posted any code for the "colorResponse" trial. Please provide code that is actually sufficiently complete and can be run. Otherwise it is not clear at all what you are referring to. Thank you.
|
|
|
lukasg
|
|
Group: Forum Members
Posts: 35,
Visits: 103
|
+x+xOne unrelated remark: Assuming all your trials are basically identical *except* for the on-screen duration of the digits/target/distracors array, e.g. /stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2; 350 = clearscreen] // 200ms vs. /stimulustimes = [0 = clearscreen,fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2; 400 = clearscreen] // 250ms etc. you can save yourself a lot of essentially redundant code by having only a single stimulus presentation trial and inserting the final clearscreen stimulus programmatically per insertstimulustime(). https://www.millisecond.com/support/docs/v6/html/language/functions/insertstimulustime.htmI.e. <trial presentationTrial> / ontrialbegin = [ trial.presentationTrial.resetstimulusframes(); trial.presentationTrial.insertstimulustime(clearscreen, 150 + values.targetarrayduration); ... ] /stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2;] ... </trial> whith values.targetarrayduration set to the desired value for the given block (i.e. 100, 150, 200, etc.). Great, this seems much more efficient but it messes up the stimulus presentation somehow. I have done this: <expt IC> / blocks = [1 = 250ms] </expt>
<block 250ms> / trials = [1-5 = conjunctionTrial] / onblockbegin = [ values.targetDuration = 250 ] </block>
<openended conjunctionTrial>
/ recorddata = false
/ ontrialbegin = [ openended.conjunctionTrial.insertstimulustime(clearscreen, 150 + values.targetDuration); openended.conjunctionTrial.insertstimulustime(enterdig, 150 + values.targetDuration); // select digit items values.dig1 = list.digits.nextvalue; values.dig2 = list.digits.nextvalue; // select target item values.t = list.t_items.nextvalue; // select distractor items values.d1 = list.d_items.nextvalue; values.d2 = list.d_items.nextvalue; // select target position values.t_x = list.t_x.nextvalue; // select distractor positions values.d1_x = list.d_x.nextvalue; values.d2_x = list.d_x.nextvalue; // select target color values.t_color = list.t_colors.nextvalue; // and corresponding response key // combine digits values.correctdigit = concat(values.dig1, values.dig2); // select distractor colors values.d1_color = list.d_colors.nextvalue; values.d2_color = list.d_colors.nextvalue; ]
/stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen, t, d1, d2 , dig1, dig2;] / mask = positiveinteger / beginresponsetime = 150 + values.targetDuration / mask = positiveinteger / charlimit = 2
/ correctresponse = (values.correctdigit)
/ branch = [trial.colorResponse]
/ ontrialend = [ // save data values.latencyDigit = openended.conjunctionTrial.latency; values.digitResponse = openended.conjunctionTrial.response;
values.digPropCor = openended.conjunctionTrial.percentcorrect; values.digLatAvg = openended.conjunctionTrial.meanlatency;
// reset relevant lists for next trial list.d_items.reset(); list.d_x.reset(); list.d_colors.reset(); ]
</openended>
To clarify, on the 'colorResponse' trial, a response field covers parts of the displayed shaped. I do run 'clearscreen' and do not understand where this comes from
|
|
|
lukasg
|
|
Group: Forum Members
Posts: 35,
Visits: 103
|
+xOne unrelated remark: Assuming all your trials are basically identical *except* for the on-screen duration of the digits/target/distracors array, e.g. /stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2; 350 = clearscreen] // 200ms vs. /stimulustimes = [0 = clearscreen,fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2; 400 = clearscreen] // 250ms etc. you can save yourself a lot of essentially redundant code by having only a single stimulus presentation trial and inserting the final clearscreen stimulus programmatically per insertstimulustime(). https://www.millisecond.com/support/docs/v6/html/language/functions/insertstimulustime.htmI.e. <trial presentationTrial> / ontrialbegin = [ trial.presentationTrial.resetstimulusframes(); trial.presentationTrial.insertstimulustime(clearscreen, 150 + values.targetarrayduration); ... ] /stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2;] ... </trial> whith values.targetarrayduration set to the desired value for the given block (i.e. 100, 150, 200, etc.). Great, this seems much more efficient but it messes up the stimulus presentation somehow. I have done this: <expt IC> / blocks = [1 = 250ms] </expt>
<block 250ms> / trials = [1-5 = conjunctionTrial] / onblockbegin = [ values.targetDuration = 250 ] </block>
<openended conjunctionTrial>
/ recorddata = false
/ ontrialbegin = [ openended.conjunctionTrial.insertstimulustime(clearscreen, 150 + values.targetDuration); openended.conjunctionTrial.insertstimulustime(enterdig, 150 + values.targetDuration); // select digit items values.dig1 = list.digits.nextvalue; values.dig2 = list.digits.nextvalue; // select target item values.t = list.t_items.nextvalue; // select distractor items values.d1 = list.d_items.nextvalue; values.d2 = list.d_items.nextvalue; // select target position values.t_x = list.t_x.nextvalue; // select distractor positions values.d1_x = list.d_x.nextvalue; values.d2_x = list.d_x.nextvalue; // select target color values.t_color = list.t_colors.nextvalue; // and corresponding response key // combine digits values.correctdigit = concat(values.dig1, values.dig2); // select distractor colors values.d1_color = list.d_colors.nextvalue; values.d2_color = list.d_colors.nextvalue; ]
/stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen, t, d1, d2 , dig1, dig2;] / mask = positiveinteger / beginresponsetime = 150 + values.targetDuration / mask = positiveinteger / charlimit = 2
/ correctresponse = (values.correctdigit)
/ branch = [trial.colorResponse]
/ ontrialend = [ // save data values.latencyDigit = openended.conjunctionTrial.latency; values.digitResponse = openended.conjunctionTrial.response;
values.digPropCor = openended.conjunctionTrial.percentcorrect; values.digLatAvg = openended.conjunctionTrial.meanlatency;
// reset relevant lists for next trial list.d_items.reset(); list.d_x.reset(); list.d_colors.reset(); ]
</openended>
|
|
|
Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 105K
|
+x+xYou commented out the <expt> element, so blocks are run in alphabetical order, so it runs <block 100ms>, etc. Those blocks all run an openended which then branches to yet another openended. E.g. <openended trial100> ... / branch = [if(openended.trialPractice.correct == 1 || openended.trialPractice.correct == 0)openended.digitResponse] ... </openended> Fix your <expt> element and things will work just fine for the block you implemented properly. Thanks for looking into it, this did indeed fix the issue. Silly mistake - time for coffee. One unrelated remark: Assuming all your trials are basically identical *except* for the on-screen duration of the digits/target/distracors array, e.g. /stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2; 350 = clearscreen] // 200ms vs. /stimulustimes = [0 = clearscreen,fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2; 400 = clearscreen] // 250ms etc. you can save yourself a lot of essentially redundant code by having only a single stimulus presentation trial and inserting the final clearscreen stimulus programmatically per insertstimulustime(). https://www.millisecond.com/support/docs/v6/html/language/functions/insertstimulustime.htmI.e. <trial presentationTrial> / ontrialbegin = [ trial.presentationTrial.resetstimulusframes(); trial.presentationTrial.insertstimulustime(clearscreen, 150 + values.targetarrayduration); ... ] /stimulustimes = [0 = clearscreen, fixation; 150 = clearscreen,t, d1, d2 , dig1, dig2;] ... </trial> whith values.targetarrayduration set to the desired value for the given block (i.e. 100, 150, 200, etc.).
|
|
|
lukasg
|
|
Group: Forum Members
Posts: 35,
Visits: 103
|
+xYou commented out the <expt> element, so blocks are run in alphabetical order, so it runs <block 100ms>, etc. Those blocks all run an openended which then branches to yet another openended. E.g. <openended trial100> ... / branch = [if(openended.trialPractice.correct == 1 || openended.trialPractice.correct == 0)openended.digitResponse] ... </openended> Fix your <expt> element and things will work just fine for the block you implemented properly. Thanks for looking into it, this did indeed fix the issue. Silly mistake - time for coffee.
|
|
|
Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 105K
|
+x+x+x+x> I am attempting to add a text above the response on a trial. What is that supposed to mean? I also don't understand why you need "1st trial = presentation of stimuli". The <openended> can display those stimuli, there is no need for a separate "presentation of stimuli" trial. > [...] my 'solution' runs into the issue of presenting the first response box twice, once as part of the 1st trial, and once as part of the 2nd trial. What? It may be easier to attach the entire script., hope the issue becomes clear. The participant is prompted twice to enter digits. I want to present a text box above the response box saying something along the lines of 'enter digits below'. Look, in the script as you attached it, you run two blocks: //<expt illusoryConjunction> // set finishpage to prolific for automatic payment / onexptbegin = [defaults.finishpage = "http://www.example.com/"] // blocks = [1 = practice; 2 = 250ms; 3 = 200ms; 4 = 150ms; 5 = 100ms] / blocks = [1 = 250ms; 2 = 200ms]/</expt> In <block 250ms>, you run <trial trial250>, whcih then branches to <openended digitresponse>. That's it for <block 250ms>. <block 250ms> / trials = [1 = trial250] </block> <trial trial250> ... / branch = [openended.digitResponse] ... </trial> You then run <block 200ms>, in which you run a <openended trial200ms>, nothing else. <block 200ms> / trials = [1 = trial200] </block> <openended trial200> / recorddata = false / ontrialbegin = [ // select digit items values.dig1 = list.digits.nextvalue; values.dig2 = list.digits.nextvalue; // select target item values.t = list.t_items.nextvalue; // select distractor items values.d1 = list.d_items.nextvalue; values.d2 = list.d_items.nextvalue; // select target position values.t_x = list.t_x.nextvalue; // select distractor positions values.d1_x = list.d_x.nextvalue; values.d2_x = list.d_x.nextvalue; // select target color values.t_color = list.t_colors.nextvalue; // and corresponding response key // combine digits values.correctdigit = concat(values.dig1, values.dig2); // select distractor colors values.d1_color = list.d_colors.nextvalue; values.d2_color = list.d_colors.nextvalue; ] /stimulustimes = [0 = clearscreen; 1 = fixation; 150 = clearscreen; 151 = t, d1, d2 , dig1, dig2; 351 = clearscreen] / mask = positiveinteger / beginresponsetime = 351 / correctresponse = (values.correctdigit) / branch = [if(openended.trialPractice.correct == 1 || openended.trialPractice.correct == 0)openended.digitResponse] / ontrialend = [ // reset relevant lists for next trial list.d_items.reset(); list.d_x.reset(); list.d_colors.reset(); ] </openended> Yet, this is not the origin of the issue. Even when removing the 200ms block, the response screen appears twice. I wish to have a response screen where participants can enter two digits, above which a text reads 'please enter the digits'. How can this be done? You commented out the <expt> element, so blocks are run in alphabetical order, so it runs <block 100ms>, etc. Those blocks all run an openended which then branches to yet another openended. E.g. <openended trial100> ... / branch = [if(openended.trialPractice.correct == 1 || openended.trialPractice.correct == 0)openended.digitResponse] ... </openended> Fix your <expt> element and things will work just fine for the block you implemented properly.
|
|
|
lukasg
|
|
Group: Forum Members
Posts: 35,
Visits: 103
|
+x+x+x> I am attempting to add a text above the response on a trial. What is that supposed to mean? I also don't understand why you need "1st trial = presentation of stimuli". The <openended> can display those stimuli, there is no need for a separate "presentation of stimuli" trial. > [...] my 'solution' runs into the issue of presenting the first response box twice, once as part of the 1st trial, and once as part of the 2nd trial. What? It may be easier to attach the entire script., hope the issue becomes clear. The participant is prompted twice to enter digits. I want to present a text box above the response box saying something along the lines of 'enter digits below'. Look, in the script as you attached it, you run two blocks: //<expt illusoryConjunction> // set finishpage to prolific for automatic payment / onexptbegin = [defaults.finishpage = "http://www.example.com/"] // blocks = [1 = practice; 2 = 250ms; 3 = 200ms; 4 = 150ms; 5 = 100ms] / blocks = [1 = 250ms; 2 = 200ms]/</expt> In <block 250ms>, you run <trial trial250>, whcih then branches to <openended digitresponse>. That's it for <block 250ms>. <block 250ms> / trials = [1 = trial250] </block> <trial trial250> ... / branch = [openended.digitResponse] ... </trial> You then run <block 200ms>, in which you run a <openended trial200ms>, nothing else. <block 200ms> / trials = [1 = trial200] </block> <openended trial200> / recorddata = false / ontrialbegin = [ // select digit items values.dig1 = list.digits.nextvalue; values.dig2 = list.digits.nextvalue; // select target item values.t = list.t_items.nextvalue; // select distractor items values.d1 = list.d_items.nextvalue; values.d2 = list.d_items.nextvalue; // select target position values.t_x = list.t_x.nextvalue; // select distractor positions values.d1_x = list.d_x.nextvalue; values.d2_x = list.d_x.nextvalue; // select target color values.t_color = list.t_colors.nextvalue; // and corresponding response key // combine digits values.correctdigit = concat(values.dig1, values.dig2); // select distractor colors values.d1_color = list.d_colors.nextvalue; values.d2_color = list.d_colors.nextvalue; ] /stimulustimes = [0 = clearscreen; 1 = fixation; 150 = clearscreen; 151 = t, d1, d2 , dig1, dig2; 351 = clearscreen] / mask = positiveinteger / beginresponsetime = 351 / correctresponse = (values.correctdigit) / branch = [if(openended.trialPractice.correct == 1 || openended.trialPractice.correct == 0)openended.digitResponse] / ontrialend = [ // reset relevant lists for next trial list.d_items.reset(); list.d_x.reset(); list.d_colors.reset(); ] </openended> Yet, this is not the origin of the issue. Even when removing the 200ms block, the response screen appears twice. I wish to have a response screen where participants can enter two digits, above which a text reads 'please enter the digits'. How can this be done?
|
|
|
Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 105K
|
+x+x> I am attempting to add a text above the response on a trial. What is that supposed to mean? I also don't understand why you need "1st trial = presentation of stimuli". The <openended> can display those stimuli, there is no need for a separate "presentation of stimuli" trial. > [...] my 'solution' runs into the issue of presenting the first response box twice, once as part of the 1st trial, and once as part of the 2nd trial. What? It may be easier to attach the entire script., hope the issue becomes clear. The participant is prompted twice to enter digits. I want to present a text box above the response box saying something along the lines of 'enter digits below'. Look, in the script as you attached it, you run two blocks: //<expt illusoryConjunction> // set finishpage to prolific for automatic payment / onexptbegin = [defaults.finishpage = "http://www.example.com/"] // blocks = [1 = practice; 2 = 250ms; 3 = 200ms; 4 = 150ms; 5 = 100ms] / blocks = [1 = 250ms; 2 = 200ms]/</expt> In <block 250ms>, you run <trial trial250>, whcih then branches to <openended digitresponse>. That's it for <block 250ms>. <block 250ms> / trials = [1 = trial250] </block> <trial trial250> ... / branch = [openended.digitResponse] ... </trial> You then run <block 200ms>, in which you run a <openended trial200ms>, nothing else. <block 200ms> / trials = [1 = trial200] </block> <openended trial200> / recorddata = false / ontrialbegin = [ // select digit items values.dig1 = list.digits.nextvalue; values.dig2 = list.digits.nextvalue; // select target item values.t = list.t_items.nextvalue; // select distractor items values.d1 = list.d_items.nextvalue; values.d2 = list.d_items.nextvalue; // select target position values.t_x = list.t_x.nextvalue; // select distractor positions values.d1_x = list.d_x.nextvalue; values.d2_x = list.d_x.nextvalue; // select target color values.t_color = list.t_colors.nextvalue; // and corresponding response key // combine digits values.correctdigit = concat(values.dig1, values.dig2); // select distractor colors values.d1_color = list.d_colors.nextvalue; values.d2_color = list.d_colors.nextvalue; ] /stimulustimes = [0 = clearscreen; 1 = fixation; 150 = clearscreen; 151 = t, d1, d2 , dig1, dig2; 351 = clearscreen] / mask = positiveinteger / beginresponsetime = 351 / correctresponse = (values.correctdigit) / branch = [if(openended.trialPractice.correct == 1 || openended.trialPractice.correct == 0)openended.digitResponse] / ontrialend = [ // reset relevant lists for next trial list.d_items.reset(); list.d_x.reset(); list.d_colors.reset(); ] </openended>
|
|
|