Metadata-Version: 2.1
Name: vs-tabletop
Version: 1.0.0
Summary: Virtual Scanner Tabletop Games
Home-page: https://github.com/imr-framework/vs-tabletop
Author: imr-framework
Author-email: imr.framework2018@gmail.com
License: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Requires-Python: >=3
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: absl-py (==1.1.0)
Requires-Dist: astor (==0.7.1)
Requires-Dist: astunparse (==1.6.3)
Requires-Dist: bidict (==0.22.0)
Requires-Dist: cachelib (==0.9.0)
Requires-Dist: cachetools (==5.2.0)
Requires-Dist: certifi (==2022.6.15)
Requires-Dist: charset-normalizer (==2.1.0)
Requires-Dist: click (==8.1.3)
Requires-Dist: colorama (==0.4.4)
Requires-Dist: cycler (==0.10.0)
Requires-Dist: dominate (==2.6.0)
Requires-Dist: ellipsinator (==0.2.1)
Requires-Dist: Flask (==2.1.2)
Requires-Dist: Flask-Bootstrap (==3.3.7.1)
Requires-Dist: Flask-Login (==0.6.1)
Requires-Dist: Flask-Session (==0.4.0)
Requires-Dist: Flask-SocketIO (==5.2.0)
Requires-Dist: Flask-SQLAlchemy (==2.5.1)
Requires-Dist: Flask-WTF (==1.0.1)
Requires-Dist: flatbuffers (==1.12)
Requires-Dist: fonttools (==4.33.3)
Requires-Dist: gast (==0.2.2)
Requires-Dist: google-auth (==2.9.0)
Requires-Dist: google-auth-oauthlib (==0.4.6)
Requires-Dist: google-pasta (==0.2.0)
Requires-Dist: greenlet (==1.1.2)
Requires-Dist: grpcio (==1.47.0)
Requires-Dist: gunicorn (==20.1.0)
Requires-Dist: h11 (==0.13.0)
Requires-Dist: h5py (==3.7.0)
Requires-Dist: idna (==3.3)
Requires-Dist: imageio (==2.19.3)
Requires-Dist: importlib-metadata (==4.11.4)
Requires-Dist: itsdangerous (==2.1.2)
Requires-Dist: Jinja2 (==3.1.2)
Requires-Dist: keras (==2.9.0)
Requires-Dist: Keras-Applications (==1.0.8)
Requires-Dist: Keras-Preprocessing (==1.1.2)
Requires-Dist: kiwisolver (==1.0.1)
Requires-Dist: libclang (==14.0.1)
Requires-Dist: Markdown (==3.1)
Requires-Dist: MarkupSafe (==2.1.1)
Requires-Dist: matplotlib (==3.5.2)
Requires-Dist: mock (==2.0.0)
Requires-Dist: networkx (==2.8.4)
Requires-Dist: nibabel (==2.4.0)
Requires-Dist: numpy (==1.22.4)
Requires-Dist: numpy-stl (==2.17.1)
Requires-Dist: oauthlib (==3.2.0)
Requires-Dist: opencv-python (==4.6.0.66)
Requires-Dist: opt-einsum (==3.3.0)
Requires-Dist: packaging (==21.3)
Requires-Dist: pandas (==1.4.2)
Requires-Dist: pbr (==5.1.3)
Requires-Dist: phantominator (==0.6.4)
Requires-Dist: Pillow (==9.2.0)
Requires-Dist: plotly (==5.9.0)
Requires-Dist: protobuf (==3.19.4)
Requires-Dist: psycopg2 (==2.9.3)
Requires-Dist: pyasn1 (==0.4.8)
Requires-Dist: pyasn1-modules (==0.2.8)
Requires-Dist: pydicom (==1.2.2)
Requires-Dist: pymesh (==1.0.2)
Requires-Dist: pyparsing (==2.3.1)
Requires-Dist: pypulseq (==1.3.1.post1)
Requires-Dist: python-dateutil (==2.8.2)
Requires-Dist: python-engineio (==4.3.3)
Requires-Dist: python-socketio (==5.7.0)
Requires-Dist: python-utils (==3.3.3)
Requires-Dist: pytz (==2022.1)
Requires-Dist: PyWavelets (==1.3.0)
Requires-Dist: PyYAML (==5.1)
Requires-Dist: requests (==2.28.1)
Requires-Dist: requests-oauthlib (==1.3.1)
Requires-Dist: rsa (==4.8)
Requires-Dist: scikit-image (==0.19.3)
Requires-Dist: scipy (==1.8.1)
Requires-Dist: selenium (==3.141.0)
Requires-Dist: simple-websocket (==0.5.2)
Requires-Dist: six (==1.16.0)
Requires-Dist: SQLAlchemy (==1.4.37)
Requires-Dist: ssfp (==1.0.0)
Requires-Dist: stl-to-voxel (==0.9.2)
Requires-Dist: tenacity (==8.0.1)
Requires-Dist: tensorboard (==2.9.1)
Requires-Dist: tensorboard-data-server (==0.6.1)
Requires-Dist: tensorboard-plugin-wit (==1.8.1)
Requires-Dist: termcolor (==1.1.0)
Requires-Dist: tifffile (==2022.5.4)
Requires-Dist: tqdm (==4.64.0)
Requires-Dist: typing-extensions (==4.3.0)
Requires-Dist: urllib3 (==1.26.9)
Requires-Dist: virtual-scanner (==2.0.0.post5)
Requires-Dist: visitor (==0.1.3)
Requires-Dist: Werkzeug (==2.1.2)
Requires-Dist: wrapt (==1.14.1)
Requires-Dist: wsproto (==1.1.0)
Requires-Dist: WTForms (==3.0.1)
Requires-Dist: zipp (==3.8.0)

<h1 align="center">Virtual Scanner Tabletop Web Games</h3>
<p float="left">
<img title="PyPulseq Badge" src="https://img.shields.io/badge/made%20using-pypulseq-brightgreen" height="15"><img title="Virtual Scanner Badge" src="https://img.shields.io/badge/made%20using-virtual--scanner-blue" height="15">
</p>
<br>

Virtual Scanner Tabletop is an extension to [Virtual Scanner](https://github.com/imr-framework/virtual-scanner/) that comprises of educational games about MRI that can be run by simulation or connected to a real educational MRI scanner. Target audience include high school, college, and post-grad students as well as members of the MR and scientific community at large.   

## Quickstart
### Method 1: `pip install`
1. On the command line, make a new virtual environment. 
2. `pip install vs-tabletop`
3. cd into the main folder called "vstabletop" (`venv\Lib\site-packages\vstabletop`) and run `app.py`. Click into the link in the program output (examplee: http://127.0.0.1:5000/). Log in as admin using password `123456`. 
#### Troubleshooting 
(version 1.0.0b5) - You might encounter problems with installing Kiwisolver which requires Visual C++. If you have trouble getting the Visual C++, you can ignore the kiwisolver and perform the following steps:
1. Install vs-tabletop without dependencies: `pip install vs-tabletop==1.0.0b4 --no-deps`
2. After it's installed, find `requirements.txt` in the `vstabletop` folder and remove the `kiwisolver==1.0.1` line
3. Install the rest of the requirements: `pip install -r requirements.txt`
4. Run `app.py` the same way as described above. The games should be able to run normally.

### Method 2: Cloning 
1. Clone the repository.
2. Make a virtual environment, activate it, and install everything specified in `requirements.txt`
3. `cd` into the app directory and run `questions.py` to set up the database.
4. Run the app in one of two ways:
   (a) Run app.py using Pycharm or other IDE, or on the command line with `python app.py`
   (b) On the command line, set the FLASK_APP variable (`set FLASK_APP=app` on Windows, or `export FLASK_APP=app` on non-Windows). Then run the app with: `flask run`
5. Click into the link in the program output (example: http://127.0.0.1:5000/) or copy & paste it into the browser. Log in as admin using password `123456`.

Please provide feedback here after you've tried all the beginner games:smile:: https://forms.gle/HMby4NHcmrTLi5Ai7

## Tabletop Games
The eight tabletop games are grouped into 4 pairs, each containing a "beginner" game and an "advanced" game. 
Games 1, 3, 5, 7 are beginner games and the games 2, 4, 6, 8 are advanced games. 

| # | Game          | Conceptsr |
| --- | ------------- | ------------- |
| 1 | What's in an image?      | FOV, resolution, windowing  |
| 2 | K-space magiK            | projection imaging, k-space  |
| 3 | Brains, please!          | contrast, T1/T2/PD, TR/TE/FA | 
| 4 | Fresh blood              | flow imaging |
| 5 | Proton's got moves       | M9, precession, RF pulses, signal detection | 
| 6 | Relaxation station       | T1 and T2 relaxation, FID | 
| 7 | Puzzled by projection I  | 1D and 2D projection (forward) |
| 8 | Puzzled by projection II | 1D and 2D projection (inverse)|

## Screenshots 
Screenshots are in-development previews of the games. They will be updated at the first release. 

### Login page
![login](https://user-images.githubusercontent.com/31249056/186200814-f0abacb0-a4ad-490d-9b64-76e72f4bb6a9.png)

### Game navigation
![index](https://user-images.githubusercontent.com/31249056/186200755-38525e6b-4196-49d0-a23d-320a164ff2b4.png)

### Module 1 (beginner): What's in an image?
![game1](https://user-images.githubusercontent.com/31249056/186200870-c4d1a934-bf80-4f34-95e4-698a1fe6dee5.png)

### Module 2 (beginner): Brains, please!
![game3](https://user-images.githubusercontent.com/31249056/186200887-3504892c-3367-4fe4-a222-fc35fb869f8e.png)

### Module 3 (beginner): Proton's got moves
![game5](https://user-images.githubusercontent.com/31249056/186201062-cae3af09-749e-4e0a-a254-b803f7e22772.png)

### Module 4 (beginner): Puzzled by Projection I 
![game7](https://user-images.githubusercontent.com/31249056/186201082-00fc2dad-a9b1-4911-8862-99fbd73cccdc.png)

# References
Brain images from the Coursera Neurohacking in R (https://www.kaggle.com/datasets/ilknuricke/neurohackinginrimages) were used in Game 2.
