{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sst_ERSSTv5_1950-2018.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sst_ERSSTv5_1950-2018_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sst_historical_1950-2029_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sst_historical_1950-2029_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sst_dcppA-assim-i1_1950-2018_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sst_dcppA-assim-i1_1950-2018_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sst_dcppA-assim-i2_1950-2018_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sst_dcppA-assim-i2_1950-2018_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/temperature_EN4_1950-2018.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/temperature_EN4_1950-2018_0-300m.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/temperature_EN4_1950-2018_0-300m_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salinity_EN4_1950-2018.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salinity_EN4_1950-2018_0-300m.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salinity_EN4_1950-2018_0-300m_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_historical_1950-2029_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_historical_1950-2029_0-300m_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_historical_1950-2029_0-300m_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_dcppA-assim-i1_1950-2018_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_dcppA-assim-i1_1950-2018_0-300m_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_dcppA-assim-i1_1950-2018_0-300m_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_dcppA-assim-i2_1950-2018_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_dcppA-assim-i2_1950-2018_0-300m_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/templvl_dcppA-assim-i2_1950-2018_0-300m_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_historical_1950-2029_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_historical_1950-2029_0-300m_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_historical_1950-2029_0-300m_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_dcppA-assim-i1_1950-2018_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_dcppA-assim-i1_1950-2018_0-300m_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_dcppA-assim-i1_1950-2018_0-300m_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_dcppA-assim-i2_1950-2018_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_dcppA-assim-i2_1950-2018_0-300m_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/salnlvl_dcppA-assim-i2_1950-2018_0-300m_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/zo_ARMOR3D_1993-2018.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sealv_historical_1950-2029_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sealv_historical_1950-2029_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sealv_dcppA-assim-i1_1950-2018_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sealv_dcppA-assim-i1_1950-2018_ens01-30_5x5.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sealv_dcppA-assim-i2_1950-2018_ens01-30.nc exists. Do nothing...\n",
      "/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/data_tmp/sealv_dcppA-assim-i2_1950-2018_ens01-30_5x5.nc exists. Do nothing...\n",
      "ACC30mem_sst_ANA1_s1950-2018_LY0_5x5\n",
      "p_fdr =  0.1\n",
      "ACC30mem_sst_ANA1-HIST_s1950-2018_LY0_5x5\n",
      "p_fdr =  0.1440000000000001\n",
      "ACC30mem_sst_ANA2-ANA1_s1950-2018_LY0_5x5\n",
      "p_fdr =  0.0015\n",
      "ACC30mem_templvl_ANA1_s1950-2018_LY0_5x5\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-1-899d35043579>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m    142\u001b[0m                 \u001b[0mfilePrefix\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'ACC{:d}mem'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmemRange\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtagField\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtagExp\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtagYears\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtagLead\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtagRes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    143\u001b[0m                 \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilePrefix\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 144\u001b[0;31m                 \u001b[0mfld\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcorrMultiArrayYeager\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfld1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mobs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mexpOption\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m''\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mnt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcorrMultiArrayDiffYeager\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfld1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mobs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mfld2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    145\u001b[0m                 nt.plotACC(lon=lon,lat=lat,fld=fld,filePrefix=filePrefix,lbLabelBarOn=False,\n\u001b[1;32m    146\u001b[0m                            title=' ',title2=' ',landFill=landFill,plottype='ACC')\n",
      "\u001b[0;32m/mnt/bcpu-ns9039k/ingo/NorCPM1-paper/scripts/norcpmTools.py\u001b[0m in \u001b[0;36mcorrMultiArrayYeager\u001b[0;34m(y1, y2, nboot, blocklen, pval)\u001b[0m\n\u001b[1;32m   1966\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnblock\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1967\u001b[0m             \u001b[0mind\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mblocklen\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mblocklen\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mindBlockStart\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mblocklen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1968\u001b[0;31m         \u001b[0my1a\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnanmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindBlockMem\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1969\u001b[0m         \u001b[0mboot1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my1a\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mind\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mmaxlen\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1970\u001b[0m         \u001b[0mboot1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mboot1\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnanmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mboot1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mkeepdims\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<__array_function__ internals>\u001b[0m in \u001b[0;36mnanmean\u001b[0;34m(*args, **kwargs)\u001b[0m\n",
      "\u001b[0;32m/opt/conda/lib/python3.7/site-packages/numpy/lib/nanfunctions.py\u001b[0m in \u001b[0;36mnanmean\u001b[0;34m(a, axis, dtype, out, keepdims)\u001b[0m\n\u001b[1;32m    937\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    938\u001b[0m     \"\"\"\n\u001b[0;32m--> 939\u001b[0;31m     \u001b[0marr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_replace_nan\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    940\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mmask\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    941\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkeepdims\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/opt/conda/lib/python3.7/site-packages/numpy/lib/nanfunctions.py\u001b[0m in \u001b[0;36m_replace_nan\u001b[0;34m(a, val)\u001b[0m\n\u001b[1;32m    107\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    108\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mmask\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 109\u001b[0;31m         \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubok\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    110\u001b[0m         \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopyto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mval\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwhere\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    111\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "import sys ; sys.path.remove('/mnt/bcpu-ns9039k/ingo/jupyter/Modules'); sys.path.append('../../scripts')\n",
    "import norcpmTools as nt\n",
    "from netCDF4 import Dataset\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "memRange = [1,30] \n",
    "\n",
    "# prepare SST data\n",
    "field='sst'\n",
    "res=[5,5]\n",
    "nt.concatERSST([1950,2018])\n",
    "nt.regrid2reg(field,'ERSSTv5',[1950,2018],res=res,ensave=True)\n",
    "for experiment in ['historical']:\n",
    "    nt.writeEns(field,experiment,[1950,2029],memRange)\n",
    "    nt.regrid2reg(field,experiment,[1950,2029],res=res,memRange=memRange,ensave=False)\n",
    "for experiment in ['dcppA-assim-i1','dcppA-assim-i2']:\n",
    "    nt.writeEns(field,experiment,[1950,2018],memRange)\n",
    "    nt.regrid2reg(field,experiment,[1950,2018],res=res,memRange=memRange,ensave=False)\n",
    "\n",
    "# prepare T300 and S300 data\n",
    "# read grid information\n",
    "nc = Dataset('../../data_tmp/grid_ocn_gx1v6.nc')\n",
    "bath = nc.variables['pdepth'][:]\n",
    "nc.close()\n",
    "nc = Dataset('../../data_tmp/noresm1-cmip6_historical_19500101_mem01.micom.hm.1950-01.nc')\n",
    "levBounds = nc.variables['depth_bnds'][:]\n",
    "nc.close()\n",
    "# EN4 data\n",
    "for field in ['temperature','salinity']:\n",
    "    nt.concatEn4(field,[1950,2018])\n",
    "    for levRange in [[0,300]]:\n",
    "        nt.vertAve(field,'EN4',[1950,2018],levRange=levRange)\n",
    "        for res in [[5,5]]:\n",
    "            nt.regrid2reg(field,'EN4',[1950,2018],levRange=levRange,res=res)\n",
    "# model output\n",
    "res=[5,5]\n",
    "levRange=[0,300]\n",
    "for field in ['templvl','salnlvl']:\n",
    "    for experiment in ['historical']:\n",
    "        nt.writeEns(field,experiment,[1950,2029],memRange)        \n",
    "        nt.vertAve(field,experiment,[1950,2029],levRange=levRange,\n",
    "                   levBounds=levBounds,bath=bath,memRange=memRange,ensave=False)\n",
    "        nt.regrid2reg(field,experiment,[1950,2029],res=res,memRange=memRange,levRange=levRange,ensave=False)\n",
    "    for experiment in ['dcppA-assim-i1','dcppA-assim-i2']:\n",
    "        nt.writeEns(field,experiment,[1950,2018],memRange)\n",
    "        nt.vertAve(field,experiment,[1950,2018],levRange=levRange,\n",
    "                   levBounds=levBounds,bath=bath,memRange=memRange,ensave=False)\n",
    "        nt.regrid2reg(field,experiment,[1950,2018],res=res,memRange=memRange,levRange=levRange,ensave=False)\n",
    "\n",
    "# prepare SSH data\n",
    "field='sealv'\n",
    "nt.concatARMOR3D([1993,2018])\n",
    "for experiment in ['historical']:\n",
    "    nt.writeEns(field,experiment,[1950,2029],memRange)\n",
    "    nt.regrid2reg(field,experiment,[1950,2029],res=res,memRange=memRange,ensave=False)\n",
    "for experiment in ['dcppA-assim-i1','dcppA-assim-i2']:\n",
    "    nt.writeEns(field,experiment,[1950,2018],memRange)\n",
    "    nt.regrid2reg(field,experiment,[1950,2018],res=res,memRange=memRange,ensave=False)\n",
    "\n",
    "# plot ACC \n",
    "resOptions=[[5,5]]\n",
    "fields = [['sst','sst'],['templvl','temperature'],['salnlvl','salinity'],['sealv','zo']]\n",
    "leadRanges = [[-1,-1]]\n",
    "expOptions = [['ANA1',''],['ANA1','HIST'],['ANA2','ANA1']]\n",
    "for field in fields:\n",
    "    fieldMod = field[0]\n",
    "    fieldObs = field[1]\n",
    "    if fieldObs == 'sst':\n",
    "        obsName = 'ERSSTv5' \n",
    "        obsCoverage = [1950,2018]\n",
    "        levRange = [0,0]\n",
    "        landFill = True\n",
    "    elif fieldMod == 'templvl':\n",
    "        fieldObs = 'temperature'\n",
    "        obsName = 'EN4'\n",
    "        obsCoverage = [1950,2018]\n",
    "        obsFactor = 1. \n",
    "        levRange = [0,300]\n",
    "        landFill = True\n",
    "    elif fieldMod == 'salnlvl':\n",
    "        fieldObs = 'salinity'\n",
    "        obsName = 'EN4'\n",
    "        obsCoverage = [1950,2018]\n",
    "        obsFactor = 1. \n",
    "        levRange = [0,300]\n",
    "        landFill = True\n",
    "    elif fieldMod == 'sealv':\n",
    "        fieldObs = 'zo'\n",
    "        obsName = 'ARMOR3D'\n",
    "        obsCoverage = [1993,2018]\n",
    "        obsFactor = 1. \n",
    "        levRange = [0,0]\n",
    "        landFill = True        \n",
    "    for leadRange in leadRanges:   \n",
    "        for res in resOptions:\n",
    "            lon = np.arange(res[0]/2,360,res[0])\n",
    "            lat = np.arange(-90+res[1]/2,90,res[1])\n",
    "            lon2, lat2 = np.meshgrid(lon,lat)\n",
    "            mskfdr = np.where(lat2 < 80, 1, 0)\n",
    "            tagRes = '_{:d}x{:d}'.format(res[0],res[1])\n",
    "            tagField = '_' + fieldMod\n",
    "            tagLead = '_LY{:d}'.format(leadRange[0]+1) if leadRange[0] == leadRange[1] else '_LY{:d}-{:d}'.format(leadRange[0]+1,leadRange[1]+1)\n",
    "            # extract data\n",
    "            for expOption in expOptions: \n",
    "                modCoverage = [1950,2018]\n",
    "                syear1 = np.max((modCoverage[0],obsCoverage[0]))\n",
    "                syearn = np.min((modCoverage[1],obsCoverage[1]))-leadRange[1]-1\n",
    "                syears = range(syear1,syearn+1)\n",
    "                tagYears = '_s{:d}-{:d}'.format(syears[0],syears[-1])\n",
    "                tagExp = '_' + expOption[0] if expOption[1] == '' else '_{:s}-{:s}'.format(expOption[0],expOption[1])\n",
    "                if obsName == 'GlobColour':\n",
    "                    obs = np.flip(nt.readHindcastLY(fieldObs,obsName,syears,leadRange,yearRange=obsCoverage,levRange=levRange,suffix=tagRes),axis=1)                \n",
    "                else:\n",
    "                    obs = nt.readHindcastLY(fieldObs,obsName,syears,leadRange,yearRange=obsCoverage,levRange=levRange,suffix=tagRes)                \n",
    "                if expOption[0] == 'HIST':\n",
    "                    fld1 =  nt.readHindcastLY(fieldMod,'historical',syears,leadRange,yearRange=[1950,2029],memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False)\n",
    "                elif expOption[0] == 'PERS':\n",
    "                    fld1 = nt.readHindcastLY(fieldObs,obsName,syears,leadRange,yearRange=obsCoverage,levRange=levRange,suffix=tagRes,persistence='mean',ensave=False)\n",
    "                elif expOption[0] == 'HIN1':\n",
    "                    fld1 = nt.readHindcastLY(fieldMod,'dcppA-hindcast-i1',syears,leadRange,memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False)\n",
    "                elif expOption[0] == 'HIN2':\n",
    "                    fld1 = nt.readHindcastLY(fieldMod,'dcppA-hindcast-i2',syears,leadRange,memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False)\n",
    "                elif expOption[0] == 'ANA1':\n",
    "                    fld1 = np.squeeze(nt.readHindcastLY(fieldMod,'dcppA-assim-i1',syears,leadRange,yearRange=[1950,2018],memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False))\n",
    "                elif expOption[0] == 'ANA2':\n",
    "                    fld1 = nt.readHindcastLY(fieldMod,'dcppA-assim-i2',syears,leadRange,yearRange=[1950,2018],memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False)               \n",
    "                #\n",
    "                if expOption[1] == 'HIST':\n",
    "                    fld2 =  nt.readHindcastLY(fieldMod,'historical',syears,leadRange,yearRange=[1950,2029],memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False)\n",
    "                elif expOption[1] == 'PERS':\n",
    "                    fld2 = nt.readHindcastLY(fieldObs,obsName,syears,leadRange,yearRange=obsCoverage,levRange=levRange,suffix=tagRes,persistence='mean',ensave=False)\n",
    "                elif expOption[1] == 'HIN1':\n",
    "                    fld2 = nt.readHindcastLY(fieldMod,'dcppA-hindcast-i1',syears,leadRange,memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False)\n",
    "                elif expOption[1] == 'HIN2':\n",
    "                    fld2 = nt.readHindcastLY(fieldMod,'dcppA-hindcast-i2',syears,leadRange,memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False)\n",
    "                elif expOption[1] == 'ANA1':\n",
    "                    fld2 = np.squeeze(nt.readHindcastLY(fieldMod,'dcppA-assim-i1',syears,leadRange,yearRange=[1950,2018],memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False))\n",
    "                elif expOption[1] == 'ANA2':\n",
    "                    fld2 = nt.readHindcastLY(fieldMod,'dcppA-assim-i2',syears,leadRange,yearRange=[1950,2018],memRange=memRange,levRange=levRange,suffix=tagRes,ensave=False)  \n",
    "                #\n",
    "                filePrefix = 'ACC{:d}mem'.format(memRange[1]) + tagField + tagExp + tagYears + tagLead + tagRes \n",
    "                print(filePrefix)\n",
    "                fld = nt.corrMultiArrayYeager(fld1,obs) if expOption[1] == '' else nt.corrMultiArrayDiffYeager(fld1,obs,fld2)\n",
    "                nt.plotACC(lon=lon,lat=lat,fld=fld,filePrefix=filePrefix,lbLabelBarOn=False,\n",
    "                           title=' ',title2=' ',landFill=landFill,plottype='ACC')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
