BioSemi accessory sensor input in BCI2000?

This forum deals with BCI2000 configuration issues.
Post Reply
inesplc
Posts: 16
Joined: 02 Mar 2016, 06:32

BioSemi accessory sensor input in BCI2000?

Post by inesplc » 04 May 2016, 09:21

Hi all,

I am planning to use a BioSemi ActiveTwo MK2 with the accessories from here[1], specifically the GSR and Plethysmograph sensors which appear in my data recorded from ActiveView as channels 33 and 34 (the other 32 are EEG channels).
My question is how do I configure my parameters in BCI2000 to have those two extra channels?

So far I've tried changing SourceCh and TransmitChList to 34, and added 33 and 34 to EEGChList. I've also tried adding 33 and 34 channels to AIBChList instead of EEGChList, but had no luck with either and can't only see 32 channels in the Source Signals window.

Are the accessories supported by BCI2000? I'm using the Contrib version.

Thank you,
Inês

[1] - http://www.biosemi.com/accessoires.htm

pbrunner
Posts: 344
Joined: 17 Sep 2010, 12:43

Re: BioSemi accessory sensor input in BCI2000?

Post by pbrunner » 04 May 2016, 14:04

Inês,

see the parameter fragment below, which I have verified to work for a 136 channel setup with A, B, C, and D blocks and the EXG1 EXG2 EXG3 EXG4 EXG5 channels at the end. I think you just need to adjust this fragment by removing the C and D block electrodes from the SourceChNames, SourceCh, SourceChOffset, SourchGain and EEGChList parameter.

Regards, Peter

Code: Select all

Source:Signal%20Properties:DataIOFilter int SourceCh= 136 16 1 % // number of digitized and stored channels
Source:Signal%20Properties:DataIOFilter int SampleBlockSize= 64 32 1 % // number of samples transmitted at a time
Source:Signal%20Properties:DataIOFilter int SamplingRate= 1024 256Hz 1 % // sample rate
Source:Signal%20Properties:DataIOFilter floatlist SourceChOffset= 136 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 % % // Offset for channels in A/D units
Source:Signal%20Properties:DataIOFilter floatlist SourceChGain= 136 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 1 1 1 1 1 1 1 1 0.003 % % // gain for each channel (A/D units -> muV)
Source:Signal%20Properties:DataIOFilter list ChannelNames= 136 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 A32 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C30 C31 C32 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19 D20 D21 D22 D23 D24 D25 D26 D27 D28 D29 D30 D31 D32 EXG1 EXG2 EXG3 EXG4 EXG5 EXG6 EXG7 EXG8 // list of channel names
Visualize:Timing:DataIOFilter int VisualizeTiming= 1 1 0 1 // visualize system timing (0=no, 1=yes) (boolean)
Visualize:Source%20Signal:DataIOFilter int VisualizeSource= 1 1 0 1 // visualize raw brain signal (0=no, 1=yes) (boolean)
Visualize:Source%20Signal:DataIOFilter int VisualizeSourceDecimation= auto auto % % // decimation factor for raw brain signal
Visualize:Source%20Signal:DataIOFilter int VisualizeSourceBufferSize= auto auto % % // number of blocks to aggregate before sending to operator
Visualize:Source%20Signal:DataIOFilter int VisualizeSourceTime= 8s 8s 0 % // how much time in Source visualization
Visualize:Source%20Signal:DataIOFilter int SourceMin= -100muV -100muV % % // raw signal vis Min Value
Visualize:Source%20Signal:DataIOFilter int SourceMax= 100muV 100muV % % // raw signal vis Max Value
Source:Biosemi2ADC intlist EEGChList= 128 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 % 1 % // list of physical channel indices for the EEG channels in use
Source:Biosemi2ADC intlist AIBChList= 0 % 1 32 // list of Auxiliary Input Box channels to acquire after the EEG channels (included in the SourceCh total)
Source:Biosemi2ADC intlist TriggerChList= 8 1 2 3 4 5 6 7 8 % 0 16 // list of one-bit trigger channels to append to the end (included in the SourceCh total) or a single 0 to acquire all trigger channels as a single 16-bit channel
Storage:Documentation:BCI2000FileWriter string StorageTime= % // time of beginning of data storage
Source:Source%20Filter:SourceFilter int NotchFilter= 0 0 0 2 // Power line notch filter: 0: disabled, 1: at 50Hz, 2: at 60Hz (enumeration)
Source:Source%20Filter:SourceFilter int HighPassFilter= 0 0 0 2 // Source high pass filter: 0: disabled, 1: at 0.1Hz, 2: at 1Hz (enumeration)
Source:Source%20Filter:SourceFilter int LowPassFilter= 0 0 0 4 // Source low pass filter: 0: disabled, 1: at 9Hz, 2: at 30Hz, 3: at 40Hz, 4: at 70Hz (enumeration)
Source:Alignment:AlignmentFilter int AlignChannels= 0 0 0 1 // align channels in time (0=no, 1=yes)
Source:Alignment:AlignmentFilter floatlist SourceChTimeOffset= 0 0 % % // time offsets for all source channels (may be empty)
System:Additional%20Connections:EventLink int EventLink= 1 1 0 1 // Send events from Operator to Source module (boolean)
Source:Online%20Processing:TransmissionFilter list TransmitChList= 1 1 // list of transmitted channels

inesplc
Posts: 16
Joined: 02 Mar 2016, 06:32

Re: BioSemi accessory sensor input in BCI2000?

Post by inesplc » 10 May 2016, 12:03

Hi Peter,

Could you help me a little with the adjustments of the parameters from your fragment?
I have an A set with the two auxiliary sensors plugged in the front of the ActiveTwo system (not the auxiliary input box or the EXG channels). So from you fragment I removed C and D completely, giving:

Code: Select all

SourceCh= 34
SamplingRate= 512
SourceChOffset= 0 (x34)
SourceChGain= 0.03125 (x34)
ChannelNames= Fp1 Af3 F7 F3 Fc1 Fc5 T7 C3 Cp1 Cp5 P7 P3 Pz Po3 O1 Oz O2 Po4 P4 P8 Cp6 Cp2 C4 T8 Fc6 Fc2 F4 F8 Af4 Fp2 Fz Cz GSR1 Plet
EEGChList= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
TransmitChList= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
These parameters give me channels 33 and 34 completely empty. Could it be that the ChGain is not appropriate for the last two channels, given that they are not in muV? Also, in EEGChList I entered number 1-34, but the last two are not EEG... Taking them off gives the error:

Code: Select all

2016-05-10T18:01:39 - DataIOFilter::Preflight: Biosemi2ADC::Preflight: Combined number of indices in EEGChList + AIBChList + TriggerChList (32+0+0=32) does not match SourceCh parameter value (=34).
I am a bit lost as to where to go from here.

Best,
Inês

pbrunner
Posts: 344
Joined: 17 Sep 2010, 12:43

Re: BioSemi accessory sensor input in BCI2000?

Post by pbrunner » 10 May 2016, 14:05

Inês,

please try the following parameter fragment and let me know if this works.

Code: Select all

Source:Signal%20Properties:DataIOFilter int SourceCh= 34 // number of digitized and stored channels
Source:Signal%20Properties:DataIOFilter int SampleBlockSize= 64 // number of samples transmitted at a time
Source:Signal%20Properties:DataIOFilter int SamplingRate= 1024 // sampling rate
Source:Signal%20Properties:DataIOFilter list SourceChOffset= 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 // Offset for channels in A/D units
Source:Signal%20Properties:DataIOFilter list SourceChGain= 34 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 // gain for each channel (A/D units per physical unit)
Source:Signal%20Properties:DataIOFilter list ChannelNames= 34 Fp1 Af3 F7 F3 Fc1 Fc5 T7 C3 Cp1 Cp5 P7 P3 Pz Po3 O1 Oz O2 Po4 P4 P8 Cp6 Cp2 C4 T8 Fc6 Fc2 F4 F8 Af4 Fp2 Fz Cz GSR1 Plet // list of channel names
Source:Biosemi2ADC intlist EEGChList= 32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 % 1 % // list of physical channel indices for the EEG channels in use
Source:Biosemi2ADC intlist AIBChList= 2 1 2 % 1 32 // list of Auxiliary Input Box channels to acquire after the EEG channels (included in the SourceCh total)
Source:Biosemi2ADC intlist TriggerChList= 0 % 0 16 // list of one-bit trigger channels to append to the end (included in the SourceCh total) or a single 0 to acquire all trigger channels as a single 16-bit channel

inesplc
Posts: 16
Joined: 02 Mar 2016, 06:32

Re: BioSemi accessory sensor input in BCI2000?

Post by inesplc » 11 May 2016, 04:36

Hi Peter,

Those parameters give the error message:

Code: Select all

2016-05-11T10:30:15 - DataIOFilter::Preflight: Biosemi2ADC::Preflight: AIBChList must be empty if AIB box is not connected.
Which makes sense, since I'm using the front panel (like here[1]) to plug the sensors in, and not the Analog Input Box.

[1] - http://www.cortechsolutions.com/getmedi ... MSADB.aspx

pbrunner
Posts: 344
Joined: 17 Sep 2010, 12:43

Re: BioSemi accessory sensor input in BCI2000?

Post by pbrunner » 11 May 2016, 11:34

Inês,

I have looked into the BioSemi ActiveTwo MK2 features and now understand the issue that you are experiencing. What you want to record are the AUX1 and AUX2 channels [1] which are intended for sensors such as the GSR. I think you might be the first BCI2000 user that is attempting to record these channels. Looking into the device documentation I found that up to 7 these channels are supported (see below). The code that BCI2000 uses to decode the information (Biosemi2Client::determineNumChannelsMk2) does not account for these channels. I have also looked at other software that implements this protocol, but could not find an example how to decode the information from these auxiliary sensory channels. Consequently, you would have to first figure out the protocol, i.e., where in the data stream, these channels are encoded and then augment the BCI2000 implementation with this feature. If you feel that you are sophisticated enough for this task, I am happy to guide you. The first starting point would be to post the question on the BioSemi support forum [2]. Let me know how you would like to proceed.

Code: Select all

	AD-box switch  | Sample-rate     | Pin channels + EX channels + Sensor channels
	***************|*****************|*********************************************
	0              | 2048 (2 kHz)    | >> Daisy-chain mode:
	1              | 4096 (4 kHz)    | >> In speedmode 0 to 3, the AD-boxes work as up to 4 optical fiber 'daisy chained' boxes,
	2              | 8192 (8 kHz)    | >> each with a maximum of 128+8 channels+sensors @ 2 kHz, speedmode switch = box number. (0=Box1, 1=Box2, 2=Box3, 3=Box4).
	3              | 16384 (16 kHz)  | >> Daisy chain possibilities are not standard included in the base system price
	4              | 2048 (2 kHz)    | 256+8+7
	5              | 4096 (4 kHz)    | 128+8+7
	6              | 8192 (8 kHz)    | 64+8+7
	7              | 16384 (16 kHz)  | 32+8+7
	8 (AIB-mode)   | 2048 (2 kHz)    | 256+8+7+32AIB
	9 (ABR-mode)   | 16384 (16 kHz)  | 5
Regards, Peter

[1] http://www.biosemi.com/pics/active2%2Bbattery_large.jpg
[2] http://www.biosemi.nl/forum/viewforum.php?f=9

inesplc
Posts: 16
Joined: 02 Mar 2016, 06:32

Re: BioSemi accessory sensor input in BCI2000?

Post by inesplc » 11 May 2016, 12:11

Hi Peter,

Thanks for the help, I had the feeling that could be the problem. Unfortunately I don't think I have the skills necessary to look into this issue, so I'll try to see if my lab has a AIB box available or find another way to solve this.

Inês

inesplc
Posts: 16
Joined: 02 Mar 2016, 06:32

Re: BioSemi accessory sensor input in BCI2000?

Post by inesplc » 24 May 2016, 09:53

So I found a workaround on this matter and thought I'd post it here in case someone in the future wants to do something similar.

The Fieldtrip toolbox has a realtime buffer that reads and streams BioSemi data, including the AUX sensors [1] which are channels 274-312:

Code: Select all

# 1-256:   EEG
# 257-264: EXG
# 265-27:  JAZZ 
# 274-280: AUX
# 281-312: AIB
Luckily, on BCI2000 you can select the same Fieldtrip buffer as your Signal source [2]. And now all the data is available :)

My only question now is if I should change SourceChOffset and SourceChGain for this channels, or maintain the offset = 0 and gain = 0.03125?

Inês

[1] - http://www.fieldtriptoolbox.org/develop ... me/biosemi
[2] - http://www.bci2000.org/wiki/index.php/C ... fferSource

Post Reply

Who is online

Users browsing this forum: No registered users and 20 guests