A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Forum for discussion on different user applications
mellinger
Posts: 1208
Joined: 12 Feb 2003, 11:06

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by mellinger » 19 Feb 2020, 09:37

What modifications would you suggest for the spatial filter? Should it be set to CAR for now?
Yes.
Finally, would you be able to help us code turning off adaptation after 1 minute of the BCI cursor task?
In your batch file, add the following after parameters have been loaded:

Code: Select all

set parameter MinRunLength 60s
set config
start
wait for Resting 600
set parameter MinRunLength 240s
set parameter Adaptation(2) 0
set config
start
For more information about parameter scripting, please see:
https://www.bci2000.org/mediawiki/index ... _Scripting

-Juergen

spine321
Posts: 13
Joined: 10 Feb 2020, 21:05

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by spine321 » 19 Feb 2020, 20:10

Hello,

We kept all settings the same as Mu Rhythm, but we changed two things as we discussed:

1. Set the spatial filter to CAR

2. Changed the Classifier to be the following settings (Electrodes had their numbers entered in instead of the words, I am just typing out the words to indicate which ones were used).
Electrode Frequency Output Weight
F3 6Hz 2 0.25
F4 6Hz 2 0.25
FZ 6Hz 2 0.25
CZ 6Hz 2 0.25

Would these options for the classifier be best for increasing Theta power?

We also added the code you gave in the batch file.

However, Mu was observed to increase instead of Theta. Would you have an idea why this was the case?

Finally, when your code was added, the program ran automatically for some time and then stopped. A button called "resume" showed. After clicking "resume" (One of the three module options besides Config and Set Config), is this when adaptation was off? After we hit "resume" and ran the program, we were again prompted to hit "resume" after the program ran for some time. How would we know when adaptation is on or off during the many times we have to keep hitting "resume" ? Does adaptation keep turning on and off?

Thank you for answering all of these questions,

Mohammad

mellinger
Posts: 1208
Joined: 12 Feb 2003, 11:06

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by mellinger » 20 Feb 2020, 09:11

Finally, when your code was added, the program ran automatically for some time and then stopped. A button called "resume" showed. After clicking "resume" (One of the three module options besides Config and Set Config), is this when adaptation was off? After we hit "resume" and ran the program, we were again prompted to hit "resume" after the program ran for some time. How would we know when adaptation is on or off during the many times we have to keep hitting "resume" ? Does adaptation keep turning on and off?
Add the following code at the end in order to avoid the behavior that confuses you:

Code: Select all

wait for resting 6000
exit
Thank you for answering all of these questions,
I'm not answering all of your questions because I'm not an expert regarding theta activity. You will have to do some research on your own.

-Juergen

spine321
Posts: 13
Joined: 10 Feb 2020, 21:05

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by spine321 » 26 Feb 2020, 23:19

Hello,

We have run a few experiments and we have a few more questions. These are related to the original Mu Rhythm Feedback Task:

1) In the case of Mu, how exactly does the ball move? Is it the higher the Mu power, the ball moves more vertically upwards? If the ball moves up, does that mean that the power of the frequency used increases? And if the ball moves downward, does this mean that the power of the frequency used decreases? I am talking about this in the case of the basket task (See attached photo for example). If one wants to increase Theta power, could we just have a program where the ball just moves upwards to a target from the bottom of the screen, assuming downwards movement means a decrease in theta power? In summary, I am unclear on how the power extracted from a frequency band actually gets translated to movement. I understand from the documentation that when the bar is down, that means the subject must perform motor imagery and if the bar is up the subject must rest. How does that relate to our case of trying to increase theta? Does this mean we must have a task that increases theta (Compared to rest) to use BCI2000?


2) Is there a way to prevent noisy electrode(s) from being used in CAR? For example, if O2, F1, Pz are noisy, is there a way to not let them be included in CAR?

Finally, the task that is present in the documentation is different than the one titled "Mu Rhythm Feedback.prm" provided in the .prm in BCI2000. I am not sure if you are aware of this.

I looked at the documentation for answers and these questions were still unresolved which is why I am asking them here. I hope I am not being rude in any way in asking these questions, as simple as they are.

Thank you very much. You make BCI2000 the best platform for BCI research for people who are learning about this wonderful field.

Mohammad
Attachments
CursorTask.JPG
CursorTask.JPG (13.24 KiB) Viewed 28839 times

mellinger
Posts: 1208
Joined: 12 Feb 2003, 11:06

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by mellinger » 27 Feb 2020, 11:08

1) In the case of Mu, how exactly does the ball move?
As you suggest, movement upward means a more-than-average amplitude of the mu rhythm at the selected electrode and frequency.
If one wants to increase Theta power, could we just have a program where the ball just moves upwards to a target from the bottom of the screen, assuming downwards movement means a decrease in theta power?
If you want to increase theta power, you cannot use the mu rhythm feedback setup because it will suggest increase as much as decrease, swinging around a mean value in order to transfer information, which is the purpose of a BCI.

However, you can configure the CursorTask to display only a single target at the top by setting the NumberTargets parameter to 1.
In summary, I am unclear on how the power extracted from a frequency band actually gets translated to movement.
After normalization, the power is taken to be the vertical speed of the cursor. The Normalizer removes the mean, so above-average power will move the cursor upward, below-average power will move it downward, provided the sign of the normalizer gain is positive. If it is negative, direction will be reversed.
I understand from the documentation that when the bar is down, that means the subject must perform motor imagery and if the bar is up the subject must rest. How does that relate to our case of trying to increase theta? Does this mean we must have a task that increases theta (Compared to rest) to use BCI2000?
If you want to use BCI2000's mu rhythm task as a BCI, you will need a modulation of the brain signal that can be achieved voluntarily by the subject. If you want to control BCI2000 by theta, you need to provide the subject with two different instructions, one to increase theta, one to decrease theta. The increase needs only to be relative, so one of the instructions may be "rest".

If you don't want to use BCI2000's mu rhythm task as a BCI but only to provide feedback about the subject's current theta activity, then set the NumberTargets parameter to 1 and switch off adaptation as described above.
2) Is there a way to prevent noisy electrode(s) from being used in CAR? For example, if O2, F1, Pz are noisy, is there a way to not let them be included in CAR?
Specify the electrodes you want to keep in the TransmitChList parameter.
Finally, the task that is present in the documentation is different than the one titled "Mu Rhythm Feedback.prm" provided in the .prm in BCI2000. I am not sure if you are aware of this.
This is an obsolete parameter file, I don't think it was mentioned in the documentation. Thanks anyway.

-Juergen

spine321
Posts: 13
Joined: 10 Feb 2020, 21:05

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by spine321 » 27 Feb 2020, 17:20

Hello,

Thank you for your help.

One thing you mentioned that is concerning is that the Mu Rhythm Feedback.prm file I suggested is obsolete.My question is: What even is the parameter file we should use for the cursor task when there are two versions. One here: viewtopic.php?t=2891

And the other version is what is in BCI2000 (Below).

Code: Select all

System:Configuration matrix OperatorVersion= { Framework Revision Build } 1 2.x ,%20 Dec%2014%202007 // operator module version information
System:State%20Vector int StateVectorLength= 11 16 1 30 // length of the state vector in bytes
Visualize:Timing int VisualizeTiming= 1 1 0 1 // visualize system timing (0=no, 1=yes) (boolean)
Visualize:Source%20Signal int VisualizeSource= 1 1 0 1 // visualize raw brain signal (0=no, 1=yes) (boolean)
Visualize:Source%20Signal int VisualizeSourceDecimation= 1 1 0 % // decimation factor for raw brain signal
Visualize:Source%20Signal int VisualizeSourceTime= 2s 2 0 % // how much time in Source visualization
Visualize:Source%20Signal int SourceMin= -100muV -100muV % % // raw signal vis Min Value
Visualize:Source%20Signal int SourceMax= 100muV 100muV % % // raw signal vis Max Value
Source:SignalGeneratorADC int ModulateAmplitude= 1 0 0 1 // Modulate the amplitude with the mouse (0=no, 1=yes) (boolean)
Source:SignalGeneratorADC int SineChannelX= 1 0 0 % // Channel number of sinewave controlled by mouse x position
Source:SignalGeneratorADC int SineChannelY= 2 0 0 % // Channel number of sinewave controlled by mouse y position (0 for all)
Source:SignalGeneratorADC int SineChannelZ= 0 0 0 % // Channel number of sinewave controlled by mouse key state
Source:SignalGeneratorADC float SineFrequency= 9Hz 10Hz % % // Frequency of sine wave
Source:SignalGeneratorADC int SineAmplitude= 100muV 100muV % % // Amplitude of sine wave
Source:SignalGeneratorADC int NoiseAmplitude= 30muV 30muV % % // Amplitude of white noise (common to all channels)
Source:SignalGeneratorADC int DCOffset= 0 0muV % % // DC offset (common to all channels)
Source:SignalGeneratorADC string OffsetMultiplier= % StimulusType % % // Expression to multiply offset by
Source:SignalGeneratorADC int RandomSeed= 0 0 0 1 // Initialization value for random number generator (initialize from time if 0)
Source:SignalGeneratorADC int SignalType= 0 0 0 2 // numeric type of output signal:  0: int16, 1: float32, 2: int32 (enumeration)
Storage:BCI2000FileWriter int SavePrmFile= 0 1 0 1 // save additional parameter file (0=no, 1=yes) (boolean)
Storage:BCI2000FileWriter string StorageTime= % // time of beginning of data storage
System:Core%20Connections string SignalSourcePort= 4353 4200 1024 65535 // the SignalSource module's listening port
System:Core%20Connections string SignalSourceIP= 134.2.123.129 127.0.0.1 % % // the SignalSource module's listening IP
System:Configuration matrix SignalSourceVersion= { Framework Revision Build } 1 2.x ,%20 Dec%2017%202007 // SignalSource version information
System:Configuration matrix SignalSourceFilterChain= 8 { Filter%20Name Position%20String } DataIOFilter 0 SignalGeneratorADC 1 NullFileWriter 1 BCI2000FileWriter 1 EDFFileWriter 1 GDFFileWriter 1 AlignmentFilter 1.1 TransmissionFilter 1.2 // SignalSource filter chain
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= 3 2 0 3 // spatial filter type 0: none, 1: full matrix, 2: sparse matrix, 3: common average reference (CAR) (enumeration)
Filtering:SpatialFilter:SpatialFilter intlist SpatialFilterCAROutput= 0 // list of output channels for the CAR if used
Filtering:SpatialFilter:SpatialFilter matrix SpatialFilter= 0 0 0 % % // columns represent input channels, rows represent output channels
Filtering:ARFilter int WindowLength= 0.5s 0.5s % % // Time window for spectrum computation
Filtering:ARFilter int Detrend= 0 0 0 2 // Detrend data? 0: no, 1: mean, 2: linear (enumeration)
Filtering:ARFilter int ModelOrder= 16 16 0 % // AR model order
Filtering:ARFilter int OutputType= 0 0 0 2 // 0: Spectral Amplitude, 1: Spectral Power, 2: AR Coefficients (enumeration)
Filtering:ARFilter float FirstBinCenter= 0Hz 0Hz % % // Center of first frequency bin in Hz
Filtering:ARFilter float LastBinCenter= 30Hz 30Hz % % // Center of last frequency bin in Hz
Filtering:ARFilter float BinWidth= 3Hz 3Hz % % // Width of spectral bins in Hz
Filtering:ARFilter int EvaluationsPerBin= 15 15 1 % // Number of uniformly spaced evaluation points entering into a single bin value
Filtering:LinearClassifier matrix Classifier= 1 { input%20channel input%20element%20(bin) output%20channel weight } 2 9Hz 2 1 // Linear classification matrix in sparse representation
Filtering:LPFilter float LPTimeConstant= 1s 16s 0 % // time constant for the low pass filter
Filtering:Normalizer floatlist NormalizerOffsets= 2 -1 32 0 % % // normalizer offsets
Filtering:Normalizer floatlist NormalizerGains= 2 2 0.5 0 % % // normalizer gain values
Filtering:Normalizer intlist Adaptation= 2 0 2 0 0 2 // 0: no adaptation, 1: zero mean, 2: zero mean, unit variance (enumeration)
Filtering:Normalizer matrix BufferConditions= 2 2 0 (Feedback)&&(TargetCode==1) 0 (Feedback)&&(TargetCode==2) // expressions corresponding to data buffers (columns correspond to output channels, multiple rows correspond to multiple buffers)
Filtering:Normalizer float BufferLength= 4s 9s % % // time window of past data per buffer that enters into statistic
Filtering:Normalizer string UpdateTrigger= (Feedback==0) // expression to trigger offset/gain update when changing from 0 (use empty string for continuous update)
System:Core%20Connections string SignalProcessingPort= 4354 4200 1024 65535 // the SignalProcessing module's listening port
System:Core%20Connections string SignalProcessingIP= 134.2.123.129 127.0.0.1 % % // the SignalProcessing module's listening IP
System:Configuration matrix SignalProcessingVersion= { Framework Revision Build } 1 2.x ,%20 Dec%2014%202007 // SignalProcessing version information
System:Configuration matrix SignalProcessingFilterChain= 5 { Filter%20Name Position%20String } SpatialFilter 2.B ARFilter 2.C LinearClassifier 2.D LPFilter 2.D1 Normalizer 2.E // SignalProcessing filter chain
Visualize:Processing%20Stages int VisualizeSpatialFilter= 0 0 0 1 // Visualize SpatialFilter output (boolean)
Visualize:Processing%20Stages int VisualizeARFilter= 0 0 0 1 // Visualize ARFilter output (boolean)
Visualize:Processing%20Stages int VisualizeLinearClassifier= 0 0 0 1 // Visualize LinearClassifier output (boolean)
Visualize:Processing%20Stages int VisualizeLPFilter= 0 0 0 1 // Visualize LPFilter output (boolean)
Visualize:Processing%20Stages int VisualizeNormalizer= 0 0 0 1 // Visualize Normalizer 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:Sequencing float PreRunDuration= 2s 2s 0 % // duration of pause preceding first trial
Application:Sequencing float PreFeedbackDuration= 2s 2s 0 % // duration of target display prior to feedback
Application:Sequencing float FeedbackDuration= 2s 3s 0 % // duration of feedback
Application:Sequencing float PostFeedbackDuration= 1s 1s 0 % // duration of result display after feedback
Application:Sequencing float ITIDuration= 1s 1s 0 % // duration of inter-trial interval
Application:Sequencing float MinRunLength= 120s 120s 0 % // minimum duration of a run
Application:Targets int NumberTargets= 2 2 0 15 // number of targets
Application:Window int RenderingQuality= 1 0 0 1 // rendering quality: 0: low, 1: high (enumeration)
Application:Window int WindowBitDepth= 16 16 1 32 // color bit depth of feedback window
Application:Sequencing float MaxFeedbackDuration= 4s % 0 % // abort a trial after this amount of feedback time has expired
Application:3DEnvironment floatlist CameraPos= 3 50 50 150 // camera position vector in percent coordinates of 3D area
Application:3DEnvironment floatlist CameraAim= 3 50 50 50 // camera aim point in percent coordinates
Application:3DEnvironment int CameraProjection= 0 0 0 2 // projection type: 0: flat, 1: wide angle perspective, 2: narrow angle perspective (enumeration)
Application:3DEnvironment floatlist LightSourcePos= 3 50 50 150 // light source position in percent coordinates
Application:3DEnvironment int LightSourceColor= 0xffffff // light source RGB color (color)
Application:3DEnvironment int WorkspaceBoundaryColor= 0xffff00 0 % % // workspace boundary color (0xff000000 for invisible) (color)
Application:3DEnvironment string WorkspaceBoundaryTexture= images/grid.bmp // path of workspace boundary texture (inputfile)
Application:Cursor float CursorWidth= 10 10 0.0 % // feedback cursor width in percent of screen width
Application:Cursor int CursorColorFront= 0xff0000 // cursor color when it is at the front of the workspace (color)
Application:Cursor int CursorColorBack= 0xff0000 // cursor color when it is in the back of the workspace (color)
Application:Cursor string CursorTexture= % // path of cursor texture (inputfile)
Application:Cursor floatlist CursorPos= 3 0 50 50 // cursor starting position
Application:Targets matrix Targets= 2 { pos%20x pos%20y pos%20z width%20x width%20y width%20z } 96 25 50 8 50 8 96 75 50 8 50 8 // target positions and widths in percentage coordinates
Application:Targets int TargetColor= 0xff0000 // target color (color)
Application:Targets string TargetTexture= % // path of target texture (inputfile)
Application:Targets int TestAllTargets= 1 0 0 1 // test all targets for cursor collision? 0: test only the visible current target, 1: test all targets (enumeration)
Connector:ConnectorOutput string ConnectorOutputAddress= % localhost:20320 % % // IP address/port to write to, e.g. localhost:20320
Application:Localization string Language= Default Default % % // Language for user messages
Application:Localization matrix LocalizedStrings= { German } { Timeout Be%20prepared%20... T } Inaktiv Achtung%20... T // Localized user messages
System:Core%20Connections string ApplicationPort= 4356 4200 1024 65535 // the Application module's listening port
System:Core%20Connections string ApplicationIP= 134.2.123.129 127.0.0.1 % % // the Application module's listening IP
System:Configuration matrix ApplicationVersion= { Framework Revision Build } 1 2.x ,%20 Dec%2014%202007 // Application version information
System:Configuration matrix ApplicationFilterChain= 3 { Filter%20Name Position%20String } ConnectorInput 2.9999 CursorFeedbackTask 3 ConnectorOutput 3.9999 // Application filter chain
Filtering:SpatialFilter int SpatialFilterType= 1 2 0 3 // spatial filter type 0: none, 1: full matrix, 2: sparse matrix, 3: common average reference (CAR) (enumeration)
Filtering:SpatialFilter:SpatialFilter intlist SpatialFilterCAROutput= 0 // list of output channels for the CAR if used
Filtering:SpatialFilter:SpatialFilter matrix SpatialFilter= { C3_OUT Cz_OUT C4_OUT } 8 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 % % // columns represent input channels, rows represent output channels

We changed what was discussed earlier, but things like AR coefficient are different (BCI2000 one says 16, the basket task says 20).

This is concerning because you mentioned in an earlier post to use the same parameters as Mu Rhythm feedback, but now it is suggested that was obsolete which is why I am slightly confused.

Thank you once more,

Mohammad

mellinger
Posts: 1208
Joined: 12 Feb 2003, 11:06

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by mellinger » 28 Feb 2020, 08:49

My question is: What even is the parameter file we should use for the cursor task when there are two versions
Previously, you stated that you were following the mu rhythm tutorial on the wiki. That tutorial uses the "basket task" configuration file. Why are you referring to a different parameter file now?
And the other version is what is in BCI2000 (Below).
I don't understand. What do you mean by "is in BCI2000", and where should I look for that "other version"?
to use the same parameters as Mu Rhythm feedback
I suggested that you use the same parameters as for mu rhythm feedback, not that you use a parameter file that has the phrase "mu rhythm feedback" in its name.

-Juergen

Edit: I now understand you have an old version of BCI2000 but use the BCI2000 wiki from the web, i.e. for the current version.

spine321
Posts: 13
Joined: 10 Feb 2020, 21:05

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by spine321 » 28 Feb 2020, 22:53

Hello,

I am still working on getting the most up to date executable files, but it seems like we got the executable from the following link to the 2012 BCI 2000 (http://bci2000.org/downloads/bin/BCI2000Setup.exe) from this page: https://www.bci2000.org/mediawiki/index ... 0_Binaries

This would explain why we had an old version of the Mu Rthym Feedback Program. I will keep working on it until cmake stops giving us an error after I press "configure".

In the meantime, we have found many new parameter files such as 1D Cursor task and FeedbackDemo in the parms folder. When you refer to the parameters to be the same as Mu Rthym feedback, what is the name of the parameter file you are referring to in the most up to date BCI2000 file?

Thank you so much for your help. In the future, if I have to suggest an EEG BCI program to anyone in my future career, I will definitely recommend this software to others mainly because of the strong support you and the community provide. I really appreciate it! And I apologize if my questions seemed redundant at times.

Mohammad

mellinger
Posts: 1208
Joined: 12 Feb 2003, 11:06

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by mellinger » 29 Feb 2020, 06:59

I will keep working on it until cmake stops giving us an error after I press "configure".
If the error message is about files that could not be found, make sure to repeat "SVN update" on the BCI2000 source folder until the operation results in success rather than failure. Sometimes the source download will fail to retrieve all files, for unknown reasons.
In the meantime, we have found many new parameter files such as 1D Cursor task and FeedbackDemo in the parms folder. When you refer to the parameters to be the same as Mu Rthym feedback, what is the name of the parameter file you are referring to in the most up to date BCI2000 file?
The one that's mentioned in the mu rhythm tutorial, "basket_task.prm".

-Juergen

spine321
Posts: 13
Joined: 10 Feb 2020, 21:05

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by spine321 » 01 Mar 2020, 22:13

Hello,

After pressing SVN update at least 50 times, we are still not getting Cursor task (See attachment below).

It turns out all of our .exe files were from 2012 so I want to use the most recent version of Cursor task and the other modules if it matters. Is there another way to get the most recent file of BCI2000 without having to compile and go through CMake? Could you perhaps send the most updated file of BCI2000 directly with all the executables?

I will keep trying SVN update, but I would appreciate any other advice you have. All of our files were from 2012, so getting the most recent version of BCI2000 will really help.

However, we did find the Basket task.prm file, so thank you for your direction. If we can just get the rest of the most updated software we should be good.

Thank you! Once more, I really appreciate your replies.

Mohammad Hadji
Attachments
Cursor.JPG
Cursor.JPG (81.19 KiB) Viewed 28808 times

mellinger
Posts: 1208
Joined: 12 Feb 2003, 11:06

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by mellinger » 02 Mar 2020, 06:21

Your screenshot does not show a CMake error but a CMake warning. The instructions tell you to install Qt and to define a CMake variable Qt5_DIR that points to your Qt installation. If this is done correctly, as described in the instructions, CMake will recognize Qt, and CursorTask will be built.

-Juergen

spine
Posts: 13
Joined: 02 Mar 2020, 22:07

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by spine » 02 Mar 2020, 22:15

Hello,

We were able to run cMake without errors this time and after running Visual studio,we got all of the .exe files except for a few, including cursor task.

Here is the error (I got this for other .exe but am just showing it for Cursor):

Error LNK1112 module machine type 'x64' conflicts with target machine type 'x86' CursorTask C:\BCI2000.xwork\build\CMakeFiles\core\Application\CursorTask\CursorTask.dir\Release\CursorFeedbackTask.obj 1

I looked at how to resolve this issue online: https://stackoverflow.com/questions/356 ... achine-typ

But after attempting all suggestions, I am still getting the error, even if I clean and build just Cursor Task. I even deleted the build file in the BCI2000 folder and used SVN to update it again, ran cMake, then Visual studio and still got the error.

If I use the Cursor task from either one of the installer links you shared earlier in this fourm, would it be the same .exe file as the most recent version of Cursor task? If there is I way I can get the .exe files I need for Theta feedback, I should be all set.

Thank you,

Mohammad
Attachments
exefiles.JPG
exefiles.JPG (106.36 KiB) Viewed 28791 times

mellinger
Posts: 1208
Joined: 12 Feb 2003, 11:06

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by mellinger » 03 Mar 2020, 04:19

We were able to run cMake without errors this time and after running Visual studio,we got all of the .exe files except for a few, including cursor task.
Here is the error (I got this for other .exe but am just showing it for Cursor):
I am confused. It seems you got the .exe files, so there was no linker error. Still you are having a linker error at the same time?
To resolve the linker error, delete the "BCI2000/build/CMakeFiles" folder, and the file "BCI2000/build/CMakeCache.txt". Then, run CMake again, double-clicking the file "Configure.sh.cmd" in the BCI2000 build folder.

When asked for the target architecture at the beginning of the CMake run, make sure to specify the architecture that your Qt installation has.

-Juergen

spine
Posts: 13
Joined: 02 Mar 2020, 22:07

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by spine » 03 Mar 2020, 21:35

Hello,

We got all of the executables we needed. Just to confirm one last time:

1. We do not use basket_Task.prm directly. We copied its parameters only. After doing this, a bar did not appear but instead a grey square showing up at odd places in the program with the ball shooting up occurred. Do you have any advice to fix this bug? I used the following code (Posted by Peter in 2015: viewtopic.php?t=2891) and it seems to work fine now:

Code: Select all

Filtering:SpatialFilter int SpatialFilterType= 1 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= { C3_OUT Cz_OUT C4_OUT } { F3 F4 T7 C3 Cz C4 T8 Pz } -0.25 0.00 -0.25 1.00 -0.25 0.00 0.00 -0.25 -0.20 -0.20 0.00 -0.20 1.00 -0.20 0.00 -0.20 0.00 -0.25 0.00 0.00 -0.25 1.00 -0.25 -0.25 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:Spectral%20Estimation:ARThread float FirstBinCenter= 0Hz 0Hz % % // Center of first frequency bin (in Hz)
Filtering:Spectral%20Estimation:ARThread float LastBinCenter= 30Hz 30Hz % % // Center of last frequency bin (in Hz)
Filtering:Spectral%20Estimation:ARThread float BinWidth= 6Hz 3Hz % % // Width of spectral bins (in Hz)
Filtering:Spectral%20Estimation:ARThread int OutputType= 0 0 0 2 // 0: Spectral Amplitude, 1: Spectral Power, 2: Coefficients (enumeration)
Filtering:AR%20Spectral%20Estimator:ARThread int ModelOrder= 20 16 0 % // AR model order
Filtering:AR%20Spectral%20Estimator:ARThread int EvaluationsPerBin= 15 15 1 % // Number of uniformly spaced evaluation points entering into a single bin value
Filtering:Spectral%20Estimation:SpectralEstimatorChoice int SpectralEstimator= 1 1 0 2 // Choice of spectral estimation algorithm, 0: None, 1: AR, 2: FFT (enumeration)
Filtering:Windowing:WindowingThread int WindowLength= 0.5s 0.5s % % // Length of window
Filtering:Windowing:WindowingThread int Detrend= 1 0 0 2 // Detrend data? 0: no, 1: mean, 2: linear (enumeration)
Filtering:Windowing:WindowingThread int WindowFunction= 0 0 0 3 // Window function 0: Rectangular, 1: Hamming, 2: Hann, 3: Blackman (enumeration)
Filtering:LinearClassifier matrix Classifier= 1 { input%20channel input%20element%20(bin) output%20channel weight } 2 12Hz 2 1 // Linear classification matrix in sparse representation
Filtering:LPFilter float LPTimeConstant= 1s 16s 0 % // time constant for the low pass filter
Filtering:ExpressionFilter string StartRunExpression= % // expression executed on StartRun
Filtering:ExpressionFilter string StopRunExpression= % // expression executed on StopRun
Filtering:ExpressionFilter matrix Expressions= 0 1 // expressions used to compute the output of the ExpressionFilter (rows are channels; empty matrix for none)
Filtering:Normalizer floatlist NormalizerOffsets= 2 0 10.9104 0 % % // normalizer offsets
Filtering:Normalizer floatlist NormalizerGains= 2 0 0.538485 0 % % // normalizer gain values
Filtering:Normalizer intlist Adaptation= 2 0 2 0 0 2 // 0: no adaptation, 1: zero mean, 2: zero mean, unit variance (enumeration)
Filtering:Normalizer matrix BufferConditions= 2 2 0 (Feedback)&&(TargetCode==1) 0 (Feedback)&&(TargetCode==2) // expressions corresponding to data buffers (columns correspond to output channels, multiple rows correspond to multiple buffers)
Filtering:Normalizer float BufferLength= 30s 9s % % // time window of past data per buffer that enters into statistic
Filtering:Normalizer string UpdateTrigger= (Feedback==0) // expression to trigger offset/gain update when changing from 0 (use empty string for continuous update)
Visualize:Processing%20Stages int VisualizeSpatialFilter= 0 0 0 1 // Visualize SpatialFilter output (boolean)
Visualize:Processing%20Stages int VisualizeSpectralEstimator= 0 0 0 1 // Visualize SpectralEstimator output (boolean)
Visualize:Processing%20Stages int VisualizeLinearClassifier= 1 0 0 1 // Visualize LinearClassifier output (boolean)
Visualize:Processing%20Stages int VisualizeExpressionFilter= 0 0 0 1 // Visualize ExpressionFilter output (boolean)
Visualize:Processing%20Stages int VisualizeLPFilter= 0 0 0 1 // Visualize LPFilter output (boolean)
Visualize:Processing%20Stages int VisualizeNormalizer= 0 0 0 1 // Visualize Normalizer output (boolean)
Application:Application%20Window:ApplicationWindow int WindowWidth= 640 640 0 % // width of Application window
Application:Application%20Window:ApplicationWindow int WindowHeight= 600 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)
Application:Sequencing:FeedbackTask float PreRunDuration= 2s 2s 0 % // duration of pause preceding first trial
Application:Sequencing:FeedbackTask float PreFeedbackDuration= 2s 2s 0 % // duration of target display prior to feedback
Application:Sequencing:FeedbackTask float FeedbackDuration= 10s 3s 0 % // duration of feedback
Application:Sequencing:FeedbackTask float PostFeedbackDuration= 1s 1s 0 % // duration of result display after feedback
Application:Sequencing:FeedbackTask float ITIDuration= 1s 1s 0 % // duration of inter-trial interval
Application:Sequencing:FeedbackTask float MinRunLength= 120s 120s 0 % // minimum duration of a run; if blank, NumberOfTrials is used
Application:Sequencing:FeedbackTask int NumberOfTrials= % 0 0 % // number of trials; if blank, MinRunLength is used
Application:Targets:FeedbackTask int NumberTargets= 2 2 0 255 // number of targets
Application:Targets:FeedbackTask intlist TargetSequence= 0 1 % % // fixed sequence in which targets should be presented (leave empty for random)
Application:Window:CursorFeedbackTask int RenderingQuality= 0 0 0 1 // rendering quality: 0: low, 1: high (enumeration)
Application:Sequencing:CursorFeedbackTask float MaxFeedbackDuration= 4s % 0 % // abort a trial after this amount of feedback time has expired
Application:3DEnvironment:CursorFeedbackTask floatlist CameraPos= 3 50 50 150 // camera position vector in percent coordinates of 3D area
Application:3DEnvironment:CursorFeedbackTask floatlist CameraAim= 3 50 50 50 // camera aim point in percent coordinates
Application:3DEnvironment:CursorFeedbackTask int CameraProjection= 0 0 0 2 // projection type: 0: flat, 1: wide angle perspective, 2: narrow angle perspective (enumeration)
Application:3DEnvironment:CursorFeedbackTask floatlist LightSourcePos= 3 50 50 150 // light source position in percent coordinates
Application:3DEnvironment:CursorFeedbackTask int LightSourceColor= 0xffffff // light source RGB color (color)
Application:3DEnvironment:CursorFeedbackTask int WorkspaceBoundaryColor= 0xffff00 0 % % // workspace boundary color (0xff000000 for invisible) (color)
Application:3DEnvironment:CursorFeedbackTask string WorkspaceBoundaryTexture= images\grid.bmp // path of workspace boundary texture (inputfile)
Application:Cursor:CursorFeedbackTask float CursorWidth= 10 10 0.0 % // feedback cursor width in percent of screen width
Application:Cursor:CursorFeedbackTask int CursorColorFront= 0xff0000 // cursor color when it is at the front of the workspace (color)
Application:Cursor:CursorFeedbackTask int CursorColorBack= 0xff0000 // cursor color when it is in the back of the workspace (color)
Application:Cursor:CursorFeedbackTask string CursorTexture= % // path of cursor texture (inputfile)
Application:Cursor:CursorFeedbackTask floatlist CursorPos= 3 50 50 50 // cursor starting position
Application:Targets:CursorFeedbackTask matrix Targets= 2 { pos%20x pos%20y pos%20z width%20x width%20y width%20z } 50 4 50 100 8 8 50 96 50 100 8 8 // target positions and widths in percentage coordinates
Application:Targets:CursorFeedbackTask int TargetColor= 0xff0000 // target color (color)
Application:Targets:CursorFeedbackTask string TargetTexture= % // path of target texture (inputfile)
Application:Targets:CursorFeedbackTask int TestAllTargets= 0 0 0 1 // test all targets for cursor collision? 0: test only the visible current target, 1: test all targets (enumeration)

2. Do you have a preference for a certain power computing method in the Spectral Signal Processing module or do you think AR is good for now?

3. Do you have any more advice or suggestions other than what was already mentioned?

Other than that it seems we are good for now. Thank you for all of your help!

Mohammad

mellinger
Posts: 1208
Joined: 12 Feb 2003, 11:06

Re: A Theta Power Band Controlled 1D Cursor Task-Parameter Questions

Post by mellinger » 04 Mar 2020, 06:27

We do not use basket_Task.prm directly. We copied its parameters only.
I don't understand. Please explain.
Do you have a preference for a certain power computing method in the Spectral Signal Processing module or do you think AR is good for now?
AR should be fine for now. Please note that the default method is amplitude computation, not power. Try amplitude first, and switch to power later to test whether it works better.

-Juergen

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests