diff --git a/talks/introduction/example_project/myscript.py b/talks/introduction/example_project/myscript.py
new file mode 100644
index 0000000000000000000000000000000000000000..3b768e3f0f9e01019ec53b555ddbcacb3fa1174f
--- /dev/null
+++ b/talks/introduction/example_project/myscript.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env fslpython
+
+# That first line up there ensures that your
+# script will be executed in the fslpython
+# environment. If you are writing a general
+# Python script, you should use this line
+# instead: #!/usr/bin/env python
+
+
+# In Python, we need to "import" libraries
+# (called modules) before we can use them.
+import sys
+import nibabel as nib
+
+# Python uses indentation instead of braces
+# for all of its control structures - if
+# while, and for statements, functions and
+# classes, and so on and so forth.
+#
+# The standard convention for indentation
+# is four spaces. Please don't use tab
+# characters!
+def main():
+
+    # We can get to our command
+    # line arguments via sys.argv
+    fpath = sys.argv[1]
+
+    # We can use nibabel to load
+    # NIFTI images (and other
+    # neuroimaging data formats)
+    img = nib.load(fpath)
+    data = img.get_data()
+
+    # Now we're working with a
+    # numpy array.
+    nzmean = data[data != 0].mean()
+
+    print('mean:', nzmean)
+
+    sys.exit(0)
+
+
+# This bit is the Python equivalent of
+# "int main()" in a C or C++ program.
+if __name__ == '__main__':
+    main()
diff --git a/talks/introduction/pytreat_intro.ipynb b/talks/introduction/pytreat_intro.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..270b2b264db137fb6bb4101c1dd00a3bd2b0eb42
--- /dev/null
+++ b/talks/introduction/pytreat_intro.ipynb
@@ -0,0 +1,610 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Welcome to the WIN PyTreat 2018!\n",
+    "\n",
+    "\n",
+    "Program: https://docs.google.com/document/d/10CwLEhUi-YiwfC2F40QCVm6eEVwKiaXkfTKz67xWAfM/edit?usp=sharing\n",
+    "\n",
+    "\n",
+    "__Get your laptop ready!__\n",
+    "\n",
+    "__Make sure you have FSL 5.0.10 installed and working!__\n",
+    "\n",
+    "__Open this page in your web browser!__\n",
+    "\n",
+    "https://git.fmrib.ox.ac.uk/fsl/pytreat-2018-practicals/tree/master/talks/introduction/pytreat_intro.ipynb\n",
+    "\n",
+    "\n",
+    "## Overview\n",
+    "\n",
+    "\n",
+    "* [Python in a nutshell](#python-in-a-nutshell)\n",
+    "* [`fslpython`](#fslpython)\n",
+    "* [Running Python scripts](#running-python-scripts)\n",
+    "* [Interactive Python: IPython](#interactive-python-ipython)\n",
+    "* [Python editors](#python-editors)\n",
+    "* [Python in your browser: Jupyter Notebook](#python-in-your-browser-jupyter-notebook)\n",
+    "* [Git](#git)\n",
+    "* [The PyTreat practicals](#the-pytreat-practicals)\n",
+    "\n",
+    "\n",
+    "<a class=\"anchor\" id=\"python-in-a-nutshell\"></a>\n",
+    "## Python in a nutshell\n",
+    "\n",
+    "\n",
+    "### Pros\n",
+    "\n",
+    "\n",
+    "* _Flexible_ Feel free to use functions, classes, objects, modules and\n",
+    "  packages. Or don't - it's up to you!\n",
+    "\n",
+    "* _Fast_ If you do things right (in other words, if you use `numpy`)\n",
+    "\n",
+    "* _Dynamically typed_ No need to declare your variables, or specify their\n",
+    "  types."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a = 'Great, I am _so_ sick of writing \"char *a;\"!'\n",
+    "print(a)\n",
+    "\n",
+    "a = 12345\n",
+    "print('a is now an number!', a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* _Intuitive syntax_ How do I run some code for each of the elements in my\n",
+    "  list?"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a = [1, 2, 3, 4, 5]\n",
+    "\n",
+    "for elem in a:\n",
+    "    print(elem)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Cons\n",
+    "\n",
+    "* _Dynamically typed_ Easier to make mistakes, harder to catch them\n",
+    "\n",
+    "* _No compiler_ See above\n",
+    "\n",
+    "* _Slow_ if you don't do things the right way\n",
+    "\n",
+    "* _Python 2 is not the same as Python 3_ But there's an easy solution: Forget\n",
+    "  that Python 2 exists.\n",
+    "\n",
+    "* _Hard to manage different versions of python_ But we have a solution for\n",
+    "  you: `fslpython`.\n",
+    "\n",
+    "\n",
+    "<a class=\"anchor\" id=\"fslpython\"></a>\n",
+    "## `fslpython`\n",
+    "\n",
+    "\n",
+    "FSL 5.0.10 and newer comes with its own version of Python, bundled with nearly\n",
+    "all of the scientific libraries that you are likely to need.\n",
+    "\n",
+    "\n",
+    "So if you use `fslpython` for all of your development, you can be sure that it\n",
+    "will work in FSL!\n",
+    "\n",
+    "\n",
+    "> `fslpython` is based on _conda_ and, in FSL 5.0.10, is Python version\n",
+    "> 3.5.2. You can read more about conda [here](https://conda.io/docs/).\n",
+    "\n",
+    "\n",
+    "<a class=\"anchor\" id=\"running-python-scripts\"></a>\n",
+    "## Running Python scripts\n",
+    "\n",
+    "\n",
+    "Here's a basic Python script:\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> #!/usr/bin/env fslpython\n",
+    ">\n",
+    "> # That first line up there ensures that your\n",
+    "> # script will be executed in the fslpython\n",
+    "> # environment. If you are writing a general\n",
+    "> # Python script, you should use this line\n",
+    "> # instead: #!/usr/bin/env python\n",
+    ">\n",
+    ">\n",
+    "> # In Python, we need to \"import\" libraries\n",
+    "> # (called modules) before we can use them.\n",
+    "> import sys\n",
+    "> import nibabel as nib\n",
+    ">\n",
+    "> # Python uses indentation instead of braces\n",
+    "> # for all of its control structures - if\n",
+    "> # while, and for statements, functions and\n",
+    "> # classes, and so on and so forth.\n",
+    "> #\n",
+    "> # The standard convention for indentation\n",
+    "> # is four spaces. Please don't use tab\n",
+    "> # characters!\n",
+    "> def main():\n",
+    ">\n",
+    ">     # We can get to our command\n",
+    ">     # line arguments via sys.argv\n",
+    ">     fpath = sys.argv[1]\n",
+    ">\n",
+    ">     # We can use nibabel to load\n",
+    ">     # NIFTI images (and other\n",
+    ">     # neuroimaging data formats)\n",
+    ">     img = nib.load(fpath)\n",
+    ">     data = img.get_data()\n",
+    ">\n",
+    ">     # Now we're working with a\n",
+    ">     # numpy array.\n",
+    ">     nzmean = data[data != 0].mean()\n",
+    ">\n",
+    ">     print('mean:', nzmean)\n",
+    ">\n",
+    ">     sys.exit(0)\n",
+    ">\n",
+    ">\n",
+    "> # This bit is the Python equivalent of\n",
+    "> # \"int main()\" in a C or C++ program.\n",
+    "> if __name__ == '__main__':\n",
+    ">     main()\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "__Exercise__ Save the above code to a file called `script.py`, then run this\n",
+    "in a terminal (replace `/path/to/some/image.nii.gz` with a path to some image\n",
+    "on your computer):\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> chmod a+x script.py\n",
+    "> ./script.py /path/to/some/image.nii.gz\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "<a class=\"anchor\" id=\"interactive-python-ipython\"></a>\n",
+    "## Interactive Python: IPython\n",
+    "\n",
+    "\n",
+    "Python is an [_interpreted\n",
+    "language_](https://en.wikipedia.org/wiki/Interpreted_language), like MATLAB.  So\n",
+    "you can either write your code into a file, and then run that file, or you can\n",
+    "type code directly into a Python interpreter.\n",
+    "\n",
+    "\n",
+    "Python has a standard interpreter built-in - run `fslpython` in a terminal,\n",
+    "and see what happens (use CTRL+D to exit).\n",
+    "\n",
+    "\n",
+    "__But__ there is another interpreter called [`ipython`](https://ipython.org/)\n",
+    "which is vastly superior to the standard Python interpreter. Use `ipython`\n",
+    "instead! It is already installed in `fslpython`, but we just need to create a\n",
+    "link to it - do this now in a terminal:\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> # You might need to \"sudo\" this\n",
+    "> # if your version of FSL needs\n",
+    "> # admin privileges to modify.\n",
+    "> ln -s $FSLDIR/fslpython/envs/fslpython/bin/ipython $FSLDIR/bin/fslipython\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "Now if you want to do some interactive work, you can use `fslipython` in a\n",
+    "terminal.\n",
+    "\n",
+    "\n",
+    "__Exercise__ Do it now! Start `fslipython`, then copy/paste this code into the\n",
+    "prompt!\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> # this line is not python - it is\n",
+    "> # specific to ipython/jupyter notebook\n",
+    "> %matplotlib\n",
+    ">\n",
+    "> import numpy as np\n",
+    ">\n",
+    "> x = np.concatenate(([0.25, 0.75], np.arange(0.1, 1.0, 0.1)))\n",
+    "> y = np.concatenate(([0.75, 0.75], -np.sin(np.linspace(np.pi / 4, 3 * np.pi / 4, 9))))\n",
+    ">\n",
+    "> import matplotlib.pyplot as plt\n",
+    ">\n",
+    "> fig = plt.figure()\n",
+    "> ax  = fig.add_subplot(111)\n",
+    ">\n",
+    "> ax.scatter(x, y)\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "<a class=\"anchor\" id=\"python-editors\"></a>\n",
+    "## Python editors\n",
+    "\n",
+    "\n",
+    "> Summary:\n",
+    ">   - Make your tab key insert four spaces. Don't use tab characters in Python\n",
+    ">     code.\n",
+    ">\n",
+    ">   - Use [Spyder](https://pythonhosted.org/spyder/) if you want a MATLAB-like\n",
+    ">     envionment (focus on analysis, rather than coding).\n",
+    ">\n",
+    ">   - Use [PyCharm](https://www.jetbrains.com/pycharm/) if you want an IDE-like\n",
+    ">     environment (focus on coding, rather than analysis).\n",
+    ">\n",
+    ">   - Use [Atom](https://atom.io/) or [VS Code](https://code.visualstudio.com/)\n",
+    ">     if you like using the latest and greatest.\n",
+    ">\n",
+    ">   - If you like your existing editor, use it. But you will be better off if\n",
+    ">     you can integrate it with `fslpython`, [pylint](https://www.pylint.org/)\n",
+    ">     and [pyflakes](https://github.com/PyCQA/pyflakes).\n",
+    "\n",
+    "\n",
+    "You can use any text editor that you want to edit Python files. But the one\n",
+    "golden rule that you must follow, no matter what editor you use:\n",
+    "\n",
+    "\n",
+    "__Configure your tab key to insert four spaces. Don't use tab characters in\n",
+    "Python code!__\n",
+    "\n",
+    "\n",
+    "This is the [standard\n",
+    "convention](https://www.python.org/dev/peps/pep-0008/#indentation) for Python\n",
+    "code. If you deviate from this convention, and somebody else needs to work\n",
+    "with your code, they will be angry at you!\n",
+    "\n",
+    "\n",
+    "Now, with that out of the way, there are several good Python editors available\n",
+    "to you. If you are getting started with Python, we recommend\n",
+    "[PyCharm](https://www.jetbrains.com/pycharm/) or\n",
+    "[Spyder](https://pythonhosted.org/spyder/).\n",
+    "\n",
+    "\n",
+    "If you are used to MATLAB, and you do a lot of experimenting or interactive\n",
+    "work, then you might like Spyder. If you spend most of your time writing code\n",
+    "rather than experimenting, then go with PyCharm.\n",
+    "\n",
+    "\n",
+    "### Spyder\n",
+    "\n",
+    "\n",
+    "Spyder is a MATLAB-like environment for Python. It has a code editor and an\n",
+    "interactive IPython prompt. You can inspect variables that are in your\n",
+    "workspace, plot data, and so on and so forth.\n",
+    "\n",
+    "\n",
+    "Beyond that, Spyder is fairly simple - it does not have much in the way of\n",
+    "project management tools, or integration with version control (i.e. `git`).\n",
+    "\n",
+    "\n",
+    "Spyder can be installed directly into `fslpython`:\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> # If your FSL installation requires\n",
+    "> # administrative privileges to modify,\n",
+    "> # you will need to prefix these\n",
+    "> # commands with sudo.\n",
+    "> $FSLDIR/fslpython/bin/conda install -n fslpython -y spyder\n",
+    "> ln -s $FSLDIR/fslpython/envs/fslpython/bin/spyder $FSLDIR/bin/fslspyder\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "Now to run Spyder, you can just type:\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> fslspyder &\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "Now you need to make sure that Spyder is using the `fslpython` environment to\n",
+    "run your code.\n",
+    "\n",
+    "\n",
+    "1. Go to _python_ (the menu) > _Preferences_ > Python Interpreter\n",
+    "2. Make sure that _Use the following Python interpreter_ is selected\n",
+    "3. Make sure that the path is `$FSLDIR/fslpython/envs/fslpython/bin/python`\n",
+    "   (for your specific value of `$FSLDIR`).\n",
+    "\n",
+    "\n",
+    "Type the following into the console to test that everything is working:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "plt.plot([1, 2, 3], [4, 5, 6])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### PyCharm\n",
+    "\n",
+    "\n",
+    "PyCharm is a general-purpose Python development environment. Unlike Spyder, it\n",
+    "does not have an integrated console or variable explorer. But it has more\n",
+    "tools to help you write code, and better file management/version control\n",
+    "integration.\n",
+    "\n",
+    "\n",
+    "And it is also easy to install - simply download the Community edition from\n",
+    "the [home page](https://www.jetbrains.com/pycharm/). Then, if you are on a\n",
+    "mac, double-click the `.dmg` file, and drag PyCharm into your `/Applications/`\n",
+    "folder. Then double-click on PyCharm to start it.\n",
+    "\n",
+    "\n",
+    "Once you have chosen a theme, you will be asked if you would like to create a\n",
+    "_Launcher script_ - do this, because you will then be able to open files from\n",
+    "the terminal by typing `charm [filename]`.\n",
+    "\n",
+    "\n",
+    "Now you will be presented with a _Welcome to PyCharm_ window. __Before doing\n",
+    "anything else__, click on the _Configure_ button down in the bottom right, and\n",
+    "choose _Preferences_. Then in the _Project Interpreter_ section:\n",
+    "\n",
+    "\n",
+    "1. Click on the gear button and choose _Add local..._\n",
+    "2. Choose _Existing environment_\n",
+    "3. Click on the _..._ button, and navigate to\n",
+    "   `$FSLDIR/fslpython/envs/fslpython/bin/python`.\n",
+    "\n",
+    "\n",
+    "### Other options\n",
+    "\n",
+    "\n",
+    "Emacs is capable of being used as a fully-fledged Python IDE, if you have the\n",
+    "time and patience to configure it.\n",
+    "\n",
+    "If you are the fashionable sort, try one of these:\n",
+    "\n",
+    "- [Visual Studio Code](https://code.visualstudio.com/)\n",
+    "- [Atom](https://atom.io/)\n",
+    "\n",
+    "\n",
+    "<a class=\"anchor\" id=\"python-in-your-browser-jupyter-notebook\"></a>\n",
+    "## Python in your browser: Jupyter Notebook\n",
+    "\n",
+    "\n",
+    "It is possible to do your Python-based development and experimentation inside\n",
+    "your web browser, thanks to the [Jupyter project](https://jupyter.org/).\n",
+    "\n",
+    "\n",
+    "Jupyter works in the following way:\n",
+    "\n",
+    "1. You start a Juptyer web server on your computer. This web server provides\n",
+    "   the environment in which your Python code is executed.\n",
+    "\n",
+    "2. You open https://localhost:8888 (or similar) in a web browser - this opens\n",
+    "   a connection to the (locally running) web server.\n",
+    "\n",
+    "3. You start a \"Notebook\" (Jupyter's version of a file), and start typing.\n",
+    "   You can put text, LaTeX, and of course Python code into a notebook.\n",
+    "\n",
+    "4. All of the code that you write gets sent to the web server and\n",
+    "   executed. Then the results get sent back to the web browser, and displayed\n",
+    "   in your notebook - magic!\n",
+    "\n",
+    "\n",
+    "All of the PyTreat practicals are written in a Jupyter notebook. Some of the\n",
+    "talks are too - you're looking at a Jupyter Notebook right now!\n",
+    "\n",
+    "\n",
+    "So you're going to need to install Jupyter to get the most out of the\n",
+    "practicals that we have prepared for you.\n",
+    "\n",
+    "\n",
+    "__Exercise__ Install Jupyter into `fslpython` - run these commands in a\n",
+    "terminal:\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> # Remember to prefix with sudo if your\n",
+    "> # FSL install needs admin to modify.\n",
+    "> $FSLDIR/fslpython/bin/conda install -n fslpython -y jupyter\n",
+    "> ln -s $FSLDIR/fslpython/envs/fslpython/bin/jupyter $FSLDIR/bin/fsljupyter\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "<a class=\"anchor\" id=\"git\"></a>\n",
+    "## Git\n",
+    "\n",
+    "\n",
+    "All the cool kids these days use [git](https://git-scm.com/) to\n",
+    "collaboratively work on their Python code.\n",
+    "\n",
+    "\n",
+    "Git is different from CVS and SVN in that it is _distributed_. In CVS and SVN,\n",
+    "there is only one central repository. You check out a copy of the source from\n",
+    "the repository, make some changes, and then commit those changes back to the\n",
+    "central repository.\n",
+    "\n",
+    "\n",
+    "In git, there are multiple repositories. There is usually one repository which\n",
+    "acts as the central one, but you will _clone_ (or _fork_) that central\n",
+    "repository to create your own full copy of the repository.\n",
+    "\n",
+    "\n",
+    "Then, you can make changes and commit them in your own repository. And at any\n",
+    "point, you can push your changes back to the central repository.\n",
+    "\n",
+    "\n",
+    "### WIN's gitlab server\n",
+    "\n",
+    "\n",
+    "https://git.fmrib.ox.ac.uk/\n",
+    "\n",
+    "\n",
+    "If you have a FMRIB account, then you also have a Gitlab account. Gitlab is a\n",
+    "git server that you can use to store your \"central\" git repository.  Gitlab is\n",
+    "very similar to https://www.github.com, but it is managed by WIN, and your\n",
+    "code is not publicly visible (although it can be if you want).  Gitlab backs\n",
+    "up your code automatically, and has a nice web interface.\n",
+    "\n",
+    "You can have up to 10 projects on your gitlab account - talk to the FMRIB IT\n",
+    "people if you need more.\n",
+    "\n",
+    "\n",
+    "### Using git and gitlab\n",
+    "\n",
+    "\n",
+    "> We need to go through a couple of intiial configuration steps before\n",
+    "> proceeding. You only need to do this once (for each computer that you use).\n",
+    ">\n",
+    "> First, run these commands to configure git on your system.\n",
+    ">\n",
+    "> ```\n",
+    "> git config --global user.name \"Your name\"\n",
+    "> git config --global user.email \"Your email address\"\n",
+    "> ```\n",
+    ">\n",
+    "> Now you need to create a SSH key pair, so your computer can talk to the\n",
+    "> gitlab server without you having to log in. Don't be scared - there are\n",
+    "> detailed instructions on doing this at\n",
+    "> https://git.fmrib.ox.ac.uk/help/ssh/README.md - follow the instructions\n",
+    "> under the section entitled __Generating a new SSH key pair__.\n",
+    "\n",
+    "\n",
+    "Working with git and gitlab generally involves these steps:\n",
+    "\n",
+    "1. Add new files to your local repository, or make changes to existing files.\n",
+    "2. Run `git add` on the new/changed files to _stage_ them.\n",
+    "3. Run `git commit` to commit all staged changes to your local repository.\n",
+    "4. Run `git push` to push those changes to your gitlab repository.\n",
+    "\n",
+    "\n",
+    "When you start working on a new project (or if you have an existing project\n",
+    "that you want to put into git):\n",
+    "\n",
+    "\n",
+    "__1. Create a project directory__\n",
+    "\n",
+    "Or navigate to your existing project directory.\n",
+    "\n",
+    "\n",
+    "__2. Turn the directory into a git repository__\n",
+    "\n",
+    "> ```\n",
+    "> cd path/to/super/cool/project\n",
+    "> git init\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "__3. Add your files to git__\n",
+    "\n",
+    "If you want to add all of the files in your project directory into git, type\n",
+    "this:\n",
+    "\n",
+    "> ```\n",
+    "> git add .\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "Otherwise, if you only want certain files in git, then `git add` them one by\n",
+    "one (or with standard bash file patterns).\n",
+    "\n",
+    "You should avoid putting large binary files or data files into git - it works\n",
+    "best with source code. Talk to the FMRIB IT people if you really need to store\n",
+    "large files in git, as they can help you with this.\n",
+    "\n",
+    "\n",
+    "__4. Commit your changes__\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> git commit -m \"A useful message describing the changes you are committing.\"\n",
+    "> ```\n",
+    "\n",
+    "\n",
+    "__5. Create a repository for your project on gitlab__\n",
+    "\n",
+    "\n",
+    "Log in to gitlab (https://git.fmrib.ox.ac.uk/), then click on the _+_ button\n",
+    "towards the top right, and select _New project_. Give the project a name and\n",
+    "choose its visiblity (note that _Public_ means your project will be visible to\n",
+    "the world).\n",
+    "\n",
+    "\n",
+    "Now, follow the instructions under __Existing Git repository__ to \"link\" your\n",
+    "local project repository to the one on gitlab.\n",
+    "\n",
+    "\n",
+    "__6. Develop your super cool project!__\n",
+    "\n",
+    "\n",
+    "Now you can get to work! Whenever you make changes to your code that you want\n",
+    "saved,  follow the `git add`, `git commit`, `git push` steps described above.\n",
+    "\n",
+    "\n",
+    "For example, let's say we have added a new file called `cool_module.py`.  To\n",
+    "get this into git, we would do the following:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "git add cool_module.py\n",
+    "git commit -m \"Added cool module. It's super cool\"\n",
+    "git push origin master"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a class=\"anchor\" id=\"the-pytreat-practicals\"></a>\n",
+    "## The PyTreat practicals\n",
+    "\n",
+    "\n",
+    "All of the practicals for PyTreat are hosted in a git repository at:\n",
+    "\n",
+    "\n",
+    "https://git.fmrib.ox.ac.uk/fsl/pytreat-2018-practicals\n",
+    "\n",
+    "\n",
+    "So let's go get them!\n",
+    "\n",
+    "\n",
+    "> ```\n",
+    "> git clone git@git.fmrib.ox.ac.uk:fsl/pytreat-2018-practicals.git\n",
+    "> cd pytreat-2018-practicals\n",
+    "> fsljupyter notebook\n",
+    "> ```"
+   ]
+  }
+ ],
+ "metadata": {},
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/talks/introduction/pytreat_intro.md b/talks/introduction/pytreat_intro.md
new file mode 100644
index 0000000000000000000000000000000000000000..cc9c4fce4d121ee0f4a8d698a813d2c369019246
--- /dev/null
+++ b/talks/introduction/pytreat_intro.md
@@ -0,0 +1,565 @@
+# Welcome to the WIN PyTreat 2018!
+
+
+Program: https://docs.google.com/document/d/10CwLEhUi-YiwfC2F40QCVm6eEVwKiaXkfTKz67xWAfM/edit?usp=sharing
+
+
+__Get your laptop ready!__
+
+__Make sure you have FSL 5.0.10 installed and working!__
+
+__Open this page in your web browser!__
+
+https://git.fmrib.ox.ac.uk/fsl/pytreat-2018-practicals/tree/master/talks/introduction/pytreat_intro.ipynb
+
+
+## Overview
+
+
+* [Python in a nutshell](#python-in-a-nutshell)
+* [`fslpython`](#fslpython)
+* [Running Python scripts](#running-python-scripts)
+* [Interactive Python: IPython](#interactive-python-ipython)
+* [Python editors](#python-editors)
+* [Python in your browser: Jupyter Notebook](#python-in-your-browser-jupyter-notebook)
+* [Git](#git)
+* [The PyTreat practicals](#the-pytreat-practicals)
+
+
+<a class="anchor" id="python-in-a-nutshell"></a>
+## Python in a nutshell
+
+
+### Pros
+
+
+* _Flexible_ Feel free to use functions, classes, objects, modules and
+  packages. Or don't - it's up to you!
+
+* _Fast_ If you do things right (in other words, if you use `numpy`)
+
+* _Dynamically typed_ No need to declare your variables, or specify their
+  types.
+
+
+```
+a = 'Great, I am _so_ sick of writing "char *a;"!'
+print(a)
+
+a = 12345
+print('a is now an number!', a)
+```
+
+
+* _Intuitive syntax_ How do I run some code for each of the elements in my
+  list?
+
+
+```
+a = [1, 2, 3, 4, 5]
+
+for elem in a:
+    print(elem)
+```
+
+
+### Cons
+
+* _Dynamically typed_ Easier to make mistakes, harder to catch them
+
+* _No compiler_ See above
+
+* _Slow_ if you don't do things the right way
+
+* _Python 2 is not the same as Python 3_ But there's an easy solution: Forget
+  that Python 2 exists.
+
+* _Hard to manage different versions of python_ But we have a solution for
+  you: `fslpython`.
+
+
+<a class="anchor" id="fslpython"></a>
+## `fslpython`
+
+
+FSL 5.0.10 and newer comes with its own version of Python, bundled with nearly
+all of the scientific libraries that you are likely to need.
+
+
+So if you use `fslpython` for all of your development, you can be sure that it
+will work in FSL!
+
+
+> `fslpython` is based on _conda_ and, in FSL 5.0.10, is Python version
+> 3.5.2. You can read more about conda [here](https://conda.io/docs/).
+
+
+<a class="anchor" id="running-python-scripts"></a>
+## Running Python scripts
+
+
+Here's a basic Python script:
+
+
+> ```
+> #!/usr/bin/env fslpython
+>
+> # That first line up there ensures that your
+> # script will be executed in the fslpython
+> # environment. If you are writing a general
+> # Python script, you should use this line
+> # instead: #!/usr/bin/env python
+>
+>
+> # In Python, we need to "import" libraries
+> # (called modules) before we can use them.
+> import sys
+> import nibabel as nib
+>
+> # Python uses indentation instead of braces
+> # for all of its control structures - if
+> # while, and for statements, functions and
+> # classes, and so on and so forth.
+> #
+> # The standard convention for indentation
+> # is four spaces. Please don't use tab
+> # characters!
+> def main():
+>
+>     # We can get to our command
+>     # line arguments via sys.argv
+>     fpath = sys.argv[1]
+>
+>     # We can use nibabel to load
+>     # NIFTI images (and other
+>     # neuroimaging data formats)
+>     img = nib.load(fpath)
+>     data = img.get_data()
+>
+>     # Now we're working with a
+>     # numpy array.
+>     nzmean = data[data != 0].mean()
+>
+>     print('mean:', nzmean)
+>
+>     sys.exit(0)
+>
+>
+> # This bit is the Python equivalent of
+> # "int main()" in a C or C++ program.
+> if __name__ == '__main__':
+>     main()
+> ```
+
+
+__Exercise__ Save the above code to a file called `script.py`, then run this
+in a terminal (replace `/path/to/some/image.nii.gz` with a path to some image
+on your computer):
+
+
+> ```
+> chmod a+x script.py
+> ./script.py /path/to/some/image.nii.gz
+> ```
+
+
+<a class="anchor" id="interactive-python-ipython"></a>
+## Interactive Python: IPython
+
+
+Python is an [_interpreted
+language_](https://en.wikipedia.org/wiki/Interpreted_language), like MATLAB.  So
+you can either write your code into a file, and then run that file, or you can
+type code directly into a Python interpreter.
+
+
+Python has a standard interpreter built-in - run `fslpython` in a terminal,
+and see what happens (use CTRL+D to exit).
+
+
+__But__ there is another interpreter called [`ipython`](https://ipython.org/)
+which is vastly superior to the standard Python interpreter. Use `ipython`
+instead! It is already installed in `fslpython`, but we just need to create a
+link to it - do this now in a terminal:
+
+
+> ```
+> # You might need to "sudo" this
+> # if your version of FSL needs
+> # admin privileges to modify.
+> ln -s $FSLDIR/fslpython/envs/fslpython/bin/ipython $FSLDIR/bin/fslipython
+> ```
+
+
+Now if you want to do some interactive work, you can use `fslipython` in a
+terminal.
+
+
+__Exercise__ Do it now! Start `fslipython`, then copy/paste this code into the
+prompt!
+
+
+> ```
+> # this line is not python - it is
+> # specific to ipython/jupyter notebook
+> %matplotlib
+>
+> import numpy as np
+>
+> x = np.concatenate(([0.25, 0.75], np.arange(0.1, 1.0, 0.1)))
+> y = np.concatenate(([0.75, 0.75], -np.sin(np.linspace(np.pi / 4, 3 * np.pi / 4, 9))))
+>
+> import matplotlib.pyplot as plt
+>
+> fig = plt.figure()
+> ax  = fig.add_subplot(111)
+>
+> ax.scatter(x, y)
+> ```
+
+
+<a class="anchor" id="python-editors"></a>
+## Python editors
+
+
+> Summary:
+>   - Make your tab key insert four spaces. Don't use tab characters in Python
+>     code.
+>
+>   - Use [Spyder](https://pythonhosted.org/spyder/) if you want a MATLAB-like
+>     envionment (focus on analysis, rather than coding).
+>
+>   - Use [PyCharm](https://www.jetbrains.com/pycharm/) if you want an IDE-like
+>     environment (focus on coding, rather than analysis).
+>
+>   - Use [Atom](https://atom.io/) or [VS Code](https://code.visualstudio.com/)
+>     if you like using the latest and greatest.
+>
+>   - If you like your existing editor, use it. But you will be better off if
+>     you can integrate it with `fslpython`, [pylint](https://www.pylint.org/)
+>     and [pyflakes](https://github.com/PyCQA/pyflakes).
+
+
+You can use any text editor that you want to edit Python files. But the one
+golden rule that you must follow, no matter what editor you use:
+
+
+__Configure your tab key to insert four spaces. Don't use tab characters in
+Python code!__
+
+
+This is the [standard
+convention](https://www.python.org/dev/peps/pep-0008/#indentation) for Python
+code. If you deviate from this convention, and somebody else needs to work
+with your code, they will be angry at you!
+
+
+Now, with that out of the way, there are several good Python editors available
+to you. If you are getting started with Python, we recommend
+[PyCharm](https://www.jetbrains.com/pycharm/) or
+[Spyder](https://pythonhosted.org/spyder/).
+
+
+If you are used to MATLAB, and you do a lot of experimenting or interactive
+work, then you might like Spyder. If you spend most of your time writing code
+rather than experimenting, then go with PyCharm.
+
+
+### Spyder
+
+
+Spyder is a MATLAB-like environment for Python. It has a code editor and an
+interactive IPython prompt. You can inspect variables that are in your
+workspace, plot data, and so on and so forth.
+
+
+Beyond that, Spyder is fairly simple - it does not have much in the way of
+project management tools, or integration with version control (i.e. `git`).
+
+
+Spyder can be installed directly into `fslpython`:
+
+
+> ```
+> # If your FSL installation requires
+> # administrative privileges to modify,
+> # you will need to prefix these
+> # commands with sudo.
+> $FSLDIR/fslpython/bin/conda install -n fslpython -y spyder
+> ln -s $FSLDIR/fslpython/envs/fslpython/bin/spyder $FSLDIR/bin/fslspyder
+> ```
+
+
+Now to run Spyder, you can just type:
+
+
+> ```
+> fslspyder &
+> ```
+
+
+Now you need to make sure that Spyder is using the `fslpython` environment to
+run your code.
+
+
+1. Go to _python_ (the menu) > _Preferences_ > Python Interpreter
+2. Make sure that _Use the following Python interpreter_ is selected
+3. Make sure that the path is `$FSLDIR/fslpython/envs/fslpython/bin/python`
+   (for your specific value of `$FSLDIR`).
+
+
+Type the following into the console to test that everything is working:
+
+
+```
+import matplotlib.pyplot as plt
+plt.plot([1, 2, 3], [4, 5, 6])
+```
+
+
+### PyCharm
+
+
+PyCharm is a general-purpose Python development environment. Unlike Spyder, it
+does not have an integrated console or variable explorer. But it has more
+tools to help you write code, and better file management/version control
+integration.
+
+
+And it is also easy to install - simply download the Community edition from
+the [home page](https://www.jetbrains.com/pycharm/). Then, if you are on a
+mac, double-click the `.dmg` file, and drag PyCharm into your `/Applications/`
+folder. Then double-click on PyCharm to start it.
+
+
+Once you have chosen a theme, you will be asked if you would like to create a
+_Launcher script_ - do this, because you will then be able to open files from
+the terminal by typing `charm [filename]`.
+
+
+Now you will be presented with a _Welcome to PyCharm_ window. __Before doing
+anything else__, click on the _Configure_ button down in the bottom right, and
+choose _Preferences_. Then in the _Project Interpreter_ section:
+
+
+1. Click on the gear button and choose _Add local..._
+2. Choose _Existing environment_
+3. Click on the _..._ button, and navigate to
+   `$FSLDIR/fslpython/envs/fslpython/bin/python`.
+
+
+### Other options
+
+
+Emacs is capable of being used as a fully-fledged Python IDE, if you have the
+time and patience to configure it.
+
+If you are the fashionable sort, try one of these:
+
+- [Visual Studio Code](https://code.visualstudio.com/)
+- [Atom](https://atom.io/)
+
+
+<a class="anchor" id="python-in-your-browser-jupyter-notebook"></a>
+## Python in your browser: Jupyter Notebook
+
+
+It is possible to do your Python-based development and experimentation inside
+your web browser, thanks to the [Jupyter project](https://jupyter.org/).
+
+
+Jupyter works in the following way:
+
+1. You start a Juptyer web server on your computer. This web server provides
+   the environment in which your Python code is executed.
+
+2. You open https://localhost:8888 (or similar) in a web browser - this opens
+   a connection to the (locally running) web server.
+
+3. You start a "Notebook" (Jupyter's version of a file), and start typing.
+   You can put text, LaTeX, and of course Python code into a notebook.
+
+4. All of the code that you write gets sent to the web server and
+   executed. Then the results get sent back to the web browser, and displayed
+   in your notebook - magic!
+
+
+All of the PyTreat practicals are written in a Jupyter notebook. Some of the
+talks are too - you're looking at a Jupyter Notebook right now!
+
+
+So you're going to need to install Jupyter to get the most out of the
+practicals that we have prepared for you.
+
+
+__Exercise__ Install Jupyter into `fslpython` - run these commands in a
+terminal:
+
+
+> ```
+> # Remember to prefix with sudo if your
+> # FSL install needs admin to modify.
+> $FSLDIR/fslpython/bin/conda install -n fslpython -y jupyter
+> ln -s $FSLDIR/fslpython/envs/fslpython/bin/jupyter $FSLDIR/bin/fsljupyter
+> ```
+
+
+<a class="anchor" id="git"></a>
+## Git
+
+
+All the cool kids these days use [git](https://git-scm.com/) to
+collaboratively work on their Python code.
+
+
+Git is different from CVS and SVN in that it is _distributed_. In CVS and SVN,
+there is only one central repository. You check out a copy of the source from
+the repository, make some changes, and then commit those changes back to the
+central repository.
+
+
+In git, there are multiple repositories. There is usually one repository which
+acts as the central one, but you will _clone_ (or _fork_) that central
+repository to create your own full copy of the repository.
+
+
+Then, you can make changes and commit them in your own repository. And at any
+point, you can push your changes back to the central repository.
+
+
+### WIN's gitlab server
+
+
+https://git.fmrib.ox.ac.uk/
+
+
+If you have a FMRIB account, then you also have a Gitlab account. Gitlab is a
+git server that you can use to store your "central" git repository.  Gitlab is
+very similar to https://www.github.com, but it is managed by WIN, and your
+code is not publicly visible (although it can be if you want).  Gitlab backs
+up your code automatically, and has a nice web interface.
+
+You can have up to 10 projects on your gitlab account - talk to the FMRIB IT
+people if you need more.
+
+
+### Using git and gitlab
+
+
+> We need to go through a couple of intiial configuration steps before
+> proceeding. You only need to do this once (for each computer that you use).
+>
+> First, run these commands to configure git on your system.
+>
+> ```
+> git config --global user.name "Your name"
+> git config --global user.email "Your email address"
+> ```
+>
+> Now you need to create a SSH key pair, so your computer can talk to the
+> gitlab server without you having to log in. Don't be scared - there are
+> detailed instructions on doing this at
+> https://git.fmrib.ox.ac.uk/help/ssh/README.md - follow the instructions
+> under the section entitled __Generating a new SSH key pair__.
+
+
+Working with git and gitlab generally involves these steps:
+
+1. Add new files to your local repository, or make changes to existing files.
+2. Run `git add` on the new/changed files to _stage_ them.
+3. Run `git commit` to commit all staged changes to your local repository.
+4. Run `git push` to push those changes to your gitlab repository.
+
+
+When you start working on a new project (or if you have an existing project
+that you want to put into git):
+
+
+__1. Create a project directory__
+
+Or navigate to your existing project directory.
+
+
+__2. Turn the directory into a git repository__
+
+> ```
+> cd path/to/super/cool/project
+> git init
+> ```
+
+
+__3. Add your files to git__
+
+If you want to add all of the files in your project directory into git, type
+this:
+
+> ```
+> git add .
+> ```
+
+
+Otherwise, if you only want certain files in git, then `git add` them one by
+one (or with standard bash file patterns).
+
+You should avoid putting large binary files or data files into git - it works
+best with source code. Talk to the FMRIB IT people if you really need to store
+large files in git, as they can help you with this.
+
+
+__4. Commit your changes__
+
+
+> ```
+> git commit -m "A useful message describing the changes you are committing."
+> ```
+
+
+__5. Create a repository for your project on gitlab__
+
+
+Log in to gitlab (https://git.fmrib.ox.ac.uk/), then click on the _+_ button
+towards the top right, and select _New project_. Give the project a name and
+choose its visiblity (note that _Public_ means your project will be visible to
+the world).
+
+
+Now, follow the instructions under __Existing Git repository__ to "link" your
+local project repository to the one on gitlab.
+
+
+__6. Develop your super cool project!__
+
+
+Now you can get to work! Whenever you make changes to your code that you want
+saved,  follow the `git add`, `git commit`, `git push` steps described above.
+
+
+For example, let's say we have added a new file called `cool_module.py`.  To
+get this into git, we would do the following:
+
+
+```
+git add cool_module.py
+git commit -m "Added cool module. It's super cool"
+git push origin master
+```
+
+
+<a class="anchor" id="the-pytreat-practicals"></a>
+## The PyTreat practicals
+
+
+All of the practicals for PyTreat are hosted in a git repository at:
+
+
+https://git.fmrib.ox.ac.uk/fsl/pytreat-2018-practicals
+
+
+So let's go get them!
+
+
+> ```
+> git clone git@git.fmrib.ox.ac.uk:fsl/pytreat-2018-practicals.git
+> cd pytreat-2018-practicals
+> fsljupyter notebook
+> ```