﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Millisecond Forums » Millisecond Forums » Inquisit 4  » Inquisit and EEG trigger: Some triggers recorded and some not</title><generator>InstantForum 2017-1 Final</generator><description>Millisecond Forums</description><link>https://forums.millisecond.com/</link><webMaster>Millisecond Forums</webMaster><lastBuildDate>Sun, 27 Sep 2026 11:01:51 GMT</lastBuildDate><ttl>20</ttl><item><title>Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21863.aspx</link><description>Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan</description><pubDate>Mon, 19 Jun 2017 08:17:16 GMT</pubDate><dc:creator>yanyan</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21898.aspx</link><description>&lt;div data-id="21894" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21894" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21894" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21894" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Monday, June 19, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21894"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21891" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21891" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21891" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21891" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Monday, June 19, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21891"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21888" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21888" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21888" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21888" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21888"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21887" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21887" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21887" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21887" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21887"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21886" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21886" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21886" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21886" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21886"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21885" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21885" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21885" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21885" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21885"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21882" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21882" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21882" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21882" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21882"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21879" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21879" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21879" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21879" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21879"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497885400983"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21879"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;&lt;br/&gt;Yes. In terms of synchronization between the TTL signal and the visual stimuli, it should not matter.&lt;br/&gt;&lt;br/&gt;&amp;gt; /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made?&lt;br/&gt;&lt;br/&gt;Since your &amp;lt;trial&amp;gt; is set to &lt;br/&gt;&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;br/&gt;the response trigger would not necessarily be sent immediately upon response. If the response occurred prior to the stimulus presentation sequence finishing&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;i.e. before 400ms, the trial would first finish the presentation sequence and only *then* execute /correctmessage.&lt;br/&gt;&lt;br/&gt;If the response occurred only after the presentation of all stimuli, i.e. after ~400ms, /correctmessage would be executed immediately upon registering the response.&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21882"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Many thanks, Dave! &lt;br/&gt;&lt;br/&gt;Well, that's a problem, because I have to send response trigger immediately when response occurs, (i.e, including response before 400 ms).&lt;br/&gt;Then I prefer not using &lt;strong&gt;/responseinterrupt = frames&lt;/strong&gt; and&amp;nbsp;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt; in my code.&lt;br/&gt;However, when I delete these two attributes, many of my responses are not recorded in my data file. That is, these responses are recorded as 0, while I am sure I have made responses. It seems would happen when I respond very fast (maybe before 400 ms?).&lt;br/&gt;Why these responses could not been recorded? Do you know how to fix this problem?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21885"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;By default, Inquisit starts listening for responses once all stimuli have been presented. I.e. with&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;and no /beginresponsetime attribute specified, response logging would only begin 400ms into the trial -- once blank, fixation, ..., havce been displayed.&lt;br/&gt;&lt;br/&gt;What you'll want to do if you *need* the trigger sent directly upon response *and* want to consider responses made from the start, you should specify&lt;br/&gt;&lt;br/&gt;/ beginresponsetime = 0&lt;br/&gt;and&lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;&lt;br/&gt;The consequence of this, however, will be that &lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;blank, fixation, redreminder and bluereminder will *not* be displayed *if* the response occurs before the 400ms mark.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21886"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you, Dave!&lt;br/&gt;&lt;br/&gt;I understand. However, I need the &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;to be displayed after response, so I think I still need to use the&amp;nbsp;&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;and&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;However, I changed a way to send response trigger:&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;Is that a correct way to send response trigger immediately when a response occurs (i.e., based on latency)?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21887"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;That cannot possibly work. Whether the response will be correct and at what time it will correct is simply _not known_ at the start of the trial (/ontrialbegin). This will *not* send response triggers in any sensible way.&lt;br/&gt;&lt;br/&gt;You _ought to_ use /correctmessage and /errormessage for that AND you ought to set /responseinterrupt to immediate if you want them without delay no matter when the response occurs.&lt;br/&gt;&lt;br/&gt;What you can do to have  &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;displayed if a response occurs before 400ms -- the time they would normally be displayed -- is use /responsemessage attributes to display them.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21888"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thanks, Dave.&lt;br/&gt;&lt;br/&gt;It seems a good way to set &lt;strong&gt;/responsemessage&lt;/strong&gt; to display the remaining stimuli after response&amp;nbsp;&lt;strong&gt;(i.e.., blank, fixation, redreminder, bluereminder).&lt;/strong&gt;&lt;br/&gt;However, there is a problem. The stimuli 0=&lt;strong&gt;neutralword &lt;/strong&gt;should been displayed for 400 ms. If I&amp;nbsp;set as you said, it would disappear immediately after response made before 400 ms.&lt;br/&gt;Do you know how to resolve this?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan &amp;nbsp;&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21891"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt;  If I&amp;nbsp;set as you said, it would disappear immediately after response made before 400 ms.&lt;br/&gt;&lt;br/&gt;Yes, that is correct.&lt;br/&gt;&lt;br/&gt;&amp;gt; Do you know how to resolve this?&lt;br/&gt;&lt;br/&gt;No, I cannot think of a way.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21894"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Anyway, thank you very much, Dave!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan</description><pubDate>Mon, 19 Jun 2017 08:17:16 GMT</pubDate><dc:creator>yanyan</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21894.aspx</link><description>&lt;div data-id="21891" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21891" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21891" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21891" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Monday, June 19, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21891"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21888" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21888" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21888" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21888" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21888"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21887" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21887" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21887" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21887" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21887"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21886" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21886" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21886" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21886" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21886"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21885" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21885" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21885" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21885" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21885"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21882" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21882" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21882" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21882" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21882"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21879" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21879" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21879" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21879" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21879"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497881960103"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21879"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;&lt;br/&gt;Yes. In terms of synchronization between the TTL signal and the visual stimuli, it should not matter.&lt;br/&gt;&lt;br/&gt;&amp;gt; /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made?&lt;br/&gt;&lt;br/&gt;Since your &amp;lt;trial&amp;gt; is set to &lt;br/&gt;&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;br/&gt;the response trigger would not necessarily be sent immediately upon response. If the response occurred prior to the stimulus presentation sequence finishing&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;i.e. before 400ms, the trial would first finish the presentation sequence and only *then* execute /correctmessage.&lt;br/&gt;&lt;br/&gt;If the response occurred only after the presentation of all stimuli, i.e. after ~400ms, /correctmessage would be executed immediately upon registering the response.&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21882"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Many thanks, Dave! &lt;br/&gt;&lt;br/&gt;Well, that's a problem, because I have to send response trigger immediately when response occurs, (i.e, including response before 400 ms).&lt;br/&gt;Then I prefer not using &lt;strong&gt;/responseinterrupt = frames&lt;/strong&gt; and&amp;nbsp;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt; in my code.&lt;br/&gt;However, when I delete these two attributes, many of my responses are not recorded in my data file. That is, these responses are recorded as 0, while I am sure I have made responses. It seems would happen when I respond very fast (maybe before 400 ms?).&lt;br/&gt;Why these responses could not been recorded? Do you know how to fix this problem?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21885"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;By default, Inquisit starts listening for responses once all stimuli have been presented. I.e. with&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;and no /beginresponsetime attribute specified, response logging would only begin 400ms into the trial -- once blank, fixation, ..., havce been displayed.&lt;br/&gt;&lt;br/&gt;What you'll want to do if you *need* the trigger sent directly upon response *and* want to consider responses made from the start, you should specify&lt;br/&gt;&lt;br/&gt;/ beginresponsetime = 0&lt;br/&gt;and&lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;&lt;br/&gt;The consequence of this, however, will be that &lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;blank, fixation, redreminder and bluereminder will *not* be displayed *if* the response occurs before the 400ms mark.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21886"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you, Dave!&lt;br/&gt;&lt;br/&gt;I understand. However, I need the &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;to be displayed after response, so I think I still need to use the&amp;nbsp;&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;and&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;However, I changed a way to send response trigger:&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;Is that a correct way to send response trigger immediately when a response occurs (i.e., based on latency)?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21887"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;That cannot possibly work. Whether the response will be correct and at what time it will correct is simply _not known_ at the start of the trial (/ontrialbegin). This will *not* send response triggers in any sensible way.&lt;br/&gt;&lt;br/&gt;You _ought to_ use /correctmessage and /errormessage for that AND you ought to set /responseinterrupt to immediate if you want them without delay no matter when the response occurs.&lt;br/&gt;&lt;br/&gt;What you can do to have  &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;displayed if a response occurs before 400ms -- the time they would normally be displayed -- is use /responsemessage attributes to display them.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21888"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thanks, Dave.&lt;br/&gt;&lt;br/&gt;It seems a good way to set &lt;strong&gt;/responsemessage&lt;/strong&gt; to display the remaining stimuli after response&amp;nbsp;&lt;strong&gt;(i.e.., blank, fixation, redreminder, bluereminder).&lt;/strong&gt;&lt;br/&gt;However, there is a problem. The stimuli 0=&lt;strong&gt;neutralword &lt;/strong&gt;should been displayed for 400 ms. If I&amp;nbsp;set as you said, it would disappear immediately after response made before 400 ms.&lt;br/&gt;Do you know how to resolve this?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan &amp;nbsp;&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21891"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt;  If I&amp;nbsp;set as you said, it would disappear immediately after response made before 400 ms.&lt;br/&gt;&lt;br/&gt;Yes, that is correct.&lt;br/&gt;&lt;br/&gt;&amp;gt; Do you know how to resolve this?&lt;br/&gt;&lt;br/&gt;No, I cannot think of a way.&lt;br/&gt;</description><pubDate>Mon, 19 Jun 2017 07:19:54 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21891.aspx</link><description>&lt;div data-id="21888" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21888" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21888" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21888" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21888"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21887" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21887" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21887" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21887" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21887"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21886" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21886" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21886" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21886" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21886"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21885" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21885" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21885" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21885" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21885"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21882" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21882" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21882" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21882" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21882"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21879" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21879" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21879" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21879" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21879"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497875434670"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21879"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;&lt;br/&gt;Yes. In terms of synchronization between the TTL signal and the visual stimuli, it should not matter.&lt;br/&gt;&lt;br/&gt;&amp;gt; /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made?&lt;br/&gt;&lt;br/&gt;Since your &amp;lt;trial&amp;gt; is set to &lt;br/&gt;&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;br/&gt;the response trigger would not necessarily be sent immediately upon response. If the response occurred prior to the stimulus presentation sequence finishing&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;i.e. before 400ms, the trial would first finish the presentation sequence and only *then* execute /correctmessage.&lt;br/&gt;&lt;br/&gt;If the response occurred only after the presentation of all stimuli, i.e. after ~400ms, /correctmessage would be executed immediately upon registering the response.&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21882"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Many thanks, Dave! &lt;br/&gt;&lt;br/&gt;Well, that's a problem, because I have to send response trigger immediately when response occurs, (i.e, including response before 400 ms).&lt;br/&gt;Then I prefer not using &lt;strong&gt;/responseinterrupt = frames&lt;/strong&gt; and&amp;nbsp;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt; in my code.&lt;br/&gt;However, when I delete these two attributes, many of my responses are not recorded in my data file. That is, these responses are recorded as 0, while I am sure I have made responses. It seems would happen when I respond very fast (maybe before 400 ms?).&lt;br/&gt;Why these responses could not been recorded? Do you know how to fix this problem?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21885"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;By default, Inquisit starts listening for responses once all stimuli have been presented. I.e. with&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;and no /beginresponsetime attribute specified, response logging would only begin 400ms into the trial -- once blank, fixation, ..., havce been displayed.&lt;br/&gt;&lt;br/&gt;What you'll want to do if you *need* the trigger sent directly upon response *and* want to consider responses made from the start, you should specify&lt;br/&gt;&lt;br/&gt;/ beginresponsetime = 0&lt;br/&gt;and&lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;&lt;br/&gt;The consequence of this, however, will be that &lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;blank, fixation, redreminder and bluereminder will *not* be displayed *if* the response occurs before the 400ms mark.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21886"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you, Dave!&lt;br/&gt;&lt;br/&gt;I understand. However, I need the &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;to be displayed after response, so I think I still need to use the&amp;nbsp;&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;and&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;However, I changed a way to send response trigger:&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;Is that a correct way to send response trigger immediately when a response occurs (i.e., based on latency)?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21887"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;That cannot possibly work. Whether the response will be correct and at what time it will correct is simply _not known_ at the start of the trial (/ontrialbegin). This will *not* send response triggers in any sensible way.&lt;br/&gt;&lt;br/&gt;You _ought to_ use /correctmessage and /errormessage for that AND you ought to set /responseinterrupt to immediate if you want them without delay no matter when the response occurs.&lt;br/&gt;&lt;br/&gt;What you can do to have  &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;displayed if a response occurs before 400ms -- the time they would normally be displayed -- is use /responsemessage attributes to display them.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21888"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thanks, Dave.&lt;br/&gt;&lt;br/&gt;It seems a good way to set &lt;strong&gt;/responsemessage&lt;/strong&gt; to display the remaining stimuli after response&amp;nbsp;&lt;strong&gt;(i.e.., blank, fixation, redreminder, bluereminder).&lt;/strong&gt;&lt;br/&gt;However, there is a problem. The stimuli 0=&lt;strong&gt;neutralword &lt;/strong&gt;should been displayed for 400 ms. If I&amp;nbsp;set as you said, it would disappear immediately after response made before 400 ms.&lt;br/&gt;Do you know how to resolve this?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan &amp;nbsp;&amp;nbsp;</description><pubDate>Mon, 19 Jun 2017 05:40:20 GMT</pubDate><dc:creator>yanyan</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21888.aspx</link><description>&lt;div data-id="21887" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21887" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21887" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21887" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21887"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21886" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21886" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21886" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21886" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21886"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21885" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21885" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21885" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21885" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21885"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21882" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21882" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21882" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21882" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21882"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21879" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21879" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21879" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21879" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21879"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497656089653"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21879"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;&lt;br/&gt;Yes. In terms of synchronization between the TTL signal and the visual stimuli, it should not matter.&lt;br/&gt;&lt;br/&gt;&amp;gt; /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made?&lt;br/&gt;&lt;br/&gt;Since your &amp;lt;trial&amp;gt; is set to &lt;br/&gt;&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;br/&gt;the response trigger would not necessarily be sent immediately upon response. If the response occurred prior to the stimulus presentation sequence finishing&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;i.e. before 400ms, the trial would first finish the presentation sequence and only *then* execute /correctmessage.&lt;br/&gt;&lt;br/&gt;If the response occurred only after the presentation of all stimuli, i.e. after ~400ms, /correctmessage would be executed immediately upon registering the response.&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21882"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Many thanks, Dave! &lt;br/&gt;&lt;br/&gt;Well, that's a problem, because I have to send response trigger immediately when response occurs, (i.e, including response before 400 ms).&lt;br/&gt;Then I prefer not using &lt;strong&gt;/responseinterrupt = frames&lt;/strong&gt; and&amp;nbsp;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt; in my code.&lt;br/&gt;However, when I delete these two attributes, many of my responses are not recorded in my data file. That is, these responses are recorded as 0, while I am sure I have made responses. It seems would happen when I respond very fast (maybe before 400 ms?).&lt;br/&gt;Why these responses could not been recorded? Do you know how to fix this problem?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21885"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;By default, Inquisit starts listening for responses once all stimuli have been presented. I.e. with&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;and no /beginresponsetime attribute specified, response logging would only begin 400ms into the trial -- once blank, fixation, ..., havce been displayed.&lt;br/&gt;&lt;br/&gt;What you'll want to do if you *need* the trigger sent directly upon response *and* want to consider responses made from the start, you should specify&lt;br/&gt;&lt;br/&gt;/ beginresponsetime = 0&lt;br/&gt;and&lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;&lt;br/&gt;The consequence of this, however, will be that &lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;blank, fixation, redreminder and bluereminder will *not* be displayed *if* the response occurs before the 400ms mark.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21886"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you, Dave!&lt;br/&gt;&lt;br/&gt;I understand. However, I need the &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;to be displayed after response, so I think I still need to use the&amp;nbsp;&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;and&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;However, I changed a way to send response trigger:&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;Is that a correct way to send response trigger immediately when a response occurs (i.e., based on latency)?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21887"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;That cannot possibly work. Whether the response will be correct and at what time it will correct is simply _not known_ at the start of the trial (/ontrialbegin). This will *not* send response triggers in any sensible way.&lt;br/&gt;&lt;br/&gt;You _ought to_ use /correctmessage and /errormessage for that AND you ought to set /responseinterrupt to immediate if you want them without delay no matter when the response occurs.&lt;br/&gt;&lt;br/&gt;What you can do to have  &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;displayed if a response occurs before 400ms -- the time they would normally be displayed -- is use /responsemessage attributes to display them.&lt;br/&gt;</description><pubDate>Fri, 16 Jun 2017 16:39:53 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21887.aspx</link><description>&lt;div data-id="21886" class="if-quote-wrapper" unselectable="on" data-guid="1497645558026"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21886" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21886" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21886" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21886"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21885" class="if-quote-wrapper" unselectable="on" data-guid="1497645558026"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21885" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21885" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21885" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21885"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21882" class="if-quote-wrapper" unselectable="on" data-guid="1497645558026"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21882" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21882" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21882" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21882"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21879" class="if-quote-wrapper" unselectable="on" data-guid="1497645558026"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21879" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21879" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21879" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21879"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497645558026"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497645558026"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497645558026"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497645558026"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21879"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;&lt;br/&gt;Yes. In terms of synchronization between the TTL signal and the visual stimuli, it should not matter.&lt;br/&gt;&lt;br/&gt;&amp;gt; /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made?&lt;br/&gt;&lt;br/&gt;Since your &amp;lt;trial&amp;gt; is set to &lt;br/&gt;&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;br/&gt;the response trigger would not necessarily be sent immediately upon response. If the response occurred prior to the stimulus presentation sequence finishing&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;i.e. before 400ms, the trial would first finish the presentation sequence and only *then* execute /correctmessage.&lt;br/&gt;&lt;br/&gt;If the response occurred only after the presentation of all stimuli, i.e. after ~400ms, /correctmessage would be executed immediately upon registering the response.&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21882"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Many thanks, Dave! &lt;br/&gt;&lt;br/&gt;Well, that's a problem, because I have to send response trigger immediately when response occurs, (i.e, including response before 400 ms).&lt;br/&gt;Then I prefer not using &lt;strong&gt;/responseinterrupt = frames&lt;/strong&gt; and&amp;nbsp;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt; in my code.&lt;br/&gt;However, when I delete these two attributes, many of my responses are not recorded in my data file. That is, these responses are recorded as 0, while I am sure I have made responses. It seems would happen when I respond very fast (maybe before 400 ms?).&lt;br/&gt;Why these responses could not been recorded? Do you know how to fix this problem?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21885"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;By default, Inquisit starts listening for responses once all stimuli have been presented. I.e. with&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;and no /beginresponsetime attribute specified, response logging would only begin 400ms into the trial -- once blank, fixation, ..., havce been displayed.&lt;br/&gt;&lt;br/&gt;What you'll want to do if you *need* the trigger sent directly upon response *and* want to consider responses made from the start, you should specify&lt;br/&gt;&lt;br/&gt;/ beginresponsetime = 0&lt;br/&gt;and&lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;&lt;br/&gt;The consequence of this, however, will be that &lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;blank, fixation, redreminder and bluereminder will *not* be displayed *if* the response occurs before the 400ms mark.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21886"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you, Dave!&lt;br/&gt;&lt;br/&gt;I understand. However, I need the &lt;strong&gt;blank, fixation, redreminder, bluereminder &lt;/strong&gt;to be displayed after response, so I think I still need to use the&amp;nbsp;&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;and&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;However, I changed a way to send response trigger:&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.correct) trial.neutralword.insertstimulustime(&lt;strong&gt;port.correctneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;/ontrialbegin = [if(trial.neutralword.error) trial.neutralword.insertstimulustime(&lt;strong&gt;port.errorneutral&lt;/strong&gt;,trial.neutralword.latency)]&lt;br/&gt;&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;&lt;strong&gt;/ beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;/ responseinterrupt = frame&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;Is that a correct way to send response trigger immediately when a response occurs (i.e., based on latency)?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;</description><pubDate>Fri, 16 Jun 2017 13:49:45 GMT</pubDate><dc:creator>yanyan</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21886.aspx</link><description>&lt;div data-id="21885" class="if-quote-wrapper" unselectable="on" data-guid="1497640248959"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21885" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21885" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21885" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Friday, June 16, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21885"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21882" class="if-quote-wrapper" unselectable="on" data-guid="1497640248959"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21882" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21882" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21882" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21882"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21879" class="if-quote-wrapper" unselectable="on" data-guid="1497640248959"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21879" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21879" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21879" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21879"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497640248959"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497640248959"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497640248959"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497640248959"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21879"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;&lt;br/&gt;Yes. In terms of synchronization between the TTL signal and the visual stimuli, it should not matter.&lt;br/&gt;&lt;br/&gt;&amp;gt; /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made?&lt;br/&gt;&lt;br/&gt;Since your &amp;lt;trial&amp;gt; is set to &lt;br/&gt;&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;br/&gt;the response trigger would not necessarily be sent immediately upon response. If the response occurred prior to the stimulus presentation sequence finishing&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;i.e. before 400ms, the trial would first finish the presentation sequence and only *then* execute /correctmessage.&lt;br/&gt;&lt;br/&gt;If the response occurred only after the presentation of all stimuli, i.e. after ~400ms, /correctmessage would be executed immediately upon registering the response.&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21882"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Many thanks, Dave! &lt;br/&gt;&lt;br/&gt;Well, that's a problem, because I have to send response trigger immediately when response occurs, (i.e, including response before 400 ms).&lt;br/&gt;Then I prefer not using &lt;strong&gt;/responseinterrupt = frames&lt;/strong&gt; and&amp;nbsp;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt; in my code.&lt;br/&gt;However, when I delete these two attributes, many of my responses are not recorded in my data file. That is, these responses are recorded as 0, while I am sure I have made responses. It seems would happen when I respond very fast (maybe before 400 ms?).&lt;br/&gt;Why these responses could not been recorded? Do you know how to fix this problem?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21885"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;By default, Inquisit starts listening for responses once all stimuli have been presented. I.e. with&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;and no /beginresponsetime attribute specified, response logging would only begin 400ms into the trial -- once blank, fixation, ..., havce been displayed.&lt;br/&gt;&lt;br/&gt;What you'll want to do if you *need* the trigger sent directly upon response *and* want to consider responses made from the start, you should specify&lt;br/&gt;&lt;br/&gt;/ beginresponsetime = 0&lt;br/&gt;and&lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;&lt;br/&gt;The consequence of this, however, will be that &lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;blank, fixation, redreminder and bluereminder will *not* be displayed *if* the response occurs before the 400ms mark.&lt;br/&gt;</description><pubDate>Fri, 16 Jun 2017 12:16:09 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21885.aspx</link><description>&lt;div data-id="21882" class="if-quote-wrapper" unselectable="on" data-guid="1497634280254"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21882" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21882" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21882" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21882"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21879" class="if-quote-wrapper" unselectable="on" data-guid="1497634280254"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21879" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21879" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21879" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21879"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497634280254"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497634280254"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497634280254"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497634280254"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21879"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;&lt;br/&gt;Yes. In terms of synchronization between the TTL signal and the visual stimuli, it should not matter.&lt;br/&gt;&lt;br/&gt;&amp;gt; /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made?&lt;br/&gt;&lt;br/&gt;Since your &amp;lt;trial&amp;gt; is set to &lt;br/&gt;&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;br/&gt;the response trigger would not necessarily be sent immediately upon response. If the response occurred prior to the stimulus presentation sequence finishing&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;i.e. before 400ms, the trial would first finish the presentation sequence and only *then* execute /correctmessage.&lt;br/&gt;&lt;br/&gt;If the response occurred only after the presentation of all stimuli, i.e. after ~400ms, /correctmessage would be executed immediately upon registering the response.&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21882"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Many thanks, Dave! &lt;br/&gt;&lt;br/&gt;Well, that's a problem, because I have to send response trigger immediately when response occurs, (i.e, including response before 400 ms).&lt;br/&gt;Then I prefer not using &lt;strong&gt;/responseinterrupt = frames&lt;/strong&gt; and&amp;nbsp;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt; in my code.&lt;br/&gt;However, when I delete these two attributes, many of my responses are not recorded in my data file. That is, these responses are recorded as 0, while I am sure I have made responses. It seems would happen when I respond very fast (maybe before 400 ms?).&lt;br/&gt;Why these responses could not been recorded? Do you know how to fix this problem?&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</description><pubDate>Fri, 16 Jun 2017 10:44:27 GMT</pubDate><dc:creator>yanyan</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21882.aspx</link><description>&lt;div data-id="21879" class="if-quote-wrapper" unselectable="on" data-guid="1497570718157"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21879" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21879" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21879" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21879"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497570718157"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497570718157"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497570718157"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497570718157"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;&lt;a class="if-quote-goto quote-link" href="#" data-id="21879"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;&lt;br/&gt;Yes. In terms of synchronization between the TTL signal and the visual stimuli, it should not matter.&lt;br/&gt;&lt;br/&gt;&amp;gt; /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made?&lt;br/&gt;&lt;br/&gt;Since your &amp;lt;trial&amp;gt; is set to &lt;br/&gt;&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;br/&gt;the response trigger would not necessarily be sent immediately upon response. If the response occurred prior to the stimulus presentation sequence finishing&lt;br/&gt;&lt;br/&gt;/stimulustimes = [0=neutralword, neutralsignal, redreminder, bluereminder; &lt;strong&gt;400=blank, fixation, redreminder, bluereminder&lt;/strong&gt;]&lt;br/&gt;&lt;br/&gt;i.e. before 400ms, the trial would first finish the presentation sequence and only *then* execute /correctmessage.&lt;br/&gt;&lt;br/&gt;If the response occurred only after the presentation of all stimuli, i.e. after ~400ms, /correctmessage would be executed immediately upon registering the response.&lt;br/&gt;&lt;br/&gt;</description><pubDate>Thu, 15 Jun 2017 16:58:08 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21879.aspx</link><description>&lt;div data-id="21875" class="if-quote-wrapper" unselectable="on" data-guid="1497564233010"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21875" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21875" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21875" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21875"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497564233010"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497564233010"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497564233010"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21875"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Thank you so much for your reply, Dave!&lt;br/&gt;&lt;br/&gt;So the 20ms delay doesn't matter given that&amp;nbsp;the TTL signal would still be in sync with the visual stimuli, right?&lt;br/&gt;Also, when I set /correctmessage = (correctneutral, 50), is the response trigger immediately sent once correct response made? I mean, would there be any delay of the trigger which "may" caused by the duration of 50?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&amp;nbsp;</description><pubDate>Thu, 15 Jun 2017 15:11:10 GMT</pubDate><dc:creator>yanyan</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21875.aspx</link><description>&lt;div data-id="21873" class="if-quote-wrapper" unselectable="on" data-guid="1497555336224"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21873" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21873" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21873" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Thursday, June 15, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21873"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497555336224"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497555336224"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21873"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;gt; Where is the delay from?&lt;br/&gt;&lt;br/&gt;It's possible that the additional overhead caused by initializing the the response listener at the very start causes the trial to miss the 1st frame for stimulus display. I.e., the first opportunity to to "catch" the beginning of a new display refresh cycle and draw stimuli would be the 2nd frame. On a display running at 50Hz, the 2nd frame would start at 20ms which would be consistent with the 20ms onset delay you observed.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, is the trigger also delay 20 ms as the actual onset? &lt;br/&gt;&lt;br/&gt;Yes, the port signals are locked to refresh cycles just like any visual stimuli (&amp;lt;text&amp;gt;, &amp;lt;picture&amp;gt;, etc.). I.e., despite the 20ms delay the TTL signal would still be in sync with the visual stimuli.&lt;br/&gt;&lt;br/&gt;&amp;gt; Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Yes, it's generally correct, although you *may* not want to use a value of 0 for the duration. I'd instead pick a value high enough to ensure the signal is raised long enough to be picked up reliably by your external equipment. E.g.&lt;br/&gt;&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,50)&lt;br/&gt;&lt;br/&gt;You can also use /responsemessage attributes instead of or in addition to /errormessage and /correctmessage. A &amp;lt;trial&amp;gt; may only have one /errormessage attribute and one /correctmessage attribute, but you may define multiple /responsemessage attributes.&lt;br/&gt;</description><pubDate>Thu, 15 Jun 2017 12:59:50 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21873.aspx</link><description>&lt;div data-id="21864" class="if-quote-wrapper" unselectable="on" data-guid="1497544150625"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21864" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21864" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21864" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21864"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497544150625"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;&lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="21864"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;It helps. Thank you very much for your quick reply!&lt;br/&gt;&lt;br/&gt;However, I have met another question about stimulus onset&lt;span style="font-size: 13.3333px;"&gt;&amp;nbsp;in a Stroop task&lt;/span&gt;. I found that when I set &lt;strong&gt;/beginresponsetime&lt;/strong&gt;, the actual stimulus onset recorded in the data file is 20 but not 0. Where is the delay from?&lt;br/&gt;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? &amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: rgb(34, 34, 34); font-family: arial, tahoma; font-size: 13.3333px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"&gt;&lt;span class="Apple-converted-space"&gt;When I delete the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;/beginresponsetime&lt;/strong&gt;, 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.&lt;br/&gt;&lt;br/&gt;&amp;lt;trial NeutralWord&amp;gt; &lt;br/&gt;/ontrialbegin = [values.fixationcrosspresentationtime=random(1500,1600,1700,1800,1900,2000)]&lt;br/&gt;/ ontrialbegin = [trial.neutralword.insertstimulustime(&lt;strong&gt;port.allbitstolow&lt;/strong&gt;,50)]&lt;br/&gt;/stimulustimes = [0=neutralword, &lt;strong&gt;neutralsignal&lt;/strong&gt;, redreminder, bluereminder; 400=blank, fixation, redreminder, bluereminder]&lt;br/&gt;/ isvalidresponse = [trial.NeutralWord.response == values.keyred || trial.NeutralWord.response == values.keyblue]&lt;br/&gt;/monkeyresponse = (33, 36)&lt;br/&gt;/iscorrectresponse = [(text.NeutralWord.textcolor == red &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyred) ||&lt;br/&gt;(text.NeutralWord.textcolor == blue &amp;amp;&amp;amp; trial.NeutralWord.response == values.keyblue)]&lt;br/&gt;/errormessage = (&lt;strong&gt;errorneutral&lt;/strong&gt;,0)&lt;br/&gt;/correctmessage = (&lt;strong&gt;correctneutral&lt;/strong&gt;,0)&lt;br/&gt;/ontrialend = [trial.NeutralWord.resetstimulusframes()]&lt;br/&gt;/ontrialend = [values.target = text.NeutralWord.currentitem]&lt;br/&gt;/ontrialend = [if (text.NeutralWord.textcolor == red) values.color = "red"&lt;br/&gt;else if (text.NeutralWord.textcolor == blue) values.color = "blue"]&lt;br/&gt;/ontrialend = [if (trial.NeutralWord.correct) {values.correct_neutralwords += 1; values.sumrt_neu += trial.neutralword.latency}]&lt;br/&gt;/trialduration = (values.fixationcrosspresentationtime+400)&lt;br/&gt;/responseinterrupt = frames&lt;br/&gt;&lt;strong&gt;/beginresponsetime = 0&lt;/strong&gt;&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with&lt;br/&gt;&amp;lt;port &lt;strong&gt;neutralsignal&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000011")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;correctneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00001001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;errorneutral&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000110")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port&lt;strong&gt; allbitstolow&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000000")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Also,&amp;nbsp;&lt;span style="font-size: 13.3333px;"&gt;as in my code,&amp;nbsp;&lt;/span&gt;is that correct way to send correct or error response trigger by&lt;strong&gt; /correctmessage&lt;/strong&gt; and&lt;strong&gt; /errormessage&lt;/strong&gt;?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Yan&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</description><pubDate>Thu, 15 Jun 2017 10:14:58 GMT</pubDate><dc:creator>yanyan</dc:creator></item><item><title>RE: Inquisit and EEG trigger: Some triggers recorded and some not</title><link>https://forums.millisecond.com/Topic21864.aspx</link><description>&lt;div data-id="21863" class="if-quote-wrapper" unselectable="on" data-guid="1497479120916"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="21863" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="21863" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="21863" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;yanyan - Wednesday, June 14, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-21863"&gt;&lt;div class="if-quote-message-margin"&gt;Dear all,&lt;br/&gt;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I have a question about the EEG triggers.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 13.3333px;"&gt;I have modified a dot probe task based on the template from milllisecond library.&amp;nbsp;&lt;/span&gt;&lt;br/&gt;I want to connect it to neuroscan, and I used the &amp;lt;port&amp;gt; to set up triggers.&amp;nbsp;&lt;br/&gt;&lt;span style="font-size: 13.3333px;"&gt;I set multiple triggers in different time points.&lt;br/&gt;&lt;/span&gt;For example, I set up three &amp;nbsp;triggers, and the problem is that only the first trigger works ( could be recorded). &amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;/ontrialbegin = [values.fixationduration=random(1600,1700,1800,1900,2000,2100,2200)]&lt;br/&gt;/ ontrialbegin = [values.valid = 0; values.validcorrect = 0; values.trialcount += 1; values.category="MS_NA"]&lt;br/&gt;/ ontrialbegin = [values.itemnumber = list.mortality_itemnumbers.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.target_position = list.mortality_positions.nextvalue]&lt;br/&gt;/ ontrialbegin = [values.congruence = list.mortalityprobe_congruence.nextvalue]&lt;br/&gt;/ ontrialbegin = [if (values.target_position == 1) {values.mortality_x = values.target_left_x; values.negative_x = values.target_right_x}&lt;br/&gt;else {values.mortality_x = values.target_right_x; values.negative_x = values.target_left_x}]&lt;br/&gt;/ ontrialbegin = [if (values.congruence == 1) {values.probe_x = values.mortality_x} else {values.probe_x = values.negative_x}]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==1) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_con&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialbegin = [if (values.congruence ==2) trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_incon&lt;/strong&gt;, (values.fixationduration + values.targetduration ))]&lt;br/&gt;/ ontrialend = [trial.MS_NA.resetstimulusframes()]&lt;br/&gt;/ stimulusframes = [1 = fixation]&lt;br/&gt;/ beginresponsetime = values.fixationduration + values.targetduration &lt;br/&gt;/ responseinterrupt = immediate&lt;br/&gt;/ isvalidresponse = [trial.MS_NA.response == values.responsekey_left || trial.MS_NA.response == values.responsekey_right]&lt;br/&gt;/ iscorrectresponse = [(values.probe_x == values.target_left_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_left) || &lt;br/&gt;(values.probe_x == values.target_right_x &amp;amp;&amp;amp; trial.MS_NA.response == values.responsekey_right)]&lt;br/&gt;/ ontrialend = [if (trial.MS_NA.latency &amp;gt;= values.minimum_latency) values.valid = 1]&lt;br/&gt;/ ontrialend = [if (values.valid == 1 &amp;amp;&amp;amp; trial.MS_NA.correct) values.validcorrect = 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1) {values.sumcorrect += 1; values.sumrt += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.congruence == 1) values.count_congruent_MS_NA += 1 else values.count_incongruent_MS_NA += 1]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 1) {values.sumcorrect_congruent_MS_NA += 1; values.sumrt_congruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ ontrialend = [if (values.validcorrect == 1 &amp;amp;&amp;amp; values.congruence == 2) {values.sumcorrect_incongruent_MS_NA += 1; values.sumrt_incongruent_MS_NA += trial.MS_NA.latency}]&lt;br/&gt;/ timeout = (values.fixationduration + values.targetduration + values.probeduration)&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_word&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000001")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_con&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000100")&lt;br/&gt;&lt;br/&gt;&amp;lt;port &lt;strong&gt;MS_NA_incon&lt;/strong&gt;&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;/ items = ("00000111")&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Only the&amp;nbsp;&lt;strong&gt;MS_NA_word &lt;/strong&gt;trigger could be recorded in the EEG maker file. The other two are not recorded.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Does anyone know why and how to resolve this?&lt;br/&gt;Thank you so much!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Yan&lt;a class="if-quote-goto quote-link" href="#" data-id="21863"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;#1: Neuroscan generally requires a specific sequence of triggers sent via different subports. See &lt;a href="https://www.millisecond.com/download/library/neuroscan/"&gt;https://www.millisecond.com/download/library/neuroscan/&lt;/a&gt;&lt;br/&gt;#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 &lt;br/&gt;&lt;br/&gt;&amp;lt;trial MS_NA&amp;gt;&lt;br/&gt;...&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.mortality, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.negative, values.fixationduration)]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(&lt;strong&gt;port.ms_na_word&lt;/strong&gt;, values.fixationduration)]&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(port.allbitstolow, values.fixationduration+50)]&lt;/strong&gt;&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(shape.eraser, (values.fixationduration + values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.fixation, (values.fixationduration+values.targetduration))]&lt;br/&gt;/ ontrialbegin = [trial.MS_NA.insertstimulustime(text.probe, (values.fixationduration + values.targetduration ))]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;with &lt;br/&gt;&lt;br/&gt;&amp;lt;port allbitstolow&amp;gt;&lt;br/&gt;/ port = LPT1&lt;br/&gt;/ subport = data&lt;br/&gt;&lt;strong&gt;/ items = ("00000000")&lt;/strong&gt;&lt;br/&gt;&amp;lt;/port&amp;gt;&lt;br/&gt;&lt;br/&gt;Hope this helps.&lt;br/&gt;</description><pubDate>Wed, 14 Jun 2017 15:35:55 GMT</pubDate><dc:creator>Dave</dc:creator></item></channel></rss>