Inquisit and EEG trigger: Some triggers recorded and some not


Author
Message
yanyan
yanyan
Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)
Group: Forum Members
Posts: 12, Visits: 31
Dave - Wednesday, June 14, 2017
yanyan - Wednesday, June 14, 2017
Dear all,

I have a question about the EEG triggers. I have modified a dot probe task based on the template from milllisecond library. 
I want to connect it to neuroscan, and I used the <port> to set up triggers. 
I set multiple triggers in different time points.
For example, I set up three  triggers, and the problem is that only the first trigger works ( could be recorded).   

<trial MS_NA>
/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]
/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]
/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]
/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]
/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]
/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}
else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]
/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.ms_na_word, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]
/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(port.ms_na_con, (values.fixationduration + values.targetduration ))]
/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(port.ms_na_incon, (values.fixationduration + values.targetduration ))]
/ ontrialend = [trial.MS_NA.resetstimulusframes()]
/ stimulusframes = [1 = fixation]
/ beginresponsetime = values.fixationduration + values.targetduration
/ responseinterrupt = immediate
/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]
/ iscorrectresponse = [(values.probe_x == values.target_left_x && trial.MS_NA.response == values.responsekey_left) ||
(values.probe_x == values.target_right_x && trial.MS_NA.response == values.responsekey_right)]
/ ontrialend = [if (trial.MS_NA.latency >= values.minimum_latency) values.valid = 1]
/ ontrialend = [if (values.valid == 1 && trial.MS_NA.correct) values.validcorrect = 1]
/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]
/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]
/ ontrialend = [if (values.validcorrect == 1 && values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]
/ ontrialend = [if (values.validcorrect == 1 && values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]
/ timeout = (values.fixationduration + values.targetduration + values.probeduration)
</trial>

<port MS_NA_word>
/ port = LPT1
/ subport = data
/ items = ("00000001")
</port>

<port MS_NA_con>
/ port = LPT1
/ subport = data
/ items = ("00000100")

<port MS_NA_incon>
/ port = LPT1
/ subport = data
/ items = ("00000111")
</port>

Only the MS_NA_word trigger could be recorded in the EEG maker file. The other two are not recorded. 

Does anyone know why and how to resolve this?
Thank you so much!

Best,
Yan

#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See https://www.millisecond.com/download/library/neuroscan/
#2: Even with systems which do not require this specific setup of triggers sent to different subports, what you'lll generally want to do is return to baseline a short time after each individual marker in order to get a clear separation between the (here:three) markers. I.e. do something like

<trial MS_NA>
...
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.ms_na_word, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]
...
</trial>

with

<port allbitstolow>
/ port = LPT1
/ subport = data
/ items = ("00000000")
</port>

Hope this helps.

Hi Dave,

It helps. Thank you very much for your quick reply!

However, I have met another question about stimulus onset in a Stroop task. I found that when I set /beginresponsetime, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?
Then I'm not sure the EEG trigger of the stimulus onset is sent at 0 time point or at the 20? I mean, is the trigger also delay 20 ms as the actual onset?  

When I delete the /beginresponsetime, the stimulus onset is 0. But there is a problem that some responses are not recorded (as 0 in data file, I am sure I have made valid response), especially for those too fast response.

<trial NeutralWord>
/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]
/ ontrialbegin = [trial.neutralword.insertstimulustime(port.allbitstolow,50)]
/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]
/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]
/monkeyresponse = (33, 36)
/iscorrectresponse = [(text.NeutralWord.textcolor == red && trial.NeutralWord.response == values.keyred) ||
(text.NeutralWord.textcolor == blue && trial.NeutralWord.response == values.keyblue)]
/errormessage = (errorneutral,0)
/correctmessage = (correctneutral,0)
/ontrialend = [trial.NeutralWord.resetstimulusframes()]
/ontrialend = [values.target = text.NeutralWord.currentitem]
/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"
else if (text.NeutralWord.textcolor == blue) values.color = "blue"]
/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]
/trialduration = (values.fixationcrosspresentationtime+400)
/responseinterrupt = frames
/beginresponsetime = 0
</trial>

with
<port neutralsignal>
/ port = LPT1
/ subport = data
/ items = ("00000011")
</port>

<port correctneutral>
/ port = LPT1
/ subport = data
/ items = ("00001001")
</port>

<port errorneutral>
/ port = LPT1
/ subport = data
/ items = ("00000110")
</port>

<port allbitstolow>
/ port = LPT1
/ subport = data
/ items = ("00000000")
</port>

Also, as in my code, is that correct way to send correct or error response trigger by /correctmessage and /errormessage?

Cheers,
Yan






Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 109K
yanyan - Wednesday, June 14, 2017
Dear all,

I have a question about the EEG triggers. I have modified a dot probe task based on the template from milllisecond library. 
I want to connect it to neuroscan, and I used the <port> to set up triggers. 
I set multiple triggers in different time points.
For example, I set up three  triggers, and the problem is that only the first trigger works ( could be recorded).   

<trial MS_NA>
/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]
/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]
/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]
/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]
/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]
/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}
else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]
/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.ms_na_word, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]
/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(port.ms_na_con, (values.fixationduration + values.targetduration ))]
/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(port.ms_na_incon, (values.fixationduration + values.targetduration ))]
/ ontrialend = [trial.MS_NA.resetstimulusframes()]
/ stimulusframes = [1 = fixation]
/ beginresponsetime = values.fixationduration + values.targetduration
/ responseinterrupt = immediate
/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]
/ iscorrectresponse = [(values.probe_x == values.target_left_x && trial.MS_NA.response == values.responsekey_left) ||
(values.probe_x == values.target_right_x && trial.MS_NA.response == values.responsekey_right)]
/ ontrialend = [if (trial.MS_NA.latency >= values.minimum_latency) values.valid = 1]
/ ontrialend = [if (values.valid == 1 && trial.MS_NA.correct) values.validcorrect = 1]
/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]
/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]
/ ontrialend = [if (values.validcorrect == 1 && values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]
/ ontrialend = [if (values.validcorrect == 1 && values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]
/ timeout = (values.fixationduration + values.targetduration + values.probeduration)
</trial>

<port MS_NA_word>
/ port = LPT1
/ subport = data
/ items = ("00000001")
</port>

<port MS_NA_con>
/ port = LPT1
/ subport = data
/ items = ("00000100")

<port MS_NA_incon>
/ port = LPT1
/ subport = data
/ items = ("00000111")
</port>

Only the MS_NA_word trigger could be recorded in the EEG maker file. The other two are not recorded. 

Does anyone know why and how to resolve this?
Thank you so much!

Best,
Yan

#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See https://www.millisecond.com/download/library/neuroscan/
#2: Even with systems which do not require this specific setup of triggers sent to different subports, what you'lll generally want to do is return to baseline a short time after each individual marker in order to get a clear separation between the (here:three) markers. I.e. do something like

<trial MS_NA>
...
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.ms_na_word, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]
...
</trial>

with

<port allbitstolow>
/ port = LPT1
/ subport = data
/ items = ("00000000")
</port>

Hope this helps.

yanyan
yanyan
Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)Expert (1K reputation)
Group: Forum Members
Posts: 12, Visits: 31
Dear all,

I have a question about the EEG triggers. I have modified a dot probe task based on the template from milllisecond library. 
I want to connect it to neuroscan, and I used the <port> to set up triggers. 
I set multiple triggers in different time points.
For example, I set up three  triggers, and the problem is that only the first trigger works ( could be recorded).   

<trial MS_NA>
/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]
/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]
/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]
/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]
/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]
/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}
else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]
/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.ms_na_word, values.fixationduration)]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]
/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]
/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(port.ms_na_con, (values.fixationduration + values.targetduration ))]
/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(port.ms_na_incon, (values.fixationduration + values.targetduration ))]
/ ontrialend = [trial.MS_NA.resetstimulusframes()]
/ stimulusframes = [1 = fixation]
/ beginresponsetime = values.fixationduration + values.targetduration
/ responseinterrupt = immediate
/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]
/ iscorrectresponse = [(values.probe_x == values.target_left_x && trial.MS_NA.response == values.responsekey_left) ||
(values.probe_x == values.target_right_x && trial.MS_NA.response == values.responsekey_right)]
/ ontrialend = [if (trial.MS_NA.latency >= values.minimum_latency) values.valid = 1]
/ ontrialend = [if (values.valid == 1 && trial.MS_NA.correct) values.validcorrect = 1]
/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]
/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]
/ ontrialend = [if (values.validcorrect == 1 && values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]
/ ontrialend = [if (values.validcorrect == 1 && values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]
/ timeout = (values.fixationduration + values.targetduration + values.probeduration)
</trial>

<port MS_NA_word>
/ port = LPT1
/ subport = data
/ items = ("00000001")
</port>

<port MS_NA_con>
/ port = LPT1
/ subport = data
/ items = ("00000100")

<port MS_NA_incon>
/ port = LPT1
/ subport = data
/ items = ("00000111")
</port>

Only the MS_NA_word trigger could be recorded in the EEG maker file. The other two are not recorded. 

Does anyone know why and how to resolve this?
Thank you so much!

Best,
Yan
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search