Millisecond Forums

Markers not appearing in BrainProduct's Pycorder

https://forums.millisecond.com/Topic34011.aspx

By emily_ahne - 3/4/2022

I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>
By Dave - 3/4/2022

emily_ahne - 3/4/2022
I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>

Windows 7 is not officially supported by Inquisit 6, its minimum requirement is Windows 10. If you can reproduce the problem on a Windows 10 computer, we may be able to help, but Windows 7 is out of scope.
By Dave - 3/4/2022

Dave - 3/4/2022
emily_ahne - 3/4/2022
I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>

Windows 7 is not officially supported by Inquisit 6, its minimum requirement is Windows 10. If you can reproduce the problem on a Windows 10 computer, we may be able to help, but Windows 7 is out of scope.

Adding a few more or less obvious things:
- Triggering over the serial port will only work if that's supported by the hardware / amplifier. All documentation I can find about the Brain Products actiCHamp ampifiers, however, suggest these amplfiers will only take input from a parallel port.
- If Inquisit cannot locate the parallel port, that typically means the port has a non-standard base address (typical for parallel ports that aren't integrated on the sytem's main board, but an extension card). Try specifying the LPT port's base address explicitly in the script's <defaults> element, using the /lptaddresses attribute.
https://www.millisecond.com/support/docs/v6/html/language/attributes/lptaddresses.htm
The base address is either available via the port's properties in the Windows device manager or you hit Start and type "System Information." Open the system information application, then select Hardware Resources -> I/O. There should be an entry for the parallel port, similar to this:

Resource                                 Device
0x0000D100-0x0000D103   SUNIX LPT Port (LPT1)

In the example above, the base address would be D100.

By emily_ahne - 3/4/2022

Dave - 3/4/2022
emily_ahne - 3/4/2022
I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>

Windows 7 is not officially supported by Inquisit 6, its minimum requirement is Windows 10. If you can reproduce the problem on a Windows 10 computer, we may be able to help, but Windows 7 is out of scope.

I'll try downloading an older version of the Inquisit script and see what that does.
By emily_ahne - 3/7/2022

Dave - 3/4/2022
Dave - 3/4/2022
emily_ahne - 3/4/2022
I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>

Windows 7 is not officially supported by Inquisit 6, its minimum requirement is Windows 10. If you can reproduce the problem on a Windows 10 computer, we may be able to help, but Windows 7 is out of scope.

Adding a few more or less obvious things:
- Triggering over the serial port will only work if that's supported by the hardware / amplifier. All documentation I can find about the Brain Products actiCHamp ampifiers, however, suggest these amplfiers will only take input from a parallel port.
- If Inquisit cannot locate the parallel port, that typically means the port has a non-standard base address (typical for parallel ports that aren't integrated on the sytem's main board, but an extension card). Try specifying the LPT port's base address explicitly in the script's <defaults> element, using the /lptaddresses attribute.
https://www.millisecond.com/support/docs/v6/html/language/attributes/lptaddresses.htm
The base address is either available via the port's properties in the Windows device manager or you hit Start and type "System Information." Open the system information application, then select Hardware Resources -> I/O. There should be an entry for the parallel port, similar to this:

Resource                                 Device
0x0000D100-0x0000D103   SUNIX LPT Port (LPT1)

In the example above, the base address would be D100.


Hi Dave,
My issue is not yet resolved but I believe I'm closer. I double-checked and I am running inquisit 5 on my Windows 7 computer. Also, my Windows system uses a communications port (not LTP):
Resource                                Device
0x000003F8-0x000003FF      Communications Port (COM1)

I found under Inquisit's defaults element the "/combaudrates = (port = baudrate, port = baudrate, port = baudrate, ...)" attribute.
Link: https://www.millisecond.com/support/docs/v6/html/language/attributes/combaudrates.htm

With that, I attempted to define my communications' base address in the following (bolded items):
<defaults>
/canvasaspectratio = (4,3)
/minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.81%, false, false, false, false, 5, 0)
/txbgcolor = white
/ txcolor = (0, 0, 0)
/ combaudrates = (COM1=03F8)
</defaults>

<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

However, the script never ran and produced the following two error messages:
'F8' is not a valid setting.
' (COM1=03F8) ' is not a valid setting.

If I run the script without the /combaudrates attribute and only change the port to COM1, the script runs but produces no markers. 
Any suggestions?
By Dave - 3/7/2022

emily_ahne - 3/7/2022
Dave - 3/4/2022
Dave - 3/4/2022
emily_ahne - 3/4/2022
I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>

Windows 7 is not officially supported by Inquisit 6, its minimum requirement is Windows 10. If you can reproduce the problem on a Windows 10 computer, we may be able to help, but Windows 7 is out of scope.

Adding a few more or less obvious things:
- Triggering over the serial port will only work if that's supported by the hardware / amplifier. All documentation I can find about the Brain Products actiCHamp ampifiers, however, suggest these amplfiers will only take input from a parallel port.
- If Inquisit cannot locate the parallel port, that typically means the port has a non-standard base address (typical for parallel ports that aren't integrated on the sytem's main board, but an extension card). Try specifying the LPT port's base address explicitly in the script's <defaults> element, using the /lptaddresses attribute.
https://www.millisecond.com/support/docs/v6/html/language/attributes/lptaddresses.htm
The base address is either available via the port's properties in the Windows device manager or you hit Start and type "System Information." Open the system information application, then select Hardware Resources -> I/O. There should be an entry for the parallel port, similar to this:

Resource                                 Device
0x0000D100-0x0000D103   SUNIX LPT Port (LPT1)

In the example above, the base address would be D100.


Hi Dave,
My issue is not yet resolved but I believe I'm closer. I double-checked and I am running inquisit 5 on my Windows 7 computer. Also, my Windows system uses a communications port (not LTP):
Resource                                Device
0x000003F8-0x000003FF      Communications Port (COM1)

I found under Inquisit's defaults element the "/combaudrates = (port = baudrate, port = baudrate, port = baudrate, ...)" attribute.
Link: https://www.millisecond.com/support/docs/v6/html/language/attributes/combaudrates.htm

With that, I attempted to define my communications' base address in the following (bolded items):
<defaults>
/canvasaspectratio = (4,3)
/minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.81%, false, false, false, false, 5, 0)
/txbgcolor = white
/ txcolor = (0, 0, 0)
/ combaudrates = (COM1=03F8)
</defaults>

<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

However, the script never ran and produced the following two error messages:
'F8' is not a valid setting.
' (COM1=03F8) ' is not a valid setting.

If I run the script without the /combaudrates attribute and only change the port to COM1, the script runs but produces no markers. 
Any suggestions?

Baudrates and base addresses are entirely different things, so this cannot possibly work. Also, due to how COM ports (as opposed to LPT ports) work, specifying base address is not necessary. Have you actually checked whether your amplifier is even capable of accepting signalling via a serial connection (COM port)? COM ports have entirely different voltages compared to LPT ports and the data transmission is also entirely different (a byte is transferred serially, as the name suggests, one bit at a time; a parallel ports tranmits 8 bits in parallel).
By emily_ahne - 5/16/2022

Dave - 3/7/2022
emily_ahne - 3/7/2022
Dave - 3/4/2022
Dave - 3/4/2022
emily_ahne - 3/4/2022
I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>

Windows 7 is not officially supported by Inquisit 6, its minimum requirement is Windows 10. If you can reproduce the problem on a Windows 10 computer, we may be able to help, but Windows 7 is out of scope.

Adding a few more or less obvious things:
- Triggering over the serial port will only work if that's supported by the hardware / amplifier. All documentation I can find about the Brain Products actiCHamp ampifiers, however, suggest these amplfiers will only take input from a parallel port.
- If Inquisit cannot locate the parallel port, that typically means the port has a non-standard base address (typical for parallel ports that aren't integrated on the sytem's main board, but an extension card). Try specifying the LPT port's base address explicitly in the script's <defaults> element, using the /lptaddresses attribute.
https://www.millisecond.com/support/docs/v6/html/language/attributes/lptaddresses.htm
The base address is either available via the port's properties in the Windows device manager or you hit Start and type "System Information." Open the system information application, then select Hardware Resources -> I/O. There should be an entry for the parallel port, similar to this:

Resource                                 Device
0x0000D100-0x0000D103   SUNIX LPT Port (LPT1)

In the example above, the base address would be D100.


Hi Dave,
My issue is not yet resolved but I believe I'm closer. I double-checked and I am running inquisit 5 on my Windows 7 computer. Also, my Windows system uses a communications port (not LTP):
Resource                                Device
0x000003F8-0x000003FF      Communications Port (COM1)

I found under Inquisit's defaults element the "/combaudrates = (port = baudrate, port = baudrate, port = baudrate, ...)" attribute.
Link: https://www.millisecond.com/support/docs/v6/html/language/attributes/combaudrates.htm

With that, I attempted to define my communications' base address in the following (bolded items):
<defaults>
/canvasaspectratio = (4,3)
/minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.81%, false, false, false, false, 5, 0)
/txbgcolor = white
/ txcolor = (0, 0, 0)
/ combaudrates = (COM1=03F8)
</defaults>

<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

However, the script never ran and produced the following two error messages:
'F8' is not a valid setting.
' (COM1=03F8) ' is not a valid setting.

If I run the script without the /combaudrates attribute and only change the port to COM1, the script runs but produces no markers. 
Any suggestions?

Baudrates and base addresses are entirely different things, so this cannot possibly work. Also, due to how COM ports (as opposed to LPT ports) work, specifying base address is not necessary. Have you actually checked whether your amplifier is even capable of accepting signalling via a serial connection (COM port)? COM ports have entirely different voltages compared to LPT ports and the data transmission is also entirely different (a byte is transferred serially, as the name suggests, one bit at a time; a parallel ports tranmits 8 bits in parallel).

Hello,

I have since fixed the above issue in getting my computers to recognize the parallel port to send EEG signal markers. However, I am now running into an issue where the port is recognized but the markers aren't sending only with specific tasks (but not others) that I believe has to do with how I am calling the EEG marker signal in the task script. This is why: When the port signal is coded as a spacebar press, the marker is sent and recorded. However, when the marker is supposed to be sent simultaneously when a certain screen appears, it is not sent. According to this resource (https://www.millisecond.com/support/docs/current/html/howto/sendmarkerstotobii.htm), I have it set up correctly (i.e., static marker) but I'm not sure why the signal isn't sending.

The markers are bolded in the following partial batches of script:
The relevant script for the Go/NoGo task is as follows (response signal only; missing go_trial_signal):
<trial go>
/ ontrialbegin = [
    if (values.condition == "HS"){
        trial.go.insertstimulustime(picture.happy, 0);
    } else if (values.condition == "SH"){
        trial.go.insertstimulustime(picture.sad, 0);
    };
    trial.go.insertstimulustime(clearscreen, parameters.picDuration);
    trial.go.insertstimulustime(text.fixation, parameters.picDuration);    
    trial.go.insertstimulustime(text.fixation, parameters.responseDuration);        
    values.iti = list.iti.nextvalue;
]
/ stimulustimes = [0 = go_trial_signal]
/ validresponse = (parameters.goKey, 0)
/ correctresponse = (parameters.goKey)
/ responsemessage = (" ", response_signal, 0)
/ beginresponsetime = 0
/ responseinterrupt = frames
/ timeout = parameters.responseDuration
/ ontrialend = [
    trial.go.resetstimulusframes();
    values.response_time = trial.go.latency;
    
    list.Hits.appenditem(trial.go.correct);
    if (trial.go.correct){
        list.hitRT.appenditem(trial.go.latency);
    };
        
    if (values.condition == "HS"){
        values.image = picture.happy.currentitem;
        list.Hits_HS.appenditem(trial.go.correct);
        if (trial.go.correct){
            values.response_outcome = "HIT";
            list.hitRT_HS.appenditem(trial.go.latency);
        } else {
            values.response_outcome = "MISS";
            values.response_time = "";
        };
        
    } else if (values.condition == "SH"){
        values.image = picture.sad.currentitem;
        list.Hits_SH.appenditem(trial.go.correct);
        if (trial.go.correct){
            values.response_outcome = "HIT";
            list.hitRT_SH.appenditem(trial.go.latency);
        } else {
            values.response_outcome = "MISS";
            values.response_time = "";
        };
        
    };
]
/ posttrialpause = values.iti
</trial>

...

<port go_trial_signal>
/ port = LPT
/ subport = data
/ items = ("00000001")
</port>

...

<port response_signal>
/ port = LPT
/ subport = data
/ items = ("11111111")
</port>

The relevant script for the word-rating task is as follows (script does not send marker signal):
<likert wordrating>
/ stimulustimes = [0=MASK; 2000=clearscreen; 2250=fixation; 4250=clearscreen; 4500=word, word_signal; 7500=clearscreen; 8000=SAM]
/ numpoints = 9
/ anchors = [1="unpleasant"; 5="neutral"; 9="pleasant"]
/ position = (50%, 70%)
/ inputdevice = mouse
/ fontstyle = ("Arial")
/ timeout = 11000
</likert>

...

<port word_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>

The relevant script for the card-sorting task is as follows (script does not send marker signal):
]

/ stimulusframes = [1=playcard, card_signal, RedTriangle1, GreenStar2, YellowCross3, BlueCircle4, deck, RuleChangeAlert]
/ validresponse = (RedTriangle1, GreenStar2, YellowCross3, BlueCircle4)
//the possible responses are: RedTriangle1, GreenStar2, YellowCross3, BlueCircle4
/ iscorrectresponse = [
return ((values.category == 1 && trial.GreenTriangle3.response == "GreenStar2") ||
   (values.category == 2 && trial.GreenTriangle3.response == "RedTriangle1") ||
   (values.category == 3 && trial.GreenTriangle3.response == "YellowCross3"));
]

...

<port card_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>

The relevant script for the stimulus-response compatibility task is as follows (script does not send marker signal):
]
/ stimulustimes = [0 = fixation,blue_left_signal]
/ beginresponsetime = parameters.fixationcross_duration + parameters.ISI
/ responseinterrupt = immediate
/ validresponse = (parameters.responsekeyblue_left, parameters.responsekeyred_right)
/ correctresponse = (parameters.responsekeyblue_left)
/ timeout = parameters.fixationcross_duration + parameters.ISI + parameters.responsewindow
/ ontrialend = [
    trial.blue_left.resetstimulusframes();
    
    values.responseCat = trial.blue_left.responsetext;
    
    list.ACC_congruent.appenditem(trial.blue_left.correct);
    if (trial.blue_left.correct){
        list.RT_congruent.appenditem(trial.blue_left.latency);
    };
]

...

<port blue_left_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>
By Dave - 5/16/2022

emily_ahne - 5/16/2022
Dave - 3/7/2022
emily_ahne - 3/7/2022
Dave - 3/4/2022
Dave - 3/4/2022
emily_ahne - 3/4/2022
I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>

Windows 7 is not officially supported by Inquisit 6, its minimum requirement is Windows 10. If you can reproduce the problem on a Windows 10 computer, we may be able to help, but Windows 7 is out of scope.

Adding a few more or less obvious things:
- Triggering over the serial port will only work if that's supported by the hardware / amplifier. All documentation I can find about the Brain Products actiCHamp ampifiers, however, suggest these amplfiers will only take input from a parallel port.
- If Inquisit cannot locate the parallel port, that typically means the port has a non-standard base address (typical for parallel ports that aren't integrated on the sytem's main board, but an extension card). Try specifying the LPT port's base address explicitly in the script's <defaults> element, using the /lptaddresses attribute.
https://www.millisecond.com/support/docs/v6/html/language/attributes/lptaddresses.htm
The base address is either available via the port's properties in the Windows device manager or you hit Start and type "System Information." Open the system information application, then select Hardware Resources -> I/O. There should be an entry for the parallel port, similar to this:

Resource                                 Device
0x0000D100-0x0000D103   SUNIX LPT Port (LPT1)

In the example above, the base address would be D100.


Hi Dave,
My issue is not yet resolved but I believe I'm closer. I double-checked and I am running inquisit 5 on my Windows 7 computer. Also, my Windows system uses a communications port (not LTP):
Resource                                Device
0x000003F8-0x000003FF      Communications Port (COM1)

I found under Inquisit's defaults element the "/combaudrates = (port = baudrate, port = baudrate, port = baudrate, ...)" attribute.
Link: https://www.millisecond.com/support/docs/v6/html/language/attributes/combaudrates.htm

With that, I attempted to define my communications' base address in the following (bolded items):
<defaults>
/canvasaspectratio = (4,3)
/minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.81%, false, false, false, false, 5, 0)
/txbgcolor = white
/ txcolor = (0, 0, 0)
/ combaudrates = (COM1=03F8)
</defaults>

<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

However, the script never ran and produced the following two error messages:
'F8' is not a valid setting.
' (COM1=03F8) ' is not a valid setting.

If I run the script without the /combaudrates attribute and only change the port to COM1, the script runs but produces no markers. 
Any suggestions?

Baudrates and base addresses are entirely different things, so this cannot possibly work. Also, due to how COM ports (as opposed to LPT ports) work, specifying base address is not necessary. Have you actually checked whether your amplifier is even capable of accepting signalling via a serial connection (COM port)? COM ports have entirely different voltages compared to LPT ports and the data transmission is also entirely different (a byte is transferred serially, as the name suggests, one bit at a time; a parallel ports tranmits 8 bits in parallel).

Hello,

I have since fixed the above issue in getting my computers to recognize the parallel port to send EEG signal markers. However, I am now running into an issue where the port is recognized but the markers aren't sending only with specific tasks (but not others) that I believe has to do with how I am calling the EEG marker signal in the task script. This is why: When the port signal is coded as a spacebar press, the marker is sent and recorded. However, when the marker is supposed to be sent simultaneously when a certain screen appears, it is not sent. According to this resource (https://www.millisecond.com/support/docs/current/html/howto/sendmarkerstotobii.htm), I have it set up correctly (i.e., static marker) but I'm not sure why the signal isn't sending.

The markers are bolded in the following partial batches of script:
The relevant script for the Go/NoGo task is as follows (response signal only; missing go_trial_signal):
<trial go>
/ ontrialbegin = [
    if (values.condition == "HS"){
        trial.go.insertstimulustime(picture.happy, 0);
    } else if (values.condition == "SH"){
        trial.go.insertstimulustime(picture.sad, 0);
    };
    trial.go.insertstimulustime(clearscreen, parameters.picDuration);
    trial.go.insertstimulustime(text.fixation, parameters.picDuration);    
    trial.go.insertstimulustime(text.fixation, parameters.responseDuration);        
    values.iti = list.iti.nextvalue;
]
/ stimulustimes = [0 = go_trial_signal]
/ validresponse = (parameters.goKey, 0)
/ correctresponse = (parameters.goKey)
/ responsemessage = (" ", response_signal, 0)
/ beginresponsetime = 0
/ responseinterrupt = frames
/ timeout = parameters.responseDuration
/ ontrialend = [
    trial.go.resetstimulusframes();
    values.response_time = trial.go.latency;
    
    list.Hits.appenditem(trial.go.correct);
    if (trial.go.correct){
        list.hitRT.appenditem(trial.go.latency);
    };
        
    if (values.condition == "HS"){
        values.image = picture.happy.currentitem;
        list.Hits_HS.appenditem(trial.go.correct);
        if (trial.go.correct){
            values.response_outcome = "HIT";
            list.hitRT_HS.appenditem(trial.go.latency);
        } else {
            values.response_outcome = "MISS";
            values.response_time = "";
        };
        
    } else if (values.condition == "SH"){
        values.image = picture.sad.currentitem;
        list.Hits_SH.appenditem(trial.go.correct);
        if (trial.go.correct){
            values.response_outcome = "HIT";
            list.hitRT_SH.appenditem(trial.go.latency);
        } else {
            values.response_outcome = "MISS";
            values.response_time = "";
        };
        
    };
]
/ posttrialpause = values.iti
</trial>

...

<port go_trial_signal>
/ port = LPT
/ subport = data
/ items = ("00000001")
</port>

...

<port response_signal>
/ port = LPT
/ subport = data
/ items = ("11111111")
</port>

The relevant script for the word-rating task is as follows (script does not send marker signal):
<likert wordrating>
/ stimulustimes = [0=MASK; 2000=clearscreen; 2250=fixation; 4250=clearscreen; 4500=word, word_signal; 7500=clearscreen; 8000=SAM]
/ numpoints = 9
/ anchors = [1="unpleasant"; 5="neutral"; 9="pleasant"]
/ position = (50%, 70%)
/ inputdevice = mouse
/ fontstyle = ("Arial")
/ timeout = 11000
</likert>

...

<port word_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>

The relevant script for the card-sorting task is as follows (script does not send marker signal):
]

/ stimulusframes = [1=playcard, card_signal, RedTriangle1, GreenStar2, YellowCross3, BlueCircle4, deck, RuleChangeAlert]
/ validresponse = (RedTriangle1, GreenStar2, YellowCross3, BlueCircle4)
//the possible responses are: RedTriangle1, GreenStar2, YellowCross3, BlueCircle4
/ iscorrectresponse = [
return ((values.category == 1 && trial.GreenTriangle3.response == "GreenStar2") ||
   (values.category == 2 && trial.GreenTriangle3.response == "RedTriangle1") ||
   (values.category == 3 && trial.GreenTriangle3.response == "YellowCross3"));
]

...

<port card_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>

The relevant script for the stimulus-response compatibility task is as follows (script does not send marker signal):
]
/ stimulustimes = [0 = fixation,blue_left_signal]
/ beginresponsetime = parameters.fixationcross_duration + parameters.ISI
/ responseinterrupt = immediate
/ validresponse = (parameters.responsekeyblue_left, parameters.responsekeyred_right)
/ correctresponse = (parameters.responsekeyblue_left)
/ timeout = parameters.fixationcross_duration + parameters.ISI + parameters.responsewindow
/ ontrialend = [
    trial.blue_left.resetstimulusframes();
    
    values.responseCat = trial.blue_left.responsetext;
    
    list.ACC_congruent.appenditem(trial.blue_left.correct);
    if (trial.blue_left.correct){
        list.RT_congruent.appenditem(trial.blue_left.latency);
    };
]

...

<port blue_left_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>

Please install https://staginginquisit.millisecond.com/6/6_6/win/Inquisit_660.exe and see if that fixes the issue.
By emily_ahne - 5/18/2022

Dave - 5/16/2022
emily_ahne - 5/16/2022
Dave - 3/7/2022
emily_ahne - 3/7/2022
Dave - 3/4/2022
Dave - 3/4/2022
emily_ahne - 3/4/2022
I am using two Windows 7 computers; one is labeled "testing" that runs inquisit and one labeled "recording" that runs my EEG recording software, Pycorder (BrainProducts' software).
My issue is I cannot get my EEG stimulus and response markers to appear nor record on Pycorder on the recording computer. 
I first tried the default port (LTP1) and the script would not run. I then tried common port addresses and it only runs for COM1. 
I have already ruled out with BrainProducts support team that my issue is not with their hardware (also, another researcher in my lab is not having this problem using ePrime software). 
I would appreciate any help and input on this matter.

The following is the Inquisit script I am using downloaded from the Millisecond library (Auditory Oddball Task - English; Williams, Simms, Clark, & Paul, 2005) with the port changed from LTP1 to COM1:
# script for sending markers through the port
<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

<port baselinesignal>
/ port = COM1
/ subport = data
/ items = ("00000010")
</port>

<port responsesignal>
/ port = COM1
/ subport = data
/ items = ("00000011")
</port>

# trial script calling the tone and marker
<trial oddball>
/ skip = [ if (values.lasttrial == trial.oddball.name) values.skipcount += 1 else false ]
/ stimulusframes = [1=oddball,oddballsignal]
/ validresponse = (" ")
/ correctresponse = (" ")
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ ontrialend = [values.lasttrial = trial.oddball.name; values.skipcount = max(values.skipcount - 1, 0);]
</trial>

<trial baseline>
/ stimulusframes = [1=baseline,baselinesignal]
/ validresponse = (" ")
/ correctresponse = (noresponse)
/ responsemessage = (" ", responsesignal, 0)
/ trialduration = 1000
/ posttrialpause = 100
/ branch = [if ( values.skipcount > 0 ) trial.oddball]
/ ontrialend = [values.lasttrial = trial.baseline.name]
</trial>

Windows 7 is not officially supported by Inquisit 6, its minimum requirement is Windows 10. If you can reproduce the problem on a Windows 10 computer, we may be able to help, but Windows 7 is out of scope.

Adding a few more or less obvious things:
- Triggering over the serial port will only work if that's supported by the hardware / amplifier. All documentation I can find about the Brain Products actiCHamp ampifiers, however, suggest these amplfiers will only take input from a parallel port.
- If Inquisit cannot locate the parallel port, that typically means the port has a non-standard base address (typical for parallel ports that aren't integrated on the sytem's main board, but an extension card). Try specifying the LPT port's base address explicitly in the script's <defaults> element, using the /lptaddresses attribute.
https://www.millisecond.com/support/docs/v6/html/language/attributes/lptaddresses.htm
The base address is either available via the port's properties in the Windows device manager or you hit Start and type "System Information." Open the system information application, then select Hardware Resources -> I/O. There should be an entry for the parallel port, similar to this:

Resource                                 Device
0x0000D100-0x0000D103   SUNIX LPT Port (LPT1)

In the example above, the base address would be D100.


Hi Dave,
My issue is not yet resolved but I believe I'm closer. I double-checked and I am running inquisit 5 on my Windows 7 computer. Also, my Windows system uses a communications port (not LTP):
Resource                                Device
0x000003F8-0x000003FF      Communications Port (COM1)

I found under Inquisit's defaults element the "/combaudrates = (port = baudrate, port = baudrate, port = baudrate, ...)" attribute.
Link: https://www.millisecond.com/support/docs/v6/html/language/attributes/combaudrates.htm

With that, I attempted to define my communications' base address in the following (bolded items):
<defaults>
/canvasaspectratio = (4,3)
/minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.81%, false, false, false, false, 5, 0)
/txbgcolor = white
/ txcolor = (0, 0, 0)
/ combaudrates = (COM1=03F8)
</defaults>

<port oddballsignal>
/ port = COM1
/ subport = data
/ items = ("00000001")
</port>

However, the script never ran and produced the following two error messages:
'F8' is not a valid setting.
' (COM1=03F8) ' is not a valid setting.

If I run the script without the /combaudrates attribute and only change the port to COM1, the script runs but produces no markers. 
Any suggestions?

Baudrates and base addresses are entirely different things, so this cannot possibly work. Also, due to how COM ports (as opposed to LPT ports) work, specifying base address is not necessary. Have you actually checked whether your amplifier is even capable of accepting signalling via a serial connection (COM port)? COM ports have entirely different voltages compared to LPT ports and the data transmission is also entirely different (a byte is transferred serially, as the name suggests, one bit at a time; a parallel ports tranmits 8 bits in parallel).

Hello,

I have since fixed the above issue in getting my computers to recognize the parallel port to send EEG signal markers. However, I am now running into an issue where the port is recognized but the markers aren't sending only with specific tasks (but not others) that I believe has to do with how I am calling the EEG marker signal in the task script. This is why: When the port signal is coded as a spacebar press, the marker is sent and recorded. However, when the marker is supposed to be sent simultaneously when a certain screen appears, it is not sent. According to this resource (https://www.millisecond.com/support/docs/current/html/howto/sendmarkerstotobii.htm), I have it set up correctly (i.e., static marker) but I'm not sure why the signal isn't sending.

The markers are bolded in the following partial batches of script:
The relevant script for the Go/NoGo task is as follows (response signal only; missing go_trial_signal):
<trial go>
/ ontrialbegin = [
    if (values.condition == "HS"){
        trial.go.insertstimulustime(picture.happy, 0);
    } else if (values.condition == "SH"){
        trial.go.insertstimulustime(picture.sad, 0);
    };
    trial.go.insertstimulustime(clearscreen, parameters.picDuration);
    trial.go.insertstimulustime(text.fixation, parameters.picDuration);    
    trial.go.insertstimulustime(text.fixation, parameters.responseDuration);        
    values.iti = list.iti.nextvalue;
]
/ stimulustimes = [0 = go_trial_signal]
/ validresponse = (parameters.goKey, 0)
/ correctresponse = (parameters.goKey)
/ responsemessage = (" ", response_signal, 0)
/ beginresponsetime = 0
/ responseinterrupt = frames
/ timeout = parameters.responseDuration
/ ontrialend = [
    trial.go.resetstimulusframes();
    values.response_time = trial.go.latency;
    
    list.Hits.appenditem(trial.go.correct);
    if (trial.go.correct){
        list.hitRT.appenditem(trial.go.latency);
    };
        
    if (values.condition == "HS"){
        values.image = picture.happy.currentitem;
        list.Hits_HS.appenditem(trial.go.correct);
        if (trial.go.correct){
            values.response_outcome = "HIT";
            list.hitRT_HS.appenditem(trial.go.latency);
        } else {
            values.response_outcome = "MISS";
            values.response_time = "";
        };
        
    } else if (values.condition == "SH"){
        values.image = picture.sad.currentitem;
        list.Hits_SH.appenditem(trial.go.correct);
        if (trial.go.correct){
            values.response_outcome = "HIT";
            list.hitRT_SH.appenditem(trial.go.latency);
        } else {
            values.response_outcome = "MISS";
            values.response_time = "";
        };
        
    };
]
/ posttrialpause = values.iti
</trial>

...

<port go_trial_signal>
/ port = LPT
/ subport = data
/ items = ("00000001")
</port>

...

<port response_signal>
/ port = LPT
/ subport = data
/ items = ("11111111")
</port>

The relevant script for the word-rating task is as follows (script does not send marker signal):
<likert wordrating>
/ stimulustimes = [0=MASK; 2000=clearscreen; 2250=fixation; 4250=clearscreen; 4500=word, word_signal; 7500=clearscreen; 8000=SAM]
/ numpoints = 9
/ anchors = [1="unpleasant"; 5="neutral"; 9="pleasant"]
/ position = (50%, 70%)
/ inputdevice = mouse
/ fontstyle = ("Arial")
/ timeout = 11000
</likert>

...

<port word_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>

The relevant script for the card-sorting task is as follows (script does not send marker signal):
]

/ stimulusframes = [1=playcard, card_signal, RedTriangle1, GreenStar2, YellowCross3, BlueCircle4, deck, RuleChangeAlert]
/ validresponse = (RedTriangle1, GreenStar2, YellowCross3, BlueCircle4)
//the possible responses are: RedTriangle1, GreenStar2, YellowCross3, BlueCircle4
/ iscorrectresponse = [
return ((values.category == 1 && trial.GreenTriangle3.response == "GreenStar2") ||
   (values.category == 2 && trial.GreenTriangle3.response == "RedTriangle1") ||
   (values.category == 3 && trial.GreenTriangle3.response == "YellowCross3"));
]

...

<port card_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>

The relevant script for the stimulus-response compatibility task is as follows (script does not send marker signal):
]
/ stimulustimes = [0 = fixation,blue_left_signal]
/ beginresponsetime = parameters.fixationcross_duration + parameters.ISI
/ responseinterrupt = immediate
/ validresponse = (parameters.responsekeyblue_left, parameters.responsekeyred_right)
/ correctresponse = (parameters.responsekeyblue_left)
/ timeout = parameters.fixationcross_duration + parameters.ISI + parameters.responsewindow
/ ontrialend = [
    trial.blue_left.resetstimulusframes();
    
    values.responseCat = trial.blue_left.responsetext;
    
    list.ACC_congruent.appenditem(trial.blue_left.correct);
    if (trial.blue_left.correct){
        list.RT_congruent.appenditem(trial.blue_left.latency);
    };
]

...

<port blue_left_signal>
/ port = LPT
/ subport = data
/ items = ("00001010")
</port>

Please install https://staginginquisit.millisecond.com/6/6_6/win/Inquisit_660.exe and see if that fixes the issue.

This solved the issue. Thanks!