diff --git a/app.py b/app.py index 8610db1..14d319b 100644 --- a/app.py +++ b/app.py @@ -18,11 +18,10 @@ import configparser class App: def __init__(self, master): - # self.paradigmText = sys.argv[1] + self.paradigmText = sys.argv[1] # App.paradigmText = sys.argv[1] - # print sys.argv[1] # pathOrigin = os.path.dirname(os.path.realpath(__file__)) - + # TODO current working directory auf root von dieser file setzen # global pathSave @@ -54,13 +53,24 @@ class App: frame.pack() # button generation - self.Bfilter = makeBtn(self, "1. Filter", "lightyellow", self.btn_filter, TOP) - self.BtacCal = makeBtn(self, "2. Kalibrierung", "lightgreen", self.btn_tacCal, TOP) - self.Bp300 = makeBtn(self, "3. P300 Klassifizierung", "orange", self.btn_p300, TOP) - self.BtacCopy = makeBtn(self, "4. Freies Buchstabieren", "lightblue", self.btn_tacCopy, TOP) - self.BtacSimul = makeBtn(self, "5. Rollstuhlsimulator", "pink", self.btn_tacSimul, TOP) - # self.BtacQuest = makeBtnSmall(self, "6. Fragebogen", "green", self.btn_tacQuest, TOP) + if self.paradigmText == 'Tactile': + self.Bfilter = makeBtn(self, "1. Filter", "lightyellow", self.btn_filter, TOP) + self.BtacCal = makeBtn(self, "2. Kalibrierung", "lightgreen", self.btn_tacCal, TOP) + self.Bp300 = makeBtn(self, "3. P300 Klassifizierung", "orange", self.btn_p300, TOP) + self.BtacCopy = makeBtn(self, "4. Freies Buchstabieren", "lightblue", self.btn_tacCopy, TOP) + self.BtacSimul = makeBtn(self, "5. Rollstuhlsimulator", "pink", self.btn_tacSimul, TOP) + elif self.paradigmText == 'Visual': + self.Bfilter = makeBtn(self, "1. Filter", "lightyellow", self.btn_filter, TOP) + self.BvisCal = makeBtn(self, "2. Kalibrierung", "lightgreen", self.btn_visCal, TOP) + self.Bp300 = makeBtn(self, "3. P300 Klassifizierung", "orange", self.btn_p300, TOP) + self.BvisCopy = makeBtn(self, "4. Freies Buchstabieren", "lightblue", self.btn_visCopy, TOP) + else: + print('Fehler: Bitte wählen Sie "Tactile" oder "Visual" als Argument') + raise ValueError + + # self.Bquest = makeBtnSmall(self, "6. Fragebogen", "green", self.btn_quest, TOP) self.BtacConfig = makeBtnSmall(self, "Konfiguration", "gray", self.btn_config, TOP) + self.Btest = makeBtnSmall(self, "TEST", "green", self.btn_test, RIGHT) # TODO Remove frame.rowconfigure((0,1), weight=1) # make buttons stretch when frame.columnconfigure((0,2), weight=1) # when window is resized @@ -80,6 +90,12 @@ class App: 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']) # TODO Lock einführen und bei Returnwert Lock öffnen + def btn_visCal(self): + print('starte visuelle Kalibrierung') + subprocess.Popen([config['PATH']['bci2000'] + r'\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE gUSBamp_visual_copySpeller.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']) # 3. P300 Classifier ######################### def btn_p300(self): @@ -88,12 +104,18 @@ class App: # 4. COPYSPELL ########################### def btn_tacCopy(self): - print('Starte taktilen Copyspeller') + 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_visCopy(self): + print('Starte visuellen Speller') + subprocess.Popen([config['PATH']['bci2000'] + r'\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE gUSBamp_visual_freeSpeller.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']) + # 5. WHEELCHAIR SIMULATOR ########################### def btn_tacSimul(self): print('Starte Wheelchair Simulator') @@ -104,16 +126,9 @@ class App: # subprocess.Popen([pathBci2000 + '\prog\P3Speller.exe', '127.0.0.1']) # QUESTIONNAIRE PROMPT ########################### - # def btn_visQuest(self): - # #os.system('python .\PythonBCIgui\q-helper.py ' + "Visual") - # root.destroy() - # self.startQuestions("Visual") - # def btn_tacQuest(self): + # def btn_quest(self): #root.destroy() - # self.startQuestions("Tactile") - # def btn_audQuest(self): - # root.destroy() - # self.startQuestions("Auditory") + # self.startQuestions(self.paradigmText) # def startQuestions(self, para): # print('Starte Fragebogen') @@ -134,6 +149,10 @@ class App: config.write(open('config.ini','w')) # TODO Catch errors falls falsche Ordner gewählt wurden + def btn_test(self): + print('TEST') + print(self.paradigmText) + def global_close(self, window): print('Beenden') window.destroy() @@ -145,8 +164,8 @@ def on_closing(): #self.global_close(root) print('Beenden') root.destroy() - + root.protocol("WM_DELETE_WINDOW", on_closing) app = App(root) root.mainloop() -#root.destroy() # optional; \ No newline at end of file +#root.destroy() # optional; diff --git a/gUSBamp_visual_copySpeller.prm b/gUSBamp_visual_copySpeller.prm new file mode 100644 index 0000000..9f35b33 --- /dev/null +++ b/gUSBamp_visual_copySpeller.prm @@ -0,0 +1,166 @@ +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:46:24Z,%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) +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= 500ms 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= 1 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 string OperatorAddress= 127.0.0.1:4002 +System:Core%20Connections string SignalProcessingIP= 127.0.0.1 // (readonly)(noedit) +System:Core%20Connections string SignalProcessingPort= 50648 // (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:46:24Z,%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) +System:Configuration matrix Filters= 15 1 /2/SpatialFilter /2/P3TemporalFilter /2/LinearClassifier /1/DataIOFilter /1/gUSBampADC /1/BCI2000FileWriter /1/AlignmentFilter /1/TransmissionFilter /3/ConnectorInput /3/P3SpellerTask /3/KeystrokeFilter /3/ConnectorOutput /3/GazeMonitorFilter /3/StimBoxFilter /3/ParallelPortFilter // Filter Directory (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) +Storage:Data%20Location:DataIOFilter string DataDirectory= ..\data ..\data % % // path to top level data directory (directory) +Storage:Session:DataIOFilter string SubjectName= VPNUMBER_YYYY-MM-DD_VIS_ 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= 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= 2s 2s 0 % // how much time in Source visualization +Visualize:Source%20Signal:DataIOFilter int SourceMin= auto // raw signal vis Min Value +Visualize:Source%20Signal:DataIOFilter int SourceMax= auto // raw signal vis Max Value +Source:gUSBampADC int SamplingRate= 256 256Hz % % // the signal sampling rate +Source:gUSBampADC int SampleBlockSize= 8 1 % % // number of samples per block +Source:gUSBampADC int SourceCh= 8 auto 0 % // number of digitized channels total +Source:gUSBampADC list SourceChGain= 8 1 1 1 1 1 1 1 1 +Source:gUSBampADC list SourceChOffset= 8 0 0 0 0 0 0 0 0 +Source:gUSBampADC list ChannelNames= 0 +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 1 % // 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= 1 auto // 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= 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) +Source:Online%20Processing:TransmissionFilter list TransmitChList= 4 1 2 3 4 // 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= 127.0.0.1 // (readonly)(noedit) +System:Core%20Connections string SignalSourcePort= 50649 // (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:46:24Z,%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) +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= 1600 640 0 % // width of Application window +Application:Application%20Window:ApplicationWindow int WindowHeight= 900 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 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= 2s 2s 0 % // pause preceding sequences/sets of intensifications +Application:Sequencing:StimulusTask float PostSequenceDuration= 2s 2s 0 % // pause following sequences/sets of intensifications +Application:Sequencing:StimulusTask float StimulusDuration= 70ms 40ms 0 % // stimulus duration +Application:Sequencing:StimulusTask string EarlyOffsetExpression= % // abort stimulus if this expression becomes true +Application:Sequencing:StimulusTask float ISIMinDuration= 120ms 80ms 0 % // minimum duration of inter-stimulus interval +Application:Sequencing:StimulusTask float ISIMaxDuration= 120ms 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= 0 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= 10 15 1 % // number of sequences in a set of intensifications +Application:Speller%20Targets:P3SpellerTask matrix TargetDefinitions= 36 { Display Enter Display%20Size Icon%20File Sound%20File } A A 1 ../icons/einstein.png % B B 1 ../icons/einstein.png % C C 1 ../icons/einstein.png % D D 1 ../icons/einstein.png % E E 1 ../icons/einstein.png % F F 1 ../icons/einstein.png % G G 1 ../icons/einstein.png % H H 1 ../icons/einstein.png % I I 1 ../icons/einstein.png % J J 1 ../icons/einstein.png % K K 1 ../icons/einstein.png % L L 1 ../icons/einstein.png % M M 1 ../icons/einstein.png % N N 1 ../icons/einstein.png % O O 1 ../icons/einstein.png % P P 1 ../icons/einstein.png % Q Q 1 ../icons/einstein.png % R R 1 ../icons/einstein.png % S S 1 ../icons/einstein.png % T T 1 ../icons/einstein.png % U U 1 ../icons/einstein.png % V V 1 ../icons/einstein.png % W W 1 ../icons/einstein.png % X X 1 ../icons/einstein.png % Y Y 1 ../icons/einstein.png % Z Z 1 ../icons/einstein.png % 1 1 1 ../icons/einstein.png % 2 2 1 ../icons/einstein.png % 3 3 1 ../icons/einstein.png % 4 4 1 ../icons/einstein.png % 5 5 1 ../icons/einstein.png % 6 6 1 ../icons/einstein.png % 7 7 1 ../icons/einstein.png % 8 8 1 ../icons/einstein.png % 9 9 1 ../icons/einstein.png % _ %20 1 ../icons/einstein.png % // speller target properties +Application:Speller%20Targets:P3SpellerTask intlist NumMatrixColumns= 1 6 6 1 % // display matrices' column number(s) +Application:Speller%20Targets:P3SpellerTask intlist NumMatrixRows= 1 6 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 } ./voice/1.wav ./voice/2.wav ./voice/3.wav ./voice/4.wav ./voice/5.wav ./voice/6.wav // audio stimuli rows files +Application:Audio%20Stimuli:P3SpellerTask matrix AudioStimuliColsFiles= 6 { filename } ./voice/a.wav ./voice/b.wav ./voice/c.wav ./voice/d.wav ./voice/e.wav ./voice/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 0x00000000 0x505050 % % // intensified text color (color) +Application:Speller%20Targets:P3SpellerTask intlist IconHighlightMode= 1 0 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 1 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= 10 0 0 100 // size of status bar in percent of screen height +Application:Speller:P3SpellerTask float StatusBarTextHeight= 4 0 0 100 // size of status bar text in percent of screen height +Application:Speller:P3SpellerTask string TextToSpell= TEXTTOSPELL // character or string to spell in offline copy mode +Application:Speller:P3SpellerTask string TextResult= % // user spelling result +Application:Speller:P3SpellerTask int TestMode= 0 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= 640 0 0 % // Text Window X location +Application:Text%20Window:P3SpellerTask int TextWindowTop= 0 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:20321 % % // one or more IP:Port combinations, e.g. localhost:20321 +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) +gSTIMbox:gSTIMbox:StimBoxFilter int EnableStimBoxFilter= 0 0 0 256 // Serial port number for the g.STIMbox. If 0, StimBoxFilter is disabled +gSTIMbox:gSTIMbox:StimBoxFilter matrix DigitalOutputs= 0 { Expression } // Matrix of Expressions for digital outputs +ParallelPort:Output:ParallelPortFilter matrix ParallelPortOutput= 0 { Device%20Name Expression } // Matrix of Expressions for parallel port output +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:Core%20Connections string ApplicationIP= 127.0.0.1 // (readonly)(noedit) +System:Core%20Connections string ApplicationPort= 50675 // (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:46:24Z,%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.extensions/build/CMakeFiles/extlib/qt-5.3.2/win32-amd64-msvc2012/bin/qmake.exe 2.3 // Application version information (noedit)(readonly) +System:Configuration matrix ApplicationFilterChain= 7 { Filter%20Name Position%20String } ConnectorInput 2.9999 P3SpellerTask 3 KeystrokeFilter 3.1 ConnectorOutput 3.9999 GazeMonitorFilter 3.A StimBoxFilter 3.A ParallelPortFilter 3.B // Application filter chain (noedit)(readonly) +Visualize:Processing%20Stages int VisualizeStimBoxFilter= 0 0 0 1 // Visualize StimBoxFilter output (boolean) +Visualize:Processing%20Stages int VisualizeParallelPortFilter= 0 0 0 1 // Visualize ParallelPortFilter output (boolean) +System:Randomization int RandomSeed= 4894 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) diff --git a/gUSBamp_visual_freeSpeller.prm b/gUSBamp_visual_freeSpeller.prm new file mode 100644 index 0000000..15a9d02 --- /dev/null +++ b/gUSBamp_visual_freeSpeller.prm @@ -0,0 +1,166 @@ +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:46:24Z,%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) +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= 500ms 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= 1 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 string OperatorAddress= 127.0.0.1:4002 +System:Core%20Connections string SignalProcessingIP= 127.0.0.1 // (readonly)(noedit) +System:Core%20Connections string SignalProcessingPort= 50648 // (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:46:24Z,%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) +System:Configuration matrix Filters= 15 1 /2/SpatialFilter /2/P3TemporalFilter /2/LinearClassifier /1/DataIOFilter /1/gUSBampADC /1/BCI2000FileWriter /1/AlignmentFilter /1/TransmissionFilter /3/ConnectorInput /3/P3SpellerTask /3/KeystrokeFilter /3/ConnectorOutput /3/GazeMonitorFilter /3/StimBoxFilter /3/ParallelPortFilter // Filter Directory (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) +Storage:Data%20Location:DataIOFilter string DataDirectory= ..\data ..\data % % // path to top level data directory (directory) +Storage:Session:DataIOFilter string SubjectName= VPNUMBER_YYYY-MM-DD_VIS_ 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= 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= 2s 2s 0 % // how much time in Source visualization +Visualize:Source%20Signal:DataIOFilter int SourceMin= auto // raw signal vis Min Value +Visualize:Source%20Signal:DataIOFilter int SourceMax= auto // raw signal vis Max Value +Source:gUSBampADC int SamplingRate= 256 256Hz % % // the signal sampling rate +Source:gUSBampADC int SampleBlockSize= 8 1 % % // number of samples per block +Source:gUSBampADC int SourceCh= 8 auto 0 % // number of digitized channels total +Source:gUSBampADC list SourceChGain= 8 1 1 1 1 1 1 1 1 +Source:gUSBampADC list SourceChOffset= 8 0 0 0 0 0 0 0 0 +Source:gUSBampADC list ChannelNames= 0 +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 1 % // 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= 1 auto // 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= 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) +Source:Online%20Processing:TransmissionFilter list TransmitChList= 4 1 2 3 4 // 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= 127.0.0.1 // (readonly)(noedit) +System:Core%20Connections string SignalSourcePort= 50649 // (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:46:24Z,%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) +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= 1600 640 0 % // width of Application window +Application:Application%20Window:ApplicationWindow int WindowHeight= 900 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 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= 2s 2s 0 % // pause preceding sequences/sets of intensifications +Application:Sequencing:StimulusTask float PostSequenceDuration= 2s 2s 0 % // pause following sequences/sets of intensifications +Application:Sequencing:StimulusTask float StimulusDuration= 70ms 40ms 0 % // stimulus duration +Application:Sequencing:StimulusTask string EarlyOffsetExpression= % // abort stimulus if this expression becomes true +Application:Sequencing:StimulusTask float ISIMinDuration= 120ms 80ms 0 % // minimum duration of inter-stimulus interval +Application:Sequencing:StimulusTask float ISIMaxDuration= 120ms 80ms 0 % // maximum duration of inter-stimulus interval +Application:Result%20Processing:StimulusTask int InterpretMode= 1 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= 10 15 1 % // number of sequences in a set of intensifications +Application:Speller%20Targets:P3SpellerTask matrix TargetDefinitions= 36 { Display Enter Display%20Size Icon%20File Sound%20File } A A 1 ../icons/einstein.png % B B 1 ../icons/einstein.png % C C 1 ../icons/einstein.png % D D 1 ../icons/einstein.png % E E 1 ../icons/einstein.png % F F 1 ../icons/einstein.png % G G 1 ../icons/einstein.png % H H 1 ../icons/einstein.png % I I 1 ../icons/einstein.png % J J 1 ../icons/einstein.png % K K 1 ../icons/einstein.png % L L 1 ../icons/einstein.png % M M 1 ../icons/einstein.png % N N 1 ../icons/einstein.png % O O 1 ../icons/einstein.png % P P 1 ../icons/einstein.png % Q Q 1 ../icons/einstein.png % R R 1 ../icons/einstein.png % S S 1 ../icons/einstein.png % T T 1 ../icons/einstein.png % U U 1 ../icons/einstein.png % V V 1 ../icons/einstein.png % W W 1 ../icons/einstein.png % X X 1 ../icons/einstein.png % Y Y 1 ../icons/einstein.png % Z Z 1 ../icons/einstein.png % 1 1 1 ../icons/einstein.png % 2 2 1 ../icons/einstein.png % 3 3 1 ../icons/einstein.png % 4 4 1 ../icons/einstein.png % 5 5 1 ../icons/einstein.png % 6 6 1 ../icons/einstein.png % 7 7 1 ../icons/einstein.png % 8 8 1 ../icons/einstein.png % 9 9 1 ../icons/einstein.png % _ %20 1 ../icons/einstein.png % // speller target properties +Application:Speller%20Targets:P3SpellerTask intlist NumMatrixColumns= 1 6 6 1 % // display matrices' column number(s) +Application:Speller%20Targets:P3SpellerTask intlist NumMatrixRows= 1 6 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 } ./voice/1.wav ./voice/2.wav ./voice/3.wav ./voice/4.wav ./voice/5.wav ./voice/6.wav // audio stimuli rows files +Application:Audio%20Stimuli:P3SpellerTask matrix AudioStimuliColsFiles= 6 { filename } ./voice/a.wav ./voice/b.wav ./voice/c.wav ./voice/d.wav ./voice/e.wav ./voice/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 0x00000000 0x505050 % % // intensified text color (color) +Application:Speller%20Targets:P3SpellerTask intlist IconHighlightMode= 1 0 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 1 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= 10 0 0 100 // size of status bar in percent of screen height +Application:Speller:P3SpellerTask float StatusBarTextHeight= 4 0 0 100 // size of status bar text in percent of screen height +Application:Speller:P3SpellerTask string TextToSpell= % // character or string to spell in offline copy mode +Application:Speller:P3SpellerTask string TextResult= % // user spelling result +Application:Speller:P3SpellerTask int TestMode= 0 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= 640 0 0 % // Text Window X location +Application:Text%20Window:P3SpellerTask int TextWindowTop= 0 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:20321 % % // one or more IP:Port combinations, e.g. localhost:20321 +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) +gSTIMbox:gSTIMbox:StimBoxFilter int EnableStimBoxFilter= 0 0 0 256 // Serial port number for the g.STIMbox. If 0, StimBoxFilter is disabled +gSTIMbox:gSTIMbox:StimBoxFilter matrix DigitalOutputs= 0 { Expression } // Matrix of Expressions for digital outputs +ParallelPort:Output:ParallelPortFilter matrix ParallelPortOutput= 0 { Device%20Name Expression } // Matrix of Expressions for parallel port output +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:Core%20Connections string ApplicationIP= 127.0.0.1 // (readonly)(noedit) +System:Core%20Connections string ApplicationPort= 50675 // (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:46:24Z,%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.extensions/build/CMakeFiles/extlib/qt-5.3.2/win32-amd64-msvc2012/bin/qmake.exe 2.3 // Application version information (noedit)(readonly) +System:Configuration matrix ApplicationFilterChain= 7 { Filter%20Name Position%20String } ConnectorInput 2.9999 P3SpellerTask 3 KeystrokeFilter 3.1 ConnectorOutput 3.9999 GazeMonitorFilter 3.A StimBoxFilter 3.A ParallelPortFilter 3.B // Application filter chain (noedit)(readonly) +Visualize:Processing%20Stages int VisualizeStimBoxFilter= 0 0 0 1 // Visualize StimBoxFilter output (boolean) +Visualize:Processing%20Stages int VisualizeParallelPortFilter= 0 0 0 1 // Visualize ParallelPortFilter output (boolean) +System:Randomization int RandomSeed= 4894 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) diff --git a/startGUI.bat b/startGUI.bat deleted file mode 100644 index da763c5..0000000 --- a/startGUI.bat +++ /dev/null @@ -1 +0,0 @@ -python3 ./app.py \ No newline at end of file diff --git a/startGUI_tactile.bat b/startGUI_tactile.bat new file mode 100644 index 0000000..80792bc --- /dev/null +++ b/startGUI_tactile.bat @@ -0,0 +1 @@ +python3 ./app.py Tactile diff --git a/startGUI_visual.bat b/startGUI_visual.bat new file mode 100644 index 0000000..a01d9b1 --- /dev/null +++ b/startGUI_visual.bat @@ -0,0 +1 @@ +python3 ./app.py Visual