Metadata-Version: 2.1
Name: vs-tabletop
Version: 1.0.0b1
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: pytorch3d (==0.0.1)
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: tensorflow (==2.9.1)
Requires-Dist: tensorflow-estimator (==2.9.0)
Requires-Dist: tensorflow-io-gcs-filesystem (==0.26.0)
Requires-Dist: termcolor (==1.1.0)
Requires-Dist: tifffile (==2022.5.4)
Requires-Dist: torch (==1.12.0)
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)
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
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` and try game 1, 3, 5, 7 for yourself! 
6. For each game, you could follow the instructions panel and perform steps to fill the progress bar. This portion gets you 3 out of 5 stars. You can opt to answer the multiple choice questions for up to two additional stars. You could play freely with the inputs too. 

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)

