{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "import plotly.graph_objs as go\n",
    "import plotly.express as px\n",
    "from plotly import tools, subplots\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import ipywidgets as widgets\n",
    "import math\n",
    "from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot\n",
    "from ipywidgets import interact, interactive, fixed, interact_manual\n",
    "init_notebook_mode(connected=True)\n",
    "import scipy.io as sio\n",
    "import random\n",
    "random.seed(123)\n",
    "\n",
    "import plotly.io as pio\n",
    "import os\n",
    "pio.renderers.default = \"plotly_mimetype\"\n",
    "data_path = os.path.join(\"..\",\"data\",\"venus-data\")\n",
    "derivativesDir = os.path.join(data_path,\"qMRFlow\")\n",
    "\n",
    "spheres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
    "refMean = [1.989,1.454,0.9841,0.706,0.4967,0.3515,0.24713,0.1753,0.1259,0.089]\n",
    "sessions = ['rth750rev','rthPRIrev','rthSKYrev',\n",
    "           'vendor750rev','vendorPRIrev','vendorSKYrev']\n",
    "convert_tag = {'rth750':'G1<sub>neutral</sub>','rthPRI':'S1<sub>neutral</sub>','rthSKY':'S2<sub>neutral</sub>',\n",
    "               'vendor750':'G1<sub>native</sub>','vendorPRI':'S1<sub>native</sub>','vendorSKY':'S2<sub>native</sub>'\n",
    "              }\n",
    "colors = {'rth750':'rgba(255,8,30,1)','rthPRI':'rgba(255,117,0,1)','rthSKY':'rgba(255,220,0,1)',\n",
    "         'vendor750':'rgba(13,186,233,1)','vendorPRI':'rgba(2.5,187,180,1)','vendorSKY':'rgba(0,248,205,1)'}\n",
    "colors_line = {'rth750':'rgba(255,8,30,0.2)','rthPRI':'rgba(255,117,0,0.2)','rthSKY':'rgba(255,220,0,0.2)',\n",
    "         'vendor750':'rgba(13,186,233,0.2)','vendorPRI':'rgba(2.5,187,180,0.2)','vendorSKY':'rgba(0,248,205,0.2)'}\n",
    "line_dash = {'rth750':'dash','rthPRI':'dash','rthSKY':'dash',\n",
    "         'vendor750':'solid','vendorPRI':'solid','vendorSKY':'solid'}\n",
    "line_sym = {'rth750':'circle','rthPRI':'circle','rthSKY':'circle',\n",
    "         'vendor750':'square','vendorPRI':'square','vendorSKY':'square'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "#| label: snrcell\n",
    "\n",
    "colors = {'rth750':'rgba(255,8,30,1)','rthPRI':'rgba(255,117,0,1)','rthSKY':'rgba(255,220,0,1)',\n",
    "         'vendor750':'rgba(0,75,255,1)','vendorPRI':'rgba(24,231,234,1)','vendorSKY':'rgba(24,234,141,1)'}\n",
    "df = pd.DataFrame()\n",
    "df['signal'] = [1649,240,264,793,2330,2379,767,110,117,362,1023,1016]\n",
    "df['noise'] = [1.68,0.34,0.33,0.66,1.64,1.65,1.66,0.32,0.34,0.6,1.72,1.71]\n",
    "df['session'] = [\"rth750\",\"rthPRI\",\"rthSKY\",\"vendor750\",\"vendorPRI\",\"vendorSKY\"]*2\n",
    "df['labels'] = [\"G1<sub>VENUS</sub>\",\"S1<sub>VENUS</sub>\",\"S2<sub>VENUS</sub>\",\"G1<sub>NATIVE</sub>\",\"S1<sub>NATIVE</sub>\",\"S2<sub>NATIVE</sub>\"]*2\n",
    "df['acq'] = [\"T1w\"]*6 + [\"PDw\"]*6 \n",
    "df['SNR'] = 10*np.log10(df['signal']/df['noise'])\n",
    "fig = go.Figure()\n",
    "base = np.char.add(['<br>'] * 6, df['acq'][0:6])\n",
    "text = np.char.add(np.char.mod('%.2f', df['SNR'][0:6]), base)\n",
    "fig.add_trace(go.Bar(\n",
    "        y=df['SNR'][0:6],\n",
    "        x=df[\"labels\"][0:6],\n",
    "        showlegend=False,\n",
    "        name=\"T1w\",\n",
    "        text=text,\n",
    "        textposition='auto',\n",
    "        marker_color= [colors[x] for x in df['session']]))\n",
    "#aa = list(map(str,np.round(df['SNR'][6:12],2)))\n",
    "base = np.char.add(['<br>'] * 6, df['acq'][6:12])\n",
    "text = np.char.add(np.char.mod('%.2f', df['SNR'][6:12]), base)\n",
    "fig.add_trace(go.Bar(\n",
    "        y=df['SNR'][6:12],\n",
    "        x=df[\"labels\"][6:12],\n",
    "        textposition='auto',\n",
    "        showlegend=False,\n",
    "        text=text,\n",
    "        name=\"PDw\",\n",
    "        marker_color=[colors[x] for x in df['session']]))\n",
    "fig.update_layout(barmode='group')\n",
    "fig.update_layout(height=300, width=900)\n",
    "fig.update_yaxes(title=\"PSNR\")\n",
    "\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "#| label: phant1cell\n",
    "\n",
    "fig = go.Figure()\n",
    "for jj in range(0,len(sessions),1):\n",
    "    avg_array  = []\n",
    "    std_array  =  []\n",
    "    cur_tag = sessions[jj][0:-3]\n",
    "    cur_csv = pd.read_csv(derivativesDir + '/sub-phantom/' + 'ses-' + sessions[jj] + '/stat/sub-phantom_ses-' + sessions[jj] + '_stat_summary.csv')\n",
    "    avg_array = np.array(cur_csv['T1 (mean)'])\n",
    "    std_array = np.array(cur_csv['T1 (std)'])\n",
    "    upper = list(np.squeeze(np.array(avg_array)) + np.squeeze(np.array(std_array)))\n",
    "    lower = list(np.squeeze(np.array(avg_array)) - np.squeeze(np.array(std_array)))\n",
    "    # Add std lines\n",
    "    fig.add_trace(go.Scatter(\n",
    "        x= refMean + refMean[::-1],\n",
    "        y=upper+lower[::-1],\n",
    "        fill='toself',\n",
    "        fillcolor= colors_line[cur_tag],\n",
    "        line_color='rgba(255,0,0,0)',\n",
    "        name= convert_tag[cur_tag]\n",
    "    ))\n",
    "    # Add markers\n",
    "    fig.add_trace(go.Scatter(\n",
    "        x=refMean, y=avg_array,\n",
    "        line_color=colors[cur_tag],\n",
    "        name= convert_tag[cur_tag],\n",
    "        marker = dict(size=20,symbol=line_sym[cur_tag],line=dict(color='black',width=1.5),opacity=0.85),\n",
    "        line=dict(width=2, dash=line_dash[cur_tag])\n",
    "    ))\n",
    "\n",
    "fig.update_layout(height=1000, width=800)\n",
    "fig.update_layout(legend=dict(x=1, y=1,tracegroupgap=300,font=dict(color=\"black\",size=14)))\n",
    "axis_template = dict(linecolor = 'white', \n",
    "                     showticklabels = True,\n",
    "                     tickfont=dict(color=\"black\"), \n",
    "                     gridcolor = 'lightsteelblue',\n",
    "                     tickvals = refMean[::-1])\n",
    "fig.update_xaxes(axis_template,range=[0,2.1], title = \"Reference T1 (s)\")\n",
    "\n",
    "fig.update_yaxes(axis_template,tickmode=\"array\",tickvals=refMean,ticktext=[\"R10\",\"R9\",\"R8\",\"R7\",\"R6\",\"R5\",\"R4\",\"R3\",\"R2\",\"R1\"])\n",
    "fig.update_layout(title='',title_font_color=\"white\",margin=dict(l=0,r=0,t=0,b=0))\n",
    "fig.update_layout(hovermode = \"x\")\n",
    "fig.add_trace(go.Scatter(\n",
    "    x=refMean, y=refMean,\n",
    "    line_color='black',\n",
    "    mode = 'markers',\n",
    "    name = 'Reference',\n",
    "    marker = dict(size=30,symbol='cross-open',line = dict(width=2))\n",
    "\n",
    "))\n",
    "\n",
    "\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "#| label: delt1cell\n",
    "\n",
    "df = pd.DataFrame()\n",
    "fig = go.Figure()\n",
    "for jj in range(0,len(sessions),1):\n",
    "    cur_csv = pd.read_csv(derivativesDir + '/sub-phantom/' + 'ses-' + sessions[jj] + '/stat/sub-phantom_ses-' + sessions[jj] + '_stat_summary.csv')\n",
    "    avg_array = np.array(cur_csv['T1 (mean)'])\n",
    "    std_array = np.array(cur_csv['T1 (std)'])\n",
    "    cur_tag = sessions[jj][0:-3]\n",
    "    # Measurement error\n",
    "    pcterr = ((np.array(avg_array) - np.array(refMean))/np.array(refMean))*100\n",
    "    fig.add_trace(go.Scatter(\n",
    "        x=pcterr, y=spheres[::-1],\n",
    "        line_color=colors[cur_tag],\n",
    "        name= convert_tag[cur_tag],\n",
    "        marker = dict(size=20,symbol=line_sym[cur_tag],line=dict(color='black',width=1.5),opacity=0.75),\n",
    "        line=dict(width=2, dash=line_dash[cur_tag]),\n",
    "        line_shape='vhv'\n",
    "    ))\n",
    "fig.update_layout(height=1000, width=800)\n",
    "fig.update_layout(legend=dict(x=1, y=1,tracegroupgap=300,font=dict(color=\"black\")),margin=dict(l=0,r=0,t=0,b=0))\n",
    "axis_template = dict(linecolor = 'black', \n",
    "                     showticklabels = True,\n",
    "                     gridcolor = 'lightsteelblue'\n",
    "                    )\n",
    "fig.update_xaxes(axis_template,zerolinecolor=\"black\",zerolinewidth=3)\n",
    "fig.update_yaxes(axis_template,zerolinecolor=\"black\")\n",
    "fig.update_layout(hovermode = \"y\")\n",
    "fig.update_xaxes(range=[-18,70],title=\"∆T1 (%)\")\n",
    "fig.update_yaxes(tickmode=\"array\",tickvals=spheres[::-1],ticktext=[\"R10\",\"R9\",\"R8\",\"R7\",\"R6\",\"R5\",\"R4\",\"R3\",\"R2\",\"R1\"],title = \"Reference Spheres (R1 - R10)\")\n",
    "fig.update_layout(title_font_color=\"black\")\n",
    "\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "#| label: delt1avg\n",
    "\n",
    "sessions = ['vendor750rev','vendorPRIrev','vendorSKYrev',\n",
    "           'rth750rev','rthPRIrev','rthSKYrev']\n",
    "\n",
    "# Set to R7-R10\n",
    "lastN = 4\n",
    "\n",
    "df = pd.DataFrame()\n",
    "fig = go.Figure()\n",
    "\n",
    "rth750 = derivativesDir + '/sub-phantom/' + 'ses-' + sessions[3] + '/stat/sub-phantom_ses-' + sessions[3] + '_stat_summary.csv'\n",
    "rthPRI = derivativesDir + '/sub-phantom/' + 'ses-' + sessions[4] + '/stat/sub-phantom_ses-' + sessions[4] + '_stat_summary.csv'\n",
    "rthSKY = derivativesDir + '/sub-phantom/' + 'ses-' + sessions[5] + '/stat/sub-phantom_ses-' + sessions[5] + '_stat_summary.csv'\n",
    "rth750 = pd.read_csv(rth750)\n",
    "rthPRI = pd.read_csv(rthPRI)\n",
    "rthSKY = pd.read_csv(rthSKY)\n",
    "    \n",
    "avg_array_ge = rth750['T1 (mean)']\n",
    "std_array_ge = rth750['T1 (std)']\n",
    "cur_tag_ge = 'neutral G1'\n",
    "\n",
    "avg_array_sie = np.mean([rthPRI['T1 (mean)'],rthSKY['T1 (mean)']],axis=0)\n",
    "std_array_sie = np.mean([rthPRI['T1 (std)'],rthSKY['T1 (std)']],axis=0)\n",
    "cur_tag = 'neutral S1-2'\n",
    "\n",
    "avg_array_all = np.mean([rth750['T1 (mean)'],rthPRI['T1 (mean)'],rthSKY['T1 (mean)']],axis=0)\n",
    "std_array_all = np.mean([rthPRI['T1 (std)'],rthSKY['T1 (std)']],axis=0)\n",
    "\n",
    "df[cur_tag + '_mean'] = avg_array\n",
    "df[cur_tag + '_std'] = std_array\n",
    "upper_sie = list(np.squeeze(np.array(avg_array_sie)) + np.squeeze(np.array(std_array_sie)))\n",
    "lower_sie = list(np.squeeze(np.array(avg_array_sie)) - np.squeeze(np.array(std_array_sie)))\n",
    "upper_ge = list(np.squeeze(np.array(avg_array_ge)) + np.squeeze(np.array(std_array_ge)))\n",
    "lower_ge = list(np.squeeze(np.array(avg_array_ge)) - np.squeeze(np.array(std_array_ge)))\n",
    "\n",
    "\n",
    "fig.add_trace(go.Scatter(\n",
    "    x=refMean[:lastN], y=refMean[:lastN],\n",
    "    line_color='black',\n",
    "    mode = 'markers',\n",
    "    name = 'Reference',\n",
    "    marker = dict(size=30,symbol='cross-open',line = dict(width=2))\n",
    "\n",
    "))\n",
    "fig.add_trace(go.Scatter(\n",
    "    x=refMean[:lastN], y=avg_array_sie[:lastN],\n",
    "    line_color='orange',\n",
    "    name= 'neutral S1-2',\n",
    "    marker = dict(size=20,symbol='circle',line=dict(color='black',width=1.5),opacity=0.9),\n",
    "    line=dict(width=2, dash='dash'),\n",
    "    line_shape='spline',\n",
    "    customdata= np.round(((np.array(avg_array_sie[:lastN]) - np.array(refMean[:lastN]))/np.array(refMean[:lastN]))*100,2),\n",
    "    hovertemplate='<br>%{y},<b>∆T1:</b>%{customdata}',\n",
    "    hoverlabel = dict(namelength = -1)\n",
    "))\n",
    "fig.add_trace(go.Scatter(\n",
    "    x=refMean[:lastN], y=avg_array_ge[:lastN],\n",
    "    line_color='rgba(202,73,68,1)',\n",
    "    name= 'neutral G1',\n",
    "    marker = dict(size=20,symbol='circle',line=dict(color='black',width=1.5),opacity=0.9),\n",
    "    line=dict(width=2, dash='dash'),\n",
    "    line_shape='spline',\n",
    "    customdata= np.round(((np.array(avg_array_ge[:lastN]) - np.array(refMean[:lastN]))/np.array(refMean[:lastN]))*100,2),\n",
    "    hovertemplate='<br>%{y},<b>∆T1:</b>%{customdata}',\n",
    "    hoverlabel = dict(namelength = -1)\n",
    "))\n",
    "fig.add_trace(go.Scatter(\n",
    "    x=refMean[:lastN], y=avg_array_all[:lastN],\n",
    "    line_color='rgba(0,0,0,1)',\n",
    "    name= 'neutral',\n",
    "    marker = dict(size=5,symbol='circle',line=dict(color='black',width=1.5),opacity=0.9),\n",
    "    line=dict(width=2, dash='dash'),\n",
    "    line_shape='spline',\n",
    "    customdata= np.round(((np.array(avg_array_all[:lastN]) - np.array(refMean[:lastN]))/np.array(refMean[:lastN]))*100,2),\n",
    "    hovertemplate='<br>%{y},<b>∆T1:</b>%{customdata}',\n",
    "    hoverlabel = dict(namelength = -1)\n",
    "))\n",
    "vendor750 = derivativesDir + '/sub-phantom/' + 'ses-' + sessions[0] + '/stat/sub-phantom_ses-' + sessions[0] + '_stat_summary.csv'\n",
    "vendorPRI = derivativesDir + '/sub-phantom/' + 'ses-' + sessions[1] + '/stat/sub-phantom_ses-' + sessions[1] + '_stat_summary.csv'\n",
    "vendorSKY = derivativesDir + '/sub-phantom/' + 'ses-' + sessions[2] + '/stat/sub-phantom_ses-' + sessions[2] + '_stat_summary.csv'\n",
    "vendor750 = pd.read_csv(vendor750)\n",
    "vendorPRI = pd.read_csv(vendorPRI)\n",
    "vendorSKY = pd.read_csv(vendorSKY)\n",
    "    \n",
    "avg_array_ge = vendor750['T1 (mean)']\n",
    "std_array_ge = vendor750['T1 (std)']\n",
    "\n",
    "avg_array_sie = np.mean([vendorPRI['T1 (mean)'],vendorSKY['T1 (mean)']],axis=0)\n",
    "std_array_sie = np.mean([vendorPRI['T1 (std)'],vendorSKY['T1 (std)']],axis=0)\n",
    "cur_tag = 'neutral'\n",
    "\n",
    "avg_array_all = np.mean([vendor750['T1 (mean)'],vendorPRI['T1 (mean)'],vendorSKY['T1 (mean)']],axis=0)\n",
    "\n",
    "df[cur_tag + '_mean'] = avg_array\n",
    "df[cur_tag + '_std'] = std_array\n",
    "upper_sie = list(np.squeeze(np.array(avg_array_sie)) + np.squeeze(np.array(std_array_sie)))\n",
    "lower_sie = list(np.squeeze(np.array(avg_array_sie)) - np.squeeze(np.array(std_array_sie)))\n",
    "upper_ge = list(np.squeeze(np.array(avg_array_ge)) + np.squeeze(np.array(std_array_ge)))\n",
    "lower_ge = list(np.squeeze(np.array(avg_array_ge)) - np.squeeze(np.array(std_array_ge)))\n",
    "\n",
    "fig.add_trace(go.Scatter(\n",
    "    x=refMean[:lastN], y=avg_array_sie[:lastN],\n",
    "    line_color='green',\n",
    "    name= 'native S1-2',\n",
    "    marker = dict(size=20,symbol='square',line=dict(color='black',width=1.5),opacity=0.9),\n",
    "    line=dict(width=2, dash='solid'),\n",
    "    line_shape='spline',\n",
    "    customdata= np.round(((np.array(avg_array_sie[:lastN]) - np.array(refMean[:lastN]))/np.array(refMean[:lastN]))*100,2),\n",
    "    hovertemplate='<br>%{y}, <b>∆T1:</b>%{customdata}',\n",
    "    hoverlabel = dict(namelength = -1)\n",
    "\n",
    "))\n",
    "fig.add_trace(go.Scatter(\n",
    "    x=refMean[:lastN], y=avg_array_ge[:lastN],\n",
    "    line_color='rgba(31,119,180,0.8)',\n",
    "    name= 'native G1',\n",
    "    marker = dict(size=20,symbol='square',line=dict(color='black',width=1.5),opacity=0.9),\n",
    "    line=dict(width=2, dash='solid'),\n",
    "    line_shape='spline',\n",
    "    customdata= np.round(((np.array(avg_array_ge[:lastN]) - np.array(refMean[:lastN]))/np.array(refMean[:lastN]))*100,2),\n",
    "    hovertemplate='<br>%{y}, <b>∆T1:</b>%{customdata}',\n",
    "    hoverlabel = dict(namelength = -1)\n",
    "))\n",
    "fig.add_trace(go.Scatter(\n",
    "    x=refMean[:lastN], y=avg_array_all[:lastN],\n",
    "    line_color='rgba(0,0,0,1)',\n",
    "    name= 'native',\n",
    "    marker = dict(size=5,symbol='square',line=dict(color='black',width=1.5),opacity=0.9),\n",
    "    line=dict(width=2, dash='solid'),\n",
    "    line_shape='spline',\n",
    "    customdata= np.round(((np.array(avg_array_all[:lastN]) - np.array(refMean[:lastN]))/np.array(refMean[:lastN]))*100,2),\n",
    "    hovertemplate='<br>%{y},<b>∆T1:</b>%{customdata}',\n",
    "    hoverlabel = dict(namelength = -1)\n",
    "))\n",
    "fig.update_layout(height=1100, width=800)\n",
    "axis_template = dict(linecolor = 'black', \n",
    "                     showticklabels = True,\n",
    "                     tickfont=dict(color=\"black\"), \n",
    "                     gridcolor = 'lightsteelblue',\n",
    "                     tickvals = refMean[::-1],)\n",
    "tickvals=refMean\n",
    "ticktext=[\"R10\",\"R9\",\"R8\",\"R7\",\"R6\",\"R5\",\"R4\",\"R3\",\"R2\",\"R1\"]\n",
    "\n",
    "fig.update_xaxes(axis_template,title=\"Reference T1 (s)\")\n",
    "fig.update_yaxes(axis_template,tickmode=\"array\",tickvals=tickvals[:lastN],ticktext=ticktext[:lastN],title=\"Reference Spheres\")\n",
    "\n",
    "fig.update_layout(hovermode = \"x\")\n",
    "\n",
    "\n",
    "fig.show()"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Edit 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.6.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
