This fork is for private use in aolabs and is not intended to be a stable release
This package contains Python code to run electrophysiology behavioral tasks, with emphasis on brain-machine interface (BMIs) tasks. This package differs from other similar packages (e.g., BCI2000--http://www.schalklab.org/research/bci2000) in that it is primarily intended for intracortical BMI experiments.
This package has been used with the following recording systems:
(Outdated) code documentation can be found at http://carmenalab.github.io/bmi3d_docs/
sudo xargs apt-get -y install < requirements.system
(none at this time) 16.04 64bit
3.7.8
Visual C++ Build tools (for the 'traits' package)
pip install aolab-bmi3d
git clone -b develop https://github.com/aolabNeuro/brain-python-interface.git
cd brain-python-interface
pip3 install -r requirements.txt
pip3 install -e .
./install-rabbitmq.sh
install
folder, execute build_docker.sh
to build the imageinstall
folder, execute run_docker.sh
to load the image. Annoyingly at this time, because the source directory is mounted in a way that is volatile, the bash shell will 'reinstall' the bmi3d package every time you load the imageGraphics generation from inside the image has only been tested in Ubuntu. To test, load the image using run_docker.sh
and
cd /src/tests/unit_tests/
python3 test_built_in_vfb_task.py
If successful, you'll see the pygame window pop up looking like a poorly-made video game. If unsuccessful, you'll see the graphics in the terminal itself in ASCII art.
cd db
touch db.sql # Make empty file for database
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py makemigrations tracker
python3 manage.py migrate # make sure to do this twice!
Several use cases:
./runserver.sh
python3 manage.py runserver
from db import dbfunctions as db
te = db.get_task_entries()
Once the server is running, open up Chrome and navigate to localhost:8000/setup
Under "tasks", add a task to the system by giving it the python path for your task class. See documentation link above for details on how to write a task. There are a couple of built in tasks to help you get started.
riglib.experiment.mocks.MockSequenceWithGenerator
just to check that the user interface worksbuilt_in_tasks.passivetasks.TargetCaptureVFB2DWindow
. This will be a "visual feedback" task in which a cursor automatically does the center-out task, a standard task in motor ephys.Navigate to http://localhost:8000/exp_log/ in chrome. Then press 'Start new experiment' and run your task.
On Ubuntu, use the ufw
package to open the port that Django is using
sudo ufw allow 8000/tcp
sudo ufw allow ssh
sudo ufw enable # this is needed even if raspi-config enables SSH
Then start the server with
python3 manage.py runserver 0.0.0.0:8000
This package has a lot of dependencies which makes installation somewhat brittle due to versions of different dependencies not getting along.
venv
in python3) or in a Docker container is recommended to try to isolate the package from version conflict issues.tests/unit_tests/
to try to isolate which components may not be working correctly. Issues in riglib
will be easier to fix than issues in the database.Javascript tests require the qunit library. To run the tests from the browser, open up db/html/static/resources/js/qunit.html
in your browser of choice for running experiments.
If you are developing in javascript, you may want to run the tests from the command line. To install the qunit command-line setup, execute as root
cd db/html/static/resources/js
apt install npm
npm install -g qunit
npm install jquery
npm install jsdom
Then run qunit
to run the tests in the test
folder.