{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Config TemplateFlow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Test if singularity correctly setting Home binding\n",
    "!export SINGULARITYENV_TEMPLATEFLOW_HOME=/imaging/jj02/templateflow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!git config --global user.name \"JoffJones\"\n",
    "!git config --global user.email \"Jonathan.Jones@mrc-cbu.cam.ac.uk\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from templateflow.api import templates, get\n",
    "templates()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download relevant templates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Needed for Carpet Plots\n",
    "\n",
    "import templateflow.api\n",
    "templateflow.api.TF_S3_ROOT = 'http://templateflow.s3.amazonaws.com'\n",
    "get('MNI152NLin2009cAsym')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Standard Template\n",
    "\n",
    "import templateflow.api\n",
    "templateflow.api.TF_S3_ROOT = 'http://templateflow.s3.amazonaws.com'\n",
    "get('MNI152NLin6Asym')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import templateflow.api\n",
    "templateflow.api.TF_S3_ROOT = 'http://templateflow.s3.amazonaws.com'\n",
    "get('MNIPediatricAsym')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Needed for freesurfer recon-all (surface reconstruction)\n",
    "\n",
    "import templateflow.api\n",
    "templateflow.api.TF_S3_ROOT = 'http://templateflow.s3.amazonaws.com'\n",
    "get('fsaverage')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import templateflow.api\n",
    "templateflow.api.TF_S3_ROOT = 'http://templateflow.s3.amazonaws.com'\n",
    "get('fsnative')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Standard skull strip template\n",
    "\n",
    "import templateflow.api\n",
    "templateflow.api.TF_S3_ROOT = 'http://templateflow.s3.amazonaws.com'\n",
    "get('OASIS30ANTs')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Run fmriprep"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os, subprocess\n",
    "\n",
    "# setup template flow environment\n",
    "my_env = os.environ.copy()\n",
    "my_env[\"SINGULARITYENV_TEMPLATEFLOW_HOME\"] = \"/templateflow\"\n",
    "\n",
    "# directories\n",
    "bids_dir = '/path/to/bids'\n",
    "slurm_output_dir = '/path/to/cluster/log/files'\n",
    "os.mkdir(slurm_output_dir)\n",
    "\n",
    "# set range of BIDS_ID numbers to be processed\n",
    "for n in range(1, 100):\n",
    "    p = subprocess.run(\" \".join([\"sbatch\", \"--mincpus=6\", \"--time=48:00:00\", #sbatch cmd\n",
    "                         \"--job-name=fmriprep\", \n",
    "                         \"--output\", slurm_output_dir + \"/sub-%03d.out\" %(n),\n",
    "                         \"singularity\", \"exec\", \"-C\", #singularity call\n",
    "                         \"-B\", \"/imaging/jj02/CALM:/CALM\", # freesurfer license location\n",
    "                         \"-B\", bids_dir + \":/bids\", # bids directory\n",
    "                         \"-B\", \"/home/jj02/.cache/templateflow:/templateflow\", # these might need to be set to your home\n",
    "                         \"-B\", \"/home/jj02/.cache/fmriprep:/home/fmriprep\", # these might need to be set to your home\n",
    "                         \"-B\", \"/tmp:/tmp\",\n",
    "                         \"/imaging/local/software/singularity_images/fmriprep/fmriprep-1.5.0.simg\", # singularity image\n",
    "                         \"fmriprep\", # run fmriprep\n",
    "                         \"/bids\", # bids directory\n",
    "                         \"/bids/derivatives/fmriprep-1.5.0\", # fmriprep directory\n",
    "                         \"participant\", \"--participant_label\", '%03d' %(n), # participant info\n",
    "                         \"-v\", \"-w\", \"/bids/derivatives/fmriprepwork-1.5.0\", # wording directory\n",
    "                         \"--skull-strip-template\", \"MNIPediatricAsym:cohort-1\", # child skull-strip template\n",
    "                         \"--output-spaces\", \"MNIPediatricAsym:cohort-1:res-2\", \"T1w\", # child template\n",
    "                         \"MNI152NLin6Asym:res-2\", \"MNI152NLin2009cAsym\", # For ICA-AROMA & carpet plot\n",
    "                         \"fsaverage\", # For freesurfer BBR and surface-based BOLD\n",
    "                         \"--use-aroma\", # ICA-AROMA denoising output\n",
    "                         \"--fs-license-file\", \"/CALM/license.txt\", # freesurfer license\n",
    "                         \"--write-graph\",\n",
    "                         \"--fd-spike-threshold\", \"0.5\", \"--dvars-spike-threshold\", \"0.5\",\n",
    "                         \"--notrack\", \"--resource-monitor\",\n",
    "                         \"--skip-bids-validation\"]), # skip this for cluster jobs as it tries to go online\n",
    "                        shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=my_env)\n",
    "    print(p.args)\n",
    "    print(p.stdout.decode())\n",
    "    print(p.stderr.decode())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## MRIQC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Run participant-level mriqc\n",
    "import subprocess\n",
    "\n",
    "# directories\n",
    "bids_dir = '/path/to/bids'\n",
    "slurm_output_dir = '/path/to/cluster/log/files'\n",
    "os.mkdir(slurm_output_dir)\n",
    "\n",
    "# set range of BIDS_ID numbers to be processed\n",
    "for i in range(1, 100):\n",
    "    p = subprocess.Popen((\"sbatch\", \"--mincpus=1\", \"--job-name=mriqc\", #sbatch cmd\n",
    "                          \"--output\", slurm_output_dir + \"/sub-%03d.out\" %(i), \n",
    "                          \"singularity\", \"run\", \"-C\", \n",
    "                          \"-B\", bids_dir + \":/bids\",\n",
    "                          \"/imaging/local/software/singularity_images/mriqc/mriqc-0.14.2.simg\",\n",
    "                          \"/bids\", \"/bids/derivatives/mriqc\", #dirs\n",
    "                          \"participant\", \"--participant-label\", \"%03d\" %(i),\n",
    "                          \"--fd_thres\", \"0.5\", \n",
    "                          \"--verbose-reports\", \"--no-sub\", #mriqc options\n",
    "                          \"-v\", \"-w\", \"/bids/derivatives/mriqcwork\"),\n",
    "                        shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Run group-level mriqc\n",
    "import subprocess\n",
    "\n",
    "p = subprocess.Popen((\"sbatch\", \"--mem-per-cpu=64gb\", \"--job-name=mriqc\", #sbatch cmd\n",
    "                      \"--output\", \"/imaging/jj02/CALM/slurm/mriqc/group.out\", \n",
    "                      \"singularity\", \"run\", \"-C\", \n",
    "                      \"-B\", bids_dir + \":/bids\",\n",
    "                      \"/imaging/local/software/singularity_images/mriqc/mriqc-0.14.2.simg\",\n",
    "                      \"/bids\", \"/bids/derivatives/mriqc\", #dirs\n",
    "                      \"group\", \n",
    "                      \"--fd_thres\", \"0.5\",\n",
    "                      \"--verbose-reports\", \"--no-sub\", #mriqc options\n",
    "                      \"-v\", \"-w\", \"/bids/derivatives/mriqcwork\"),\n",
    "                    shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Run MRIQC classifier\n",
    "!singularity exec -B /path/to/BIDS:/bids /imaging/local/software/singularity_images/mriqc/mriqc-0.14.2.simg \\\n",
    "        mriqc_clf --verbose --load-classifier -X /bids/derivatives/mriqc/group_T1w.tsv"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
