From 5b747fb06621e0c8fd3e9dcad0621287ad1a792f Mon Sep 17 00:00:00 2001 From: Igor Beloschapkin Date: Wed, 9 Sep 2020 12:43:17 +0200 Subject: [PATCH] Add Nested Spelling, Remove wheelchair --- TactileCalibration.prm | 188 +++++++++++++++++++++-------------------- TactileCopyNested.prm | 147 ++++++++++++++++++++++++++++++++ WheelchairAdapter.py | 104 ----------------------- app.py | 116 ++++++++----------------- config.ini | 6 +- startGUI.bat | 1 - 6 files changed, 284 insertions(+), 278 deletions(-) create mode 100644 TactileCopyNested.prm delete mode 100644 WheelchairAdapter.py delete mode 100644 startGUI.bat diff --git a/TactileCalibration.prm b/TactileCalibration.prm index 53d29a2..a083af8 100644 --- a/TactileCalibration.prm +++ b/TactileCalibration.prm @@ -1,21 +1,88 @@ Visualize:Property%20Sets matrix VisPropertySets= 0 1 // row titles are properties in the form "SRCD.Left", columns are property sets -System:Version matrix OperatorVersion= { Framework Revision Build Config Protocol } 1 3.6%20BETA.5570.5 5570.5,%202016-10-12T19:27:33Z MSVC-17.0.61030.0-AMD64,%20release,%202016-10-16T14:03:14Z,%20user@user-PC USE_DYNAMIC_CRT:OFF%20USE_OPENMP:ON%20USE_PRECOMPILED_HEADERS:ON%20USE_ASSERTS_IN_RELEASE_BUILDS:OFF%20USE_EXTERNAL_QT:OFF 2.3 // operator module version information (noedit)(readonly) -System:Protocol int AutoConfig= 1 1 0 1 // Use AutoConfig protocol extension (boolean) -System:Protocol int OperatorBackLink= 1 1 0 1 // Send final state and signal information to Operator (boolean) -System:Core%20Connections string OperatorIP= 127.0.0.1 127.0.0.1 % % // the Operator module's IP (noedit)(readonly) +System:Configuration matrix OperatorVersion= { Framework Revision Build } 1 3.0.5 % Jun%20%203%202013%2011:41:59 // operator module version information(readonly) +System:Additional%20Connections int OperatorBackLink= 1 1 0 1 // Send final state and signal information to Operator (boolean)(readonly) +Source:Signal%20Properties:DataIOFilter int SourceCh= 12 16 1 % // number of digitized and stored channels +Source:Signal%20Properties:DataIOFilter int SampleBlockSize= 8 32 1 % // number of samples transmitted at a time +Source:Signal%20Properties:DataIOFilter int SamplingRate= 512 256Hz 1 % // sample rate +Source:Signal%20Properties:DataIOFilter list ChannelNames= 12 Fz Fc1 Fc2 C3 Cz C4 P3 Pz P4 O1 Oz O2 // list of channel names +Source:Signal%20Properties:DataIOFilter floatlist SourceChOffset= 12 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= 12 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.003 % % // gain for each channel (A/D units -> muV) +Storage:Data%20Location:DataIOFilter string DataDirectory= ../data/WheelchairTraining ..\data % % // path to top level data directory (directory) +Storage:Session:DataIOFilter string SubjectName= WT-tacCalib Name % % // subject alias +Storage:Session:DataIOFilter string SubjectSession= 001 001 % % // three-digit session number +Storage:Session:DataIOFilter string SubjectRun= 00 00 % % // two-digit run number +Storage:Documentation:DataIOFilter string ID_System= % // BCI2000 System Code +Storage:Documentation:DataIOFilter string ID_Amp= % // BCI2000 Amp Code +Storage:Documentation:DataIOFilter string ID_Montage= % // BCI2000 Cap Montage Code +Visualize:Timing:DataIOFilter int VisualizeTiming= 0 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= 1 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= 2s 2s 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:gUSBampADC intlist SourceChList= 0 0 1 128 // list of channels to digitize +Source:gUSBampADC intlist SourceChDevices= 1 12 16 1 17 // number of digitized channels per device +Source:gUSBampADC int NumBuffers= 2 1 2 32 // number of software buffers to use +Source:gUSBampADC string DeviceIDMaster= auto // deviceID for the device whose SYNC goes to the slaves +Source:gUSBampADC int FilterEnabled= 1 1 0 1 // Enable pass band filter (0=no, 1=yes) +Source:gUSBampADC float FilterHighPass= 0.1 0.1 0 50 // high pass filter for pass band +Source:gUSBampADC float FilterLowPass= 60 60 0 4000 // low pass filter for pass band +Source:gUSBampADC int FilterModelOrder= 8 8 1 12 // filter model order for pass band +Source:gUSBampADC int FilterType= 1 1 1 2 // filter type for pass band (1=BUTTERWORTH, 2=CHEBYSHEV) +Source:gUSBampADC int NotchEnabled= 1 1 0 1 // Enable notch (0=no, 1=yes) +Source:gUSBampADC float NotchHighPass= 48 58 0 70 // high pass filter for notch filter +Source:gUSBampADC float NotchLowPass= 52 62 0 4000 // low pass filter for notch filter +Source:gUSBampADC int NotchModelOrder= 4 4 1 10 // filter model order for notch filter +Source:gUSBampADC int NotchType= 1 1 1 2 // filter type for pass band (1=CHEBYSHEV, 2=BUTTERWORTH) +Source:gUSBampADC list DeviceIDs= 1 auto // list of USBamps to be used (or auto) +Source:gUSBampADC int DigitalInput= 0 0 0 1 // enable digital input: 0: false, 1: true (enumeration) +Source:gUSBampADC int DigitalOutput= 0 0 0 1 // enable digital output on block acquisition (boolean) +Source:gUSBampADC string DigitalOutputEx= % // expression for output on digital output 2 (expression) +Source:gUSBampADC int SignalType= 0 0 0 1 // numeric type of output signal: 0: int16, 1: float32 (enumeration) +Source:gUSBampADC int AcquisitionMode= 0 0 0 2 // data acquisition mode: 0: analog signal acquisition, 1: calibration, 2: impedance (enumeration) +Source:gUSBampADC int CommonGround= 1 0 0 1 // internally connect GNDs from all blocks: 0: false, 1: true (enumeration) +Source:gUSBampADC int CommonReference= 1 0 0 1 // internally connect Refs from all blocks: 0: false, 1: true (enumeration) +Storage:BCI2000FileWriter string FileFormat= dat // format of data file (readonly) +Storage:Documentation:BCI2000FileWriter string StorageTime= % // time of beginning of data storage +Source:Alignment:AlignmentFilter int AlignChannels= 1 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) +Source:Online%20Processing:TransmissionFilter list TransmitChList= 12 1 2 3 4 5 6 7 8 9 10 11 12 // list of transmitted channels: Channel names may contain * and ? wildcards, and character ranges enclosed in []; wildcard patterns may be negated by an exclamation mark. Ranges of channels may be specified using : or - to separate begin from end. +System:Additional%20Connections:EventLink int EventLink= 1 1 0 1 // Send events from Operator to Source module (boolean)(readonly) +Storage:Data%20Location:RunManager string DataFile= $%7bSubjectName%7d$%7bSubjectSession%7d/$%7bSubjectName%7dS$%7bSubjectSession%7dR$%7bSubjectRun%7d.$%7bFileFormat%7d // name of data file relative to DataDirectory +System:Core%20Connections string OperatorIP= 127.0.0.1 127.0.0.1 % % // the Operator module's IP(readonly) +System:Core%20Connections string SignalSourcePort= 49242 4200 1024 65535 // the SignalSource module's listening port(readonly) +System:Core%20Connections string SignalSourceIP= 127.0.0.1 127.0.0.1 % % // the SignalSource module's listening IP(readonly) +System:Configuration matrix SignalSourceVersion= { Framework Revision Build } 1 3.0.5 % Jun%20%203%202013%2011:41:59 // SignalSource version information(readonly) +System:Configuration matrix SignalSourceFilterChain= 8 { Filter%20Name Position%20String } DataIOFilter 0 gUSBampADC 1 GDFFileWriter 1 EDFFileWriter 1 BCI2000FileWriter 1 NullFileWriter 1 AlignmentFilter 1.1 TransmissionFilter 1.2 // SignalSource filter chain(readonly) +Visualize:Processing%20Stages int VisualizeAlignmentFilter= 0 0 0 1 // Visualize AlignmentFilter output (boolean) +Visualize:Processing%20Stages int VisualizeTransmissionFilter= 0 0 0 1 // Visualize TransmissionFilter output (boolean) +Filtering:SpatialFilter int SpatialFilterType= 0 2 0 3 // spatial filter type 0: none, 1: full matrix, 2: sparse matrix, 3: common average reference (CAR) (enumeration) +Filtering:SpatialFilter:SpatialFilter matrix SpatialFilter= 4 4 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 % % // columns represent input channels, rows represent output channels +Filtering:SpatialFilter:SpatialFilter intlist SpatialFilterCAROutput= 0 // when using CAR filter type: list of output channels, or empty for all channels +Filtering:SpatialFilter:SpatialFilter int SpatialFilterMissingChannels= 1 0 0 1 // how to handle missing channels 0: ignore, 1: report error (enumeration) +Filtering:P3TemporalFilter int EpochLength= 800ms 500ms 0 % // Length of data epoch from stimulus onset +Filtering:P3TemporalFilter int EpochsToAverage= 10 1 0 % // Number of epochs to average +Filtering:P3TemporalFilter int SingleEpochMode= 0 0 0 1 // Report result after each epoch (boolean) +Visualize:P3TemporalFilter int VisualizeP3TemporalFiltering= 0 0 0 1 // Visualize averaged epochs (0=no 1=yes) (boolean) +Visualize:P3TemporalFilter int TargetERPChannel= 1 1 % % // Input channel for which to display ERP data +Filtering:LinearClassifier matrix Classifier= 2 { input%20channel input%20element%20(bin) output%20channel weight } 1 4 1 1 1 6 2 1 // Linear classification matrix in sparse representation +System:Core%20Connections string SignalProcessingPort= 49243 4200 1024 65535 // the SignalProcessing module's listening port(readonly) +System:Core%20Connections string SignalProcessingIP= 127.0.0.1 127.0.0.1 % % // the SignalProcessing module's listening IP(readonly) +System:Configuration matrix SignalProcessingVersion= { Framework Revision Build } 1 3.0.5 % Jun%20%203%202013%2011:41:59 // SignalProcessing version information(readonly) +System:Configuration matrix SignalProcessingFilterChain= 3 { Filter%20Name Position%20String } SpatialFilter 2.A P3TemporalFilter 2.B LinearClassifier 2.C // SignalProcessing filter chain(readonly) +Visualize:Processing%20Stages int VisualizeSpatialFilter= 0 0 0 1 // Visualize SpatialFilter output (boolean) +Visualize:Processing%20Stages int VisualizeLinearClassifier= 0 0 0 1 // Visualize LinearClassifier output (boolean) Connector:ConnectorInput list ConnectorInputFilter= 0 // list of state names or signal elements to allow, "*" for any, signal elements as in "Signal(1,0)" Connector:ConnectorInput string ConnectorInputAddress= % localhost:20320 % % // IP address/port to read from, e.g. localhost:20320 Application:Application%20Window:ApplicationWindow int WindowWidth= 640 640 0 % // width of Application window Application:Application%20Window:ApplicationWindow int WindowHeight= 480 480 0 % // height of Application window Application:Application%20Window:ApplicationWindow int WindowLeft= 0 0 % % // screen coordinate of Application window's left edge -Application:Application%20Window:ApplicationWindow int WindowTop= 0 0 % % // screen coordinate of Application window's top edge +Application:Application%20Window:ApplicationWindow int WindowTop= 600 0 % % // screen coordinate of Application window's top edge Application:Application%20Window:ApplicationWindow string WindowBackgroundColor= 0x000000 0x505050 % % // Application window background color (color) Visualize:Application%20Window:ApplicationWindow int VisualizeApplicationWindow= 0 0 0 1 // Display miniature copy of Application window (boolean) Visualize:Application%20Window:ApplicationWindow int AppWindowSpatialDecimation= 8 8 1 % // Application window decimation (shrinking) factor Visualize:Application%20Window:ApplicationWindow int AppWindowTemporalDecimation= 4 16 1 % // Application window time decimation factor -Application:AudioPlayback:ApplicationWindow float AudioPlaybackRate= auto // audio playback sampling rate -Application:AudioPlayback:ApplicationWindow int AudioPlaybackChannels= auto // number of playback output channels -Application:AudioPlayback:ApplicationWindow float AudioPlaybackBufferDuration= auto // duration of playback buffer Visualize:Application%20Log:ApplicationBase int ShowAppLog= 1 0 0 1 // Show application log window (boolean) Application:Sequencing:StimulusTask float PreRunDuration= 2s 1 0 % // pause preceding first sequence Application:Sequencing:StimulusTask float PostRunDuration= 2s 0 0 % // pause following last sequence @@ -36,7 +103,7 @@ Application:Speller%20Targets:P3SpellerTask intlist NumMatrixRows= 1 4 6 0 % // Application:Audio%20Stimuli:P3SpellerTask int AudioStimuliOn= 0 0 0 1 // Audio Stimuli Mode (0=no, 1=yes) (boolean) Application:Audio%20Stimuli:P3SpellerTask matrix AudioStimuliRowsFiles= 6 { filename } sounds/1.wav sounds/2.wav sounds/3.wav sounds/4.wav sounds/5.wav sounds/6.wav // audio stimuli rows files Application:Audio%20Stimuli:P3SpellerTask matrix AudioStimuliColsFiles= 6 { filename } sounds/a.wav sounds/b.wav sounds/c.wav sounds/d.wav sounds/e.wav sounds/f.wav // audio stimuli column files -Application:Speller%20Targets:P3SpellerTask floatlist TargetWidth= 1 40 0 0 100 // target width in percent of screen width +Application:Speller%20Targets:P3SpellerTask floatlist TargetWidth= 1 16 0 0 100 // target width in percent of screen width Application:Speller%20Targets:P3SpellerTask floatlist TargetHeight= 1 14 0 0 100 // target height in percent of screen height Application:Speller%20Targets:P3SpellerTask floatlist TargetTextHeight= 1 12 0 0 100 // height of target labels in percent of screen height Application:Speller%20Targets:P3SpellerTask stringlist BackgroundColor= 1 0x00000000 0x505050 % % // target background color (color) @@ -45,104 +112,43 @@ Application:Speller%20Targets:P3SpellerTask stringlist TextColorIntensified= 1 0 Application:Speller%20Targets:P3SpellerTask intlist IconHighlightMode= 1 1 1 0 4 // icon highlight method 0: Show/Hide, 1: Intensify, 2: Grayscale, 3: Invert, 4: Dim (enumeration) Application:Speller%20Targets:P3SpellerTask floatlist IconHighlightFactor= 1 0.5 0.5 0 % // scale factor for highlighted icon pixel values Application:Speller:P3SpellerTask int FirstActiveMenu= 1 1 1 % // Index of first active menu -Storage:Data%20Location:DataIOFilter string DataDirectory= ../data/WheelchairTraining ..\data % % // path to top level data directory (directory) -Application:Speller:P3SpellerTask float StatusBarSize= 25 0 0 100 // size of status bar in percent of screen height -Storage:Session:DataIOFilter string SubjectName= WT-tacCalib Name % % // subject alias +Application:Speller:P3SpellerTask float StatusBarSize= 30 0 0 100 // size of status bar in percent of screen height Application:Speller:P3SpellerTask float StatusBarTextHeight= 12 0 0 100 // size of status bar text in percent of screen height -Storage:Session:DataIOFilter string SubjectSession= 001 001 % % // three-digit session number Application:Speller:P3SpellerTask string TextToSpell= LRFBLRFB // character or string to spell in offline copy mode -Storage:Session:DataIOFilter string SubjectRun= 00 00 % % // two-digit run number Application:Speller:P3SpellerTask string TextResult= % // user spelling result -Storage:Documentation:DataIOFilter string ID_System= % // BCI2000 System Code Application:Speller:P3SpellerTask int TestMode= 1 0 0 1 // select targets by clicking on their associated stimuli (0=no, 1=yes) (boolean) -Storage:Documentation:DataIOFilter string ID_Amp= % // BCI2000 Amp Code Application:Speller:P3SpellerTask string DestinationAddress= % // network address for speller output in IP:port format -Storage:Documentation:DataIOFilter string ID_Montage= % // BCI2000 Cap Montage Code Application:Text%20Window:P3SpellerTask int TextWindowEnabled= 0 0 0 1 // Show Text Window (0=no, 1=yes) (boolean) -Visualize:Timing:DataIOFilter int VisualizeTiming= 0 1 0 1 // visualize system timing (0=no, 1=yes) (boolean) Application:Text%20Window:P3SpellerTask int TextWindowLeft= 600 0 0 % // Text Window X location -Visualize:Source%20Signal:DataIOFilter int VisualizeSource= 1 1 0 1 // visualize raw brain signal (0=no, 1=yes) (boolean) Application:Text%20Window:P3SpellerTask int TextWindowTop= 5 0 0 % // Text Window Y location -Visualize:Source%20Signal:DataIOFilter int VisualizeSourceDecimation= 1 auto % % // decimation factor for raw brain signal Application:Text%20Window:P3SpellerTask int TextWindowWidth= 512 512 0 % // Text Window Width -Visualize:Source%20Signal:DataIOFilter int VisualizeSourceBufferSize= auto auto % % // number of blocks to aggregate before sending to operator Application:Text%20Window:P3SpellerTask int TextWindowHeight= 512 512 0 % // Text Window Height -Visualize:Source%20Signal:DataIOFilter int VisualizeSourceTime= 2s 2s 0 % // how much time in Source visualization Application:Text%20Window:P3SpellerTask string TextWindowFontName= Courier // Text Window Font Name -Visualize:Source%20Signal:DataIOFilter int SourceMin= -100muV // raw signal vis Min Value Application:Text%20Window:P3SpellerTask int TextWindowFontSize= 10 4 1 % // Text Window Font Size -Visualize:Source%20Signal:DataIOFilter int SourceMax= 100muV // raw signal vis Max Value Application:Text%20Window:P3SpellerTask string TextWindowFilePath= % // Path for Saved Text File (directory) -Source:gUSBampADC int SamplingRate= 256 256Hz % % // the signal sampling rate Application:Human%20Interface%20Devices:KeystrokeFilter string KeystrokeStateName= % // State to be translated into keystrokes (0-F), empty for off -Source:gUSBampADC int SampleBlockSize= 8 1 % % // number of samples per block Application:Human%20Interface%20Devices:KeystrokeFilter string KeystrokeExpression= % // Expression that evaluates to a virtual keycode, empty for off -Source:gUSBampADC int SourceCh= 8 auto 0 % // number of digitized channels total Application:Human%20Interface%20Devices:KeystrokeFilter string KeystrokeExpressionOnStartRun= % // Expression that initializes expression variables on StartRun -Source:gUSBampADC list SourceChGain= 8 1 1 1 1 1 1 1 1 Connector:ConnectorOutput string ConnectorOutputAddress= localhost:5001 localhost:20321 % % // one or more IP:Port combinations, e.g. localhost:20321 -Source:gUSBampADC list SourceChOffset= 8 0 0 0 0 0 0 0 0 +Application:GazeMonitor:GazeMonitorFilter int VisualizeGazeMonitorFilter= 0 0 0 1 // Visualize the gaze data on the app visualization (boolean) +Application:GazeMonitor:GazeMonitorFilter int EnforceFixation= 0 0 0 1 // Enforce a fixation point on the screen (boolean) +Application:GazeMonitor:GazeMonitorFilter string FixationX= 0.5 0.5 % % // X coordinate of fixation center - 0.0 to 1.0 (expression) +Application:GazeMonitor:GazeMonitorFilter string FixationY= 0.5 0.5 % % // Y coordinate of fixation center - 0.0 to 1.0 (expression) +Application:GazeMonitor:GazeMonitorFilter int ShowFixationZone= 0 0 0 1 // Show the legal fixation zone with a ring (boolean) +Application:GazeMonitor:GazeMonitorFilter float BlinkTime= 100ms 100ms 0 % // Maximum allowed time for invalid eyes +Application:GazeMonitor:GazeMonitorFilter float SaccadeTime= 100ms 100ms 0 % // Maximum allowed time for violating the fixation +Application:GazeMonitor:GazeMonitorFilter float FixationRadius= 0.1 0.1 0.0 1.0 // Allowable distance from fixation center +Application:GazeMonitor:GazeMonitorFilter string FixationImage= % // Image to render at fixation (inputfile) +Application:GazeMonitor:GazeMonitorFilter string FixationViolationImage= % // Image to render at fixation when violated (inputfile) +Application:GazeMonitor:GazeMonitorFilter string FixationViolationSound= % // Sound to play when fixation violated (inputfile) +Application:GazeMonitor:GazeMonitorFilter float FixationImageSize= 0.04 0.04 0.01 1.0 // Size in percentage of screen height of the fixation image +Application:GazeMonitor:GazeMonitorFilter int LogGazeInformation= 0 0 0 1 // Add Eyetracker information to applog (boolean) Application:Localization:Localization string Language= Default Default % % // Language for user messages -Source:gUSBampADC list ChannelNames= 7 Fz Cz Pz T3 C3 C4 T4 Application:Localization:Localization matrix LocalizedStrings= { German } { TIME%20OUT%20!!! Waiting%20to%20start%20... Sleeping--Select%20SLEEP%20twice%20to%20resume Select%20SLEEP%20once%20more%20to%20resume Paused--Select%20PAUSE%20again%20to%20resume } Zeit%20abgelaufen! Warte%20... Angehalten:%20Zweimal%20SLEEP%20fur%20Weiter Angehalten:%20Noch%20einmal%20SLEEP%20fur%20Weiter Angehalten:%20Noch%20einmal%20PAUSE%20fur%20Weiter // Localized user messages -Source:gUSBamp:Acquisition:gUSBampADC int AcquisitionMode= 0 0 0 2 // data acquisition mode: 0: analog signal acquisition, 1: calibration signal, 2: impedance measurement (enumeration) -System string OperatorAddress= 127.0.0.1:4001 -Source:gUSBamp:Acquisition:gUSBampADC int CommonGround= 1 0 0 1 // internally connect GNDs from all blocks: 0: false, 1: true (enumeration) -Source:gUSBamp:Acquisition:gUSBampADC int CommonReference= 1 0 0 1 // internally connect Refs from all blocks: 0: false, 1: true (enumeration) -System:Core%20Connections string ApplicationIP= 192.168.2.100 // (readonly)(noedit) -System:Core%20Connections string ApplicationPort= 50135 // (readonly)(noedit) -Source:gUSBamp:DigitalIO:gUSBampADC int EnableDigitalInput= 0 0 0 1 // enable digital inputs (boolean) -Source:gUSBamp:DigitalIO:gUSBampADC int EnableDigitalOutput= 0 0 0 2 // enable digital output on block acquisition 0: off, 1: use expressions, 2: timing test (enumeration) -System:Version matrix ApplicationVersion= { Framework Revision Build Config Protocol } 1 3.6%20BETA.5570.5 5570.5,%202016-10-12T19:27:33Z MSVC-17.0.61030.0-AMD64,%20release,%202016-10-16T14:03:14Z,%20user@user-PC USE_DYNAMIC_CRT:OFF%20USE_OPENMP:ON%20USE_PRECOMPILED_HEADERS:ON%20USE_ASSERTS_IN_RELEASE_BUILDS:OFF%20USE_EXTERNAL_QT:OFF%20Qt:5.3.2:C:/BCI2000.x64/build/CMakeFiles/extlib/qt-5.3.2/win32-amd64-msvc2012/bin/qmake.exe 2.3 // Application version information (noedit)(readonly) -Source:gUSBamp:DigitalIO:gUSBampADC matrix DigitalOutputEx= 1 1 % // Matrix of Expressions for digital output -System:Configuration matrix ApplicationFilterChain= 4 { Filter%20Name Position%20String } ConnectorInput 2.9999 P3SpellerTask 3 KeystrokeFilter 3.1 ConnectorOutput 3.9999 // Application filter chain (noedit)(readonly) -Source:gUSBamp:Acquisition:gUSBampADC int DetectDataLoss= 0 0 0 1 // use gUSBamp counter mode to detect data loss (boolean) -System:Configuration matrix Filters= 12 1 /3/ConnectorInput /3/P3SpellerTask /3/KeystrokeFilter /3/ConnectorOutput /1/DataIOFilter /1/gUSBampADC /1/BCI2000FileWriter /1/AlignmentFilter /1/TransmissionFilter /2/SpatialFilter /2/P3TemporalFilter /2/LinearClassifier // Filter Directory (noedit)(readonly) -Source:gUSBamp:Acquisition:gUSBampADC int NumBuffers= 2 5 2 % // IO queue length -Source:Buffering:gUSBampADC int SourceBufferSize= 2s 2s % % // size of data acquisition ring buffer (in blocks or seconds) -Source:gUSBamp:Multiple%20Devices:gUSBampADC list DeviceIDs= 1 auto // list of USBamps to be used (or auto) -Source:gUSBamp:Multiple%20Devices:gUSBampADC string DeviceIDMaster= auto // deviceID for the device whose SYNC goes to the slaves -Source:gUSBamp:Multiple%20Devices:gUSBampADC intlist SourceChList= 0 // list of channels to digitize, in terms of physical inputs numbered across all devices -Source:gUSBamp:Multiple%20Devices:gUSBampADC intlist SourceChDevices= 1 8 // number of digitized channels per device -Source:gUSBamp:DSP:gUSBampADC int FilterEnabled= 1 1 0 1 // Enable pass band filter (0=no, 1=yes) -Source:gUSBamp:DSP:gUSBampADC float FilterHighPass= 0.1 0.1 0 50 // high pass filter for pass band -Source:gUSBamp:DSP:gUSBampADC float FilterLowPass= 60 60 0 4000 // low pass filter for pass band -Source:gUSBamp:DSP:gUSBampADC int FilterModelOrder= 8 8 1 12 // filter model order for pass band -Source:gUSBamp:DSP:gUSBampADC int FilterType= 1 1 1 2 // filter type for pass band (1=BUTTERWORTH, 2=CHEBYSHEV) -Source:gUSBamp:DSP:gUSBampADC int NotchEnabled= 1 1 0 1 // Enable notch (0=no, 1=yes) -Source:gUSBamp:DSP:gUSBampADC float NotchHighPass= 48 58 0 70 // high pass filter for notch filter -Source:gUSBamp:DSP:gUSBampADC float NotchLowPass= 52 62 0 4000 // low pass filter for notch filter -Source:gUSBamp:DSP:gUSBampADC int NotchModelOrder= 4 4 1 10 // filter model order for notch filter -Source:gUSBamp:DSP:gUSBampADC int NotchType= 1 1 1 2 // filter type for pass band (1=CHEBYSHEV, 2=BUTTERWORTH) -Storage:BCI2000FileWriter string FileFormat= dat // format of data file (readonly) -Storage:Documentation:BCI2000FileWriter string StorageTime= % // time of beginning of data storage -Source:Alignment:AlignmentFilter int AlignChannels= 1 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) -Source:Online%20Processing:TransmissionFilter list TransmitChList= 8 1 2 3 4 5 6 7 8 // list of transmitted channels: Channel names may contain * and ? wildcards, and character ranges enclosed in []; wildcard patterns may be negated by prepending an exclamation mark. Ranges of channels may be specified using : or - to separate begin from end. -System:Protocol:EventLink int EventLink= 1 1 0 1 // Send events from Operator to Source module (boolean) -Storage:Data%20Location:RunManager string DataFile= $%7bSubjectName%7d$%7bSubjectSession%7d/$%7bSubjectName%7dS$%7bSubjectSession%7dR$%7bSubjectRun%7d.$%7bFileFormat%7d // name of data file relative to DataDirectory -System:Core%20Connections string SignalSourceIP= 192.168.2.100 // (readonly)(noedit) -System:Core%20Connections string SignalSourcePort= 50141 // (readonly)(noedit) -System:Version matrix SignalSourceVersion= { Framework Revision Build Config Protocol } 1 3.6%20BETA.5570.5 5570.5,%202016-10-12T19:27:33Z MSVC-17.0.61030.0-AMD64,%20release,%202016-10-16T14:03:14Z,%20user@user-PC USE_DYNAMIC_CRT:OFF%20USE_OPENMP:ON%20USE_PRECOMPILED_HEADERS:ON%20USE_ASSERTS_IN_RELEASE_BUILDS:OFF%20USE_EXTERNAL_QT:OFF 2.3 // SignalSource version information (noedit)(readonly) -System:Configuration matrix SignalSourceFilterChain= 8 { Filter%20Name Position%20String } DataIOFilter 0 gUSBampADC 1 NullFileWriter 1 BCI2000FileWriter 1 EDFFileWriter 1 GDFFileWriter 1 AlignmentFilter 1.1 TransmissionFilter 1.2 // SignalSource filter chain (noedit)(readonly) -Visualize:Processing%20Stages int VisualizeAlignmentFilter= 0 0 0 1 // Visualize AlignmentFilter output (boolean) -Visualize:Processing%20Stages int VisualizeTransmissionFilter= 0 0 0 1 // Visualize TransmissionFilter output (boolean) -Filtering:SpatialFilter int SpatialFilterType= 0 2 0 3 // spatial filter type 0: none, 1: full matrix, 2: sparse matrix, 3: common average reference (CAR) (enumeration) -Filtering:SpatialFilter:SpatialFilter matrix SpatialFilter= 4 4 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 % % // columns represent input channels, rows represent output channels -Filtering:SpatialFilter:SpatialFilter intlist SpatialFilterCAROutput= 0 // when using CAR filter type: list of output channels, or empty for all channels -Filtering:SpatialFilter:SpatialFilter int SpatialFilterMissingChannels= 1 0 0 1 // how to handle missing channels 0: ignore, 1: report error (enumeration) -Filtering:P3TemporalFilter int EpochLength= 800ms 500ms 0 % // Length of data epoch from stimulus onset -Filtering:P3TemporalFilter int EpochsToAverage= 10 1 0 % // Number of epochs to average -Filtering:P3TemporalFilter int SingleEpochMode= 0 0 0 1 // Report result after each epoch (boolean) -Visualize:P3TemporalFilter int VisualizeP3TemporalFiltering= 0 0 0 1 // Visualize averaged epochs (0=no 1=yes) (boolean) -Visualize:P3TemporalFilter int TargetERPChannel= 1 1 % % // Input channel for which to display ERP data -Filtering:LinearClassifier matrix Classifier= 2 { input%20channel input%20element%20(bin) output%20channel weight } 1 4 1 1 1 6 2 1 // Linear classification matrix in sparse representation -System:Core%20Connections string SignalProcessingIP= 192.168.2.100 // (readonly)(noedit) -System:Core%20Connections string SignalProcessingPort= 50150 // (readonly)(noedit) -System:Version matrix SignalProcessingVersion= { Framework Revision Build Config Protocol } 1 3.6%20BETA.5570.5 5570.5,%202016-10-12T19:27:33Z MSVC-17.0.61030.0-AMD64,%20release,%202016-10-16T14:03:14Z,%20user@user-PC USE_DYNAMIC_CRT:OFF%20USE_OPENMP:ON%20USE_PRECOMPILED_HEADERS:ON%20USE_ASSERTS_IN_RELEASE_BUILDS:OFF%20USE_EXTERNAL_QT:OFF 2.3 // SignalProcessing version information (noedit)(readonly) -System:Configuration matrix SignalProcessingFilterChain= 3 { Filter%20Name Position%20String } SpatialFilter 2.A P3TemporalFilter 2.B LinearClassifier 2.C // SignalProcessing filter chain (noedit)(readonly) -Visualize:Processing%20Stages int VisualizeSpatialFilter= 0 0 0 1 // Visualize SpatialFilter output (boolean) -Visualize:Processing%20Stages int VisualizeLinearClassifier= 0 0 0 1 // Visualize LinearClassifier output (boolean) -System:Randomization int RandomSeed= 13310 0 % % // seed for the BCI2000 pseudo random number generator (readonly) -System:Randomization int RandomizationWarning= 1 1 0 1 // warn if subsequent Runs have identical RandomSeed value (boolean) -System:State%20Vector int StateVectorLength= 37 16 % % // length of the state vector in bytes (noedit)(readonly) +System:Core%20Connections string ApplicationPort= 49244 4200 1024 65535 // the Application module's listening port(readonly) +System:Core%20Connections string ApplicationIP= 127.0.0.1 127.0.0.1 % % // the Application module's listening IP(readonly) +System:Configuration matrix ApplicationVersion= { Framework Revision Build } 1 3.0.5 % Jun%20%203%202013%2011:41:59 // Application version information(readonly) +System:Configuration matrix ApplicationFilterChain= 5 { Filter%20Name Position%20String } ConnectorInput 2.9999 P3SpellerTask 3 KeystrokeFilter 3.1 ConnectorOutput 3.9999 GazeMonitorFilter 3.A // Application filter chain(readonly) +System:Randomization int RandomSeed= 31788 0 % % // seed for the BCI2000 pseudo random number generator(readonly) +System:Randomization int RandomizationWarning= 1 1 0 1 // warn if subsequent Runs have identical RandomSeed value (boolean)(readonly) +System:State%20Vector int StateVectorLength= 15 16 % % // length of the state vector in bytes(readonly) diff --git a/TactileCopyNested.prm b/TactileCopyNested.prm new file mode 100644 index 0000000..7dcf4fe --- /dev/null +++ b/TactileCopyNested.prm @@ -0,0 +1,147 @@ +Visualize:Property%20Sets matrix VisPropertySets= 0 1 // row titles are properties in the form "SRCD.Left", columns are property sets +System:Version matrix OperatorVersion= { Framework Revision Build Config Protocol } 1 3.6%20BETA.5570.5 5570.5,%202016-10-12T19:27:33Z MSVC-17.0.61030.0-AMD64,%20release,%202016-10-16T14:03:14Z,%20user@user-PC USE_DYNAMIC_CRT:OFF%20USE_OPENMP:ON%20USE_PRECOMPILED_HEADERS:ON%20USE_ASSERTS_IN_RELEASE_BUILDS:OFF%20USE_EXTERNAL_QT:OFF 2.3 // operator module version information (noedit)(readonly) +System:Protocol int AutoConfig= 1 1 0 1 // Use AutoConfig protocol extension (boolean) +System:Protocol int OperatorBackLink= 1 1 0 1 // Send final state and signal information to Operator (boolean) +System:Core%20Connections string OperatorIP= 127.0.0.1 127.0.0.1 % % // the Operator module's IP (noedit)(readonly) +Connector:ConnectorInput list ConnectorInputFilter= 0 // list of state names or signal elements to allow, "*" for any, signal elements as in "Signal(1,0)" +Connector:ConnectorInput string ConnectorInputAddress= % localhost:20320 % % // IP address/port to read from, e.g. localhost:20320 +Application:Application%20Window:ApplicationWindow int WindowWidth= 640 640 0 % // width of Application window +Application:Application%20Window:ApplicationWindow int WindowHeight= 480 480 0 % // height of Application window +Application:Application%20Window:ApplicationWindow int WindowLeft= 0 0 % % // screen coordinate of Application window's left edge +Application:Application%20Window:ApplicationWindow int WindowTop= 600 0 % % // screen coordinate of Application window's top edge +Application:Application%20Window:ApplicationWindow string WindowBackgroundColor= 0x000000 0x505050 % % // Application window background color (color) +Visualize:Application%20Window:ApplicationWindow int VisualizeApplicationWindow= 0 0 0 1 // Display miniature copy of Application window (boolean) +Visualize:Application%20Window:ApplicationWindow int AppWindowSpatialDecimation= 8 8 1 % // Application window decimation (shrinking) factor +Visualize:Application%20Window:ApplicationWindow int AppWindowTemporalDecimation= 4 16 1 % // Application window time decimation factor +Application:AudioPlayback:ApplicationWindow float AudioPlaybackRate= auto // audio playback sampling rate +Application:AudioPlayback:ApplicationWindow int AudioPlaybackChannels= auto // number of playback output channels +Application:AudioPlayback:ApplicationWindow float AudioPlaybackBufferDuration= auto // duration of playback buffer +Visualize:Application%20Log:ApplicationBase int ShowAppLog= 1 0 0 1 // Show application log window (boolean) +Application:Sequencing:StimulusTask float PreRunDuration= 2s 1 0 % // pause preceding first sequence +Application:Sequencing:StimulusTask float PostRunDuration= 2s 0 0 % // pause following last sequence +Application:Sequencing:StimulusTask float PreSequenceDuration= 1/2s 2s 0 % // pause preceding sequences/sets of intensifications +Application:Sequencing:StimulusTask float PostSequenceDuration= 3s 2s 0 % // pause following sequences/sets of intensifications +Application:Sequencing:StimulusTask float StimulusDuration= 220ms 40ms 0 % // stimulus duration +Application:Sequencing:StimulusTask string EarlyOffsetExpression= % // abort stimulus if this expression becomes true +Application:Sequencing:StimulusTask float ISIMinDuration= 400ms 80ms 0 % // minimum duration of inter-stimulus interval +Application:Sequencing:StimulusTask float ISIMaxDuration= 400ms 80ms 0 % // maximum duration of inter-stimulus interval +Application:Result%20Processing:StimulusTask int InterpretMode= 2 0 0 2 // interpretation of results: 0 none, 1 online free mode, 2 copy mode (enumeration) +Application:Result%20Processing:StimulusTask int DisplayResults= 1 1 0 1 // display results of copy/free spelling (boolean) +Application:Result%20Processing:StimulusTask int AccumulateEvidence= 0 0 0 1 // accumulate evidence until a selection is made (boolean) +Application:Result%20Processing:StimulusTask float MinimumEvidence= 0 0 0 % // do not make a selection unless target evidence exceeds this value. For a normalized classifier, MinimumEvidence approximates -2.3*log10(Error Probability) +Application:Sequencing:P3SpellerTask int NumberOfSequences= 8 15 1 % // number of sequences in a set of intensifications +Application:Speller%20Targets:P3SpellerTask matrix TargetDefinitions= 6 { Display } { matrix 4 { Display Enter Display%20Size Icon%20File Sound%20File } L:%20Ja Ja 1 % 'Ja' R:%20Nein Nein 1 % 'Nein' F:%20PFLEGE 1 % % B:%20OPTIONEN 1 % % } { matrix 4 { Display Enter Display%20Size Icon%20File Sound%20File } L:%20HILFE 1 % % R:%20K%d6RPER 1 % % F:%20GER%c4TE 1 % % B:%20ZUR%dcCK 1 % % } { matrix 4 { Display Enter Display%20Size Icon%20File Sound%20File } L:%20TASTATUR WIP:Key 1 % % R:%20PAUSE 1 % % F:%20SLEEP 1 % % B:%20ZUR%dcCK 1 % % } { matrix 4 { Display Enter Display%20Size Icon%20File Sound%20File } L:%20Schmerz Schmerz 1 % 'Schmerz' R:%20Atemnot Atemnot 1 % 'Atemnot' F:%20Anderes%20Problem Anderes 1 % 'Anderes%20Problem' B:%20ZUR%dcCK 1 % % } { matrix 4 { Display Enter Display%20Size Icon%20File Sound%20File } L:%20Hunger Hunger 1 % 'Hunger' R:%20Lage Lage 1 % 'Lage' F:%20M%fcdigkeit M%fcdigkeit 1 % 'M%fcdigkeit' B:%20ZUR%dcCK 1 % % } { matrix 4 { Display Enter Display%20Size Icon%20File Sound%20File } L:%20Rollstuhl Rollstuhl 1 % 'Rollstuhl' R:%20Atemger%e4t Atemger%e4t 1 % 'Atemger%e4t' F:%20M%fcdigkeit M%fcdigkeit 1 % 'M%fcdigkeit' B:%20ZUR%dcCK 1 % % } // speller target properties +Application:Speller%20Targets:P3SpellerTask intlist NumMatrixColumns= 6 1 1 1 1 1 1 6 1 % // display matrices' column number(s) +Application:Speller%20Targets:P3SpellerTask intlist NumMatrixRows= 6 4 4 4 4 4 4 6 0 % // display matrices' row number(s) +Application:Audio%20Stimuli:P3SpellerTask int AudioStimuliOn= 0 0 0 1 // Audio Stimuli Mode (0=no, 1=yes) (boolean) +Application:Audio%20Stimuli:P3SpellerTask matrix AudioStimuliRowsFiles= 6 { filename } sounds/1.wav sounds/2.wav sounds/3.wav sounds/4.wav sounds/5.wav sounds/6.wav // audio stimuli rows files +Application:Audio%20Stimuli:P3SpellerTask matrix AudioStimuliColsFiles= 6 { filename } sounds/a.wav sounds/b.wav sounds/c.wav sounds/d.wav sounds/e.wav sounds/f.wav // audio stimuli column files +Application:Speller%20Targets:P3SpellerTask floatlist TargetWidth= 1 16 0 0 100 // target width in percent of screen width +Application:Speller%20Targets:P3SpellerTask floatlist TargetHeight= 1 14 0 0 100 // target height in percent of screen height +Application:Speller%20Targets:P3SpellerTask floatlist TargetTextHeight= 1 12 0 0 100 // height of target labels in percent of screen height +Application:Speller%20Targets:P3SpellerTask stringlist BackgroundColor= 1 0x00000000 0x505050 % % // target background color (color) +Application:Speller%20Targets:P3SpellerTask stringlist TextColor= 1 0x00555555 0x505050 % % // text color (color) +Application:Speller%20Targets:P3SpellerTask stringlist TextColorIntensified= 1 0x00FFFFFF 0x505050 % % // intensified text color (color) +Application:Speller%20Targets:P3SpellerTask intlist IconHighlightMode= 1 1 1 0 4 // icon highlight method 0: Show/Hide, 1: Intensify, 2: Grayscale, 3: Invert, 4: Dim (enumeration) +Application:Speller%20Targets:P3SpellerTask floatlist IconHighlightFactor= 1 0.5 0.5 0 % // scale factor for highlighted icon pixel values +Application:Speller:P3SpellerTask int FirstActiveMenu= 1 1 1 % // Index of first active menu +Application:Speller:P3SpellerTask float StatusBarSize= 30 0 0 100 // size of status bar in percent of screen height +Application:Speller:P3SpellerTask float StatusBarTextHeight= 12 0 0 100 // size of status bar text in percent of screen height +Application:Speller:P3SpellerTask string TextToSpell= LRFBLRFB // character or string to spell in offline copy mode +Application:Speller:P3SpellerTask string TextResult= % // user spelling result +Application:Speller:P3SpellerTask int TestMode= 1 0 0 1 // select targets by clicking on their associated stimuli (0=no, 1=yes) (boolean) +Application:Speller:P3SpellerTask string DestinationAddress= % // network address for speller output in IP:port format +Application:Text%20Window:P3SpellerTask int TextWindowEnabled= 0 0 0 1 // Show Text Window (0=no, 1=yes) (boolean) +Application:Text%20Window:P3SpellerTask int TextWindowLeft= 600 0 0 % // Text Window X location +Application:Text%20Window:P3SpellerTask int TextWindowTop= 5 0 0 % // Text Window Y location +Application:Text%20Window:P3SpellerTask int TextWindowWidth= 512 512 0 % // Text Window Width +Application:Text%20Window:P3SpellerTask int TextWindowHeight= 512 512 0 % // Text Window Height +Application:Text%20Window:P3SpellerTask string TextWindowFontName= Courier // Text Window Font Name +Application:Text%20Window:P3SpellerTask int TextWindowFontSize= 10 4 1 % // Text Window Font Size +Application:Text%20Window:P3SpellerTask string TextWindowFilePath= % // Path for Saved Text File (directory) +Application:Human%20Interface%20Devices:KeystrokeFilter string KeystrokeStateName= % // State to be translated into keystrokes (0-F), empty for off +Application:Human%20Interface%20Devices:KeystrokeFilter string KeystrokeExpression= % // Expression that evaluates to a virtual keycode, empty for off +Application:Human%20Interface%20Devices:KeystrokeFilter string KeystrokeExpressionOnStartRun= % // Expression that initializes expression variables on StartRun +Connector:ConnectorOutput string ConnectorOutputAddress= localhost:5001 localhost:20321 % % // one or more IP:Port combinations, e.g. localhost:20321 +Application:Localization:Localization string Language= Default Default % % // Language for user messages +Application:Localization:Localization matrix LocalizedStrings= { German } { TIME%20OUT%20!!! Waiting%20to%20start%20... Sleeping--Select%20SLEEP%20twice%20to%20resume Select%20SLEEP%20once%20more%20to%20resume Paused--Select%20PAUSE%20again%20to%20resume } Zeit%20abgelaufen! Warte%20... Angehalten:%20Zweimal%20SLEEP%20fur%20Weiter Angehalten:%20Noch%20einmal%20SLEEP%20fur%20Weiter Angehalten:%20Noch%20einmal%20PAUSE%20fur%20Weiter // Localized user messages +System string OperatorAddress= 127.0.0.1:4001 +System:Core%20Connections string ApplicationIP= 141.75.33.117 // (readonly)(noedit) +System:Core%20Connections string ApplicationPort= 58922 // (readonly)(noedit) +System:Version matrix ApplicationVersion= { Framework Revision Build Config Protocol } 1 3.6%20BETA.5570.5 5570.5,%202016-10-12T19:27:33Z MSVC-17.0.61030.0-AMD64,%20release,%202016-10-16T14:03:14Z,%20user@user-PC USE_DYNAMIC_CRT:OFF%20USE_OPENMP:ON%20USE_PRECOMPILED_HEADERS:ON%20USE_ASSERTS_IN_RELEASE_BUILDS:OFF%20USE_EXTERNAL_QT:OFF%20Qt:5.3.2:C:/BCI2000.x64/build/CMakeFiles/extlib/qt-5.3.2/win32-amd64-msvc2012/bin/qmake.exe 2.3 // Application version information (noedit)(readonly) +System:Configuration matrix ApplicationFilterChain= 4 { Filter%20Name Position%20String } ConnectorInput 2.9999 P3SpellerTask 3 KeystrokeFilter 3.1 ConnectorOutput 3.9999 // Application filter chain (noedit)(readonly) +System:Configuration matrix Filters= 12 1 /3/ConnectorInput /3/P3SpellerTask /3/KeystrokeFilter /3/ConnectorOutput /1/DataIOFilter /1/gUSBampADC /1/BCI2000FileWriter /1/AlignmentFilter /1/TransmissionFilter /2/SpatialFilter /2/P3TemporalFilter /2/LinearClassifier // Filter Directory (noedit)(readonly) +Storage:Data%20Location:DataIOFilter string DataDirectory= ../data/WheelchairTraining ..\data % % // path to top level data directory (directory) +Storage:Session:DataIOFilter string SubjectName= WT-tacCopyNested Name % % // subject alias +Storage:Session:DataIOFilter string SubjectSession= 001 001 % % // three-digit session number +Storage:Session:DataIOFilter string SubjectRun= 00 00 % % // two-digit run number +Storage:Documentation:DataIOFilter string ID_System= % // BCI2000 System Code +Storage:Documentation:DataIOFilter string ID_Amp= % // BCI2000 Amp Code +Storage:Documentation:DataIOFilter string ID_Montage= % // BCI2000 Cap Montage Code +Visualize:Timing:DataIOFilter int VisualizeTiming= 0 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= 1 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= 2s 2s 0 % // how much time in Source visualization +Visualize:Source%20Signal:DataIOFilter int SourceMin= -100muV // raw signal vis Min Value +Visualize:Source%20Signal:DataIOFilter int SourceMax= 100muV // raw signal vis Max Value +Source:gUSBampADC int SamplingRate= 512 256Hz % % // the signal sampling rate +Source:gUSBampADC int SampleBlockSize= 8 1 % % // number of samples per block +Source:gUSBampADC int SourceCh= 12 auto 0 % // number of digitized channels total +Source:gUSBampADC list SourceChGain= 12 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 +Source:gUSBampADC list SourceChOffset= 12 0 0 0 0 0 0 0 0 0 0 0 0 +Source:gUSBampADC list ChannelNames= 12 Fz Fc1 Fc2 C3 Cz C4 P3 Pz P4 O1 Oz O2 +Source:gUSBamp:Acquisition:gUSBampADC int AcquisitionMode= 0 0 0 2 // data acquisition mode: 0: analog signal acquisition, 1: calibration signal, 2: impedance measurement (enumeration) +Source:gUSBamp:Acquisition:gUSBampADC int CommonGround= 1 0 0 1 // internally connect GNDs from all blocks: 0: false, 1: true (enumeration) +Source:gUSBamp:Acquisition:gUSBampADC int CommonReference= 1 0 0 1 // internally connect Refs from all blocks: 0: false, 1: true (enumeration) +Source:gUSBamp:DigitalIO:gUSBampADC int EnableDigitalInput= 0 0 0 1 // enable digital inputs (boolean) +Source:gUSBamp:DigitalIO:gUSBampADC int EnableDigitalOutput= 0 0 0 2 // enable digital output on block acquisition 0: off, 1: use expressions, 2: timing test (enumeration) +Source:gUSBamp:DigitalIO:gUSBampADC matrix DigitalOutputEx= 1 { Filter%20Name } % // Matrix of Expressions for digital output +Source:gUSBamp:Acquisition:gUSBampADC int DetectDataLoss= 0 0 0 1 // use gUSBamp counter mode to detect data loss (boolean) +Source:gUSBamp:Acquisition:gUSBampADC int NumBuffers= 2 5 2 % // IO queue length +Source:Buffering:gUSBampADC int SourceBufferSize= 2s 2s % % // size of data acquisition ring buffer (in blocks or seconds) +Source:gUSBamp:Multiple%20Devices:gUSBampADC list DeviceIDs= 1 auto // list of USBamps to be used (or auto) +Source:gUSBamp:Multiple%20Devices:gUSBampADC string DeviceIDMaster= auto // deviceID for the device whose SYNC goes to the slaves +Source:gUSBamp:Multiple%20Devices:gUSBampADC intlist SourceChList= 0 // list of channels to digitize, in terms of physical inputs numbered across all devices +Source:gUSBamp:Multiple%20Devices:gUSBampADC intlist SourceChDevices= 1 12 // number of digitized channels per device +Source:gUSBamp:DSP:gUSBampADC int FilterEnabled= 1 1 0 1 // Enable pass band filter (0=no, 1=yes) +Source:gUSBamp:DSP:gUSBampADC float FilterHighPass= 0.1 0.1 0 50 // high pass filter for pass band +Source:gUSBamp:DSP:gUSBampADC float FilterLowPass= 60 60 0 4000 // low pass filter for pass band +Source:gUSBamp:DSP:gUSBampADC int FilterModelOrder= 8 8 1 12 // filter model order for pass band +Source:gUSBamp:DSP:gUSBampADC int FilterType= 1 1 1 2 // filter type for pass band (1=BUTTERWORTH, 2=CHEBYSHEV) +Source:gUSBamp:DSP:gUSBampADC int NotchEnabled= 1 1 0 1 // Enable notch (0=no, 1=yes) +Source:gUSBamp:DSP:gUSBampADC float NotchHighPass= 48 58 0 70 // high pass filter for notch filter +Source:gUSBamp:DSP:gUSBampADC float NotchLowPass= 52 62 0 4000 // low pass filter for notch filter +Source:gUSBamp:DSP:gUSBampADC int NotchModelOrder= 4 4 1 10 // filter model order for notch filter +Source:gUSBamp:DSP:gUSBampADC int NotchType= 1 1 1 2 // filter type for pass band (1=CHEBYSHEV, 2=BUTTERWORTH) +Storage:BCI2000FileWriter string FileFormat= dat // format of data file (readonly) +Storage:Documentation:BCI2000FileWriter string StorageTime= % // time of beginning of data storage +Source:Alignment:AlignmentFilter int AlignChannels= 1 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) +Source:Online%20Processing:TransmissionFilter list TransmitChList= 6 1 2 3 5 7 9 // list of transmitted channels: Channel names may contain * and ? wildcards, and character ranges enclosed in []; wildcard patterns may be negated by prepending an exclamation mark. Ranges of channels may be specified using : or - to separate begin from end. +System:Protocol:EventLink int EventLink= 1 1 0 1 // Send events from Operator to Source module (boolean) +Storage:Data%20Location:RunManager string DataFile= $%7bSubjectName%7d$%7bSubjectSession%7d/$%7bSubjectName%7dS$%7bSubjectSession%7dR$%7bSubjectRun%7d.$%7bFileFormat%7d // name of data file relative to DataDirectory +System:Core%20Connections string SignalSourceIP= 141.75.33.117 // (readonly)(noedit) +System:Core%20Connections string SignalSourcePort= 58928 // (readonly)(noedit) +System:Version matrix SignalSourceVersion= { Framework Revision Build Config Protocol } 1 3.6%20BETA.5570.5 5570.5,%202016-10-12T19:27:33Z MSVC-17.0.61030.0-AMD64,%20release,%202016-10-16T14:03:14Z,%20user@user-PC USE_DYNAMIC_CRT:OFF%20USE_OPENMP:ON%20USE_PRECOMPILED_HEADERS:ON%20USE_ASSERTS_IN_RELEASE_BUILDS:OFF%20USE_EXTERNAL_QT:OFF 2.3 // SignalSource version information (noedit)(readonly) +System:Configuration matrix SignalSourceFilterChain= 8 { Filter%20Name Position%20String } DataIOFilter 0 gUSBampADC 1 NullFileWriter 1 BCI2000FileWriter 1 EDFFileWriter 1 GDFFileWriter 1 AlignmentFilter 1.1 TransmissionFilter 1.2 // SignalSource filter chain (noedit)(readonly) +Visualize:Processing%20Stages int VisualizeAlignmentFilter= 0 0 0 1 // Visualize AlignmentFilter output (boolean) +Visualize:Processing%20Stages int VisualizeTransmissionFilter= 0 0 0 1 // Visualize TransmissionFilter output (boolean) +Filtering:SpatialFilter int SpatialFilterType= 0 2 0 3 // spatial filter type 0: none, 1: full matrix, 2: sparse matrix, 3: common average reference (CAR) (enumeration) +Filtering:SpatialFilter:SpatialFilter matrix SpatialFilter= 4 4 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 % % // columns represent input channels, rows represent output channels +Filtering:SpatialFilter:SpatialFilter intlist SpatialFilterCAROutput= 0 // when using CAR filter type: list of output channels, or empty for all channels +Filtering:SpatialFilter:SpatialFilter int SpatialFilterMissingChannels= 1 0 0 1 // how to handle missing channels 0: ignore, 1: report error (enumeration) +Filtering:P3TemporalFilter int EpochLength= 800ms 500ms 0 % // Length of data epoch from stimulus onset +Filtering:P3TemporalFilter int EpochsToAverage= 8 1 0 % // Number of epochs to average +Filtering:P3TemporalFilter int SingleEpochMode= 0 0 0 1 // Report result after each epoch (boolean) +Visualize:P3TemporalFilter int VisualizeP3TemporalFiltering= 0 0 0 1 // Visualize averaged epochs (0=no 1=yes) (boolean) +Visualize:P3TemporalFilter int TargetERPChannel= 1 1 % % // Input channel for which to display ERP data +Filtering:LinearClassifier matrix Classifier= 494 { input%20channel input%20element%20(bin) output%20channel weight } 1 53 1 2.68025 1 54 1 2.68025 1 55 1 2.68025 1 56 1 2.68025 1 57 1 2.68025 1 58 1 2.68025 1 59 1 2.68025 1 60 1 2.68025 1 61 1 2.68025 1 62 1 2.68025 1 63 1 2.68025 1 64 1 2.68025 1 65 1 2.68025 1 66 1 2.68025 1 67 1 2.68025 1 68 1 2.68025 1 69 1 2.68025 1 70 1 2.68025 1 71 1 2.68025 1 72 1 2.68025 1 73 1 2.68025 1 74 1 2.68025 1 75 1 2.68025 1 76 1 2.68025 1 77 1 2.68025 1 78 1 2.68025 1 209 1 -3.27388 1 210 1 -3.27388 1 211 1 -3.27388 1 212 1 -3.27388 1 213 1 -3.27388 1 214 1 -3.27388 1 215 1 -3.27388 1 216 1 -3.27388 1 217 1 -3.27388 1 218 1 -3.27388 1 219 1 -3.27388 1 220 1 -3.27388 1 221 1 -3.27388 1 222 1 -3.27388 1 223 1 -3.27388 1 224 1 -3.27388 1 225 1 -3.27388 1 226 1 -3.27388 1 227 1 -3.27388 1 228 1 -3.27388 1 229 1 -3.27388 1 230 1 -3.27388 1 231 1 -3.27388 1 232 1 -3.27388 1 233 1 -3.27388 1 234 1 -3.27388 2 1 1 -3.60389 2 2 1 -3.60389 2 3 1 -3.60389 2 4 1 -3.60389 2 5 1 -3.60389 2 6 1 -3.60389 2 7 1 -3.60389 2 8 1 -3.60389 2 9 1 -3.60389 2 10 1 -3.60389 2 11 1 -3.60389 2 12 1 -3.60389 2 13 1 -3.60389 2 14 1 -3.60389 2 15 1 -3.60389 2 16 1 -3.60389 2 17 1 -3.60389 2 18 1 -3.60389 2 19 1 -3.60389 2 20 1 -3.60389 2 21 1 -3.60389 2 22 1 -3.60389 2 23 1 -3.60389 2 24 1 -3.60389 2 25 1 -3.60389 2 26 1 -3.60389 2 131 1 2.74505 2 132 1 2.74505 2 133 1 2.74505 2 134 1 2.74505 2 135 1 2.74505 2 136 1 2.74505 2 137 1 2.74505 2 138 1 2.74505 2 139 1 2.74505 2 140 1 2.74505 2 141 1 2.74505 2 142 1 2.74505 2 143 1 2.74505 2 144 1 2.74505 2 145 1 2.74505 2 146 1 2.74505 2 147 1 2.74505 2 148 1 2.74505 2 149 1 2.74505 2 150 1 2.74505 2 151 1 2.74505 2 152 1 2.74505 2 153 1 2.74505 2 154 1 2.74505 2 155 1 2.74505 2 156 1 2.74505 2 313 1 2.38607 2 314 1 2.38607 2 315 1 2.38607 2 316 1 2.38607 2 317 1 2.38607 2 318 1 2.38607 2 319 1 2.38607 2 320 1 2.38607 2 321 1 2.38607 2 322 1 2.38607 2 323 1 2.38607 2 324 1 2.38607 2 325 1 2.38607 2 326 1 2.38607 2 327 1 2.38607 2 328 1 2.38607 2 329 1 2.38607 2 330 1 2.38607 2 331 1 2.38607 2 332 1 2.38607 2 333 1 2.38607 2 334 1 2.38607 2 335 1 2.38607 2 336 1 2.38607 2 337 1 2.38607 2 338 1 2.38607 3 53 1 5.61406 3 54 1 5.61406 3 55 1 5.61406 3 56 1 5.61406 3 57 1 5.61406 3 58 1 5.61406 3 59 1 5.61406 3 60 1 5.61406 3 61 1 5.61406 3 62 1 5.61406 3 63 1 5.61406 3 64 1 5.61406 3 65 1 5.61406 3 66 1 5.61406 3 67 1 5.61406 3 68 1 5.61406 3 69 1 5.61406 3 70 1 5.61406 3 71 1 5.61406 3 72 1 5.61406 3 73 1 5.61406 3 74 1 5.61406 3 75 1 5.61406 3 76 1 5.61406 3 77 1 5.61406 3 78 1 5.61406 3 79 1 -4.49599 3 80 1 -4.49599 3 81 1 -4.49599 3 82 1 -4.49599 3 83 1 -4.49599 3 84 1 -4.49599 3 85 1 -4.49599 3 86 1 -4.49599 3 87 1 -4.49599 3 88 1 -4.49599 3 89 1 -4.49599 3 90 1 -4.49599 3 91 1 -4.49599 3 92 1 -4.49599 3 93 1 -4.49599 3 94 1 -4.49599 3 95 1 -4.49599 3 96 1 -4.49599 3 97 1 -4.49599 3 98 1 -4.49599 3 99 1 -4.49599 3 100 1 -4.49599 3 101 1 -4.49599 3 102 1 -4.49599 3 103 1 -4.49599 3 104 1 -4.49599 3 365 1 -1.32178 3 366 1 -1.32178 3 367 1 -1.32178 3 368 1 -1.32178 3 369 1 -1.32178 3 370 1 -1.32178 3 371 1 -1.32178 3 372 1 -1.32178 3 373 1 -1.32178 3 374 1 -1.32178 3 375 1 -1.32178 3 376 1 -1.32178 3 377 1 -1.32178 3 378 1 -1.32178 3 379 1 -1.32178 3 380 1 -1.32178 3 381 1 -1.32178 3 382 1 -1.32178 3 383 1 -1.32178 3 384 1 -1.32178 3 385 1 -1.32178 3 386 1 -1.32178 3 387 1 -1.32178 3 388 1 -1.32178 3 389 1 -1.32178 3 390 1 -1.32178 4 53 1 -10 4 54 1 -10 4 55 1 -10 4 56 1 -10 4 57 1 -10 4 58 1 -10 4 59 1 -10 4 60 1 -10 4 61 1 -10 4 62 1 -10 4 63 1 -10 4 64 1 -10 4 65 1 -10 4 66 1 -10 4 67 1 -10 4 68 1 -10 4 69 1 -10 4 70 1 -10 4 71 1 -10 4 72 1 -10 4 73 1 -10 4 74 1 -10 4 75 1 -10 4 76 1 -10 4 77 1 -10 4 78 1 -10 4 209 1 8.09571 4 210 1 8.09571 4 211 1 8.09571 4 212 1 8.09571 4 213 1 8.09571 4 214 1 8.09571 4 215 1 8.09571 4 216 1 8.09571 4 217 1 8.09571 4 218 1 8.09571 4 219 1 8.09571 4 220 1 8.09571 4 221 1 8.09571 4 222 1 8.09571 4 223 1 8.09571 4 224 1 8.09571 4 225 1 8.09571 4 226 1 8.09571 4 227 1 8.09571 4 228 1 8.09571 4 229 1 8.09571 4 230 1 8.09571 4 231 1 8.09571 4 232 1 8.09571 4 233 1 8.09571 4 234 1 8.09571 4 287 1 2.91278 4 288 1 2.91278 4 289 1 2.91278 4 290 1 2.91278 4 291 1 2.91278 4 292 1 2.91278 4 293 1 2.91278 4 294 1 2.91278 4 295 1 2.91278 4 296 1 2.91278 4 297 1 2.91278 4 298 1 2.91278 4 299 1 2.91278 4 300 1 2.91278 4 301 1 2.91278 4 302 1 2.91278 4 303 1 2.91278 4 304 1 2.91278 4 305 1 2.91278 4 306 1 2.91278 4 307 1 2.91278 4 308 1 2.91278 4 309 1 2.91278 4 310 1 2.91278 4 311 1 2.91278 4 312 1 2.91278 5 79 1 4.49899 5 80 1 4.49899 5 81 1 4.49899 5 82 1 4.49899 5 83 1 4.49899 5 84 1 4.49899 5 85 1 4.49899 5 86 1 4.49899 5 87 1 4.49899 5 88 1 4.49899 5 89 1 4.49899 5 90 1 4.49899 5 91 1 4.49899 5 92 1 4.49899 5 93 1 4.49899 5 94 1 4.49899 5 95 1 4.49899 5 96 1 4.49899 5 97 1 4.49899 5 98 1 4.49899 5 99 1 4.49899 5 100 1 4.49899 5 101 1 4.49899 5 102 1 4.49899 5 103 1 4.49899 5 104 1 4.49899 5 105 1 3.21251 5 106 1 3.21251 5 107 1 3.21251 5 108 1 3.21251 5 109 1 3.21251 5 110 1 3.21251 5 111 1 3.21251 5 112 1 3.21251 5 113 1 3.21251 5 114 1 3.21251 5 115 1 3.21251 5 116 1 3.21251 5 117 1 3.21251 5 118 1 3.21251 5 119 1 3.21251 5 120 1 3.21251 5 121 1 3.21251 5 122 1 3.21251 5 123 1 3.21251 5 124 1 3.21251 5 125 1 3.21251 5 126 1 3.21251 5 127 1 3.21251 5 128 1 3.21251 5 129 1 3.21251 5 130 1 3.21251 5 131 1 -2.99001 5 132 1 -2.99001 5 133 1 -2.99001 5 134 1 -2.99001 5 135 1 -2.99001 5 136 1 -2.99001 5 137 1 -2.99001 5 138 1 -2.99001 5 139 1 -2.99001 5 140 1 -2.99001 5 141 1 -2.99001 5 142 1 -2.99001 5 143 1 -2.99001 5 144 1 -2.99001 5 145 1 -2.99001 5 146 1 -2.99001 5 147 1 -2.99001 5 148 1 -2.99001 5 149 1 -2.99001 5 150 1 -2.99001 5 151 1 -2.99001 5 152 1 -2.99001 5 153 1 -2.99001 5 154 1 -2.99001 5 155 1 -2.99001 5 156 1 -2.99001 5 157 1 -2.91784 5 158 1 -2.91784 5 159 1 -2.91784 5 160 1 -2.91784 5 161 1 -2.91784 5 162 1 -2.91784 5 163 1 -2.91784 5 164 1 -2.91784 5 165 1 -2.91784 5 166 1 -2.91784 5 167 1 -2.91784 5 168 1 -2.91784 5 169 1 -2.91784 5 170 1 -2.91784 5 171 1 -2.91784 5 172 1 -2.91784 5 173 1 -2.91784 5 174 1 -2.91784 5 175 1 -2.91784 5 176 1 -2.91784 5 177 1 -2.91784 5 178 1 -2.91784 5 179 1 -2.91784 5 180 1 -2.91784 5 181 1 -2.91784 5 182 1 -2.91784 5 209 1 -2.70948 5 210 1 -2.70948 5 211 1 -2.70948 5 212 1 -2.70948 5 213 1 -2.70948 5 214 1 -2.70948 5 215 1 -2.70948 5 216 1 -2.70948 5 217 1 -2.70948 5 218 1 -2.70948 5 219 1 -2.70948 5 220 1 -2.70948 5 221 1 -2.70948 5 222 1 -2.70948 5 223 1 -2.70948 5 224 1 -2.70948 5 225 1 -2.70948 5 226 1 -2.70948 5 227 1 -2.70948 5 228 1 -2.70948 5 229 1 -2.70948 5 230 1 -2.70948 5 231 1 -2.70948 5 232 1 -2.70948 5 233 1 -2.70948 5 234 1 -2.70948 5 313 1 -1.9662 5 314 1 -1.9662 5 315 1 -1.9662 5 316 1 -1.9662 5 317 1 -1.9662 5 318 1 -1.9662 5 319 1 -1.9662 5 320 1 -1.9662 5 321 1 -1.9662 5 322 1 -1.9662 5 323 1 -1.9662 5 324 1 -1.9662 5 325 1 -1.9662 5 326 1 -1.9662 5 327 1 -1.9662 5 328 1 -1.9662 5 329 1 -1.9662 5 330 1 -1.9662 5 331 1 -1.9662 5 332 1 -1.9662 5 333 1 -1.9662 5 334 1 -1.9662 5 335 1 -1.9662 5 336 1 -1.9662 5 337 1 -1.9662 5 338 1 -1.9662 6 1 1 3.75545 6 2 1 3.75545 6 3 1 3.75545 6 4 1 3.75545 6 5 1 3.75545 6 6 1 3.75545 6 7 1 3.75545 6 8 1 3.75545 6 9 1 3.75545 6 10 1 3.75545 6 11 1 3.75545 6 12 1 3.75545 6 13 1 3.75545 6 14 1 3.75545 6 15 1 3.75545 6 16 1 3.75545 6 17 1 3.75545 6 18 1 3.75545 6 19 1 3.75545 6 20 1 3.75545 6 21 1 3.75545 6 22 1 3.75545 6 23 1 3.75545 6 24 1 3.75545 6 25 1 3.75545 6 26 1 3.75545 6 79 1 -2.21203 6 80 1 -2.21203 6 81 1 -2.21203 6 82 1 -2.21203 6 83 1 -2.21203 6 84 1 -2.21203 6 85 1 -2.21203 6 86 1 -2.21203 6 87 1 -2.21203 6 88 1 -2.21203 6 89 1 -2.21203 6 90 1 -2.21203 6 91 1 -2.21203 6 92 1 -2.21203 6 93 1 -2.21203 6 94 1 -2.21203 6 95 1 -2.21203 6 96 1 -2.21203 6 97 1 -2.21203 6 98 1 -2.21203 6 99 1 -2.21203 6 100 1 -2.21203 6 101 1 -2.21203 6 102 1 -2.21203 6 103 1 -2.21203 6 104 1 -2.21203 // Linear classification matrix in sparse representation +System:Core%20Connections string SignalProcessingIP= 141.75.33.117 // (readonly)(noedit) +System:Core%20Connections string SignalProcessingPort= 58937 // (readonly)(noedit) +System:Version matrix SignalProcessingVersion= { Framework Revision Build Config Protocol } 1 3.6%20BETA.5570.5 5570.5,%202016-10-12T19:27:33Z MSVC-17.0.61030.0-AMD64,%20release,%202016-10-16T14:03:14Z,%20user@user-PC USE_DYNAMIC_CRT:OFF%20USE_OPENMP:ON%20USE_PRECOMPILED_HEADERS:ON%20USE_ASSERTS_IN_RELEASE_BUILDS:OFF%20USE_EXTERNAL_QT:OFF 2.3 // SignalProcessing version information (noedit)(readonly) +System:Configuration matrix SignalProcessingFilterChain= 3 { Filter%20Name Position%20String } SpatialFilter 2.A P3TemporalFilter 2.B LinearClassifier 2.C // SignalProcessing filter chain (noedit)(readonly) +Visualize:Processing%20Stages int VisualizeSpatialFilter= 0 0 0 1 // Visualize SpatialFilter output (boolean) +Visualize:Processing%20Stages int VisualizeLinearClassifier= 0 0 0 1 // Visualize LinearClassifier output (boolean) +System:Randomization int RandomSeed= 9689 0 % % // seed for the BCI2000 pseudo random number generator (readonly) +System:Randomization int RandomizationWarning= 1 1 0 1 // warn if subsequent Runs have identical RandomSeed value (boolean) diff --git a/WheelchairAdapter.py b/WheelchairAdapter.py deleted file mode 100644 index 524603b..0000000 --- a/WheelchairAdapter.py +++ /dev/null @@ -1,104 +0,0 @@ -# imports -from socket import * -import threading -import queue -import time - -# connect to BCI2000 in a new thread -class BCI2000ReceiverThread(threading.Thread): - def __init__(self, id, phaseInSequenceQueue, StimulusCodeQueue): - threading.Thread.__init__(self, name="BCI2000ReceiverThread%d" % (id,)) - self.phaseInSequenceQueue=phaseInSequenceQueue - self.StimulusCodeQueue=StimulusCodeQueue - self.running=True - self.firstData = True - self.repeat = 0 - #udp settings - self.host = "localhost" - self.port = 5003 # BCI2000 - self.UNITY_PORT = 5002 # unity - self.FEATHER_PORT = 5001 # feather gui - self.go = True - self.buf = 1024 - self.addr = (self.host,self.port) - #connect to udp socket - self.UDPSock = socket(AF_INET,SOCK_DGRAM) - self.UDPSock.bind(self.addr) # BIND to LISTEN - print('%s initialized to %s at port %s' % (self.getName(), self.host, self.port)) - print('Relaying SelectedTargets to port -- %s ---' % self.UNITY_PORT) - self.relay_unity = socket(AF_INET,SOCK_DGRAM) # UDP RELAY TO UNITY - print('Relaying all to port -- %s ---' % self.FEATHER_PORT) - self.relay_feather = socket(AF_INET,SOCK_DGRAM) # UDP RELAY TO FEATHER - - - - def kill(self): - self.running=False - log('%s terminated' % (self.getName())) - - def run(self): - # define a new contains method comparing strings - def contains(theString, theQueryValue): - return theString.find(theQueryValue) > -1 - - while self.running: - # try to receive from BCI2000 AppConnector - try: - self.data,self.addr = self.UDPSock.recvfrom(self.buf) - #print(self.data) ##### - if self.firstData: - print ("UDP is receiving...") - self.firstData=0 - - if "SelectedTarget 0" in self.data: - self.go = True - if "SelectedTarget" in self.data and "SelectedTarget 0" not in self.data and self.go == True: - print("Relaying Command to Unity: ", self.data) - self.relay_unity.sendto(self.data, (self.host, self.UNITY_PORT)) - self.go = False - - if contains(self.data, "PhaseInSequence"): - phaseInSequence=int(self.data.replace('PhaseInSequence ','')) - self.phaseInSequenceQueue.put(phaseInSequence) - #print (phaseInSequence) - - if contains(self.data, "StimulusCode "): - print("Relaying Command to TactileBCIfilter: ", self.data) - self.relay_feather.sendto(self.data, (self.host, self.FEATHER_PORT)) - - StimulusCode=int(self.data.replace('StimulusCode ','')) - if not StimulusCode == 0 and self.repeat == 0: - self.repeat = 1 - self.StimulusCodeQueue.put(StimulusCode) - self.Code = StimulusCode - elif StimulusCode == 0: - self.repeat = 0 -# print (StimulusCode) - - # wait a short time and try again - except error: - time.sleep(0.0001) - print('sleeping') - continue - - # def run(self): - # a = 1 - - def returnProgramStatus(self): - return self.running - - - ### M A I N P R O G R A M M ### - -# # initialize queue -# phaseInSequenceQueue = queue.Queue() -# StimulusCodeQueue = queue.Queue() - -# RunApplication = True - -# #start BCI2000ReceiverThread -# BCI2000ReceiverThread1=BCI2000ReceiverThread(1, phaseInSequenceQueue, StimulusCodeQueue) -# BCI2000ReceiverThread1.start() - - - diff --git a/app.py b/app.py index 689252c..8676dee 100644 --- a/app.py +++ b/app.py @@ -11,11 +11,6 @@ import tkinter.filedialog import subprocess import configparser import os -# import queue - -# own code: -# from questionnaire import quest -# from wheelchairAdapter import BCI2000ReceiverThread # TODO Eventuell updatefunktion über git pull mit einbauen! @@ -58,26 +53,24 @@ class PythonBCIgui: self.Bp300 = makeBtn(self, "P300 Klassifizierung", "orange", self.btn_p300) - self.BtacCopy = makeBtn(self, "Freies Buchstabieren", "lightblue", self.btn_tacCopy) + self.BtacCopy = makeBtn(self, "Freies Buchstabieren:\nTest", "lightblue", self.btn_tacCopy) + self.BtacCopyNested = makeBtn(self, "Freies Buchstabieren:\nKategorien", "lightyellow", self.btn_tacCopyNested) self.BvisCopy = makeBtn(self, "Freies Buchstabieren", "lightblue", self.btn_visCopy) - self.BtacSimul = makeBtn(self, "Rollstuhlsimulator", "lightyellow", self.btn_tacSimul) - # self.Bquest = makeBtnSmall(self, "Fragebogen", "green", self.btn_quest, TOP) - - frame.rowconfigure((0,1), weight=1) # make buttons stretch when + frame.rowconfigure((0,1), weight=1) # make buttons stretch when # TODO Remove frame.columnconfigure((0,2), weight=1) # when window is resized # TODO Hilfestellung nach jedem Button aufploppen lassen: # Was tun? Wo klicken? Welche File wo laden? self.pack_layout() - # 1. FILTER ################################## + # FILTER ################################## def btn_tacFilter(self): print('Starte TactileBCIFilter.exe') subprocess.Popen(config['PATH']['tactilebcifilter'] + r'\TactileBCIFilter.exe') - # 2. KALIBIERUNGEN ########################### + # KALIBRIERUNGEN ########################### def btn_tacCal(self): print('starte taktile Kalibrierung') subprocess.Popen([config['PATH']['bci2000'] + r'\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE TactileCalibration.prm']) @@ -92,18 +85,24 @@ class PythonBCIgui: subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3SignalProcessing.exe', '127.0.0.1']) subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3Speller.exe', '127.0.0.1']) - # 3. P300 Classifier ######################### + # P300 Classifier ######################### def btn_p300(self): print('Starte P300Classifier.exe') subprocess.Popen(config['PATH']['bci2000'] + r'\tools\P300Classifier\P300Classifier.exe') - # 4. COPYSPELL ########################### + # COPYSPELL ########################### def btn_tacCopy(self): print('Starte taktilen Speller') subprocess.Popen([config['PATH']['bci2000'] + r'\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE TactileCopy.prm']) subprocess.Popen([config['PATH']['bci2000'] + r'\prog\gUSBampSource.exe', '127.0.0.1']) subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3SignalProcessing.exe', '127.0.0.1']) subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3Speller.exe', '127.0.0.1']) + def btn_tacCopyNested(self): + print('Starte taktilen Speller') # TODO Prints rausnehmen + subprocess.Popen([config['PATH']['bci2000'] + r'\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE TactileCopyNested.prm']) + subprocess.Popen([config['PATH']['bci2000'] + r'\prog\gUSBampSource.exe', '127.0.0.1']) + subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3SignalProcessing.exe', '127.0.0.1']) + subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3Speller.exe', '127.0.0.1']) def btn_visCopy(self): print('Starte visuellen Speller') subprocess.Popen([config['PATH']['bci2000'] + r'\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE gUSBamp_visual_freeSpeller.prm']) @@ -111,53 +110,28 @@ class PythonBCIgui: subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3SignalProcessing.exe', '127.0.0.1']) subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3Speller.exe', '127.0.0.1']) - # 5. WHEELCHAIR SIMULATOR ########################### - def btn_tacSimul(self): - print('Starte Wheelchair Simulator') - # BCI2000ReceiverThread1.start() - subprocess.Popen(config['PATH']['wheelchairsimulator'] + r'\Wheels_Occlusion_AutoLog.exe') - subprocess.Popen([config['PATH']['bci2000'] + r'\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE TactileDrive.prm']) - subprocess.Popen([config['PATH']['bci2000'] + r'\prog\gUSBampSource.exe', '127.0.0.1']) - subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3SignalProcessing.exe', '127.0.0.1']) - subprocess.Popen([config['PATH']['bci2000'] + r'\prog\P3Speller.exe', '127.0.0.1']) - - # QUESTIONNAIRE PROMPT ########################### - # def btn_quest(self): - #root.destroy() - # self.startQuestions(self.paradigmText) - - # def startQuestions(self, para): - # print('Starte Fragebogen') - # q = quest(para) - # q.qSatisfaction() - # q.qExhaustion() - # q.qSubjControl() - # q.qCtrlChange() - # q.save() - + # This Function packs all the Buttons into the Layout def pack_layout(self): - # This Function packs all the Buttons into the Layout if config['SETTINGS']['paradigm'] == 'Tactile': self.BtacFilter.pack() self.BtacCal.pack() + self.Bp300.pack() + self.BtacCopy.pack() + self.BtacCopyNested.pack() elif config['SETTINGS']['paradigm'] == 'Visual': self.BvisCal.pack() - self.Bp300.pack() - if config['SETTINGS']['paradigm'] == 'Tactile': - self.BtacCopy.pack() - self.BtacSimul.pack() - elif config['SETTINGS']['paradigm'] == 'Visual': + self.Bp300.pack() self.BvisCopy.pack() + # This Function removes all the Buttons from the Layout def unpack_layout(self): - # This Function removes all the Buttons from the Layout # Add ALL your Buttons here self.BtacFilter.pack_forget() self.BtacCal.pack_forget() self.BvisCal.pack_forget() self.Bp300.pack_forget() self.BtacCopy.pack_forget() - self.BtacSimul.pack_forget() + self.BtacCopyNested.pack_forget() self.BvisCopy.pack_forget() def global_close(self, window): @@ -173,18 +147,24 @@ config.read(configPath) def setVisual(): - config['SETTINGS']['paradigm'] = 'Visual' - config.write(open(configPath,'w')) - app.Lparadigm.config(text = config['SETTINGS']['paradigm'] + ' BCI') - app.unpack_layout() - app.pack_layout() + if config['SETTINGS']['paradigm'] == 'Visual': + return + else: + config['SETTINGS']['paradigm'] = 'Visual' + config.write(open(configPath,'w')) + app.Lparadigm.config(text = config['SETTINGS']['paradigm'] + ' BCI') + app.unpack_layout() + app.pack_layout() def setTactile(): - config['SETTINGS']['paradigm'] = 'Tactile' - config.write(open(configPath,'w')) - app.Lparadigm.config(text = config['SETTINGS']['paradigm'] + ' BCI') - app.unpack_layout() - app.pack_layout() + if config['SETTINGS']['paradigm'] == 'Tactile': + return + else: + config['SETTINGS']['paradigm'] = 'Tactile' + config.write(open(configPath,'w')) + app.Lparadigm.config(text = config['SETTINGS']['paradigm'] + ' BCI') + app.unpack_layout() + app.pack_layout() root = tkinter.Tk() root.title('PythonBCIgui v' + str(__version__)) @@ -207,24 +187,13 @@ def setPathTactileBCIFilter(): config['PATH']['tactilebcifilter'] = tmpPath config.write(open(configPath,'w')) -def setPathWheelchair(): - tkinter.messagebox.showinfo('Konfiguration', 'Bitte wählen Sie nun den Ordner aus, in dem sich die Wheels_Occlusion_AutoLog.exe befindet.') - tmpPath = tkinter.filedialog.askdirectory() - if not tmpPath: - pass - else: - config['PATH']['wheelchairsimulator'] = tmpPath - config.write(open(configPath,'w')) - def setConfigDefault(): # config['PATH']['tactilebcifilter'] = r'C:/Users/bci/Desktop/Qt Filter Program/build-TactileBCIFilter-Desktop_Qt_5_15_0_MinGW_32_bit-Release/release' # config['PATH']['bci2000'] = r'C:/BCI2000/BCI2000 v3.6.beta.R5570/BCI2000.x64' - # config['PATH']['wheelchairsimulator'] = r'C:\Users\bci\Desktop\Wheelchair' config['PATH']['tactilebcifilter'] = r'C:\Users\EEG-Gruppe\Desktop\Arduino\Qt Tactile BCI Filter App\Executable' config['PATH']['bci2000'] = r'C:\Users\EEG-Gruppe\Desktop\BCI Paket\Paradigmen\Tactile\BCI2000\BCI2000-06-13\BCI2000src' - config['PATH']['wheelchairsimulator'] = r'C:\Users\EEG-Gruppe\Desktop\Wheelchair' config['SETTINGS']['paradigm'] = r'Visual' - config['SETTINGS']['hardware'] = r'gUSBamp' + config['SETTINGS']['hardware'] = r'gUSBamp' # TODO Add gNautilus parameters config.write(open(configPath,'w')) app.Lparadigm.config(text = config['SETTINGS']['paradigm'] + ' BCI') app.unpack_layout() @@ -256,20 +225,9 @@ leistenMenu.add_cascade(label="Pfade", menu=pathMenu) pathMenu.add_command(label="BCI2000", command=setPathBci2000) pathMenu.add_separator() pathMenu.add_command(label="TactileBCIFilter", command=setPathTactileBCIFilter) -pathMenu.add_separator() -pathMenu.add_command(label="Wheelchair Simulator", command=setPathWheelchair) root.config(menu = leistenMenu) -# # initialize queue for wheelchairadapter -# phaseInSequenceQueue = queue.Queue() -# StimulusCodeQueue = queue.Queue() - -# RunApplication = True - -# # initialize BCI2000ReceiverThread for wheelchairadapter -# BCI2000ReceiverThread1 = BCI2000ReceiverThread(1, phaseInSequenceQueue, StimulusCodeQueue) - app = PythonBCIgui(root) root.mainloop() #root.destroy() # optional; diff --git a/config.ini b/config.ini index f93f39b..fe0e2c7 100644 --- a/config.ini +++ b/config.ini @@ -1,9 +1,9 @@ [SETTINGS] -paradigm = Tactile +paradigm = Visual hardware = gUSBamp [PATH] -bci2000 = C:/BCI2000/BCI2000 v3.6.beta.R5570/BCI2000.x64 -tactilebcifilter = C:/Users/bci/Desktop/Qt Filter Program/build-TactileBCIFilter-Desktop_Qt_5_15_0_MinGW_32_bit-Release/release +bci2000 = C:\Users\EEG-Gruppe\Desktop\BCI Paket\Paradigmen\Tactile\BCI2000\BCI2000-06-13\BCI2000src +tactilebcifilter = C:\Users\EEG-Gruppe\Desktop\Arduino\Qt Tactile BCI Filter App\Executable wheelchairsimulator = C:\Users\bci\Desktop\Wheelchair diff --git a/startGUI.bat b/startGUI.bat deleted file mode 100644 index c5f28c1..0000000 --- a/startGUI.bat +++ /dev/null @@ -1 +0,0 @@ -python3 ./app.py