ARMED-MixedEffectsDL / adni_t1w / select_images_dx.ipynb
select_images_dx.ipynb
Raw
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Select images from ADNI2 and ADNI3 for preprocessing. These will include images with a corresponding diagnosis as either cognitively normal or Alzheimer's Disease."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import warnings\n",
    "import datetime as dt\n",
    "import os\n",
    "import glob\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "QC information is sourced from the Mayo Clinic-provided QC table. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# QC for ADNI2 and Go\n",
    "dfAdni2Go = pd.read_csv('MAYOADIRL_MRI_IMAGEQC_12_08_15.csv', low_memory=False)\n",
    "dfAdni2Go.columns = [s.upper() for s in dfAdni2Go.columns]\n",
    "dfT1w2Go = dfAdni2Go.loc[dfAdni2Go['SERIES_TYPE'] == 'T1']\n",
    "\n",
    "# QC for ADNI3\n",
    "dfAdni3 = pd.read_csv('MAYOADIRL_MRI_QUALITY_ADNI3.csv')\n",
    "dfT1w3 = dfAdni3.loc[dfAdni3['SERIES_TYPE'] == 'MT1']\n",
    "\n",
    "# Summary table including diagnosis\n",
    "dfInfo = pd.read_csv('ADNIMERGE.csv', low_memory=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='SERIES_QUALITY', ylabel='count'>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(data=dfAdni2Go, x='SERIES_QUALITY')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='SERIES_QUALITY', ylabel='count'>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(data=dfAdni3, x='SERIES_QUALITY')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Keep images with quality rating of 1 or 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ADNI2/Go\n",
      "8551 T1w images\n",
      "7681 excellent or good-rated images\n",
      "ADNI3\n",
      "2276 T1w images\n",
      "1904 excellent or good-rated images\n"
     ]
    }
   ],
   "source": [
    "print('ADNI2/Go')\n",
    "print(dfT1w2Go.shape[0], 'T1w images')\n",
    "dfT1w2GoGood = dfT1w2Go.loc[dfT1w2Go['SERIES_QUALITY'].isin([1, 2])].copy()\n",
    "print(dfT1w2GoGood.shape[0], 'excellent or good-rated images')\n",
    "\n",
    "print('ADNI3')\n",
    "print(dfT1w3.shape[0], 'T1w images')\n",
    "dfT1w3Good = dfT1w3.loc[dfT1w3['SERIES_QUALITY'].isin([1, 2])].copy()\n",
    "print(dfT1w3Good.shape[0], 'excellent or good-rated images')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convert date strings into datetime objects\n",
    "dfInfo['PARSED_DATE'] = [dt.datetime.strptime(str(d), '%Y-%m-%d') for d in dfInfo['EXAMDATE']]\n",
    "dfInfo['PARSED_DATE']\n",
    "\n",
    "dfT1w2GoGood['PARSED_DATE'] = [dt.datetime.strptime(str(d), '%Y%m%d') for d in dfT1w2GoGood['SERIES_DATE']]\n",
    "dfT1w3Good['PARSED_DATE'] = [dt.datetime.strptime(str(d.split(' ')[0]), '%Y-%m-%d') for d in dfT1w3Good['SERIES_DATE']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For each image, find the temporally closest diagnosis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "def find_dx(df):\n",
    "    dfOut = pd.DataFrame(columns=['RID', 'Study', 'ScanDate', 'Site', 'DX_Scan', \n",
    "                                  'DaysFrom_Scan'])\n",
    "    i = 0\n",
    "    for _, row in df.iterrows():\n",
    "        rid = row['RID']\n",
    "        scandate = row['PARSED_DATE']\n",
    "        dfSubjectInfo = dfInfo.loc[dfInfo['RID'] == rid]\n",
    "        if dfSubjectInfo.shape[0] == 0:\n",
    "            continue\n",
    "        \n",
    "        # Fill in any missing diagnoses, if \n",
    "        # 1) diagnoses at previous and following visits are the same. OR\n",
    "        # 2) previous visit had a dementia diagnosis (let's assume no regression)\n",
    "        dfSubjectInfo = dfSubjectInfo.sort_values('PARSED_DATE')\n",
    "        dfForwardFill = dfSubjectInfo['DX'].fillna(method='ffill')\n",
    "        dfBackFill = dfSubjectInfo['DX'].fillna(method='bfill')\n",
    "        with warnings.catch_warnings():\n",
    "            warnings.simplefilter(action='ignore', category=FutureWarning)\n",
    "            dfFillable = dfSubjectInfo['DX'].isna().values \\\n",
    "                & ((dfForwardFill == dfBackFill).values | (dfForwardFill == 'Dementia').values)\n",
    "\n",
    "        dfSubjectInfo.loc[dfFillable, 'DX'] = dfForwardFill.loc[dfFillable]\n",
    "        \n",
    "        # Find nearest visit to imaging date\n",
    "        idxScan = (dfSubjectInfo['PARSED_DATE'] - scandate).abs().idxmin()\n",
    "        strDiagScan = dfSubjectInfo.loc[idxScan, 'DX']\n",
    "        # Compute distance from imaging date\n",
    "        distScan = dfSubjectInfo['PARSED_DATE'].loc[idxScan] - scandate\n",
    "        site = dfSubjectInfo['SITE'].loc[idxScan]\n",
    "        study = dfSubjectInfo['COLPROT'].loc[idxScan]\n",
    "                \n",
    "        dfOut.loc[i] = [rid, study, scandate, site, strDiagScan, distScan]\n",
    "        i += 1\n",
    "    return dfOut\n",
    "\n",
    "dfScanDX2Go = find_dx(dfT1w2GoGood)\n",
    "dfScanDX3 = find_dx(dfT1w3Good)\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reject any images without a corresponding diagnosis within 3 months of imaging date. Count remaining images."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "794 AD images\n",
      "342 unique subjects\n",
      "1998 CN images\n",
      "711 unique subjects\n"
     ]
    }
   ],
   "source": [
    "# ADNIGo not converted to BIDS yet, we will ignore and focus on ADNI2 and 3\n",
    "dfScans = pd.concat([dfScanDX2Go.loc[dfScanDX2Go['Study'] == 'ADNI2'], \n",
    "                     dfScanDX3], axis=0)\n",
    "# Remove duplicate scans (e.g. when multiple scans were acquired in the same session)\n",
    "dfScans = dfScans.loc[~dfScans[['RID', 'ScanDate']].duplicated()]\n",
    "dfScans.reset_index(inplace=True, drop=True)\n",
    "\n",
    "# Reject any images where a diagnosis was not found within 3 months of imaging date\n",
    "dfScans.loc[dfScans['DaysFrom_Scan'].abs() <= dt.timedelta(days=int(30.4 * 3))]\n",
    "\n",
    "# Count AD and CN images\n",
    "dfScansAD = dfScans.loc[dfScans['DX_Scan'] == 'Dementia'].copy()\n",
    "print(dfScansAD.shape[0], 'AD images')\n",
    "print(dfScansAD['RID'].unique().shape[0], 'unique subjects')\n",
    "\n",
    "dfScansCN = dfScans.loc[dfScans['DX_Scan'] == 'CN'].copy()\n",
    "print(dfScansCN.shape[0], 'CN images')\n",
    "print(dfScansCN['RID'].unique().shape[0], 'unique subjects')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Find matching locally downloaded images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "dictStudyRoots = {'ADNI2': '/archive/bioinformatics/DLLab/STUDIES/ADNI2_20201008/source',\n",
    "                  'ADNIGO': '/archive/bioinformatics/DLLab/STUDIES/ADNIGO_20201106/source',\n",
    "                  'ADNI3': '/archive/bioinformatics/DLLab/STUDIES/ADNI3_20201006/source'}\n",
    "dfScans['T1w_Path'] = None\n",
    "for idx, row in dfScans.iterrows():\n",
    "    strDate = dt.datetime.strftime(dfScans.loc[idx, 'ScanDate'], '%Y%m%d')\n",
    "    strImgTemplate = os.path.join(dictStudyRoots[row['Study']],\n",
    "                                'sub-{:04d}'.format(int(row['RID'])),\n",
    "                                'ses-' + strDate ,\n",
    "                                'anat/*T1w.nii.gz')\n",
    "    lsMatches = glob.glob(strImgTemplate)\n",
    "    lsMatches.sort()\n",
    "    if len(lsMatches) >= 1:\n",
    "        dfScans.loc[idx, 'T1w_Path'] = lsMatches[0]\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "694 AD images\n",
      "294 unique subjects\n",
      "1626 CN images\n",
      "595 unique subjects\n"
     ]
    }
   ],
   "source": [
    "dfScansValid = dfScans.loc[~dfScans['T1w_Path'].isna()]\n",
    "dfScansValid = dfScansValid.loc[dfScansValid['DX_Scan'].isin(['Dementia', 'CN'])]\n",
    "dfScansValid.reset_index(inplace=True, drop=True)\n",
    "\n",
    "dfScansAD = dfScansValid.loc[dfScansValid['DX_Scan'] == 'Dementia'].copy()\n",
    "print(dfScansAD.shape[0], 'AD images')\n",
    "print(dfScansAD['RID'].unique().shape[0], 'unique subjects')\n",
    "\n",
    "dfScansCN = dfScansValid.loc[dfScansValid['DX_Scan'] == 'CN'].copy()\n",
    "print(dfScansCN.shape[0], 'CN images')\n",
    "print(dfScansCN['RID'].unique().shape[0], 'unique subjects')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfScansValid.to_csv('image_list_ad_cn.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create input files table for DLLabPipeline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfScansADCN = dfScansValid.loc[dfScansValid['DX_Scan'].isin(['Dementia', 'CN'])]\n",
    "dfInputFiles = pd.DataFrame({'subject': dfScansADCN['RID'].astype(int).apply(lambda x: f'{x:04d}'),\n",
    "                             'session': dfScansADCN['ScanDate'].apply(lambda x: dt.datetime.strftime(x, '%Y%m%d')),\n",
    "                             'run': None,\n",
    "                             'input_t1w': dfScansADCN['T1w_Path']})\n",
    "dfInputFiles.reset_index(inplace=True, drop=True)\n",
    "dfInputFiles.to_csv('sMRI_input_files.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Count images and subjects per site."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Subjects')"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1440x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(2, 1, figsize=(20, 5))\n",
    "sns.countplot(data=dfScansValid, x='Site', order=dfScansValid['Site'].value_counts().index, ax=ax[0])\n",
    "dfSubjectsValid = dfScansValid[['RID', 'Site']].copy()\n",
    "dfSubjectsValid = dfSubjectsValid.loc[~dfSubjectsValid['RID'].duplicated()]\n",
    "sns.countplot(data=dfSubjectsValid, x='Site', order=dfSubjectsValid['Site'].value_counts().index, ax=ax[1])\n",
    "ax[0].set_ylabel('Images')\n",
    "ax[1].set_ylabel('Subjects')"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "a5dc4aa0b7969a772c348262b9338538f97e30fb3762c91cf138c2ab2be38e85"
  },
  "kernelspec": {
   "display_name": "Python 3.8.5 64-bit ('Kevin385Ray': conda)",
   "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.8.5"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}