Millisecond Forums

Using Cedrus RB-844 and Cedrus m-pod w/ Inquisit 5 for task synchronization to EEG machine

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

By ayoforyayo11 - 10/28/2019

Hi,

I'm looking for some help with using the m-pod to communicate from Inquisit to an EEG machine.
I am using  the following system to collect EEG data synchronized with task data:

  1. Task software: Inquisit 5
  2. Response pad: Cedrus RB-844  response pad
  3. EEG: Nihon Kohden EEG-1200  cart (https://us.nihonkohden.com/products/eeg-1200/)
  4. Sync method: Cedrus m-pod  connected to RB-844 (via display port) and to EEG at 16-pin DC input.

Summary: PC runninginquisit --(usb)--> RB-844 --(display port)--> m-pod --(16-pin DC)-->EEG
My goals
  1. To see button presses show up  in the EEG data (RB --> m-pod --> EEG)
  2. To see TTL/event markers sent  from my Inquisit script in the EEG data (PC --(bypass RB)--> m-pod  --> EEG)
    1. I need to be able  to mark when unique events happen that don't align with a button press.

Currently, I am able to do #1. When a button is pressed, I see the m-pod light up, and I see a deflection on the EEG through one of the DC channels.
  • All that was required for  this was the EEG data collection settings to be configured to record from  the DC port. So at least I know that if I can get the m-pod to light up,  I'll be able to see it in the EEG data.

I am stuck on #2.Cannot get the m-pod to light up from a command in Inquisit
  • I have tried to send signals  through Inquisit's parallel and serial port tool: https://www.millisecond.com/support/docs/v5/html/howto/howtoportmonitor.htm
    • I'm not sure if this is a  parallel port or serial port, but neither seems to work via this tool.
  • And through the script with  commands like these: https://www.millisecond.com/support/docs/v5/html/howto/howtosendport.htm
    • See my sample Inquisit  script below
  • Neither results in the m-pod  lighting up. The m-pod documentation (https://cedrus.com/support/xid/mpod_commands.htm) says that I need to use the  command "aq" to tell the host (RB-844) to "stand aside and  let the computer communicate directly with m-pod." There is also  documentation saying I should be communicating w/ RB-844 and not m-pod  with "mh" and "mp" commands.
    • These commands are all  python/C++ commands to communicate with the cedrus hardware.
    • I don't have experience with  python or C++, but it looks like I need to somehow get those commands  through to the hardware via Inquisit.
    • I'm not sure how to do this  in Inquisit's task software (or if it can be done)

Note: I have downloaded Xidon to attempt to map the m-pod/RB system. I'm not completely clear on what the usb numbering system means in terms of what I command from Inquisit to get a particular DC input to deflect.

So in summary, here is my main question with sub-questions: What do I write in my Inquisit code to result in the m-pod sending a signal to the EEG?
  • Is this even possible through  Inquisit?
  • Am I using a parallel port or  a serial port with this setup?
  • Is there something I need to  do through Xidon?
  • What does the Xidon mapping  really mean?

Below is a sample Inquisit script in which I attempt to send an event marker. All I've done here is added a trial to the basic RB response test script so that it attempts to send one bit first.


<defaults>
/ inputdevice = XID
/ minimumversion = "4.0.3.0"
</defaults>

<xid responsepad>
/ product = responsepad
</xid>

<values>
/ response = 0
</values>

<data>
/ columns = [response latency]
</data>

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

<block test>
/ trials = [1 = sendonebit; 2-20=test]
</block>

<port on>
/ items = ("00000001")
/ port = XID
</port>
<text word>
/ items = ("Send One Bit")
</text> 
<trial sendonebit>
/ trialduration = 2000
/ posttrialpause = 2000
/ stimulustimes = [0 = word, on]
/ validresponse = (112)
/ correctresponse = (112)
</trial>

<text responsefeedback>
/ items = ("Response: <% trial.test.response %>")
/ position = (50%, 50%)
</text>

<text lastevent>
/ items = ("Last Event: <% xid.responsepad.lastevent %>")
/ position = (15%, 70%)
</text>

<text lasteventport>
/ items = ("Port: <% xid.responsepad.lasteventport %>")
/ position = (30%, 70%)
</text>

<text lasteventaction>
/ items = ("Action: <% xid.responsepad.lasteventaction %>")
/ position = (50%, 70%)
</text>

<text lasteventbutton>
/ items = ("Button: <% xid.responsepad.lasteventbutton %>")
/ position = (70%, 70%)
</text>

<text lastlatency>
/ items = ("Latency: <% xid.responsepad.lastlatency %>")
/ position = (85%, 70%)
</text>

<trial test>
/ stimulustimes = [1=responsefeedback,lastevent,lasteventport,lasteventaction,lasteventbutton,lastlatency]
/ validresponse = (anyresponse)
</trial>